包含剔除操作结果的结构体。
在可脚本化渲染管线中,当 Unity 执行剔除操作时,它会将结果存储在 CullingResults
结构体中。此数据包括有关可见对象、灯光和反射探测器的信息。Unity 使用此数据来渲染对象和处理灯光。CullingResults
结构体还提供了一些辅助阴影渲染的函数。
要获取 CullingResults
结构体,请调用 ScriptableRenderContext.Cull。
一个 CullingResults
结构体在 RenderPipeline.Render 函数的作用域内有效;当 Render
函数返回时,其数据将超出作用域。您可以在同一个渲染循环中多次使用同一个 CullingResults
结构体,并且如果知道多个 摄像机 可以看到相同的对象,则可以在它们之间共享一个 CullingResults
结构体。这可以节省浪费的 CPU 操作,从而提高性能。
此示例演示如何获取 CullingResults
结构体,然后将其传递给 ScriptableRenderContext.DrawRenderers。
using UnityEngine; using UnityEngine.Rendering;
public class ExampleRenderPipeline : RenderPipeline { public ExampleRenderPipeline() { }
protected override void Render(ScriptableRenderContext context, Camera[] cameras) { foreach (Camera camera in cameras) { // Get the culling parameters from the current camera camera.TryGetCullingParameters(out var cullingParameters);
// Schedule the cull operation that populates the CullingResults struct CullingResults cullingResults = context.Cull(ref cullingParameters);
// Place code that schedules drawing operations using the CullingResults struct here // See ScriptableRenderContext.DrawRenderers for details and examples // …
// Execute all of the scheduled operations, in order context.Submit(); } } }
lightAndReflectionProbeIndexCount | 获取每个对象的灯光和反射探测器索引的数量。 |
lightIndexCount | 获取每个对象的灯光索引的数量。 |
reflectionProbeIndexCount | 获取每个对象的反射探测器索引的数量。 |
visibleLights | 可见灯光的数组。 |
visibleOffscreenVertexLights | 仍然影响可见顶点的屏幕外灯光。 |
visibleReflectionProbes | 可见反射探测器的数组。 |
ComputeDirectionalShadowMatricesAndCullingPrimitives | 计算方向光的视口和投影矩阵以及阴影分割数据。 |
ComputePointShadowMatricesAndCullingPrimitives | 计算点光的视口和投影矩阵以及阴影分割数据。 |
ComputeSpotShadowMatricesAndCullingPrimitives | 计算聚光灯的视口和投影矩阵以及阴影分割数据。 |
FillLightAndReflectionProbeIndices | 使用每个对象的灯光索引填充缓冲区。 |
GetLightIndexMap | 如果 RenderPipeline 对 VisibleLight 列表进行排序或以其他方式修改,则需要进行索引重新映射才能正确使用每个对象的灯光列表。 |
GetReflectionProbeIndexMap | 如果 RenderPipeline 对 VisibleReflectionProbe 列表进行排序或以其他方式修改,则需要进行索引重新映射才能正确使用每个对象的反射探测器列表。 |
GetShadowCasterBounds | 返回封装可见阴影投射器的边界框。例如,可用于动态调整级联范围。 |
SetLightIndexMap | 如果 RenderPipeline 对 VisibleLight 列表进行排序或以其他方式修改,则需要进行索引重新映射才能正确使用每个对象的灯光列表。 |
SetReflectionProbeIndexMap | 如果 RenderPipeline 对 VisibleReflectionProbe 列表进行排序或以其他方式修改,则需要进行索引重新映射才能正确使用每个对象的反射探测器列表。 |