ID3DXPRTEngine::ComputeBounce 메서드
반사된 광원의 단일 바운스로 인한 원본 광채를 계산합니다. 이 메서드는 SH(구형 고조파) 기반 PRT(사전 계산된 광도 전송) 모델을 포함하여 조명이 켜진 장면에 사용할 수 있습니다.
구문
HRESULT ComputeBounce(
[in] LPD3DXPRTBUFFER pDataIn,
[in, out] LPD3DXPRTBUFFER pDataOut,
[in, out] LPD3DXPRTBUFFER pDataTotal
);
매개 변수
-
pDataIn [in]
-
형식: LPD3DXPRTBUFFER
이전 라이트 바운스의 3D 개체를 나타내는 입력 ID3DXPRTBuffer 개체에 대한 포인터입니다. 이 입력 버퍼에는 시뮬레이션에 할당된 적절한 수의 색 채널이 있어야 합니다.
-
pDataOut [in, out]
-
형식: LPD3DXPRTBUFFER
교차 조명의 단일 바운스를 모델링하는 출력 ID3DXPRTBuffer 개체에 대한 포인터입니다. 이 출력 버퍼에는 시뮬레이션에 할당된 적절한 수의 색 채널이 있어야 합니다.
-
pDataTotal [in, out]
-
형식: LPD3DXPRTBUFFER
모든 이전 pDataOut 출력의 실행 합계인 선택적 ID3DXPRTBuffer 개체에 대한 포인터입니다. NULL일 수 있습니다.
반환 값
형식: HRESULT
메서드가 성공하면 반환 값이 D3D_OK. 메서드가 실패하면 반환 값은 D3DERR_INVALIDCALL, E_OUTOFMEMORY 중 하나일 수 있습니다.
설명
다음 호출 시퀀스를 사용하여 직접 조명으로 여러 조명 바운스를 모델링합니다.
LPD3DXPRTBUFFER pDataA, pDataB, pDataC; // initialization
ID3DXPRTEngine* m_pPRTEngine;
ComputeDirectLightingSH( SHOrder, pDataA );
// The accumulation buffer, pDataC, needs to be
// initialized to the direct lighting result.
pDataC->AddBuffer( pDataA );
hr = m_pPRTEngine->ComputeBounce( pDataA, pDataB, pDataC ); // first bounce
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, pDataC ); // second bounce
hr = m_pPRTEngine->ComputeBounce( pDataA, pDataB, pDataC ); // third bounce
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, pDataC ); // fourth bounce
다음 호출 시퀀스를 사용하여 하위 표면 분산을 사용하여 여러 광원 바운스를 모델링합니다.
LPD3DXPRTBUFFER pDataA, pDataB, pDataC; // initialization
ID3DXPRTEngine* m_pPRTEngine;
ComputeDirectLightingSH( SHOrder, pDataA );
// *pDataC should be set to zero. The ComputeSS call will add together
// the direct lighting results from pDataA for non-subsurface scattering
// elements and subsurface scattering results for the subsurface scattering
// elements. Perform proper error handling for each call.
hr = m_pPRTEngine->ComputeSS ( pDataA, pDataB, pDataC );
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, NULL ); // first bounce
hr = m_pPRTEngine->ComputeSS ( pDataA, pDataB, pDataC );
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, NULL ); // second bounce
hr = m_pPRTEngine->ComputeSS ( pDataA, pDataB, pDataC );
이 메서드의 출력에는 albedo가 포함되지 않으며 들어오는 표시등만 시뮬레이터에 통합됩니다. albedo를 곱하지 않으면 원본 광채보다 더 미세한 크기로 albedo 변형을 모델링하여 압축에서 보다 정확한 결과를 얻을 수 있습니다.
ID3DXPRTEngine::MultiplyAlbedo를 호출하여 각 PRT 벡터를 albedo로 곱합니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|
추가 정보