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

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.