Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Shader, der aufgerufen wird, wenn er aktiviert ist und der nächstgelegene Treffer ermittelt wurde, oder die Ray-Schnittpunktsuche wurde beendet. Dieser Shader ist der Ort, an dem in der Regel Oberflächenschattierung und zusätzliche Strahlgenerierung auftreten. Nächstgelegene Treffer-Shader müssen einen Nutzlastparameter deklarieren, gefolgt von einem Attribute-Parameter. Jeder muss ein benutzerdefinierter Strukturtypvergleichstyp sein, der für TraceRay bzw . ReportHit verwendet wird, oder die Schnittpunktattributestruktur , wenn Dreieckskreuzung mit festen Funktionen verwendet wird.
Shadertyp-Attribut
[shader("closesthit")]
Beispiel
[shader("closesthit")]
void closesthit_main(inout MyPayload payload, in MyAttributes attr)
{
CallShader( ... ); // maybe
// update payload for surface
// trace reflection
float3 worldRayOrigin = WorldRayOrigin() + WorldRayDirection() * RayTCurrent();
float3 worldNormal = mul(attr.normal, (float3x3)ObjectToWorld3x4());
RayDesc reflectedRay = { worldRayOrigin, SceneConstants.Epsilon,
ReflectRay(WorldRayDirection(), worldNormal),
SceneConstants.TMax };
TraceRay(MyAccelerationStructure,
SceneConstants.RayFlags,
SceneConstants.InstanceInclusionMask,
SceneConstants.RayContributionToHitGroupIndex,
SceneConstants.MultiplierForGeometryContributionToHitGroupIndex,
SceneConstants.MissShaderIndex,
reflectedRay,
payload);
// Combine final contributions into ray payload
// this ray query is now complete.
// Alternately, could look at data in payload result based on that make other TraceRay
// calls. No constraints on the code structure.
}