DirectX 11 3d

230512 MRT 출력 - Deferred MRT

슬뷔 2023. 5. 15. 00:37

테스트 MRT

랜더타겟 2장 사용.

 

SwapChain MRT

SwapChain 이 갖고 있는 랜더타겟, 뎁스스텐실 텍스쳐

 

SwapChain MRT가 OM에 출력으로 SwapChain 이 갖고 있는 랜더타겟이 지정되서 그림이 그려지고, 

이걸 윈도우에 출력해서 보고 있고, 깊이는 뎁스스텐실 텍스쳐에 기록이 되고 있다~ 

 

Deferred MRT

랜더타겟을 SwapChain 이 갖고 있는 랜더타겟과 별개로 2장을 더 만들어서 MRT 설정.

깊이텍스쳐는 원래꺼(SwapChain MRT에 있는 깊이 텍스쳐) 공유해서 사용

여기에 그리는 애들은 쉐이더 도메인을 완전히 분리한다 => Deferred Domain 사용

 

Deferred Domain을 쓰는 물체들은 OM에 출력을 랜더타겟1에 지정해서 랜더타겟2에 그림을 그릴 것이다.

그리고 출력을 다시 SwapChain MRT로 지정해서 그림을 그려서 출력을 하면 

Deferred MRT에 그려진 그림은 윈도우상에선 볼 수 없다

 

why? 반드시 SwapChain이 present를 하기 때문에 스왑체인에서 받아온 랜더타겟에 그림을 그려야 스왑체인을 프레젠트하면 그 랜더타겟이 화면에 나가는 것이기 때문이다.

즉, 화면상에 보여지고 싶은 물체들은 무조건 SwapChain MRT에 그림을 그려야 한다.

 

 

대부분의 물체들은 Deferred MRT에 많이 그려질 예정이다!

랜더링을 여러단계에 걸쳐 단면을 완성시킬 것이다.

Deferred 랜더 타겟은 4장을 이용한다.

(모두 같은 위치)

1. ColorTargetTex

Lighting 적용 안된 Color (빛이 최대치 1) 저장

2. NormalTargetTex

 Normal 값 저장

3. PositionTargetTex

Position 저장

4. DataTtargetTex

추가적인 데이터가 더 필요할 때 활용! 

 

깊이는 무조건 1장이고, 스왑체인 깊이텍스쳐를 공유할 것이다.

why? 깊이 판정을 위해서, 카메라가 보는 시점에서 깊이 판정을 해야 가려져야할지 말아야할지 판정이 가능하다

 

랜더타겟들은 전부 해상도가 동일해야한다.

픽셀 위치(비율)가 달라지면 안되기 때문에!

뎁스스텐실도 당연히 똑같아야 한다

 

Deferred 랜더링 => 지연 랜더링

Lighting 연산을 하지 않는다.

기본적인 연산만 함.

 

만약 지연 랜더링을 출력으로 사용한다면,

OM에 Deferred MRT을 설정하고,출력으로 지정한다음에 다시 출력에서 빼고

OM에 Lighting MRT를 설정해서, 출력으로 지정한다. 그리고 또 다시 출력에서 빼고

최종 OM에는 SwapChain MRT를 설정해서 윈도우에 출력한다.

 

 

 

 

 

 

 

 

 

 

 

'DirectX 11 3d' 카테고리의 다른 글

230516 Deferred Rendering - Light MRT  (0) 2023.05.17
230515 3D PointLight  (0) 2023.05.17
230511 멀티랜더타겟(MRT)  (0) 2023.05.13
230510 노말맵핑  (0) 2023.05.11
230509 skybox 개선 (스피어->큐브)  (0) 2023.05.11