最も近いヒット シェーダー
シェーダーが有効になっており、最も近いヒットが特定されたか、レイ交差検索が終了したときに呼び出されるシェーダー。 このシェーダーは、サーフェス シェーディングと追加のレイ生成が通常発生する場所です。 最も近いヒット シェーダーでは、ペイロード パラメーターを宣言し、その後に attributes パラメーターを宣言する必要があります。 それぞれ、 TraceRay と ReportHit に使用されるユーザー定義の構造体型の一致型、または固定関数の三角形交差を使用する場合は 交差属性構造体 である必要があります。
シェーダーの種類属性
[shader("closesthit")]
例
[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.
}