Bagikan melalui


Ray Generation Shader

Shader yang memanggil TraceRay untuk menghasilkan sinar. Payload sinar awal yang ditentukan pengguna untuk setiap sinar disediakan ke situs panggilan TraceRay . CallShader juga dapat digunakan dalam shader generasi sinar untuk memanggil shader yang dapat dipanggil.

DispatchRays memanggil kisi pemanggilan shader generasi sinar. Setiap pemanggilan (utas) shader generasi sinar mengetahui lokasinya di kisi keseluruhan, dapat menghasilkan sinar arbitrer melalui TraceRay, dan beroperasi secara independen dari pemanggilan lainnya. Tidak ada urutan eksekusi utas yang ditentukan sehubungan satu sama lain.

Atribut Jenis Shader

[shader("raygeneration")]

Contoh

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);
}