Partager via


Nuanceur de création de rayon

Nuanceur qui appelle TraceRay pour générer des rayons. La charge utile initiale du rayon définie par l’utilisateur pour chaque rayon est fournie au site d’appel TraceRay . CallShader peut également être utilisé dans les nuanceurs de génération de rayons pour appeler des nuanceurs appelants.

DispatchRays appelle une grille d’appels de nuanceur de génération de rayons. Chaque appel (thread) d’un nuanceur de génération de rayons connaît son emplacement dans la grille globale, peut générer des rayons arbitraires via TraceRay et fonctionne indépendamment des autres appels. Il n’existe aucun ordre d’exécution défini des threads les uns par rapport aux autres.

Attribut Type de nuanceur

[shader("raygeneration")]

Exemple

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