Depth Map & Fog Effect
카테고리: Graphics
태그: DirectX
홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.
🐥 Depth Map
Origin Map | Depth Map |
---|---|
Depth Map은 카메라를 기준으로 얼마만큼의 거리를 갖는지를 표현한 버퍼이다. 이때 깊이값은 정확히 카메라 부터 world position까지의 거리가 아닌 카메라와 Near-Far축에 대한 거리이다. Depth Map은 Frame Buffer와 동일한 크기이며 픽셀 단위로 깊이 값을 가진다.
float4 TexcoordToView(float2 texcoord)
{
float4 posProj;
posProj.xy = texcoord * 2.0 - 1.0;
posProj.y *= -1;
posProj.z = depthOnlyTex.Sample(linearClampSampler, texcoord).r;
posProj.w = 1.0;
float4 posView = mul(posProj, invProj);
posProj.xyz /= posProj.w;
return posProj;
}
- 특정 World 좌표의 깊이값은?
- xy 범위를 [0, 1]에서 NDC[-1, 1]로 조정
- depthTexture에서 해당 위치의 깊이값 가져오기
- MVP변환을 구할 때 같이 구해둔 inverse Projection변환을 이용해 역변환
🐥 Fog Effect
단순한 Fog Effect 구현 방법을 생각해보면, 특정 위치의 깊이에 비례한 fog color를 interpolation하는 방법이 있다. 이때 Beer-Lambert Law를 적용해주면 더욱 현실적인 Fog Effect를 구현할 수 있다. Beer-Lambert Law란 매질의 성질과 빛의 감쇠현상에 대한 법칙이다. 간단한 미분 방적식을 풀면 되는데 exp에 대한 함수로 정리된다.
🐥 Results
댓글 남기기