Unity 6.3
0 онлайн 90 гостей 3 в системе
Вход

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.