Nuanceur de création de rayon
Nuanceur qui appelle TraceRay pour générer des rayons. La charge utile de rayon initiale 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 rayon pour appeler des nuanceurs pouvantêtre appelés.
DispatchRays appelle une grille d’appels de nuanceur de génération de rayon. Chaque appel (thread) d’un nuanceur de Ray connaît son emplacement dans la grille globale, peut générer des rayons arbitraires via TraceRayet fonctionne indépendamment d’autres appels. Il n’existe aucun ordre défini d’exécution des threads par rapport à l’autre.
Attribut de type Shader
[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);
}