Bagikan melalui


Shader Hit Terdekat

Shader yang dipanggil ketika diaktifkan dan hit terdekat telah ditentukan atau pencarian persimpangan sinar berakhir. Shader ini adalah tempat bayangan permukaan dan pembuatan sinar tambahan biasanya akan terjadi. Shader hit terdekat harus mendeklarasikan parameter payload, diikuti dengan parameter atribut. Masing-masing harus merupakan jenis pencocokan jenis struktur yang ditentukan pengguna yang digunakan untuk TraceRay dan ReportHit , atau Struktur Atribut Persimpangan saat persimpangan segitiga fungsi tetap digunakan.

Atribut Jenis Shader

[shader("closesthit")]

Contoh

[shader("closesthit")]
void closesthit_main(inout MyPayload payload, in MyAttributes attr)
{
    CallShader( ... );	// maybe
    // update payload for surface
    // trace reflection
    float3 worldRayOrigin = WorldRayOrigin() + WorldRayDirection() * RayTCurrent();
    float3 worldNormal = mul(attr.normal, (float3x3)ObjectToWorld3x4());
    RayDesc reflectedRay = { worldRayOrigin, SceneConstants.Epsilon,
                             ReflectRay(WorldRayDirection(), worldNormal),
                             SceneConstants.TMax };
    TraceRay(MyAccelerationStructure,
             SceneConstants.RayFlags,
             SceneConstants.InstanceInclusionMask,
             SceneConstants.RayContributionToHitGroupIndex,
             SceneConstants.MultiplierForGeometryContributionToHitGroupIndex,
             SceneConstants.MissShaderIndex,
             reflectedRay,
             payload);
    // Combine final contributions into ray payload
    // this ray query is now complete.
    // Alternately, could look at data in payload result based on that make other TraceRay
    // calls.  No constraints on the code structure.
}