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

CommandBuffer.SetRayTracingAccelerationStructure

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

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
name 着色器代码中加速结构的名称。
nameID 属性名称 ID。使用 Shader.PropertyToID 获取此 ID。
rayTracingAccelerationStructure 要设置的 RayTracingAccelerationStructure 对象。
computeShader 要设置参数的 ComputeShader 对象。
kernelIndex 设置加速结构的内核索引。

描述

添加一个命令来设置将在 RayTracingShaderComputeShader 中使用的 RayTracingAccelerationStructure

使用 RayTracingShader 时,作为参数指定的 RayTracingAccelerationStructure 在所有光线追踪着色器类型(例如最近命中、任何命中、未命中等)中全局可见。

使用 ComputeShader 时,它将 RayTracingAccelerationStructure 绑定到 ComputeShader 内核,以用于内联光线追踪(光线查询)。此功能在支持此功能的平台上可用。使用 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) 的光线是否与任何由三角形组成的几何体相交。可以使用 SetRayTracingAccelerationStructure 函数绑定 g_AccelStruct 着色器对象。如果 SystemInfo.supportsInlineRayTracing 为 true,则可以调度计算着色器。

其他资源: RayTracingAccelerationStructureSystemInfo.supportsRayTracingShadersSystemInfo.supportsInlineRayTracing