光线生成着色器

调用 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);
}