Shadow Mapping
반응형
Depth Shadow(깊이 그림자), Shadow Maps(그림자 맵),
Depth Bufffer Shadow(깊이버퍼 그림자) 등의 여러가지 이름으로 불린다.
이 기법의 핵심은 광원으로부터 물체까지의 거리정보를 저장해서 사용한다는 것이다.
1. depth 찍기
// 조명위치로 시선 이동
float3 vLook = float3(0,0,0);
float3 vEye = lightPos.xyz;
float3 vUp = float3(0,0,1);
// 조명의 시야벡터들 만들고 뷰 공간으로 변환
float4x4 lightMat = GenViewMatrix(vLook, vEye, vUp);
Pos -= lightPos;
Pos -= lightPos;
Out.Pos = mul(Pos, lightMat);
행렬 정리
- http://mgun.tistory.com/1363
// 조명의 투영변환행렬.
Out.Pos = mul(Out.Pos, proj_matrix);
대충 요렇게 하면 우선 깊이값은 얻어올 수 있다.
2. 모델의 diffuse, specular 적용해서 찍기
3. 미리 만들어둔 그림자맵과 렌더링하려는 픽셀의
광원까지의 거리를 비교한다.
렌더링하려는 픽셀의 광원까지의 거리값이
그림자맵보다 크다면 그 부분은 그림자가 된다.
float shadow = (depth < shadowMap + shadowBias);
float shadow = (depth < shadowMap + shadowBias);
4. 그림자를 바닥에 붙여준다.
보면 알겠지만 재기스 현상이 좀 심하다.
이는 그냥 그림자맵 텍스처 해상도를 올려 줄 수 밖에...
참고 링크들...Out.Pos = mul(Out.Pos, proj_matrix);
대충 요렇게 하면 우선 깊이값은 얻어올 수 있다.
2. 모델의 diffuse, specular 적용해서 찍기
3. 미리 만들어둔 그림자맵과 렌더링하려는 픽셀의
광원까지의 거리를 비교한다.
렌더링하려는 픽셀의 광원까지의 거리값이
그림자맵보다 크다면 그 부분은 그림자가 된다.
float shadow = (depth < shadowMap + shadowBias);
float shadow = (depth < shadowMap + shadowBias);
4. 그림자를 바닥에 붙여준다.
보면 알겠지만 재기스 현상이 좀 심하다.
이는 그냥 그림자맵 텍스처 해상도를 올려 줄 수 밖에...
행렬 정리
Allosha님의 블로그, 깊이버퍼 그림자 기법, 문제점
- http://allosha.tistory.com/24
opengl tutorial
- http://www.paulsprojects.net/tutorials/smt/smt.html
- 언렬 머티리얼 에디터 쓰다가 렌더몽키 처음 쓸때는 많이 불편했는데
그래도 난 렌더몽키가 더 재미있는듯....
'RenderMonkey' 카테고리의 다른 글
fresnel (0) | 2013.10.22 |
---|---|
normal mapping (법선 매핑) (2) | 2013.02.07 |
기본적인 반사 벡터 (0) | 2013.02.02 |
lambert (3) | 2013.01.31 |
흐음...렌더몽키라.. (0) | 2013.01.29 |
TAGS.