2011-07-31 4 views
2

현재 렌더링 패스 (법선, 깊이 및 색상)에서 픽셀 당 2 개의 텍스처가 필요합니다.HLSL 픽셀 쉐이더에서 렌더링 타겟으로 Texture2D 배열

본질적으로 동일한 (WorldViewPos 곱셈 ​​등) 쉐이더를 사용하지만 렌더 타겟의 텍스처에 다른 유형의 데이터를 출력하는 세 개의 패스를 실행하는 대신 (예 : 컬러 용 패스 하나, 법선을위한 하나의 패스); Texture3D 객체 또는 이상적으로 Texture2D 배열을 픽셀 쉐이더의 렌더링 타겟으로 사용하고 싶습니다. 그렇게하면이 세 렌더링 패스를 하나만 줄이고 모든 데이터를 한 번에 출력 할 수 있습니다.

불행히도 내가 발견 한 유일한 예는 기하학 셰이더에 대한 것입니다. 텍스처 쉐이더 내에서 데이터를 보낼 텍스처 배열을 지정하는 방법이 있습니까?

답변

2

당신이 찾고있는 것은 "다중 렌더링 타겟"입니다.

GraphicsDevice.SetRenderTargets (MSDN, see also)을 사용하여 두 개 이상의 렌더 타겟을 설정할 수 있습니다.

첫 대상의 경우 COLOR0 (semantic), 두 번째 대상의 경우 COLOR1 등으로 출력하여 HLSL 픽셀 쉐이더의 여러 렌더링 대상으로 출력 할 수 있습니다.

마지막으로 최대 12 개의 렌더링 대상을 한꺼번에 설정할 수있는 HiDef 프로필을 사용해야합니다.


편집 : 방금 XNA 응답을 받았음을 깨달았습니다. 실제로 API로 질문에 태그를 지정하지 않았습니다. HLSL은 DirectX, SlimDX 등에서 동일해야합니다. DirectX에서 렌더 대상을 설정하려면 IDirect3DDevice9::SetRenderTarget (MSDN)이 필요합니다.

+0

고마워. 그게 내가 필요한 것일 뿐이야, 구현에 문제가 있었어. 나는 elabourate하기 위해 상당한 양의 데이터를 붙여 넣어야했기 때문에 새로운 질문을 시작했다. 다음에서 찾을 수 있습니다. http://stackoverflow.com/questions/6891194/multiple-render-targets-not-saving-data –

관련 문제