. 导出 / 计算出 normal binormal tangent向量数据
. 生成 NORMAL MAP
. 转换灯光方向(不是坐标)到纹理空间
. 转换观察点到顶点方向向量到纹理空间(高光需要该数据)
. PS里同正常像素SHADER计算,直接获取 法线贴图数据,转换一下
smooth = { 0.5, 0.5, 1.0 };
bumpiniess = 2.0;
bump = lerp( smooth, bump, bumpiness );
bump = normalize( bump * 2.0 - 1.0 );
使用 bump 作为像素法向量计算 DIFFUSE SPECULAR
遇到的问题:
. normal binormal tangent 导出和计算的时候方向反了,导致结果完全不一样;还不好调试。。
. 使用方向光,灯光转换到纹理空间下始终显示不对
原因是:
float3 light = xxx;
light.x = dot( light, xx );
light.y = dot( light, xx );
light.z = dot( light, xx );
脑袋短路了好几个小时。。 正确写法
float3 temp_light = xxx;
light.x = dot( temp_light, xx );
light.y = dot( temp_light, xx );
light.z = dot( temp_light, xx );
引以为戒!