제 목 6강 dynamic cubemap 관련 질문입니다.
작성자 제원 등록날짜 2022-01-04 16:35:20 / 조회수 : 88
강좌명 [단과] DirectX 11 3D 게임프로그래밍 Part 8
  • 지오메트리 셰이더와 렌더파이프라인에  대한이해가 충분치 못한상태에서 질문드려 다소 질문자체가 두서없을수도 있을것 같습니다. 양해부탁드립니다.

     

    큐브맵을 렌더타겟으로 만들고 이 6면에 대하여 렌더링을할때

    지오메트리 셰이더에서 (GS_PreRender) 6면에대한 삼각형vertex가 어느면에 렌더링될지 index를 적어주고

    stream에 append 시키는데요

    실제 그래픽 파이프라인에서 저 index(SV_RenderTargetArrayIndex)를 어떻게 참고하여 각면의 렌더타겟에 렌더해주는지 궁금합니다.

    이전수업의 여러개의 멀티렌더타겟을 직접 만들었을때는 SV_Target0,SV_Target1,SV_Target2 이런식으로 픽셀셰이더에서도 명시가 되어 어떤 렌더타겟에 어떤 효과가 매칭이 될지 알수가 있었는데 

    위의 다이나믹 큐브맵 셰이더에서는 SV_RenderTargetArrayIndex만 지정해주고 픽셀셰이더로 넘어가는데 픽셸셰이더에서는 단순하게 하나의 픽셀에 대해 결과값만 리턴해줘서요

    지오메트리 셰이더에서 픽셸셰이더로 넘어갈시 SV_RenderTargetArrayIndex를 체크해서 해당 렌더타켓을 내부적으로 지정후 픽셀셰이더를 수행된다고 생각하면 될까요 

     

  • 작성자 : 게임클래스 / 등록날짜 : 2022-01-05 14:07:24
  • 안녕하세요 게임클래스 입니다.

     

    현재 담당 교수님이신 '박문수 교수님'께 해당 질문에 대해 

    답변을 요청드린 상태입니다.

     

    담당선생님께 전달 받으면 추가 답변으로 안내해 드리도록 하겠습니다.

     

    ----------------------담당교수님 답변------------------------

    이해를 하고 계신 방향이 맞습니다. 추가적으로 더 이해를 돕기 위해 설명 드리자면
    기본적인 렌더링 파이프라인을 VS -> GS -> RS -> PS라고 생각한다면
    이 방식은 GS를 이용해서 파이프라인 처리 빈도를 올리는 겁니다. 그래서
    VS -> GS(ViewMatrix * 6) -> RS * 6(SV_RenderTargetArrayIndex) -> PS * 6
    이렇게 처리되기 된다고 생각하시면 됩니다.

    VS가 세번 호출되서 하나의 삼각형을 이룰때 GS가 한번 호출되면서 
    GS 내에서 ViewMatrix 6개에 의해 해당 삼각형의 ViewProjection 변환이 6번 이루어지고
    각 삼각형을 변환하는 ViewMatrix마다 SV_RenderTargetArrayIndex를 줘서
    RS를 6번 처리되게 하고, RS가 6번 처리되면서 각각 PS가 6번씩 호출되게 됩니다.

    그래서 각면 단위로 렌더링이 되는데, MRT(Multi Render Target)은 각 RTV 픽셀을 렌더링하게 되지만
    GS를 이용한 이 방식은 RTV는 하나고 거기에 6면의 결과를 모두 렌더링합니다.
    쉽게 MRT는 6장의 도화지에 각각 칠한다고 생각하면 되고, GS는 한장의 도화지에 6개를 그리게 되는 겁니다.
    결국 GS는 RTV는 하나만 사용하니까요.

    이게 그림으로 설명 드리면 좀 더 쉬울거 같은데 글로 쓰려니 많이 힘드네요..^^
    좀 잘 이해가 않되시거나 헷갈린 부분이 있으시면 또 질문글 올려주세요.

     

    감사합니다.

댓글 1개
  • 제원 [ 2022-01-06 15:54:24 ]
  • 이해되었습니다. 답변 감사드립니다~!