DirectX11은 처음이라…
• DirectX9과비교해서 달라진 인터페이스
• Shader 기반의 Rendering Pipeline
• Shader 종류 추가 ( compute shader..etc )
• Multi Thread Rendering (Device, DeviceContext로 분할)
• Etc..
일정 시간을 DirectX11 공부에 매진…..
Deferred Rendering이 뭐에요?
•두 번의 Rendering을 통해 빛을 계산하는 기법
• 픽셀 수만큼만 빛 계산을 하여 계산 량을 줄임.
• 빛이 다른 Object에 영향을 주는 기법 등을 사용가능.
(halo기법 등)
• Screen Space에서 계산을 하기 때문에 Culling된 Object는 고려
할 수 없음
6.
G-Buffer
• 후에 빛계산을 위해서 필요한 정보들을 담고 있는 Buffer
• OMSetRenderTargets을 통해 다수의 RenderTarget을 설정가능
• G-Buffer를 통해 ScreenSpace의 3차원 정보를 복구가능
ex ) screen space에서 world position을 복원
Elin 띄우기 –TGA가 지원 안 됨.
• DirectX11에서는 기본적으로 TGA파일을 지원하지 않음
• DirectXTex라는 라이브러리를 제공
• Texture포멧을 변경하는 것이 더 효율적이라고 판단하여
TGA파일을 BMP파일로 변환.
참고 : http://directxtex.codeplex.com/
14.
Normal Mapping 제대로하기
• Tangent space normal mapping을 하기 위해 TBN Matrix 필요
Left : object space normal map / right : tangent space normal map ( 상대적인 정보만 저장)
15.
Normal Mapping 제대로하기
• Bitangent 계산을 제대로 하지 않아 normal mapping 오류!
그림자 방향이 일정하지 않음.
가운데 조명을 기준으로 바깥이 어두워야 함.
16.
Normal Mapping 제대로하기
• 기존방식
• biTangent = cross(normal,tangent);
• Elin 모델에서 대칭되는 부분은 리소스를 아끼기 위해 UV값 중 하나의
값을 뒤집는 부분이 있음(예 : 장화, 옷 / uv address wrap 기준)
• Tangent가 뒤집히면서 local space까지 뒤집힘.
• 해결
• Tangent는 U에 정렬, BiTangent는 V에 정렬해서 구함
SSDO가 뭐에요?
• ScreenSpace Directional Occlusion
• 들어오는 빛의 방향까지 고려한 차폐 계산
• SSAO에서 이미 계산했던 것을 활용하는 방법을 택함.
: env.map을 활용하는 방법은 사용하지 않음
: 동일한 sample kernel 사용
• Indirect Bounce를 추가 ( 1단계 )
#25 반구 안에서 sampling kernel을 회전 시키기 위해 회전 행렬을 생성한다.
회전 행렬은 normal, tangent(normal과 random vector로 gram schmidt process를 통해 계산한 normal과 수직한 vector), bitangent(normal x tangent)로 이루어진 local space 정보를 담고 있다.
#30 옆 설명을 보시라.
왼쪽에서 우리가 고려할 포인트는 사실 구 보다 훨씬 뒤에 있는데… project하면 사실 겁나 먼 지점이랑 비교할 수도 있다 이거지.