任何點擊著色器
當光線交集不透明時所叫用的著色器。
任何點擊著色器都必須宣告承載參數,後面接著屬性參數。 每個參數都必須是分別用於 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
}