add SortTrianglesOIT

This commit is contained in:
StarBeats 2026-02-05 17:13:25 +08:00
parent 4658e677d6
commit 7084bacb84
13 changed files with 552 additions and 34 deletions

View File

@ -5,7 +5,7 @@ ModelImporter:
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialImportMode: 0
materialName: 0
materialSearch: 1
materialLocation: 1

View File

@ -49,5 +49,5 @@ Material:
- _SunScatteringIntensity: 2
m_Colors:
- _Height_Range: {r: 0, g: 20, b: 0, a: 0}
- _Tint: {r: 1, g: 0.5215277, b: 0.3254717, a: 1}
- _Tint: {r: 1, g: 0.06177143, b: 0, a: 1}
m_BuildTextureStacks: []

View File

@ -5192,6 +5192,105 @@ PrefabInstance:
insertIndex: -1
addedObject: {fileID: 858172680}
m_SourcePrefab: {fileID: 100100000, guid: c708a3b79cd542b42bbfedb17e213bc1, type: 3}
--- !u!1 &313910996
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 313910999}
- component: {fileID: 313910998}
- component: {fileID: 313910997}
- component: {fileID: 313911000}
m_Layer: 0
m_Name: fish_red_tail_barracuda_LOD0
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!23 &313910997
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 313910996}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 82f089674b537fe42b84f66f22c4b13f, type: 2}
- {fileID: 2100000, guid: 872b4d67fd3bbd14caa9aea720bd1b75, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &313910998
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 313910996}
m_Mesh: {fileID: 570477287269320233, guid: 339eb591abeebc24fb589a3a0bec722e, type: 3}
--- !u!4 &313910999
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 313910996}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -2.1888773, y: 0.77391624, z: -163.4194}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &313911000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 313910996}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1dbacbfb9faa3fa4695d441929e67e91, type: 3}
m_Name:
m_EditorClassIdentifier:
SubMeshIndex: 1
testIndex: 3
--- !u!1001 &314797079
PrefabInstance:
m_ObjectHideFlags: 0
@ -36829,3 +36928,4 @@ SceneRoots:
- {fileID: 2128448439}
- {fileID: 31312180}
- {fileID: 1120789876}
- {fileID: 313910999}

View File

@ -150,7 +150,7 @@ MonoBehaviour:
m_Value: {x: 0, y: 20}
Tint:
m_OverrideState: 1
m_Value: {r: 1, g: 0.5215277, b: 0.3254717, a: 1}
m_Value: {r: 1, g: 0.06177143, b: 0, a: 1}
SunScatteringIntensity:
m_OverrideState: 1
m_Value: 2

View File

@ -1,9 +1,5 @@
using System;
using System.Drawing.Drawing2D;
using System.Runtime.ConstrainedExecution;
using System.Security.Cryptography;
using UnityEngine;
using UnityEngine.Experimental.Rendering.RenderGraphModule;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
@ -154,9 +150,17 @@ public class MOITFeature : ScriptableRendererFeature
Vector4 wrappingZoneParameters = ComputeWrappingZoneParameters();
public static bool GetViewDepthMinMaxWithRenderQueue(Camera camera, RenderQueueRange range,
public static bool GetViewDepthMinMaxWithRenderQueue(MOITSettings settings, Camera camera, RenderQueueRange range,
out Vector2 minMax)
{
if (settings.boundsType == BoundsType.NearFarPlanes)
{
// default to nearfarplanes
minMax.x = camera.nearClipPlane;
minMax.y = camera.farClipPlane;
return true;
}
minMax = Vector2.zero;
bool b = false;
Bounds bounds = new Bounds();
@ -231,7 +235,7 @@ public class MOITFeature : ScriptableRendererFeature
upperBound = settings.renderQueueMax
};
if (!GetViewDepthMinMaxWithRenderQueue(cameraData.camera, renderQueue, out Vector2 viewDepthMinMax))
if (!GetViewDepthMinMaxWithRenderQueue(settings, cameraData.camera, renderQueue, out Vector2 viewDepthMinMax))
{
return;
}
@ -239,7 +243,10 @@ public class MOITFeature : ScriptableRendererFeature
RenderTextureDescriptor baseDescriptor = cameraData.cameraTargetDescriptor;
baseDescriptor.colorFormat = RenderTextureFormat.ARGBHalf;
baseDescriptor.depthBufferBits = 0;
RenderingUtils.ReAllocateIfNeeded(ref moitHandle, baseDescriptor, name: "_MOIT_Texture");
if(RenderingUtils.ReAllocateIfNeeded(ref moitHandle, baseDescriptor, name:"_MOIT_Texture"))
{
cmd.SetGlobalTexture("_MOIT", moitHandle);
}
RenderTextureDescriptor descriptorFloat4;
RenderTextureDescriptor descriptorFloat2;
@ -265,18 +272,30 @@ public class MOITFeature : ScriptableRendererFeature
FilterMode filterMode = FilterMode.Bilinear;
RenderingUtils.ReAllocateIfNeeded(ref b0, descriptorFloat, name: "_MOIT_B0", filterMode: filterMode);
if(RenderingUtils.ReAllocateIfNeeded(ref b0, descriptorFloat, name: "_MOIT_B0", filterMode: filterMode))
{
cmd.SetGlobalTexture(b0TextureID, b0);
}
RenderingUtils.ReAllocateIfNeeded(ref b1, descriptorFloat4, name: "_MOIT_B1", filterMode: filterMode);
if(RenderingUtils.ReAllocateIfNeeded(ref b1, descriptorFloat4, name: "_MOIT_B1", filterMode: filterMode))
{
cmd.SetGlobalTexture(b1TextureID, b1);
}
if (settings.momentsCount == MomentsCount._8)
{
RenderingUtils.ReAllocateIfNeeded(ref b1, descriptorFloat4, name: "_MOIT_B2", filterMode: filterMode);
if(RenderingUtils.ReAllocateIfNeeded(ref b1, descriptorFloat4, name: "_MOIT_B2", filterMode: filterMode))
{
cmd.SetGlobalTexture(b2TextureID, b2);
}
}
else if (settings.momentsCount == MomentsCount._6)
{
RenderingUtils.ReAllocateIfNeeded(ref b1, descriptorFloat2, name: "_MOIT_B2", filterMode: filterMode);
if(RenderingUtils.ReAllocateIfNeeded(ref b1, descriptorFloat2, name: "_MOIT_B2", filterMode: filterMode))
{
cmd.SetGlobalTexture(b2TextureID, b2);
}
}
SortingCriteria sortingCritera = settings.sortBackToFront ? SortingCriteria.BackToFront | SortingCriteria.OptimizeStateChanges : SortingCriteria.OptimizeStateChanges;
@ -308,13 +327,11 @@ public class MOITFeature : ScriptableRendererFeature
cmd.BeginSample("GenerateMoments");
mrts2[0] = mrts3[0] = b0;
mrts2[1] = mrts3[1] = b1;
cmd.SetGlobalTexture(b0TextureID, b0);
cmd.SetGlobalTexture(b1TextureID, b1);
if (settings.momentsCount != MomentsCount._4)
{
mrts3[2] = b2;
cmd.SetRenderTarget(mrts3, rdr.cameraDepthTargetHandle);
cmd.SetGlobalTexture(b2TextureID, b2);
}
else
{
@ -363,10 +380,6 @@ public class MOITFeature : ScriptableRendererFeature
{
cmd.BeginSample("ResolveMoments");
if (settings.debugMakeMOITTexGlobal)
{
cmd.SetGlobalTexture("_MOIT", moitHandle);
}
cmd.SetRenderTarget(moitHandle, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.DontCare);
cmd.ClearRenderTarget(false, true, Color.clear);
@ -380,7 +393,6 @@ public class MOITFeature : ScriptableRendererFeature
{
cmd.BeginSample("Composite");
cmd.SetGlobalTexture("_MOIT", moitHandle);
cmd.SetRenderTarget(rdr.cameraColorTargetHandle, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.DontCare);
cmd.DrawProcedural(Matrix4x4.identity, settings.compositeMaterial, 0, MeshTopology.Triangles, 3);
cmd.EndSample("Composite");

View File

@ -14,8 +14,7 @@ public class MOITSettings
[Header("Bounds")]
[Tooltip("Method of finding MOIT renderers in order to build the conservative bounding sphere that we use to warp depth, lowering numerical errors\n- NearFarPlanes: just use near and far planes (essentially keep low precision)\n- FindObjects: not optimized but automatic (Renderers only)\n- Register: user needs to add a script to every transparent object (Renderer and VFX)")]
public MOITFeature.BoundsType boundsType = MOITFeature.BoundsType.FindObjects;
[Tooltip("Setting for BoundsType.FindObject and BoundType.Register :\nShould we check if each renderer is visible (by any camera) before adding its bounds?")]
public bool onlyVisibleRenderers = false;
[Header("Rendering")]
[Tooltip("Works with Everything but usually MOIT objects should be set on specific layers that are removed from the Transparent Layer Mask (in Universal Renderer Data) to prevent double rendering")]
public LayerMask layerMask = Physics.AllLayers;
@ -25,7 +24,4 @@ public class MOITSettings
public Material compositeMaterial;
[Tooltip("Back to front sorting does not matter in OIT techniques so we skip it, however this is probably desirable if you intend to write to depth\n(example : base DoF on the closest transparent object instead of the first opaque on the pixel)")]
public bool sortBackToFront = false;
[Header("Debug")]
[Tooltip("Set this to true to be able to visualize the MOIT texture in the fullscreen feature using RT_test_mat (else only B0 B1 and B2 (if applicable) are available)")]
public bool debugMakeMOITTexGlobal = false;
}

View File

@ -0,0 +1,54 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
public class SortTrianglesManager
{
public static SortTrianglesManager Instance => instance ??= new SortTrianglesManager();
static SortTrianglesManager instance;
private List<SortTrianglesOIT> sortTriangles = new();
public void Regsister(SortTrianglesOIT oit)
{
if(sortTriangles.Count == 0)
{
RenderPipelineManager.beginCameraRendering += OnBeginCamera;
}
sortTriangles.Add(oit);
}
public void UnRegsister(SortTrianglesOIT oit)
{
sortTriangles.Remove(oit);
if(sortTriangles.Count == 0)
{
RenderPipelineManager.beginCameraRendering -= OnBeginCamera;
}
}
private void OnBeginCamera(ScriptableRenderContext context, Camera camera)
{
if (camera.cameraType != CameraType.Game
&& camera.cameraType != CameraType.SceneView
&& camera.cameraType != CameraType.Preview
&& camera.cameraType != CameraType.Reflection
)
{
return;
}
for (int i = 0; i < sortTriangles.Count; i++)
{
var it = sortTriangles[i];
#if UNITY_EDITOR
if(it)
#endif
{
it.UpdateCameraPosition(camera.transform.position);
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 574e17ad9180f924eb9f25d78d145483
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,231 @@
using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.Rendering;
[RequireComponent(typeof(MeshFilter))]
[ExecuteAlways]
public class SortTrianglesOIT : MonoBehaviour
{
[Serializable]
class MeshIndices
{
public int[] Indices;
}
public int SubMeshIndex = 0;
// XXX: 根据重叠三角形,计算实际需要的数据,减少序列化大小
[SerializeField]
private MeshIndices[] sortedIndes = new MeshIndices[12];
[SerializeField, HideInInspector]
private bool isSorted = false;
private Mesh mesh;
private float distanceMultiplier = 1.5f;
[SerializeField]
private float directionalMinCos = 0.8f;
[SerializeField, HideInInspector]
private int indexStart;
[SerializeField, HideInInspector]
private uint meshIndicesCnt;
private static readonly Vector3[] viewDirections =
{
new Vector3(0, 0, 1),
new Vector3(0, 0, -1),
new Vector3(1, 0, 0),
new Vector3(-1, 0, 0),
new Vector3(0, 1, 0),
new Vector3(0, -1, 0),
new Vector3(1, 1, 1).normalized,
new Vector3(1, 1, -1).normalized,
new Vector3(1, -1, 1).normalized,
new Vector3(1, -1, -1).normalized,
new Vector3(-1, 1, 1).normalized,
new Vector3(-1, 1, -1).normalized
};
private void Awake()
{
mesh = GetComponent<MeshFilter>().sharedMesh;
}
private void OnEnable()
{
SortTrianglesManager.Instance.Regsister(this);
}
private void OnDisable()
{
SortTrianglesManager.Instance.UnRegsister(this);
}
public void UpdateCameraPosition(Vector3 pos)
{
if (!isSorted)
{
return;
}
#if UNITY_EDITOR
if(Time.frameCount % 3 != 0
&& Application.isPlaying
)
{
return;
}
#endif
var viewDir = (pos - transform.position).normalized;
for (int i = 0; i < viewDirections.Length; i++)
{
if (Vector3.Dot(viewDir, viewDirections[i]) > directionalMinCos)
{
SetIndex(i);
break;
}
}
}
private int lastIndex = -1;
private void SetIndex(int index)
{
if (lastIndex == index)
{
return;
}
var indices = sortedIndes[index].Indices;
//mesh.SetIndexBufferParams((int)meshIndicesCnt, mesh.indexFormat);
//mesh.SetIndexBufferData(indices, 0, indexStart, indices.Length,
// MeshUpdateFlags.DontValidateIndices |
// MeshUpdateFlags.DontResetBoneBounds |
// MeshUpdateFlags.DontNotifyMeshUsers |
// MeshUpdateFlags.DontRecalculateBounds
// );
mesh.SetIndices(indices, MeshTopology.Triangles, SubMeshIndex, false);
lastIndex = index;
}
#if UNITY_EDITOR
Vector3 GetAdaptiveUpVector(Vector3 dir)
{
// 处理垂直方向时的万向节死锁
return (Mathf.Abs(dir.y) > 0.9f) ? Vector3.forward : Vector3.up;
}
void SetupCamera(Camera renderCamera, Vector3 direction, float modelRadius)
{
// 计算相机位置(避免模型裁剪)
float minDistance = modelRadius / Mathf.Tan(renderCamera.fieldOfView * 0.5f * Mathf.Deg2Rad);
Vector3 cameraPos = transform.position + direction * (minDistance * distanceMultiplier);
renderCamera.transform.position = cameraPos;
renderCamera.transform.LookAt(transform.position, GetAdaptiveUpVector(direction));
}
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct PrimitiveDepth : IComparable<PrimitiveDepth>
{
public float depth;
public uint a;
public uint b;
public uint c;
public int CompareTo(PrimitiveDepth other)
{
var i = depth - other.depth;
if (i > 0)
{
return 1;
}
else if (i < 0)
{
return -1;
}
else
{
return 0;
}
}
}
void RenderCamera(Camera renderCamera, Material material, ComputeBuffer buffer, int dirIndex)
{
var cmd = CommandBufferPool.Get();
cmd.ClearRandomWriteTargets();
cmd.SetRandomWriteTarget(1, buffer);
cmd.SetViewProjectionMatrices(renderCamera.worldToCameraMatrix, renderCamera.projectionMatrix);
cmd.DrawMesh(mesh, transform.localToWorldMatrix, material, SubMeshIndex);
//cmd.RequestAsyncReadback(buffer, (r) =>
//{
// var datas = r.GetData<PrimitiveDepth>();
// datas.Sort();
// var indices = new int[datas.Length * 3];
// sortedIndes[dirIndex] = indices;
// int ind = 0;
// for (int i = 0; i < datas.Length; i++)
// {
// var data = datas[i];
// indices[ind++] = (int)data.a;
// indices[ind++] = (int)data.b;
// indices[ind++] = (int)data.c;
// }
//});
Graphics.ExecuteCommandBuffer(cmd);
PrimitiveDepth[] datas = new PrimitiveDepth[buffer.count];
buffer.GetData(datas);
Array.Sort(datas);
var indices = new int[datas.Length * 3];
sortedIndes[dirIndex] = new MeshIndices()
{
Indices = indices
};
int ind = 0;
for (int i = 0; i < datas.Length; i++)
{
var data = datas[i];
indices[ind++] = (int)data.a;
indices[ind++] = (int)data.b;
indices[ind++] = (int)data.c;
}
CommandBufferPool.Release(cmd);
}
[ContextMenu("Sort")]
private void SortTriangles()
{
Material material = new Material(Shader.Find("OIT/TrianglesIdDepth"));
Camera renderCamera = new GameObject().AddComponent<Camera>();
Bounds bounds = GetComponent<Renderer>().bounds;
float radius = bounds.extents.magnitude;
for (int i = 0; i < mesh.subMeshCount; i++)
{
meshIndicesCnt += mesh.GetIndexCount(i);
}
if (SubMeshIndex >= mesh.subMeshCount)
{
Debug.LogError($"SubMeshIndex > SubMeshCount :{SubMeshIndex} > {mesh.subMeshCount}");
return;
}
var subMeshDesc = mesh.GetSubMesh(SubMeshIndex);
indexStart = subMeshDesc.indexStart;
ComputeBuffer buffer = new ComputeBuffer(subMeshDesc.indexCount / 3, Marshal.SizeOf<PrimitiveDepth>(), ComputeBufferType.Structured);
for (int i = 0; i < 12; i++)
{
var dir = viewDirections[i];
SetupCamera(renderCamera, dir, radius);
RenderCamera(renderCamera, material, buffer, i);
}
Graphics.ClearRandomWriteTargets();
buffer.Dispose();
GameObject.DestroyImmediate(material);
GameObject.DestroyImmediate(renderCamera.gameObject);
isSorted = true;
}
#endif
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1dbacbfb9faa3fa4695d441929e67e91
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,96 @@
Shader "OIT/TrianglesIdDepth"
{
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma geometry geom
#pragma target 5.0
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct VSOut
{
float4 position : POSITION;
uint index : TEXCOORD;
};
struct GSOut
{
float4 position : SV_POSITION;
};
VSOut vert(appdata v, uint index : SV_VertexID)
{
VSOut o;
o.position = UnityObjectToClipPos(v.vertex);
o.index = index;
return o;
}
struct PrimitiveDepth
{
float depth;
uint a;
uint b;
uint c;
};
RWStructuredBuffer<PrimitiveDepth> primitiveBuffer : register(u1);
[maxvertexcount(3)]
void geom(triangle VSOut IN[3], uint primID : SV_PrimitiveID, inout TriangleStream<GSOut> triStream)
{
PrimitiveDepth o;
o.depth = (IN[0].position.z + IN[1].position.z + IN[2].position.z) / 3;
o.a = IN[0].index;
o.b = IN[1].index;
o.c = IN[2].index;
// if (o.a > o.b)
// {
// uint tmp = o.b;
// o.b = o.a;
// o.a = tmp;
// }
//
// if (o.a > o.c)
// {
// uint tmp = o.c;
// o.c = o.a;
// o.a = tmp;
// }
//
// if (o.b > o.c)
// {
// uint tmp = o.b;
// o.b = o.c;
// o.c = tmp;
// }
primitiveBuffer[primID] = o;
for (int i = 0; i < 3; ++i)
{
GSOut gso;
gso.position = IN[i].position;
triStream.Append(gso);
}
}
fixed4 frag(GSOut i) : SV_Target
{
return 0;
}
ENDCG
}
}
}

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 9b976f2c513508d40a91777cee2414f2
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@ -26,7 +26,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2f83dd6eb48aa6848950f8a0f61a70de, type: 3}
m_Name: LinkedListOITFeature
m_EditorClassIdentifier:
m_Active: 1
m_Active: 0
settings:
RenderPassEvent: 500
ComputeShader: {fileID: 7200000, guid: eb30737736968d64e99cd6b7e2cc9efb, type: 3}
@ -137,7 +137,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4854a869b24c78844a4c077509f99b4f, type: 3}
m_Name: MOITFeature
m_EditorClassIdentifier:
m_Active: 1
m_Active: 0
settings:
renderPassEvent: 450
settings:
@ -145,7 +145,6 @@ MonoBehaviour:
momentPrecision: 32
trigonometric: 0
boundsType: 1
onlyVisibleRenderers: 0
layerMask:
serializedVersion: 2
m_Bits: 4294967295
@ -153,7 +152,6 @@ MonoBehaviour:
renderQueueMax: 3000
compositeMaterial: {fileID: 2100000, guid: f5b0014f90114064c8200b5c9ac93932, type: 2}
sortBackToFront: 0
debugMakeMOITTexGlobal: 0
biasSettings:
Moments4Half: 0.00006
Moments4Single: 0.0000005
@ -452,7 +450,7 @@ MonoBehaviour:
failOperation: 0
zFailOperation: 0
m_ShadowTransparentReceive: 0
m_RenderingMode: 2
m_RenderingMode: 0
m_DepthPrimingMode: 2
m_CopyDepthMode: 1
m_AccurateGbufferNormals: 0
@ -469,7 +467,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 791db3d002c63d1409813c72e53105ff, type: 3}
m_Name: WBOITFeature
m_EditorClassIdentifier:
m_Active: 1
m_Active: 0
settings:
RenderPassEvent: 400
FilterSettings: