RayTracingInstanceCullingMaterialTest
This structure is used by RayTracingAccelerationStructure.CullInstances function to avoid adding Renderers to the acceleration structure or to ignore individual sub-meshes in a Mesh based on Shaders used by Materials when building the acceleration structure.
Read time 3 minutesLast updated 6 days ago
Definition
- Type: Struct
- Namespace: UnityEngine.Rendering
- Assembly: UnityEngine.CoreModule
public struct RayTracingInstanceCullingMaterialTest
Remarks
The Shader Tags and Shader Pass names defined in the Shader used by a Material are part of the test. The test passes when all the following conditions are met:
- array is empty, or the Shader used by a Material doesn’t contain any of the Shader Passes from the array.
deniedShaderPasses - array is empty, or the Shader used by a Material contains a Shader Pass from the array. If the array is empty,
requiredShaderPasseswon't be used in the test.requiredShaderPasses - and
requiredShaderPassesarrays don't contain a valid Shader Pass at the same time.deniedShaderPasses - The Shader used by a Material doesn’t contain a Shader Pass included in and
deniedShaderPassesarrays at the same time.requiredShaderPasses - array is empty, or the Shader used by a Material contains at least one of the Shader Tags from the array.
requiredShaderTags
Additional Resources: RayTracingAccelerationStructure.
using System.Collections.Generic;using UnityEngine;using UnityEngine.Rendering;public class MaterialTestExample : MonoBehaviour{ private RayTracingAccelerationStructure rayTracingAccelStruct = null; void Start() { if (SystemInfo.supportsRayTracing == false) { Debug.Log("The system doesn't support Ray Tracing."); return; } RayTracingAccelerationStructure.Settings accelStructSettings = new RayTracingAccelerationStructure.Settings(RayTracingAccelerationStructure.ManagementMode.Manual, RayTracingAccelerationStructure.RayTracingModeMask.Everything, -1); rayTracingAccelStruct = new RayTracingAccelerationStructure(accelStructSettings); } void OnDisable() { if (rayTracingAccelStruct != null) { rayTracingAccelStruct.Release(); rayTracingAccelStruct = null; } } RayTracingInstanceCullingConfig CreateDefaultValidRayTracingInstanceCullingConfig() { RayTracingInstanceCullingConfig cullingConfig = new RayTracingInstanceCullingConfig(); cullingConfig.flags = RayTracingInstanceCullingFlags.None; cullingConfig.subMeshFlagsConfig.opaqueMaterials = RayTracingSubMeshFlags.Enabled | RayTracingSubMeshFlags.ClosestHitOnly; cullingConfig.subMeshFlagsConfig.transparentMaterials = RayTracingSubMeshFlags.Disabled; cullingConfig.subMeshFlagsConfig.alphaTestedMaterials = RayTracingSubMeshFlags.Enabled; List<RayTracingInstanceCullingTest> instanceTests = new List<RayTracingInstanceCullingTest>(); RayTracingInstanceCullingTest instanceTest = new RayTracingInstanceCullingTest(); instanceTest.allowTransparentMaterials = false; instanceTest.allowOpaqueMaterials = true; instanceTest.allowAlphaTestedMaterials = true; instanceTest.layerMask = -1; instanceTest.shadowCastingModeMask = (1 << (int)UnityEngine.Rendering.ShadowCastingMode.Off) | (1 << (int)UnityEngine.Rendering.ShadowCastingMode.On) | (1 << (int)UnityEngine.Rendering.ShadowCastingMode.TwoSided); instanceTest.instanceMask = 1 << 0; instanceTests.Add(instanceTest); cullingConfig.instanceTests = instanceTests.ToArray(); return cullingConfig; } void LateUpdate() { if (rayTracingAccelStruct == null || Camera.main == null) return; RayTracingInstanceCullingConfig cullingConfig = CreateDefaultValidRayTracingInstanceCullingConfig(); // SubShader tags requirements. cullingConfig.materialTest.requiredShaderTags = new RayTracingInstanceCullingShaderTagConfig[1]; cullingConfig.materialTest.requiredShaderTags[0].tagId = new ShaderTagId("RenderMode"); cullingConfig.materialTest.requiredShaderTags[0].tagValueId = new ShaderTagId("RayTracing"); // Accept only Shaders that contain at least one of these Shader Passes. cullingConfig.materialTest.requiredShaderPasses = new string[] { "PathTracing", "RayTracedAO" }; // Reject Shaders that contain any of these Shader Passes (for example shadow-only passes that should not be ray-traced). cullingConfig.materialTest.deniedShaderPasses = new string[] { "ShadowCaster" }; rayTracingAccelStruct.ClearInstances(); rayTracingAccelStruct.CullInstances(ref cullingConfig); rayTracingAccelStruct.Build(); }}
This is an example of how to create, populate and build an acceleration structure. The content of the acceleration structure is specified by configuring culling and filtering parameters that are passed to the CullInstances function. The required and denied Shader Passes are configured in /cullingConfig.materialTest/.
Fields
Value | Description |
|---|---|
| deniedShaderPasses | An array of Shader Pass names used by RayTracingAccelerationStructure.CullInstances to ignore Renderers or individual sub-meshes. |
| requiredShaderPasses | An array of Shader Pass names used by RayTracingAccelerationStructure.CullInstances to accept Renderers or individual sub-meshes whose Shader contains at least one of these Shader Passes. |
| requiredShaderTags | An array of Shader Tags used by RayTracingAccelerationStructure.CullInstances to ignore Renderers or individual sub-meshes. |