源自Mobile-Bumped
[NoScaleOffset] 是指_BumpMap在Inspector面板上没有tilling和offset部分的ui
这是shader是surface shader。
光照模型是lambert,noforwardadd是指surface转成vf时不会有forwardaddpass部分,也就是说像素光源只支持一个直线光,其他光源按照逐顶点光或者SH光去做计算了。
为啥只支持一个直线光做像素光呢?
我翻看了一下compile之后的码,截图为证
他直接把_WorldSpaceLightPos0.xyz作为一个direction vector参与了计算,也就是说xyz里存储的是向量,而不是一个postion。这明显就是个直线光。
这里也看到了UnpackNormal(float4 rgba)这个方法的展开raga.rgb *2.0 -1.0;
从cginc里扒拉一下。
从上往下看吧。
UnpackNormalDXT5nm这个方法一看就知道是DXT的压缩方式。
因为存储normal时都是以单位向量去存储的,也就是说x*x + y*y + z*z = 1
所以我们只需要存储两个通道就好了。
这个方法写的也很明白,就是说,BC5的normal存储在rg通道上,但是DXT5nm的存储在AG通道上,
DXT5nm:(1,y,1,x)
BC5:(x,y,0,1)
方法里有个特别有趣的地方就是
完成了一波骚操作。一般人都会这么做
packednormal.xy = packagenormal.wy;
但是官方的骚操作的确有趣。
最后看一下UnpackNormal
这一点我没有用明白
#ifdef 和#if defined()有什么区别?
整个方法的意思很明确,如果UNITY_NO_DXT5nm的话就直接用传入的rgb*2-1,否则就是DXT压缩的法线贴图只有两个通道。