From 76574124ca32a780517098db0c0aff5034cc3361 Mon Sep 17 00:00:00 2001 From: DCFApixels <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 5 Mar 2025 09:44:27 +0800 Subject: [PATCH] stash --- Runtime/DebugX.cs | 4 +- Runtime/Gizmos/DebugX.base.cs | 107 +++++++------- Runtime/Gizmos/DebugX.lines.cs | 6 +- Runtime/Materials/Line.mat | 11 +- Runtime/Materials/Unlit.mat | 5 +- Runtime/Materials/UnlitOverwrite.mat | 135 ------------------ Runtime/Materials/UnlitOverwrite.mat.meta | 8 -- .../DCFApixels.DebugX/MaterialsList.prefab | 2 +- Runtime/Shaders/HandlesBillboard.shader | 2 - Runtime/Shaders/HandlesDot.shader | 5 +- Runtime/Shaders/HandlesLine.shader | 73 ---------- Runtime/Shaders/HandlesLine.shader.meta | 9 -- Runtime/Shaders/HandlesUnlit.shader | 75 ++++++++-- Runtime/Utils/DebugXAssets.cs | 7 +- Runtime/Utils/StaticData.cs | 55 ++++--- 15 files changed, 176 insertions(+), 328 deletions(-) delete mode 100644 Runtime/Materials/UnlitOverwrite.mat delete mode 100644 Runtime/Materials/UnlitOverwrite.mat.meta delete mode 100644 Runtime/Shaders/HandlesLine.shader delete mode 100644 Runtime/Shaders/HandlesLine.shader.meta diff --git a/Runtime/DebugX.cs b/Runtime/DebugX.cs index 1204eab..d0b093a 100644 --- a/Runtime/DebugX.cs +++ b/Runtime/DebugX.cs @@ -53,7 +53,7 @@ namespace DCFApixels eventToClean = null; foreach (var delegateItem in validDelegates) { - eventToClean += (OnDrawGizmoHandler)delegateItem; + eventToClean += (OnDrawGizmoHandler)delegateItem; } } } @@ -63,7 +63,7 @@ namespace DCFApixels CleanupEvent(ref _onDrawGizmo); } internal static void InvokeOnDrawGizmo(Camera camera) - { + { _onDrawGizmo(camera); } } diff --git a/Runtime/Gizmos/DebugX.base.cs b/Runtime/Gizmos/DebugX.base.cs index 989412d..57b5f0d 100644 --- a/Runtime/Gizmos/DebugX.base.cs +++ b/Runtime/Gizmos/DebugX.base.cs @@ -46,7 +46,7 @@ namespace DCFApixels #region Mesh //TODO потестить [IN(LINE)] public DrawHandler Mesh(Mesh mesh, Vector3 position, Quaternion rotation, Vector3 size) - where TMat : struct, IStaticMaterial + where TMat : struct, IStaticMaterial_InstancedProcedural { return Gizmo(new MeshGizmo(mesh, position, rotation, size)); } @@ -81,7 +81,7 @@ namespace DCFApixels } } private readonly struct MeshGizmo : IGizmo> - where TMat : struct, IStaticMaterial + where TMat : struct, IStaticMaterial_InstancedProcedural { public readonly Mesh Mesh; public readonly Quaternion Rotation; @@ -116,7 +116,7 @@ namespace DCFApixels [IN(LINE)] public DrawHandler Mesh(Vector3 position, Quaternion rotation, Vector3 size) where TMesh : struct, IStaticMesh - where TMat : struct, IStaticMaterial + where TMat : struct, IStaticMaterial_InstancedProcedural { return Gizmo(new InstancingMeshGizmo(position, rotation, size)); } @@ -153,7 +153,7 @@ namespace DCFApixels } private readonly struct InstancingMeshGizmo : IGizmo> where TMesh : struct, IStaticMesh - where TMat : struct, IStaticMaterial + where TMat : struct, IStaticMaterial_InstancedProcedural { public readonly Quaternion Rotation; public readonly Vector3 Position; @@ -184,17 +184,17 @@ namespace DCFApixels #region Line [IN(LINE)] public DrawHandler Line(Vector3 start, Vector3 end) - where TMat : struct, IStaticMaterial + where TMat : struct, IStaticMaterial_InstancedProcedural { return Gizmo(new WireLineGizmo(start, end)); } [IN(LINE)] public DrawHandler Line(Vector3 start, Vector3 end) { - return Gizmo(new WireLineGizmo(start, end)); + return Gizmo(new WireLineGizmo(start, end)); } private readonly struct WireLineGizmo : IGizmo> - where TMat : struct, IStaticMaterial + where TMat : struct, IStaticMaterial_InstancedProcedural { public readonly Vector3 Start; public readonly Vector3 End; @@ -256,7 +256,7 @@ namespace DCFApixels } } - private readonly IStaticMaterial _material; + private readonly IStaticMaterial_InstancedProcedural _material; private int _buffersLength = 0; private PinnedArray _matrices; @@ -271,7 +271,7 @@ namespace DCFApixels public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual bool IsStaticRender => true; - public MeshRendererBase(IStaticMaterial material) + public MeshRendererBase(IStaticMaterial_InstancedProcedural material) { _materialPropertyBlock = new MaterialPropertyBlock(); _material = material; @@ -316,7 +316,7 @@ namespace DCFApixels } public void Render(CommandBuffer cb) { - Material material = _material.GetMaterial_SupportCumputeShaders(); + Material material = _material.GetMaterial_InstancedProcedural(); var items = new GizmosList(_gizmos.Array, _prepareCount).As().Items; _materialPropertyBlock.Clear(); _jobHandle.Complete(); @@ -340,44 +340,46 @@ namespace DCFApixels public readonly Vector3 Position; public readonly Vector3 Size; } + private struct DrawData + { + public Matrix4x4 Matrix; + public Color Color; + } private struct PrepareJob : IJobParallelFor { [NativeDisableUnsafePtrRestriction] public Gizmo* Items; [NativeDisableUnsafePtrRestriction] - public Matrix4x4* ResultMatrices; - [NativeDisableUnsafePtrRestriction] - public Vector4* ResultColors; + public DrawData* ResultData; public void Execute(int index) { ref readonly var item = ref Items[index]; - //if (item.IsSwaped == 0) { return; } - ResultMatrices[index] = Matrix4x4.TRS(item.Value.Position, item.Value.Rotation, item.Value.Size); - ResultColors[index] = item.Color; + (ResultData + index)->Matrix = Matrix4x4.TRS(item.Value.Position, item.Value.Rotation, item.Value.Size); + (ResultData + index)->Color = item.Color; } } private readonly IStaticMesh _mesh; - private readonly IStaticMaterial _material; - + private readonly IStaticMaterial_InstancedProcedural _material; private readonly MaterialPropertyBlock _materialPropertyBlock; + private GraphicsBuffer _graphicsBuffer; private int _buffersLength = 0; - private PinnedArray _matrices; - private PinnedArray _colors; + private PinnedArray _drawDatas; private PinnedArray> _gizmos; private JobHandle _jobHandle; private int _prepareCount = 0; - public InstancingMeshRendererBase(IStaticMesh mesh, IStaticMaterial material) + private readonly bool _enableInstancing; + + public InstancingMeshRendererBase(IStaticMesh mesh, IStaticMaterial_InstancedProcedural material) { _mesh = mesh; _material = material; _materialPropertyBlock = new MaterialPropertyBlock(); - - _matrices = PinnedArray.Pin(DummyArray.Get()); - _colors = PinnedArray.Pin(DummyArray.Get()); + _drawDatas = PinnedArray.Pin(DummyArray.Get()); + _enableInstancing = IsSupportsComputeShaders && _material.GetMaterial_InstancedProcedural().enableInstancing; } public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual bool IsStaticRender => true; @@ -387,13 +389,13 @@ namespace DCFApixels _prepareCount = list.Count; var items = list.Items; var count = list.Count; - - if (_buffersLength < count) + + if (_buffersLength < count) { - _matrices.Dispose(); - _colors.Dispose(); - _matrices = PinnedArray.Pin(new Matrix4x4[DebugXUtility.NextPow2(count)]); - _colors = PinnedArray.Pin(new Vector4[DebugXUtility.NextPow2(count)]); + int capacity = DebugXUtility.NextPow2(count); + _drawDatas.Dispose(); + _drawDatas = PinnedArray.Pin(new DrawData[capacity]); + AllocateGraphicsBuffer(capacity); _buffersLength = count; } if (ReferenceEquals(_gizmos.Array, items) == false) @@ -408,31 +410,39 @@ namespace DCFApixels var job = new PrepareJob { Items = _gizmos.Ptr, - ResultMatrices = _matrices.Ptr, - ResultColors = _colors.Ptr, + ResultData = _drawDatas.Ptr, }; _jobHandle = job.Schedule(count, 64); } protected void Render(CommandBuffer cb) { - Material material = _material.GetMaterial_SupportCumputeShaders(); Mesh mesh = _mesh.GetMesh(); - _materialPropertyBlock.Clear(); - _jobHandle.Complete(); - if (IsSupportsComputeShaders) + if (_enableInstancing) { - _materialPropertyBlock.SetVectorArray(ColorPropertyID, _colors.Array); - cb.DrawMeshInstanced(mesh, 0, material, -1, _matrices.Array, _prepareCount, _materialPropertyBlock); + Material material = _material.GetMaterial_InstancedProcedural(); + _jobHandle.Complete(); + _graphicsBuffer.SetData(_drawDatas.Array); + cb.DrawMeshInstancedProcedural(mesh, 0, material, -1, _prepareCount, _materialPropertyBlock); } else { + Material material = _material.GetMaterial(); + _jobHandle.Complete(); for (int i = 0; i < _prepareCount; i++) { - _materialPropertyBlock.SetColor(ColorPropertyID, _colors.Ptr[i]); - cb.DrawMesh(mesh, _matrices.Ptr[i], material, 0, -1, _materialPropertyBlock); + _materialPropertyBlock.SetColor(ColorPropertyID, _drawDatas.Ptr[i].Color); + cb.DrawMesh(mesh, _drawDatas.Ptr[i].Matrix, material, 0, -1, _materialPropertyBlock); } } } + private readonly static int _BufferPropertyID = Shader.PropertyToID("_DataBuffer"); + private void AllocateGraphicsBuffer(int capacity) + { + _graphicsBuffer?.Dispose(); + _materialPropertyBlock.Clear(); + _graphicsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, Marshal.SizeOf()); + _materialPropertyBlock.SetBuffer(_BufferPropertyID, _graphicsBuffer); + } } #endregion @@ -469,7 +479,7 @@ namespace DCFApixels } } private readonly IStaticMesh _mesh = default(WireLineMesh); - private readonly IStaticMaterial _material; + private readonly IStaticMaterial_InstancedProcedural _material; private readonly MaterialPropertyBlock _materialPropertyBlock; private GraphicsBuffer _graphicsBuffer; @@ -480,11 +490,14 @@ namespace DCFApixels private JobHandle _jobHandle; private int _prepareCount = 0; - public WireLineRendererBase(IStaticMaterial material) + private readonly bool _enableInstancing; + + public WireLineRendererBase(IStaticMaterial_InstancedProcedural material) { _material = material; _materialPropertyBlock = new MaterialPropertyBlock(); _drawDatas = PinnedArray.Pin(DummyArray.Get()); + _enableInstancing = IsSupportsComputeShaders && _material.GetMaterial_InstancedProcedural().enableInstancing; } public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual bool IsStaticRender => true; @@ -516,22 +529,19 @@ namespace DCFApixels }; _jobHandle = job.Schedule(count, 64); } - - - private readonly static int _BufferPropertyID = Shader.PropertyToID("_DataBuffer"); public void Render(CommandBuffer cb) { Mesh mesh = _mesh.GetMesh(); - if (IsSupportsComputeShaders) + if (_enableInstancing) { - Material material = _material.GetMaterial_SupportCumputeShaders(); + Material material = _material.GetMaterial_InstancedProcedural(); _jobHandle.Complete(); _graphicsBuffer.SetData(_drawDatas.Array); cb.DrawMeshInstancedProcedural(mesh, 0, material, -1, _prepareCount, _materialPropertyBlock); } else { - Material material = _material.GetMaterial_Default(); + Material material = _material.GetMaterial(); _jobHandle.Complete(); for (int i = 0; i < _prepareCount; i++) { @@ -540,6 +550,7 @@ namespace DCFApixels } } } + private readonly static int _BufferPropertyID = Shader.PropertyToID("_DataBuffer"); private void AllocateGraphicsBuffer(int capacity) { _graphicsBuffer?.Dispose(); diff --git a/Runtime/Gizmos/DebugX.lines.cs b/Runtime/Gizmos/DebugX.lines.cs index f287eb7..27271bb 100644 --- a/Runtime/Gizmos/DebugX.lines.cs +++ b/Runtime/Gizmos/DebugX.lines.cs @@ -202,7 +202,7 @@ namespace DCFApixels public void Render(Camera camera, GizmosList list, CommandBuffer cb) { if (camera == null) { return; } - default(UnlitOverwriteMat).GetMaterial_SupportCumputeShaders().SetPass(0); + default(UnlitOverwriteMat).GetMaterial_InstancedProcedural().SetPass(0); GL.Begin(GL.QUADS); Vector3 cameraPosition = camera.transform.position; foreach (ref readonly var item in list) @@ -256,7 +256,7 @@ namespace DCFApixels public void Render(Camera camera, GizmosList list, CommandBuffer cb) { if (camera == null) { return; } - default(UnlitOverwriteMat).GetMaterial_SupportCumputeShaders().SetPass(0); + default(UnlitOverwriteMat).GetMaterial_InstancedProcedural().SetPass(0); GL.Begin(GL.LINES); var cameraPosition = camera.transform.position; foreach (ref readonly var item in list) @@ -318,7 +318,7 @@ namespace DCFApixels { if (camera == null) { return; } GL.PushMatrix(); - default(UnlitOverwriteMat).GetMaterial_SupportCumputeShaders().SetPass(0); + default(UnlitOverwriteMat).GetMaterial_InstancedProcedural().SetPass(0); GL.Begin(GL.LINES); var cameraPosition = camera.transform.position; foreach (ref readonly var item in list) diff --git a/Runtime/Materials/Line.mat b/Runtime/Materials/Line.mat index cd7779d..a5ff50a 100644 --- a/Runtime/Materials/Line.mat +++ b/Runtime/Materials/Line.mat @@ -8,13 +8,13 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Line - m_Shader: {fileID: 4800000, guid: 4dc765b931552b54b957905b156bae66, type: 3} + m_Shader: {fileID: 4800000, guid: 37036939f3d0a824c82a3f34093d4a42, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] m_InvalidKeywords: [] m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} @@ -24,7 +24,10 @@ Material: serializedVersion: 3 m_TexEnvs: [] m_Ints: [] - m_Floats: [] - m_Colors: [] + m_Floats: + - _FakeLight: 0 + - _VertexColor: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 diff --git a/Runtime/Materials/Unlit.mat b/Runtime/Materials/Unlit.mat index 13134a9..779b0c7 100644 --- a/Runtime/Materials/Unlit.mat +++ b/Runtime/Materials/Unlit.mat @@ -24,7 +24,8 @@ Material: m_Shader: {fileID: 4800000, guid: 37036939f3d0a824c82a3f34093d4a42, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _VERTEXCOLOR_ON m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 1 @@ -110,6 +111,7 @@ Material: - _DstBlend: 0 - _DstBlendAlpha: 0 - _EnvironmentReflections: 1 + - _FakeLight: 0 - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 @@ -124,6 +126,7 @@ Material: - _SrcBlend: 1 - _SrcBlendAlpha: 1 - _Surface: 0 + - _VertexColor: 1 - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: diff --git a/Runtime/Materials/UnlitOverwrite.mat b/Runtime/Materials/UnlitOverwrite.mat deleted file mode 100644 index a976891..0000000 --- a/Runtime/Materials/UnlitOverwrite.mat +++ /dev/null @@ -1,135 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-8282512757102464268 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 9 ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: UnlitOverwrite - m_Shader: {fileID: 4800000, guid: 7bfe6625bfb0167438e98aa0d69e97e7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 1 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.005 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] - m_AllowLocking: 1 diff --git a/Runtime/Materials/UnlitOverwrite.mat.meta b/Runtime/Materials/UnlitOverwrite.mat.meta deleted file mode 100644 index b53ee49..0000000 --- a/Runtime/Materials/UnlitOverwrite.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e3db4ecf82b06ef4fa7fdb30e68362fa -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Resources/DCFApixels.DebugX/MaterialsList.prefab b/Runtime/Resources/DCFApixels.DebugX/MaterialsList.prefab index 963b410..69fa769 100644 --- a/Runtime/Resources/DCFApixels.DebugX/MaterialsList.prefab +++ b/Runtime/Resources/DCFApixels.DebugX/MaterialsList.prefab @@ -199,7 +199,7 @@ Transform: m_GameObject: {fileID: 817216530089604692} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -5, y: 0, z: 0} + m_LocalPosition: {x: -5, y: -2.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] diff --git a/Runtime/Shaders/HandlesBillboard.shader b/Runtime/Shaders/HandlesBillboard.shader index 14cf017..ede90bd 100644 --- a/Runtime/Shaders/HandlesBillboard.shader +++ b/Runtime/Shaders/HandlesBillboard.shader @@ -45,7 +45,6 @@ Shader "DCFApixels/DebugX/Handles Buillboard" v2f o; UNITY_SETUP_INSTANCE_ID(v); - float4 worldOrigin = mul(UNITY_MATRIX_M, float4(0, 0, 0, 1)); float4 viewOrigin = float4(UnityObjectToViewPos(float3(0, 0, 0)), 1); float4 worldPos = mul(UNITY_MATRIX_M, v.vertex); @@ -56,7 +55,6 @@ Shader "DCFApixels/DebugX/Handles Buillboard" o.vertex = clipsPos; - //o.vertex = UnityObjectToClipPos(v.vertex); o.color = v.color * UNITY_ACCESS_INSTANCED_PROP(Props, _Color) * _DebugX_GlobalColor; return o; } diff --git a/Runtime/Shaders/HandlesDot.shader b/Runtime/Shaders/HandlesDot.shader index 21357a3..8c2dcae 100644 --- a/Runtime/Shaders/HandlesDot.shader +++ b/Runtime/Shaders/HandlesDot.shader @@ -50,7 +50,6 @@ Shader "DCFApixels/DebugX/Handles Dot" distance = lerp(distance, 1, isOrthographic); float fov = radians(UNITY_MATRIX_P[1][1] * 2.0); - float scale = distance * (1 / fov) * 0.015; return scale * _DebugX_GlobalDotSize; @@ -68,7 +67,6 @@ Shader "DCFApixels/DebugX/Handles Dot" M._m22 *= scaleMultiplier; float4 worldOrigin = mul(M, float4(0, 0, 0, 1)); - float4 viewOrigin = float4(UnityObjectToViewPos(float3(0, 0, 0)), 1); float4 worldPos = mul(M, v.vertex); @@ -77,9 +75,8 @@ Shader "DCFApixels/DebugX/Handles Dot" float4 clipsPos = mul(UNITY_MATRIX_P, viewPos); o.vertex = clipsPos; - //o.vertex = UnityObjectToClipPos(v.vertex); - o.color = v.color * UNITY_ACCESS_INSTANCED_PROP(Props, _Color) * _DebugX_GlobalColor; + o.color = v.color * UNITY_ACCESS_INSTANCED_PROP(Props, _Color) * _DebugX_GlobalColor; return o; } ENDCG diff --git a/Runtime/Shaders/HandlesLine.shader b/Runtime/Shaders/HandlesLine.shader deleted file mode 100644 index 26d513b..0000000 --- a/Runtime/Shaders/HandlesLine.shader +++ /dev/null @@ -1,73 +0,0 @@ -Shader "DCFApixels/DebugX/Handles Line" -{ - SubShader - { - Tags { "Queue"="Transparent" "RenderType"="Transparent" "IgnoreProjector"="True" "ForceNoShadowCasting"="True" } - Blend SrcAlpha OneMinusSrcAlpha - ZWrite Off - Fog { Mode Off } - Lighting Off - Offset -1, -1 - - ZTest On - - CGINCLUDE - #pragma vertex vert - #pragma fragment frag - #pragma multi_compile_instancing - #include "UnityCG.cginc" - - struct InstanceData - { - float4x4 m; - float4 color; - }; - - struct appdata_t - { - float4 vertex : POSITION; - }; - - struct v2f - { - float4 vertex : SV_POSITION; - half4 color : COLOR; - }; - - StructuredBuffer _DataBuffer; - float4 _DebugX_GlobalColor; - - v2f vert (appdata_t v, uint instanceID : SV_InstanceID) - { - v2f o; - InstanceData data = _DataBuffer[instanceID]; - - float4 pos = mul(data.m, v.vertex); - o.vertex = UnityObjectToClipPos(pos); - o.color = data.color * _DebugX_GlobalColor; - return o; - } - ENDCG - - Pass - { - ZTest LEqual - CGPROGRAM - half4 frag (v2f i) : SV_Target - { - return i.color; - } - ENDCG - } - Pass - { - ZTest Greater - CGPROGRAM - half4 frag (v2f i) : SV_Target - { - return i.color * half4(1, 1, 1, 0.1); - } - ENDCG - } - } -} \ No newline at end of file diff --git a/Runtime/Shaders/HandlesLine.shader.meta b/Runtime/Shaders/HandlesLine.shader.meta deleted file mode 100644 index ed01277..0000000 --- a/Runtime/Shaders/HandlesLine.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4dc765b931552b54b957905b156bae66 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Shaders/HandlesUnlit.shader b/Runtime/Shaders/HandlesUnlit.shader index f2ad24b..11e1cbe 100644 --- a/Runtime/Shaders/HandlesUnlit.shader +++ b/Runtime/Shaders/HandlesUnlit.shader @@ -3,6 +3,9 @@ Shader "DCFApixels/DebugX/Handles Unlit" Properties { _Color ("Color", Color) = (1,1,1,1) + [Toggle] _VertexColor("Vertex Color", Float) = 0 + [Toggle] _FakeLight("Fake Light", Float) = 0 + [Toggle] _OnePass("One Pass", Float) = 0 } SubShader { @@ -19,13 +22,58 @@ Shader "DCFApixels/DebugX/Handles Unlit" #pragma vertex vert #pragma fragment frag #pragma multi_compile_instancing + #pragma shader_feature_local _VERTEXCOLOR_ON + #pragma shader_feature_local _FAKELIGHT_ON + #pragma shader_feature_local _ONEPASS_ON + #pragma instancing_options procedural:setup + #include "UnityCG.cginc" +#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED + struct InstanceData + { + float4x4 m; + float4 color; + }; + StructuredBuffer _DataBuffer; +#endif + + + void setup() + { +#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED + InstanceData data = _DataBuffer[unity_InstanceID]; + float4x4 m = data.m; + + float rotation = m.w * m.w * _Time.y * 0.5f; + rotate2D(m.xz, rotation); + + unity_ObjectToWorld._11_21_31_41 = float4(m.w, 0, 0, 0); + unity_ObjectToWorld._12_22_32_42 = float4(0, m.w, 0, 0); + unity_ObjectToWorld._13_23_33_43 = float4(0, 0, m.w, 0); + unity_ObjectToWorld._14_24_34_44 = float4(m.xyz, 1); + unity_WorldToObject = unity_ObjectToWorld; + unity_WorldToObject._14_24_34 *= -1; + unity_WorldToObject._11_22_33 = 1.0f / unity_WorldToObject._11_22_33; + + _Color = data.color; +#endif + } + + + + struct appdata_t { float4 vertex : POSITION; +#if _FAKELIGHT_ON + float3 normal : NORMAL; +#endif +#if _VERTEXCOLOR_ON float4 color : COLOR; - UNITY_VERTEX_INPUT_INSTANCE_ID +#endif + uint instanceID : SV_InstanceID; + UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f @@ -34,18 +82,28 @@ Shader "DCFApixels/DebugX/Handles Unlit" half4 color : COLOR; }; - UNITY_INSTANCING_BUFFER_START(Props) - UNITY_DEFINE_INSTANCED_PROP(float4, _Color) - UNITY_INSTANCING_BUFFER_END(Props) - + float4 _Color; float4 _DebugX_GlobalColor; v2f vert (appdata_t v) { v2f o; - UNITY_SETUP_INSTANCE_ID(v); + +#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED + InstanceData data = _DataBuffer[v.instanceID]; + float4 pos = mul(data.m, v.vertex); + o.vertex = UnityObjectToClipPos(pos); + half4 color = data.color; +#else o.vertex = UnityObjectToClipPos(v.vertex); - o.color = v.color * UNITY_ACCESS_INSTANCED_PROP(Props, _Color) * _DebugX_GlobalColor; + half4 color = _Color; +#endif + +#if _VERTEXCOLOR_ON + color *= v.color; +#endif + o.color = color * _DebugX_GlobalColor; + return o; } ENDCG @@ -59,7 +117,8 @@ Shader "DCFApixels/DebugX/Handles Unlit" return i.color; } ENDCG - } + } + Pass { ZTest Greater diff --git a/Runtime/Utils/DebugXAssets.cs b/Runtime/Utils/DebugXAssets.cs index ac4f46e..eafbf39 100644 --- a/Runtime/Utils/DebugXAssets.cs +++ b/Runtime/Utils/DebugXAssets.cs @@ -43,12 +43,17 @@ namespace DCFApixels.DebugXCore public readonly struct MaterialsList { public readonly Material Lit; + //public readonly Material Lit_InstancedProcedural; public readonly Material Unlit; - public readonly Material Line; + //public readonly Material Unlit_InstancedProcedural; public readonly Material UnlitOverwrite; + //public readonly Material UnlitOverwrite_InstancedProcedural; public readonly Material Billboard; + //public readonly Material Billboard_InstancedProcedural; public readonly Material Dot; + //public readonly Material Dot_InstancedProcedural; public readonly Material Wire; + //public readonly Material Wire_InstancedProcedural; internal readonly Material TextBackground; } diff --git a/Runtime/Utils/StaticData.cs b/Runtime/Utils/StaticData.cs index 3f5a108..862e534 100644 --- a/Runtime/Utils/StaticData.cs +++ b/Runtime/Utils/StaticData.cs @@ -5,8 +5,11 @@ namespace DCFApixels.DebugXCore public interface IStaticMaterial : IStaticData { int GetExecuteOrder(); - Material GetMaterial_SupportCumputeShaders(); - Material GetMaterial_Default(); + Material GetMaterial(); + } + public interface IStaticMaterial_InstancedProcedural : IStaticMaterial + { + Material GetMaterial_InstancedProcedural(); } public interface IStaticMesh : IStaticData { @@ -16,53 +19,47 @@ namespace DCFApixels.DebugXCore ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - public readonly struct LitMat : IStaticMaterial + public readonly struct LitMat : IStaticMaterial_InstancedProcedural { public int GetExecuteOrder() => 0; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Lit; - public Material GetMaterial_Default() => DebugXAssets.Materials.Lit; + public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Lit; + public Material GetMaterial() => DebugXAssets.Materials.Lit; } - public readonly struct UnlitMat : IStaticMaterial + public readonly struct UnlitMat : IStaticMaterial_InstancedProcedural { public int GetExecuteOrder() => 100_000; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Unlit; - public Material GetMaterial_Default() => DebugXAssets.Materials.Unlit; + public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Unlit; + public Material GetMaterial() => DebugXAssets.Materials.Unlit; } - public readonly struct LineMat : IStaticMaterial - { - public int GetExecuteOrder() => 100_000; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Line; - public Material GetMaterial_Default() => DebugXAssets.Materials.Unlit; - } - public readonly struct BillboardMat : IStaticMaterial + public readonly struct BillboardMat : IStaticMaterial_InstancedProcedural { public int GetExecuteOrder() => 200_000; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Billboard; - public Material GetMaterial_Default() => DebugXAssets.Materials.Billboard; + public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Billboard; + public Material GetMaterial() => DebugXAssets.Materials.Billboard; } - public readonly struct DotMat : IStaticMaterial + public readonly struct DotMat : IStaticMaterial_InstancedProcedural { public int GetExecuteOrder() => 300_000; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Dot; - public Material GetMaterial_Default() => DebugXAssets.Materials.Dot; + public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Dot; + public Material GetMaterial() => DebugXAssets.Materials.Dot; } - public readonly struct GeometryUnlitMat : IStaticMaterial + public readonly struct GeometryUnlitMat : IStaticMaterial_InstancedProcedural { public int GetExecuteOrder() => 1_000_000; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Unlit; - public Material GetMaterial_Default() => DebugXAssets.Materials.Unlit; + public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Unlit; + public Material GetMaterial() => DebugXAssets.Materials.Unlit; } - public readonly struct UnlitOverwriteMat : IStaticMaterial + public readonly struct UnlitOverwriteMat : IStaticMaterial_InstancedProcedural { public int GetExecuteOrder() => 1_000_000; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.UnlitOverwrite; - public Material GetMaterial_Default() => DebugXAssets.Materials.UnlitOverwrite; + public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.UnlitOverwrite; + public Material GetMaterial() => DebugXAssets.Materials.UnlitOverwrite; } - public readonly struct WireMat : IStaticMaterial + public readonly struct WireMat : IStaticMaterial_InstancedProcedural { public int GetExecuteOrder() => 1_000_000; - public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Wire; - public Material GetMaterial_Default() => DebugXAssets.Materials.Wire; + public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Wire; + public Material GetMaterial() => DebugXAssets.Materials.Wire; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////