Transcript 그림자_2

실제 구현을 위한 개념.
빛의 시뮬레이션을 위한 도구.
 Backword
Ray-tracing.
그림자 PART2
그림자의 역활
그림자의 방향으로 광원의 위치를 추측.
 광원과 반대 방향이다.
 공간 파악.
 얼마나 지면으로 부터 떨어져 있는가?

그림자의 종류
이름
부하
임의의 형상 자기 그림자
특징
원형 그림자
가장 적다
X
X
물체의 형태가 안나
온다.
평면 투영 그림자
적다
X
X
평면에만 사용 가능
스텐실 그림자
크다
O
O
정점 수가 많다
투영 텍스쳐 그림
자
적당
O
X
하나의 물체에만 가
능
우선 순위 버퍼 그
림자
크다
O
X
자기 그림자가 안나
온다.
깊이 버퍼 그림자
크다
O
O
부분적으로 깜빡임
이 있음
투영 텍스쳐 그림자
조명의 위치에 카메라를 배치.
 조명이 비추는 방향으로 카메라를 바라보게 해서 투영.
 이렇게 생성된 화면을 그림자로 사용.
 물체가 있는 곳에는 바닥의 화면이 가려지기 때문...

투영 텍스쳐 그림자 고려 사항
투영된 NDC 좌표계를 텍스쳐 좌표계로 변환해 주어야
한다.
(-1~1), ( 1,1)  ( 0,0), (1,1)
 광원과 반대 방향이다.
 원래 모델보다 폴리곤 수가 적은 모델을 사용해서 부하
를 줄일 수 있다.( 원형 그림자나 평면 투영 그림자도
같은 이점을 가짐 )
 많은 캐릭터의 그림자를 한번에 그릴 수 있다.
한 개의 텍스쳐에 모든 캐릭터의 그림자를 그린 후
에,
마지막에 지면에 렌더링한다.
 자기 그림자 효과를 처리할 수 없다.

투영 텍스쳐 그림자 생성 원리.


투영 공간의 폭은 2이며, 텍스쳐 좌표계의 y 가 반대이다.
투영공간(x,y)과 텍스쳐 좌표(u,v 의 관계)
U = +0.5X + 0.5
V = -0.5Y + 0.5
투영 텍스쳐 그림자 생성 원리.
깊이 버퍼 그림자

광원 방향에서 본 깊이 값을 깊이 버퍼에 저장.
 광원과 물체와의 거리를 계산.

광원의 방향에 카메라를 위치시켜 텍스쳐를 생성.
화면에 보이는 모든 물체를 렌더링.
카메라와 물체 사이의 거리를 깊이 버퍼에 저장.
( 큰 텍스쳐가 필요 )

자기 그림자 처리.( 현실적인 느낌 )

부하가 크다.

그림자 맵의 해상도에 따라 품질이 달라진다.
깊이 버퍼 그림자
깊이 버퍼 그림자 처리 단계.
빛의 방향에 카메라를 위치시키고 투영 변환.
 투영 변환된 값에서 Z값만 런더. 텍스쳐에 저장( 그림자 맵 )
 카메라 방향에서 렌더링.
 카메라 방향에서 볼 수 있는 픽셀의 좌표를 라이트 뷰 좌표로
변환
 라이트 뷰에서 렌더링 했을때 텍스쳐의 몇번째 픽셀에 그려지
는지 검사
 라이트 뷰에서 렌더링 했을때의 깊이 값 조사
 추출한 픽셀의 깊이 값을 2단계 깊이 텍스쳐에서 추출.
 깊이 값을 비교해서 더 깊으면 그림자 처리
 그림자 맵이 생성될 때는 z-버퍼링만 필요하다.
즉, 조명 처리, 텍스처 처리 그리고 색상값을 색상 버퍼에 쓰는

깊이 버퍼 그림자 생성 원리.
정점 쉐이더에서 빛의 방향에서 바라본 투영 변환 행렬로
모든 정점을 투영 변환 시킨 후, 투영 공간의 좌표 값을
픽셀 쉐이더로 넘긴다.
 Z 값을 얻기 위해서 z값을 w로 나누어 0~1범위로 얻는다.

깊이 버퍼 그림자 오류 상황.
그림자 맵 만들기
R32F 포맷
깊이 버퍼 그림자 코드 (VS)
그림자 맵에서 깊이값을 가져오는 인덱스
가 된다,
깊이 버퍼 그림자 코드 (PS)
쌍선형 보간 (PS)
그림자 맵에는 z/w 값이 저장되어
있다.
그림자맵에 저장된 값보디 더 작다면, 그
림자이다.