Compartilhar via


Sombreador da geração de raio

Um sombreador que chama TraceRay para gerar raios. A carga de raio definida pelo usuário inicial para cada raio é fornecida ao site de chamada TraceRay . CallShader também pode ser usado em sombreadores de geração de raios para invocar sombreadores chamáveis.

DispatchRays invoca uma grade de invocações de sombreador de geração de raios. Cada invocação (thread) de um sombreador de geração de raios sabe sua localização na grade geral, pode gerar raios arbitrários por meio de TraceRay e opera independentemente de outras invocações. Não há nenhuma ordem definida de execução de threads em relação uns aos outros.

Atributo De tipo de sombreador

[shader("raygeneration")]

Exemplo

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