на память:
When calculating texture coordinates to sample from shadow map, flip the y/t coordinate and convert from the [-1, 1] range of clip coordinates to [0, 1] range of
used for texture sampling
сделать можно или на cpu
и умножить на MVP теней
или в шейдере править координаты тени
When calculating texture coordinates to sample from shadow map, flip the y/t coordinate and convert from the [-1, 1] range of clip coordinates to [0, 1] range of
used for texture sampling
сделать можно или на cpu
let shadowScale = scaleMatrix(.init(0.5, -0.5, 1))
let shadowTranslate = translationMatrix(.init(0.5, 0.5, 0))
let shadowTransform = shadowTranslate * shadowScale
и умножить на MVP теней
или в шейдере править координаты тени
shadowCoord.xy = shadowCoord.xy * 0.5 + 0.5;
shadowTextureCoord.y = 1 - shadowTextureCoord.y;
Буффер с данными материала и текстуры отправлять на рендер шадоумапы не всегда имеет смысл.
Please open Telegram to view this post
VIEW IN TELEGRAM
clayton_janie_metal_programming_guide_tutorial_and_reference.pdf
8.2 MB
Немного более серьезная книженция, заставляет задуматься
восстанавливаем
таким способом, в одну текстуру можно уложить X и Y компоненты нормали, рафнесс и металлик маски, например.
z компонент единичного вектора по x и y,таким способом, в одну текстуру можно уложить X и Y компоненты нормали, рафнесс и металлик маски, например.
half4 normRoughMetSample = NormRoughMetallic.sample(linearSampler, IN.texCoord);
half3 normalTS;
normalTS.xy = half2(normRoughMetSample.x, normRoughMetSample.y) * 2.0 - 1.0;
normalTS.z = sqrt(1 - (normalTS.x * normalTS.x) - (normalTS.y * normalTS.y));
half3x3 tantgenToWorld = half3x3(IN.tangentWS, IN.bitangentWS, IN.normalWS);
half3 normalWS = tantgenToWorld * normalTS;
normalWS = normalize(normalWS);
вариант не круить биас в шейдере для избавления от акне в тенях
renderEncoder.setDepthBias(0.005, slopeScale: 7, clamp: 0.02)
renderEncoder.setDepthBias(0.005, slopeScale: 7, clamp: 0.02)