Share via


광선 생성 셰이더

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