版本: Unity 6 (6000.0)
语言英语
  • C#

ComputeShader.SetRayTracingAccelerationStructure

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每项更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

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 对象。
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.SetGlobalRayTracingAccelerationStructureSystemInfo.supportsInlineRayTracing