rayTracingShader | 要设置参数的 RayTracingShader。 |
name | 着色器代码中加速结构的名称。 |
nameID | 属性名称 ID。使用 Shader.PropertyToID 获取此 ID。 |
rayTracingAccelerationStructure | 要设置的 RayTracingAccelerationStructure 对象。 |
computeShader | 要设置参数的 ComputeShader 对象。 |
kernelIndex | 设置加速结构的内核索引。 |
添加一个命令来设置将在 RayTracingShader 或 ComputeShader 中使用的 RayTracingAccelerationStructure。
使用 RayTracingShader 时,作为参数指定的 RayTracingAccelerationStructure 在所有光线追踪着色器类型(例如最近命中、任何命中、未命中等)中全局可见。
使用 ComputeShader 时,它将 RayTracingAccelerationStructure 绑定到 ComputeShader 内核,以用于内联光线追踪(光线查询)。此功能在支持此功能的平台上可用。使用 SystemInfo.supportsInlineRayTracing 检查这一点。
在计算着色器中,光线查询可用于执行加速结构遍历和几何体相交测试。要访问此功能,HLSL 代码需要使用 #pragma require inlineraytracing
编译。
#include "UnityRayQuery.cginc"
#pragma require inlineraytracing #pragma kernel CSRayQueryTest
RaytracingAccelerationStructure g_AccelStruct; RWTexture2D<float> g_Output;
[numthreads(8,4,1)] void CSRayQueryTest (uint3 id : SV_DispatchThreadID) { const uint rayFlags = RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH; UnityRayQuery<rayFlags> rayQuery;
RayDesc ray; ray.Origin = float3(0, 0, 0); ray.Direction = float3(0, 1, 0); ray.TMin = 0; ray.TMax = 10000;
rayQuery.TraceRayInline(g_AccelStruct, rayFlags, 0xff, ray); rayQuery.Proceed();
g_Output[id.xy] = (rayQuery.CommittedStatus() == COMMITTED_TRIANGLE_HIT) ? 1.0 : 0.0; }
这是一个简单的计算着色器,用于检查从 (0, 0, 0) 处发出方向为 (0, 1, 0) 的光线是否与任何由三角形组成的几何体相交。可以使用 SetRayTracingAccelerationStructure 函数绑定 g_AccelStruct
着色器对象。如果 SystemInfo.supportsInlineRayTracing 为 true,则可以调度计算着色器。
其他资源: RayTracingAccelerationStructure、SystemInfo.supportsRayTracingShaders、SystemInfo.supportsInlineRayTracing。