다음을 통해 공유


Multiple-Pass 렌더링

다중 패스 렌더링은 애플리케이션이 디스플레이에 렌더링할 출력을 생성하기 위해 장면 그래프를 여러 번 트래버스하는 프로세스입니다. 다중 패스 렌더링은 복잡한 장면을 동시에 실행할 수 있는 작업으로 나누기 때문에 성능을 향상시킵니다.

다중 패스 렌더링을 수행하려면 각 추가 패스에 대해 지연된 컨텍스트 및 명령 목록을 만듭니다. 애플리케이션은 장면 그래프를 트래버스하는 동안 명령(예: 그리기 등의 렌더링 명령)을 지연된 컨텍스트에 기록합니다. 애플리케이션이 통과를 완료한 후 지연된 컨텍스트에서 FinishCommandList 메서드를 호출합니다. 마지막으로 애플리케이션은 직접 컨텍스트에서 ExecuteCommandList 메서드를 호출하여 각 명령 목록에서 명령을 실행합니다.

다음 의사 코드는 다중 패스 렌더링을 수행하는 방법을 보여 줍니다.

{
 ImmCtx->SetRenderTarget( pRTViewOfResourceX );
 DefCtx1->SetTexture( pSRView1OfResourceX );
 DefCtx2->SetTexture( pSRView2OfResourceX );

 for () // Traverse the scene graph.
  {
    ImmCtx->Draw(); // Pass 0: immediate context renders primitives into resource X.

    // The following texturing by the deferred contexts occurs after the 
    // immediate context makes calls to ExecuteCommandList. 
    // Resource X is then comletely updated by the immediate context. 
    DefCtx1->Draw(); // Pass 1: deferred context 1 performs texturing from resource X.
    DefCtx2->Draw(); // Pass 2: deferred context 2 performs texturing from resource X.
      }

  // Create command lists and record commands into them.
  DefCtx1->FinishCommandList( &pCL1 ); 
  DefCtx2->FinishCommandList( &pCL2 );

  ImmCtx->ExecuteCommandList( pCL1 ); // Execute pass 1.
  ImmCtx->ExecuteCommandList( pCL2 ); // Exeucte pass 2.
}

참고

직접 컨텍스트는 RTV(렌더링 대상 뷰)로 직접 컨텍스트에 바인딩된 리소스를 수정합니다. 반면, 지연된 각 컨텍스트는 지연된 컨텍스트에 바인딩된 리소스를 SRV(셰이더 리소스 뷰)로 사용합니다. 즉시 및 지연된 컨텍스트에 대한 자세한 내용은 직접 실행 및 지연된 렌더링을 참조하세요.

 

렌더링