共用方式為


任何點擊著色器

當光線交集不透明時所叫用的著色器。

任何點擊著色器都必須宣告承載參數,後面接著屬性參數。 每個參數都必須是分別用於 TraceRayReportHit 的使用者定義結構類型比對類型,或是使用固定函式三角形交集時 交集屬性結構

任何點擊著色器都可執行下列類型的作業:

  • 讀取和修改光線承載: (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
}