當光線交集不透明時所叫用的著色器。
任何叫用著色器都必須宣告承載參數,後面接著屬性參數。 使用固定函式三角形交集時,每個參數都必須是分別用於 TraceRay 和 ReportHit 或 交集屬性結構的使用者定義的結構類型比對類型。
任何點擊著色器都可以執行下列種類的作業:
- 讀取和修改光線承載:(inout payload_t rayPayload)。
- 讀取交集屬性:(在attr_t屬性中)。
- 呼叫 AcceptHitAndEndSearch,它接受目前的點擊,結束任何點擊著色器,如果存在 交叉著色器 ,則會在 最接近的點擊上執行最接近的點擊著色器 ,如果作用中的話。
- 呼叫 IgnoreHit,結束目前的任意點擊著色器,並告訴系統繼續搜尋點擊,包括將控制權傳回至交集著色器、如果目前正在執行,並從 ReportHit* 呼叫網站傳回 false。
- 傳回而不呼叫這其中一個內部函數,它會接受目前的點擊,並告訴系統繼續搜尋點擊,包括傳回控件至交集著色器,並在 ReportHit 呼叫網站傳回 true,以指出已接受點擊。
即使 IgnoreHit 或 AcceptHitAndEndSearch 終止任何點擊著色器叫用,到目前為止對光線承載所做的任何修改仍必須保留。
著色器類型屬性
[shader("anyhit")]
範例
[shader("anyhit")]
void anyhit_main( inout MyPayload payload, in MyAttributes attr )
{
float3 hitLocation = ObjectRayOrigin() + ObjectRayDirection() * RayTCurrent();
float alpha = computeAlpha(hitLocation, attr, ...);
// Processing shadow and only care if a hit is registered?
if (TerminateShadowRay(alpha))
AcceptHitAndEndSearch(); // aborts function
// Save alpha contribution and ignoring hit?
if (SaveAndIgnore(payload, RayTCurrent(), alpha, attr, ...))
IgnoreHit(); // aborts function
// do something else.
// return to accept and update closest hit
}