블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (666)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (217)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total343,756
Today5
Yesterday73

Shadow Mapping

RenderMonkey / 2014.01.11 12:31

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; 
Out.Pos = mul(Pos, lightMat);

// 조명의 투영변환행렬.
Out.Pos = mul(Out.Pos, proj_matrix);

대충 요렇게 하면 우선 깊이값은 얻어올 수 있다.


2. 모델의 diffuse, specular 적용해서 찍기


3. 미리 만들어둔 그림자맵과 렌더링하려는 픽셀의
   광원까지의 거리를 비교한다.

   렌더링하려는 픽셀의 광원까지의 거리값이
   그림자맵보다 크다면 그 부분은 그림자가 된다.

float shadow = (depth < shadowMap + shadowBias);


float shadow = (depth < shadowMap + shadowBias);

4. 그림자를 바닥에 붙여준다.



보면 알겠지만 재기스 현상이 좀 심하다.
이는 그냥 그림자맵 텍스처 해상도를 올려 줄 수 밖에...



참고 링크들...
행렬 정리
- http://mgun.tistory.com/1363

Allosha님의 블로그,  깊이버퍼 그림자 기법, 문제점
- http://allosha.tistory.com/24

opengl tutorial
- http://www.paulsprojects.net/tutorials/smt/smt.html



  - 언렬 머티리얼 에디터 쓰다가 렌더몽키 처음 쓸때는 많이 불편했는데
    그래도 난 렌더몽키가 더 재미있는듯....
    

'RenderMonkey' 카테고리의 다른 글

Shadow Mapping  (0) 2014.01.11
fresnel  (0) 2013.10.22
normal mapping (법선 매핑)  (2) 2013.02.07
기본적인 반사 벡터  (0) 2013.02.02
lambert  (3) 2013.01.31
흐음...렌더몽키라..  (0) 2013.01.29
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함