ID3DXPRTEngine::ComputeSS-Methode
Berechnet die Quellstrahlung, die sich aus der Streuung des Untergrunds ergibt, unter Verwendung von Materialeigenschaften, die von ID3DXPRTEngine::SetMeshMaterials festgelegt werden. Diese Methode kann nur für Materialien verwendet werden, die pro Vertex in einem Gitterobjekt definiert sind.
Syntax
HRESULT ComputeSS(
[in] LPD3DXPRTBUFFER pDataIn,
[in, out] LPD3DXPRTBUFFER pDataOut,
[in, out] LPD3DXPRTBUFFER pDataTotal
);
Parameter
-
pDataIn [in]
-
Typ: LPD3DXPRTBUFFER
Zeiger auf ein EINGABE-ID3DXPRTBuffer-Objekt , das das 3D-Objekt aus dem vorherigen Lichtsprung darstellt. Dieser Eingabepuffer muss über die richtige Anzahl von Farbkanälen verfügen, die für die Simulation zugewiesen sind.
-
pDataOut [ein, aus]
-
Typ: LPD3DXPRTBUFFER
Zeiger auf ein ID3DXPRTBuffer-Ausgabeobjekt , das einen einzelnen Absprung des unter der Oberfläche gestreuten Lichts modelliert. Dieser Ausgabepuffer muss über die richtige Anzahl von Farbkanälen verfügen, die für die Simulation zugewiesen sind.
-
pDataTotal [ein, aus]
-
Typ: LPD3DXPRTBUFFER
Zeiger auf ein optionales ID3DXPRTBuffer-Objekt , das die ausgeführte Summe aller vorherigen pDataOut-Ausgaben darstellt. Kann NULL sein.
Rückgabewert
Typ: HRESULT
Wenn die Methode erfolgreich ist, wird der Rückgabewert D3D_OK. Wenn die Methode fehlschlägt, kann der Rückgabewert einer der folgenden sein: D3DERR_INVALIDCALL, E_OUTOFMEMORY.
Bemerkungen
Um die Unteroberflächestreuung zu modellieren, rufen Sie diese Methode für jeden Lichtsprung auf, nachdem eine ID3DXPRTEngine::ComputeDirectLighting-Methode aufgerufen wurde.
Verwenden Sie die folgende Aufrufsequenz, um die Unteroberflächestreuung zu modellieren.
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;
Die Ausgabe dieser Methode enthält keine Albedo, und nur eingehendes Licht ist in den Simulator integriert. Wenn Sie die Albedo nicht multiplizieren, können Sie die Albedovariation in einem feineren Maßstab als die Quellstrahlung modellieren, wodurch genauere Ergebnisse der Komprimierung erzielt werden.
Rufen Sie ID3DXPRTEngine::MultiplyAlbedo auf, um jeden vorkompilierten PRT-Vektor (Radiance Transfer) mit der Albedo zu multiplizieren.
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|
Siehe auch