Во многих туториалах по шейдерам Unity есть примеры в которых в vertex function делается следующее:
Код
struct vertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct vertexOutput {
float4 pos : SV_POSITION;
float4 col : COLOR;
};
vertexOutput vert(vertexInput input)
{
...
float4x4 modelMatrixInverse = _World2Object;
float3 normalDirection = normalize(mul(float4(input.normal, 0.0), modelMatrixInverse).xyz); // <- ?
...
}
Никак не могу понять, зачем умножать input.normal на _World2Object? Разве нормали не в локальных координатах объекта изначально?