Game/Graphics
으아아아아 Sampler, Load 섞어쓸때 주의
newpolaris
2017. 11. 30. 17:06
Shader debugger는 CPU100% 먹으시면서 골로가시고
결국 남은건 texture로 디버깅 할 수 밖에 없는 상황이었다.
view space로 착각해서 camera direction 을 그냥 depth 로 reconstruction
하고 그것으로 reflection vector를 얻기도 했다.
이건 reflection texture를 잘안살펴본 잘못이고 빨리잡혔다.
문제는 텍스쳐를 가져와서 찍도록 해뒀는데
특정 각도에서만 회색이 깜빡였다가 이동후 또 다른각도에서 깜빡.
각도 자체가 무척 좁고 결과도 안나오고
for (int n = 1; n <= maxRayNum; ++n) {
float3 rayPos = pos + step * n;
float4 posCS = mul(mul(projection, view), float4(rayPos, 1));
float2 rayUV = float2(posCS.xy/posCS.w * float2(0.5, -0.5) + 0.5);
float rayDepth = posCS.z/posCS.w;
float gbufferDepth = texDepth.Load(int3(rayUV, 0));
if (rayDepth - gbufferDepth > 0) {
color = texColor.Load(int3(rayUV, 0));
break;
}
}
화가나서 이딴식으로 해도 비슷하다;
for (int n = 100; n <= maxRayNum; ++n) {
float3 rayPos = pos + step * n;
float4 posCS = mul(mul(projection, view), float4(rayPos, 1));
float2 rayUV = float2(posCS.xy/posCS.w * float2(0.5, -0.5) + 0.5);
rayUV = saturate(rayUV);
rayUV = float2(0.5, 0.5);
float rayDepth = posCS.z/posCS.w;
float gbufferDepth = texDepth.Load(int3(rayUV, 0));
if (rayDepth - gbufferDepth > 0) {
color = texColor.Load(int3(rayUV, 0));
break;
}
}
문제는 Load 의 잘못된 사용이었다.
당연히 Sampler 를 써야하는데 왜 저게 안보인건지