TRANSFORM_TEX:
#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)
name##_ST用于聲明某個(gè)紋理的屬性,其中xy是縮放值,zw是偏移值
法線紋理
法線方向分量[-1,1]容握,像素分量[0,1]季率,因此需要映射:
?
如果沒(méi)有在Unity中把法線紋理類(lèi)型設(shè)置為Normal Map,就需要在代碼中進(jìn)行反映射;
fixed4 packedNormal = tex2D(_BumpMap,i.uv.zw);
fixed3 tangentNormal =? UnpackNormal(packedNormal);
從模型空間到切線空間
模型頂點(diǎn)的切線空間:
頂點(diǎn)為原點(diǎn),z軸為法線方向,x軸為切線方向株依,y軸為由z軸與x軸叉乘所得,也為副切線延窜。
變換矩陣把3個(gè)坐標(biāo)軸依次放入矩陣前三列恋腕;
TANGENT_SPACE_ROTATION:
float3 binormal = corss(nornalize(v.normal),nornalize(v.tangent.xyz)) * v.tangent.w;
float3x3 rotation = float3x3(v.tangent.xyz,binormal,v.normal);
得到rotation變換矩陣
tangent.w一般為1或-1。