kernelIndex | 为哪个内核设置 RayTracingAccelerationStructure。请参阅 FindKernel。 |
nameID | 属性名称 ID,使用 Shader.PropertyToID 获取它。 |
accelerationStructure | 要绑定的 RayTracingAccelerationStructure 对象。 |
name | 着色器代码中的资源名称。 |
设置一个 RayTracingAccelerationStructure 用于内联光线追踪(光线查询)。
使用 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) 的光线是否与任何由三角形组成的几何体相交。g_AccelStruct
着色器对象可以使用 SetRayTracingAccelerationStructure 函数绑定。如果 SystemInfo.supportsInlineRayTracing 为真,则可以调度计算着色器。
其他资源:CommandBuffer.SetGlobalRayTracingAccelerationStructure、SystemInfo.supportsInlineRayTracing。