次の方法で共有


レイ生成シェーダー

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