共用方式為


任意點擊著色器

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

任何叫用著色器都必須宣告承載參數,後面接著屬性參數。 使用固定函式三角形交集時,每個參數都必須是分別用於 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
}