菜鸡的ShaderForge1:Blinn-Phong模型

(1)漫反射
漫反射是是投射在粗糙表面上的光向各个方向反射的现象,根据入射光线与此点的法线来决定此点的反射强度。
漫反射模型用法线与光线夹角模拟漫反射效果
以:
                       I1=dot(N,L)=|N||L|cosθ=cosθ
模拟夹角越大漫反射的光强越小的效果
再以反射光与Textrue的RGB相乘得到材质漫反射的模拟光效

暗面加亮
在实际使用中,为避免RGB趋于0(黑色)的物体背面和少光照面呈现过暗的颜色
常使用Remap将cosθ重分布于(0.2~0.5,1)的区间
菜鸡的ShaderForge1:Blinn-Phong模型_第1张图片
未添加NormalMap的漫反射模型:

菜鸡的ShaderForge1:Blinn-Phong模型_第2张图片
添加了NormalMap的漫反射模型:
菜鸡的ShaderForge1:Blinn-Phong模型_第3张图片

(2)高光
高光是镜面反射产生的物体最亮部分 在shader中,高光模型不仅仅用于模拟高光部分,而是模拟整个物体的镜面反射。
高光(Blinn-Phong)模型
Blinn-Phong模型是对Phong模型的改进模型
(Blinn-Phong)以:
                                                               Ibp = Ks*Il*dot(N,H)^n
模拟镜面反射
H是光入射方向L和视点方向V的中间向量
Ks表示材质的镜面反射系数,n指高光指数,I1即为漫反射光强
可用slider留出拉杆控制Ks和n 制造出Smooth值不同的Material
菜鸡的ShaderForge1:Blinn-Phong模型_第4张图片
添加了高光的模型:
菜鸡的ShaderForge1:Blinn-Phong模型_第5张图片


高光补正贴图
在实际使用中添加高光补正贴图对贴图纹理的凹陷部分进行高光补正
实际材料的缝隙/凹陷处显然不可能有镜面反射
而Blinn-Phong公式会在凹陷处得出一定的镜面反射光强
所以用去色的Textrue作高光补正贴图
先将Textrue去色 再用Lerp对去色图片做值域拉伸(0,1)→(-x,y)(x,y为较大的值)
再用clamp函数将其重分布回(0,1)(小于0部分(凹陷)均置0)
再与Ibp相乘得到优化后的结果

得到高光补正贴图:

菜鸡的ShaderForge1:Blinn-Phong模型_第6张图片
相乘处理:
菜鸡的ShaderForge1:Blinn-Phong模型_第7张图片
补正后的材质:

菜鸡的ShaderForge1:Blinn-Phong模型_第8张图片
显然在凹陷处没有了高光,材质看起来更加真实了。

你可能感兴趣的:(Unity,ShaderForge)