Compartir a través de


Sombreador de generación de rayos

Sombreador que llama a TraceRay para generar rayos. La carga inicial del rayo definido por el usuario para cada rayo se proporciona al sitio de llamada de TraceRay . CallShader también se puede usar en sombreadores de generación de rayos para invocar sombreadores invocables.

DispatchRays invoca una cuadrícula de invocaciones de sombreador de generación de rayos. Cada invocación (subproceso) de un sombreador de generación de rayos conoce su ubicación en la cuadrícula general, puede generar rayos arbitrarios a través de TraceRay y funciona independientemente de otras invocaciones. No hay ningún orden definido de ejecución de subprocesos con respecto entre sí.

Atributo Tipo de sombreador

[shader("raygeneration")]

Ejemplo

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