光线生成着色器

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