光線產生著色器
呼叫 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);
}