Ray Generation-Shader
Ein Shader, der TraceRay aufruft, um Strahlen zu generieren. Die anfängliche benutzerdefinierte Raynutzlast für jeden Ray wird der TraceRay-Aufrufwebsite bereitgestellt. CallShader kann auch in Ray-Generation-Shadern verwendet werden, um aufrufbare Shader aufzurufen.
DispatchRays ruft ein Raster von Shaderaufrufen der Strahlgenerierung auf. Jeder Aufruf (Thread) eines Strahlgenerierungs-Shaders kennt seine Position im Gesamtraster, kann über TraceRay beliebige Strahlen erzeugen und arbeitet unabhängig von anderen Aufrufen. Es gibt keine definierte Reihenfolge der Ausführung von Threads untereinander.
Shadertyp-Attribut
[shader("raygeneration")]
Beispiel
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);
}