共用方式為


光線產生著色器

呼叫 TraceRay 以產生光線的著色器。 每個光線的初始使用者定義光線承載都會提供給 TraceRay 呼叫網站。 CallShader 也可用於光線產生著色器,以叫用 可呼叫的著色器

DispatchRays 會叫用光線產生著色器調用的格線。 每個叫用 (執行緒) 光線產生著色器知道其整體方格中的位置、可以透過 TraceRay產生任意光線,並獨立于其他調用之外運作。 與彼此相關的執行緒執行順序沒有定義的順序。

著色器類型屬性

[shader("raygeneration")]

範例

struct SceneConstantStructure { ... };
ConstantBuffer<SceneConstantStructure> SceneConstants;
RaytracingAccelerationStructure MyAccelerationStructure : register(t3);
struct MyPayload { ... };

[shader("raygeneration")]
void raygen_main()
{
    RayDesc myRay = {
        SceneConstants.CameraOrigin,
        SceneConstants.TMin,
        computeRayDirection(SceneConstants.LensParams, DispatchRaysIndex(), 
                            DispatchRaysDimensions()),
        SceneConstants.TMax};
    MyPayload payload = { ... };    // init payload
    TraceRay(
        MyAccelerationStructure,
        SceneConstants.RayFlags,
        SceneConstants.InstanceInclusionMask,
        SceneConstants.RayContributionToHitGroupIndex,
        SceneConstants.MultiplierForGeometryContributionToHitGroupIndex,
        SceneConstants.MissShaderIndex,
        myRay,
        payload);
    WriteFinalPixel(DispatchRaysIndex(), payload);
}