Шейдер создания лучей
Шейдер, вызывающий 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);
}