1. Forward Rendering
1.1 Forward Rendering이란,
- 한 마디로, 기존의 Rendering 방식.
개체 A가 Render Target에 그려지려면 Vertex Shader와 Pixel Shader의 연산이 이뤄지는데,
기존에는 Pixel Shader에서 빛 연산을 진행함.
1.2 Forward Rendering의 문제점
- 개체 X1, X2, ..., Xn이 모두 Pixel Shader에서 빛 연산을 진행함.
어떤 개체는 이미 가려져서 빛 연산을 진행할 필요가 없는데도
개체의 개수만큼 빛 연산을 진행하는 비효율이 발생함.
2. Deferred Rendering
2.1 Deferred Rendering 구조
- Render Target을 여러 개 만듦.
Light를 구현하는데 필요한 개체의 Color, Position, Normal이 그려진 Render Target
위에서 그려진 Render Target을 입력 받아서, Light를 그리는 Render Target
- 두 Render Target을 merge해서, 결국 개체가 많아져도 빛 연산은 한 번만 이뤄짐.
쉽게 말해, 빛 연산 하는 시기를 연기(deferred)해서 한 번만 이뤄지게끔 함.
2.2 Deferred Rendering 적용
- 엔진에서 제공된 DeferredHeader.fx 파일을 include 하고,
Pixel Shader의 반환자료형을 DeferredOuput으로 지정하면
자동으로 Deferred Rendering이 되게끔 구현되어 있음.
2.3 컨텐츠 단에서 필요한 추가 기능
- 다만 빛을 켜고 끄는 것은 지원 되지 않기에 해당 기능을 추가 하면될듯.
고민해보았는데, Diffuse와 Specular의 경우에 Normal과의 내적이 필수적임.
- 그래서 빛을 켜면 정상적인 Normal값이 들어가게끔 하는데,
빛을 끄면 Normal 벡터를 영벡터로 바꿈.
그럼 Diffuse와 Specular의 결과는 0이지만, Ambient는 Normal과의 내적이
필요 없기에 그대로 상수값이 적용됨. -> 이 방법이 올바른 방법인지는 모름.
3. 문제 상황
- Normal Rendertarget이 그려지지 않음. 엔진 팀장님과 그래픽 디버깅 진행.
- 내일 다시 상황 재현 해보기로 함.
'DirectX > [팀플] Death's Door 모작' 카테고리의 다른 글
Post Process Effects (0) | 2022.11.24 |
---|---|
프로젝트 내의 셰이더 구조 고찰 (0) | 2022.11.21 |
나름대로 큰? 규모의 소스코드에서의 shared_ptr 고찰 (0) | 2022.11.11 |
22-11-04 (0) | 2022.11.04 |
22-11-02 (0) | 2022.11.02 |
댓글