最接近的點擊著色器
啟用著色器時叫用,且已決定最接近的點擊或光線交集搜尋已結束。 這個著色器是表面網底和其他光線產生通常會發生的地方。 最接近的點擊著色器必須宣告承載參數,後面接著屬性參數。 每個都必須是分別用於 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.
}