이 글과 관련 된 최신 글
2010/09/02 - 내 맘대로 엔진 제작기 - 19 ( 지연 렌더링 Deferred Shading #3 )
2010/08/31 - 내 맘대로 엔진 제작기 - 18 ( 지연 렌더링 Deferred Shading #2 )
2010/09/02 - 내 맘대로 엔진 제작기 - 19 ( 지연 렌더링 Deferred Shading #3 )
2010/08/31 - 내 맘대로 엔진 제작기 - 18 ( 지연 렌더링 Deferred Shading #2 )
차근 차근 시작하자 해서 일단 지연 렌더링 ( Deferred Rendering, Deferred Shading )부터 구현해보자 해서 시작해봤습니다. 그러기 위해서 일단 MRT ( Multiple RenderTargets ) 를 구현!!
LPDIRECT3DSURFACE9 m_surfPos, m_surfNorm, m_surfDiff; // 서페이스 LPDIRECT3DTEXTURE9 m_texPos, m_texNorm, m_texDiff; // 텍스쳐 // MRT 갯수 체크 assert( m_D3DCaps.NumSimultaneousRTs > 3 ); // 텍스쳐 생성 m_pD3DDevice->CreateTexture( 1024, 768, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &m_texDiff, NULL ); m_pD3DDevice->CreateTexture( 1024, 768, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &m_texNorm, NULL ); m_pD3DDevice->CreateTexture( 1024, 768, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &m_texPos, NULL ); // 텍스쳐 - 서페이스 연결 m_texDiff->GetSurfaceLevel( 0, &m_surfDiff ); m_texNorm->GetSurfaceLevel( 0, &m_surfNorm ); m_texPos->GetSurfaceLevel( 0, &m_surfPos ); // 셰이더에 텍스쳐 등록 // MRT 지정 m_pD3DDevice->SetRenderTarget( 0, m_surfDiff ); m_pD3DDevice->SetRenderTarget( 1, m_surfNorm ); m_pD3DDevice->SetRenderTarget( 2, m_surfPos ); // 지연 렌더링 ㄱㄱㅆ~ // 렌더링 후 기존 백버퍼로 복구 m_pD3DDevice->SetRenderTarget( 0, m_surfBackBuffer ); m_pD3DDevice->SetRenderTarget( 1, NULL ); m_pD3DDevice->SetRenderTarget( 2, NULL );
대략 위와 같은 분위기로 구현. 어쨋든 출력까지는 성공 했습니다.
다만, 기존 렌더러에 억지로 끼어넣는 바람에 화면이 겹치(?)는 현상이 좀 발생하고 있습니다. 이것은 차근 차근 수정해나가야 할 듯 합니다. 수정이 완료되면, 다음엔 Pre-Lighting 도 도전!!!!