CommandBuffer.SetRayTracingAccelerationStructure
Declaration
public void SetRayTracingAccelerationStructure(Rendering.RayTracingShader rayTracingShader, string name, Rendering.RayTracingAccelerationStructure rayTracingAccelerationStructure);public void SetRayTracingAccelerationStructure(Rendering.RayTracingShader rayTracingShader, int nameID, Rendering.RayTracingAccelerationStructure rayTracingAccelerationStructure);public void SetRayTracingAccelerationStructure(ComputeShader computeShader, int kernelIndex, int nameID, Rendering.RayTracingAccelerationStructure rayTracingAccelerationStructure);public void SetRayTracingAccelerationStructure(ComputeShader computeShader, int kernelIndex, string name, Rendering.RayTracingAccelerationStructure rayTracingAccelerationStructure);Параметры
| Параметр | Описание |
|---|---|
| rayTracingShader | RayTracingShader для установки параметра. |
| имя | Имя структуры ускорения в коде шейдера. |
| nameID | Название объекта ID. Используйте Shader.PropertyToID, чтобы получить это ID. |
| rayTracingAccelerationStructure | Объект RayTracingAccelerationStructure для установки. |
| computeShader | Объект ComputeShader, для которого устанавливается параметр. |
| kernelIndex | Для какого ядра устанавливается структура ускорения. |
Описание
Добавлена команда для установки RayTracingAccelerationStructure для использования в RayTracingShader или ComputeShader.
При использовании RayTracingShader переданный аргумент RayTracingAccelerationStructure глобально виден во всех типах шейдеров трассировки лучей (например, closest hit, any hit и miss).
При использовании ComputeShader он привязывает RayTracingAccelerationStructure к ядру ComputeShader для Inline Ray Tracing (Ray Queries). Эта функция доступна на платформах, где она поддерживается. Для проверки используйте SystemInfo.supportsInlineRayTracing.
В вычислительных шейдерах Ray Queries можно использовать для обхода структуры ускорения и проверки пересечений с геометрией. Для доступа к этой функциональности код 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 является истинным.
Дополнительные ресурсы: RayTracingAccelerationStructure, SystemInfo.supportsRayTracingShaders, SystemInfo.supportsInlineRayTracing.