Метод ID3DXPRTEngine::ComputeSS
Вычисляет исходное сияние, полученное в результате подповерхностного рассеяния, используя свойства материала, заданные ID3DXPRTEngine::SetMeshMaterials. Этот метод можно использовать только для материалов, определенных для каждой вершины в объекте сетки.
Синтаксис
HRESULT ComputeSS(
[in] LPD3DXPRTBUFFER pDataIn,
[in, out] LPD3DXPRTBUFFER pDataOut,
[in, out] LPD3DXPRTBUFFER pDataTotal
);
Параметры
-
pDataIn [in]
-
Тип: LPD3DXPRTBUFFER
Указатель на входной объект ID3DXPRTBuffer , представляющий трехмерный объект из предыдущего отказа света. В этом входном буфере должно быть правильное количество цветовых каналов, выделенных для имитации.
-
pDataOut [in, out]
-
Тип: LPD3DXPRTBUFFER
Указатель на выходной объект ID3DXPRTBuffer , который моделирует один отказ от рассеянных подповерхностного света. В этом выходном буфере должно быть правильное количество цветовых каналов, выделенных для имитации.
-
pDataTotal [вход, выход]
-
Тип: LPD3DXPRTBUFFER
Указатель на необязательный объект ID3DXPRTBuffer , который является суммой выполнения всех предыдущих выходных данных pDataOut. Может иметь значение NULL.
Возвращаемое значение
Тип: HRESULT
Если метод выполнен успешно, возвращаемое значение будет D3D_OK. В случае сбоя метода возвращается одно из следующих значений: D3DERR_INVALIDCALL E_OUTOFMEMORY.
Комментарии
Чтобы смоделировать подповерхностное рассеяние, вызовите этот метод для каждого отскакивания света после вызова метода ID3DXPRTEngine::ComputeDirectLighting.
Используйте следующую вызывающую последовательность для моделирования подповерхностного рассеяния.
LPD3DXPRTBUFFER pDataA, pDataB, pDataC; // initialization
ID3DXPRTEngine* m_pPRTEngine;
hr = 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.
hr = m_pPRTEngine->ComputeSS( pDataA, pDataB, pDataC );
if ( FAILED( hr ) ) goto Exit;
Выходные данные этого метода не включают альбедо, и в симулятор интегрирован только входящий свет. Не умножая альбедо, можно смоделировать вариант альбедо в более тонком масштабе, чем исходное сияние, тем самым обеспечивая более точные результаты от сжатия.
Вызовите ID3DXPRTEngine::MultiplyAlbedo , чтобы умножить каждый предварительно вычисляемый вектор передачи сияния (PRT) на альбедо.
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|
См. также раздел