レイ生成シェーダー
レイを生成するために 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);
}