1. Path Tracing
4학년 1학기 시스템 프로그래밍 과제로 병렬처리에 대해 발표하면서
만든 Path Tracing 기반 Raytracer 입니다.
 
kd-tree를 사용, 공간을 분할 해 빠른 Ray-Hit가 이루어질 수 있도록 했습니다.
 
 
 
발표자료
실행파일
 
키조작
A, D : 회전
좌우 화살표 : 애니메이션 프레임 이동
스페이스바 : 렌더링 시작
 
renderSetting.set 파일을 메모장으로 열어 환경설정을 수정할 수 있습니다.
sampleCnts : 샘플 개수
bucketSize : 한 스레드가 담당하는 영역크기
threadCnts : 스레드 개수
 
 
 
2. Deferred Renderer
Deferred Rendering을 구현한 과정입니다.
 
2.1. Light-Pre Pass Renderer
Normal과 Depth 값만 G-Buffer에 넣고 조명 처리를 한 다음
다시 한번 객체를 Draw해서 재질을 렌더링하는 2단계를 거치는 변형된 Deferred Renderer 입니다. 
 
 
normal
 
depth
 
diffuse
 
specular
 
final
 
 
2.2. Deferred Renderer 
Light-Pre Pass의 렌더러의 경우 2번의 Draw Call과 색상있는 Specular를 나타내기 위해서는 2개의 HDR 포맷의 Render Target이 필요해 Light-Pre Pass 방식을 버리고, 일반적인 Deferred Renderer로 작업했습니다. 
 
G-Buffer 구성은 아래와 같습니다. 
 
MRT0 : Albedo(RGB), Specular(A)
MRT1 : Normal(RGB)
MRT2 : Depth(R32F)
MRT3 : Global Lighting(LogLUV)
 
 
모두 32비트이고 마지막 렌더 타겟은 Ambient, Directional Light,, Emissive, 환경반사 등을 처리하기 위한 버퍼로 32bit LogLUV로 인코딩합니다. 
 
그림자의 경우 4단계 PSSM으로 처리했습니다. 
SSE 명령어를 사용해서 CPU 스키닝을 최적화시켰습니다.
Bullet 물리 엔진을 사용해서 조명상자가 물리 기반 애니메이션이 됩니다.
텍스쳐 크기를 최소화 시키기 위해 DXT 포맷의 dds 파일을 사용했습니다.
노말맵의 경우 G값에 X, A값에 Y값을 넣고 Z 값은 쉐이더에서 구하는 방식을 사용했습니다.
뒷배경의 원포맷은 RGBE 포맷인데 DXT5로 압축해서 사용했습니다.
 
DOF : OFF
 
DOF : ON
 
개발 & 테스트환경
Visual Studio .Net 2008
DirectX 9.0c
Windows XP
Geforce 9800 GTX
 
실행파일 
 
 
 d3dx9_41.dll을 요구합니다. 필요하실 경우 다운받으세요.
D3DX9_41.dll
다운로드
 
 
키조작
W, A, S, D : 이동
마우스 이동 : 회전
마우스 왼쪽 버튼 : 조명상자 생성
마우스 오른쪽 버튼 : 조명상자 삭제
'1' : Bloom On/Off
'2' : SSAO On/Off
'3' : Depth of Field On/Off
'4' : Draw Aabb On/Off
'+' : 노출 증가
'-' : 노출 감소
'T' : Focus 거리 증가
'G' : Focus 거리 감소
'Y' : Blur 시작거리 증가
'H': Blur 시작거리 감소
'U' : Blur 최대거리 증가
'J' : Blur 최대거리 감소
 
샘플소스(엔진헤더파일)
영상
 
Posted by hwixlab
,