Rim Lighting 轮廓自发光
一:疑问:
1.总感觉在编辑器Scene状态下,脚本计算的ViewDir是我漫游的Cam,而不是项目中的MainCam啊! 然后就会造成Scene状态下轮廓自发光不停的变化。此疑问何解....
2.fixed不要用swizzle方式,即fixed.xyzw,fixed.xyxy类似;否则产生性能问题...为毛产生性能问题,float4就不会吗?
二:结果:怪怪的:
话说u3d初始数据和修改数据方便啊,
Properties {
_MainTex ("Texture", 2D) = "white" {}
_BumpMap ("Bumpmap", 2D) = "bump" {}
_RimColor ("Rim Color", Color) = (0.26,0.19,0.16,0.0)
_RimPower ("Rim Power", Range(0.5,8.0)) = 3.0
}
三:viewDir
:
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
float3 viewDir; //
};
o(︶︿︶)o ,官网解释的不清晰啊...
-
float3 viewDir
- will contain view direction, for computing Parallax effects, rim lighting etc.
http://my.oschina.net/u/138823/blog/181131 上说的应是对的,worldSpace下vertex对Cam的方向。
四:点乘获轮廓并自发光:
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));//vertex和Cam夹角越大,自发光越强烈
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
五:注意half \fixed\float的正确使用:
http://www.jianshu.com/p/7b9498e58659 说的好,精度够用就行。
float 32位高精度浮点
half 16位中精度浮点
fixed 11位低精度浮点
1.颜色和单位向量,用fixed
2.其他情况,尽量使用half
3.不要将低精度向上转化,如fixed->float
4.fixed不要用swizzle方式,即fixed.xyzw,fixed.xyxy类似;否则产生性能问题...为毛产生性能问题,float4就不会吗?