最近在看基础光照模型,比较感兴趣的是高光反射模型,有下列两种:

1.Phong模型

  

R = 2*N(dot(N, L)) - L

specular = lightColor * SpecularColor*(max(V· R, 0)) ^shininess;

2.Blinn-Phong模型

引入了H,Blinn模型不仅在速度上更快,而且更符合实际。

H = normalize(L+V)

specular = lightColor * SpecularColor*(max(N· H, 0)) ^shininess;

下面上Shader代码

 Shader "基础光照/BlinnPhongShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_SpecularColor("SpecColor",Color) = (,,,)
_DiffuseColor("DiffuseColor",Color) = (,,,)
_Gloss("Gloss",Range(,)) =
}
SubShader
{
Tags{"RenderType"="Opaque"}
//Cull Off ZWrite Off ZTest Always Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "UnityCG.cginc" struct appdata
{
float4 pos : POSITION;
float3 normal : NORMAL;
float2 uv: TEXCOORD0; }; struct v2f
{ float4 pos: SV_POSITION; float2 uv :TEXCOORD0; float3 normal : TEXCOORD1; float4 worldPos : TEXCOORD2;
}; v2f vert (appdata v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.pos);
o.worldPos= mul(_Object2World,v.pos);
o.normal = normalize( mul(v.normal,(float3x3)_World2Object));
o.uv = v.uv;
return o;
} sampler2D _MainTex;
fixed4 _DiffuseColor;
fixed4 _SpecularColor;
float _Gloss; fixed4 frag(v2f i): SV_Target
{
//计算环境光
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; float3 worldNormal = i.normal; float3 worldLightDir = -normalize(_WorldSpaceLightPos0.xyz); //计算漫反射
fixed3 diffuse = _LightColor0.rgb*_DiffuseColor*saturate(dot(worldNormal,worldLightDir)); //计算高光反射 float3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz); fixed3 h = normalize(worldLightDir+viewDir); fixed3 specular = _LightColor0.rgb*_SpecularColor*(pow(saturate(dot(h,worldNormal)),_Gloss));
fixed4 col = tex2D(_MainTex,i.uv);
return col*fixed4(ambient+diffuse+specular,1.0);
} ENDCG
}
}
FallBack "Specular"
}

效果展示

Blinn-Phong模型的更多相关文章

  1. Lambert漫反射.BLinnPhong及Phong模型 Unity自带的在Lighting.cginc里

    1.漫反射 此模型属于经验模型,主要用来简单模拟粗糙物体表面的光照现象 此模型假设物体表面为理想漫反射体(也就是只产生漫反射现象,也成为Lambert反射体),同时,场景中存在两种光,一种为环境光,一 ...

  2. 用DirectX12实现Blinn Phong

    这次我们来用DirectX12实现一下基本的Blinn Phong光照模型.让我们再把这个光照模型的概念过一遍:一个物体的颜色由三个因素决定:ambient, diffuse, specular.am ...

  3. 合金装备V 幻痛 制作技术特辑

    合金装备V:幻痛 制作特辑 资料原文出自日版CGWORLD2015年10月号   在[合金装备4(Metal Gear Solid IV)]7年后,序章作品[合金装备5 :原爆点 (Metal Gea ...

  4. 【Unity Shader】(六) ------ 复杂的光照(上)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  5. 三种光照模型的shader实现

    1.Lambert模型,公式为I=Kd*Il(N*L): Shader "Custom/Lambert_A" { Properties { _Diffuse(,,,) } SubS ...

  6. PBR Step by Step( 五)Phong反射模型

    Lamertian模型描述了当光源直接照射到粗糙物体表面时,反射光线的分布情况.在现实中,除了直接光照,还有来自周围环境的间接光照. 直接照射到物体表面的光照,又称为局部光照: 间接照射到物体表面的光 ...

  7. [计算机图形学]绘制填充模型:重心坐标、z-buffer

    目录 一.点乘和叉乘 0. 向量表示 1. 点乘 2.叉乘 2.1 坐标运算方式 2.2 向量运算方式 2.3 叉乘的用途 二.Bounding Box 三.重心坐标 四.z-buffer 五.总结 ...

  8. Phong和Blinn-Phong光照模型

    Phong和Blinn-Phong是计算镜面反射光的两种光照模型,两者仅仅有很小的不同之处. 1.Phong模型 Phone模型计算中的一个关键步骤就是反射向量R的计算: 上图中的位于表面“下面”的向 ...

  9. 【转】Phong和Blinn-Phong光照模型

    来自:http://www.cnblogs.com/bluebean/p/5299358.html Phong和Blinn-Phong是计算镜面反射光的两种光照模型,两者仅仅有很小的不同之处. 1.P ...

随机推荐

  1. Kafka知识总结

    1.kafka是什么 类JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据. kafka是一个生产-消费模型. Producer:生产 ...

  2. python 绘制点线

    plot(x, y) #默认为蓝色实线 plot(x, y, 'r*') #红色星状标记 plot(x, y, 'go-') #带有圆圈标记的绿线 plot(x, y, 'ks:') #带有正方形标记 ...

  3. js对象跟数组多层嵌套,检测没有此数据就添加有则不添加以及超过限制条件删除操作

    例如你需要这样格式的数据: [{"name":"合肥市","arrey":[{"lat":"31.862323 ...

  4. nginx增加第三方模块

    增加第三方模块 ============================================================ 一.概述nginx文件非常小但是性能非常的高效,这方面完胜ap ...

  5. ElasticSearch改造研报查询实践

    背景: 1,系统简介:通过人工解读研报然后获取并录入研报分类及摘要等信息,系统通过摘要等信息来获得该研报的URI 2,现有实现:老系统使用MSSQL存储摘要等信息,并将不同的关键字分解为不同字段来提供 ...

  6. scrapy 中crawlspider 爬虫

    爬取目标网站: http://www.chinanews.com/rss/rss_2.html 获取url后进入另一个页面进行数据提取 检查网页: 爬虫该页数据的逻辑: Crawlspider爬虫类: ...

  7. LVM方式安装Ubuntu 系统

    重装Ubuntu系统,使用LVM管理磁盘,最好不要使用默认的LVM安装方式,而应挂载U盘启动盘,进行物理磁盘分区,创建物理卷.卷组.虚卷(即创建LVM系列操作),在安装系统时将虚卷挂载到文件目录上.将 ...

  8. tomcat发布项目如何通过域名直接访问

    首先在服务器中找到tomcat安装后的文件夹,进入到conf目录下,找到server.xml文件 打开并修改,修改如下: 第一步:修改port,该值默认为8080,将其修改为80 第二步:修改defa ...

  9. background-size cover和contain的用法详解

    我们还可以通过background-size来控制背景图片的尺寸. background-size有几个属性值,常用的是cover和contain.那么background-size:cover和co ...

  10. webapi put 404

    windows server 2016  IIS  webapi   404 error In IIS select your website and double-click Handler Map ...