光线生成着色器
调用 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);
}