Привет всем!
Пишу эффект для PostProcessingStack.
Камера рендерит в Deferred.
Столкнулся с тем, что _CameraDepthNormalsTexture возвращает нормали, значения которых зависят от вращения камеры.
Например, если смотреть вперед, то результат будет таким:
А если опустить взгляд в область где должны быть видны ноги игрока, то результат будет таким:
Нормали вычисляются так:
В целом цвет нормалей пола +- зеленый, но нормали смотрят не вертикально вверх. Видно что цвет совсем немного темнее при взгяде на пол.
В PostProcessingStack есть дебагер:
Думал залезть в него и раскурочить с целью узнать как нормали они вычисляют.
Воспользовался им и заметил что он тоже дает кривые нормали. Точно такие как и у меня. Цвет меняется в зависимости от поворота камеры.
В чем причина? Как можно получить нормали без искажений?
Решение такое:
Скрипт: sheet.properties.SetMatrix("_InverseView", context.camera.cameraToWorldMatrix); Шейдер: float4 cdn = SAMPLE_TEXTURE2D( _CameraDepthNormalsTexture, sampler_CameraDepthNormalsTexture, input.texcoord.xy); wNorm = ( DecodeViewNormalStereo( cdn).rgb);// * float3(1.0, 1.0, -1.0)); wNorm = mul( ( float3x3)_InverseView, wNorm); // <- world normal