最接近的命中着色器
启用且已确定最近命中或光线交叉搜索结束时调用的着色器。 此着色器通常是表面着色和其他光线生成的地方。 最近的命中着色器必须声明有效负载参数,后跟特性参数。 每个都必须是用户定义的结构类型匹配类型,分别用于 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.
}