Share via


Ray Generation Shader

Shader che chiama TraceRay per generare i raggi. Il payload ray definito dall'utente iniziale per ogni raggio viene fornito al sito di chiamata TraceRay . CallShader può essere usato anche negli shader di generazione ray per richiamare shader chiamabili.

DispatchRays richiama una griglia di chiamate di ray generation shader. Ogni chiamata (thread) di un ray generation shader conosce la sua posizione nella griglia complessiva, può generare raggi arbitrari tramite TraceRay e opera indipendentemente da altre chiamate. Non esiste un ordine definito di esecuzione dei thread rispetto l'uno all'altro.

Attributo Tipo shader

[shader("raygeneration")]

Esempio

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