1.
当你计算得到世界空间的法线的时候,第一句是错误的,光照显示到背面??? 第二、三句是相等的,可以使用顶点变换矩阵的逆转置矩阵对法线进行相同的变换 fixed3 worldNormal = normalize(mul(UNITY_MATRIX_M, v.normal)); fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject)); fixed3 worldNormal = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));
2.
UNITY_LIGHTMODEL_AMBIENT.xyz 环境光颜色
_WorldSpaceLightPos0.xyz 世界空间的光源位置,(默认一个光源前向渲染)
_LightColor0.rgb 光源的颜色 这个变量属于内置变量,当前Pass处理的光源信息,需包含内置文件Lighting.cginc
_WorldSpaceCameraPos.xyz 世界空间的摄像机位置
o.worldNormal = mul(float(3*3)Unity_ObjectToWorld, v.vertex); 法线类型是float3类型,所以修改矩阵为3*3,不过貌似不修改也可以。类似的还有Unity_WorldToObject
TANGENT_SPACE_ROTATION
o.lightdir = mul(rotation, ObjSpaceLightDir(v.vertex)).xyz; 将顶点的光源入射方向转换到切向空间。
UnpackNormal此函数需要导入的图片类型为Normalmap
【Unity Shaders】初探Surface Shader背后的机制 http://blog.csdn.net/candycat1992/article/details/39994049
【Unity Shaders】法线纹理(Normal Mapping)的实现细节 http://blog.csdn.net/candycat1992/article/details/41605257
【D3D11游戏编程】学习笔记二十四:切线空间(Tangent Space) http://blog.csdn.net/bonchoix/article/details/8619624
为什么要有切线空间(Tangent Space),它的作用是什么?
https://www.zhihu.com/question/23706933/answer/25591714
在Unity3D中使用Visual Studio调试shader http://blog.csdn.net/cbbbc/article/details/51131731
一个基于observer模式的游戏事件分发系统 http://blog.csdn.net/cbbbc/article/details/51567313