ComputeShader.SetRayTracingAccelerationStructure
Declaration
public void SetRayTracingAccelerationStructure(int kernelIndex, int nameID, Rendering.RayTracingAccelerationStructure accelerationStructure);public void SetRayTracingAccelerationStructure(int kernelIndex, string name, Rendering.RayTracingAccelerationStructure accelerationStructure);Параметры
| Параметр | Описание |
|---|---|
| kernelIndex | Для какого ядра устанавливается RayTracingAccelerationStructure. См. FindKernel. |
| nameID | Имя свойства ID, используйте Shader.PropertyToID, чтобы получить его. |
| accelerationStructure | Объект RayTracingAccelerationStructure для привязки. |
| имя | Имя ресурса в коде шейдера. |
Описание
Устанавливает RayTracingAccelerationStructure для использования при встроенном трассировании лучей (запросы на лучи).
Используйте SystemInfo.supportsInlineRayTracing для проверки во время выполнения, поддерживается ли системой Inline Ray Tracing.
В вычислительных шейдерах запросы лучей могут использоваться для выполнения тестов ускорения структуры и пересечения геометрии. Чтобы получить доступ к этой функции, код 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.