This commit is contained in:
DCFApixels 2025-03-05 09:44:27 +08:00
parent 414ead5134
commit 76574124ca
15 changed files with 176 additions and 328 deletions

View File

@ -46,7 +46,7 @@ namespace DCFApixels
#region Mesh //TODO потестить #region Mesh //TODO потестить
[IN(LINE)] [IN(LINE)]
public DrawHandler Mesh<TMat>(Mesh mesh, Vector3 position, Quaternion rotation, Vector3 size) public DrawHandler Mesh<TMat>(Mesh mesh, Vector3 position, Quaternion rotation, Vector3 size)
where TMat : struct, IStaticMaterial where TMat : struct, IStaticMaterial_InstancedProcedural
{ {
return Gizmo(new MeshGizmo<TMat>(mesh, position, rotation, size)); return Gizmo(new MeshGizmo<TMat>(mesh, position, rotation, size));
} }
@ -81,7 +81,7 @@ namespace DCFApixels
} }
} }
private readonly struct MeshGizmo<TMat> : IGizmo<MeshGizmo<TMat>> private readonly struct MeshGizmo<TMat> : IGizmo<MeshGizmo<TMat>>
where TMat : struct, IStaticMaterial where TMat : struct, IStaticMaterial_InstancedProcedural
{ {
public readonly Mesh Mesh; public readonly Mesh Mesh;
public readonly Quaternion Rotation; public readonly Quaternion Rotation;
@ -116,7 +116,7 @@ namespace DCFApixels
[IN(LINE)] [IN(LINE)]
public DrawHandler Mesh<TMesh, TMat>(Vector3 position, Quaternion rotation, Vector3 size) public DrawHandler Mesh<TMesh, TMat>(Vector3 position, Quaternion rotation, Vector3 size)
where TMesh : struct, IStaticMesh where TMesh : struct, IStaticMesh
where TMat : struct, IStaticMaterial where TMat : struct, IStaticMaterial_InstancedProcedural
{ {
return Gizmo(new InstancingMeshGizmo<TMesh, TMat>(position, rotation, size)); return Gizmo(new InstancingMeshGizmo<TMesh, TMat>(position, rotation, size));
} }
@ -153,7 +153,7 @@ namespace DCFApixels
} }
private readonly struct InstancingMeshGizmo<TMesh, TMat> : IGizmo<InstancingMeshGizmo<TMesh, TMat>> private readonly struct InstancingMeshGizmo<TMesh, TMat> : IGizmo<InstancingMeshGizmo<TMesh, TMat>>
where TMesh : struct, IStaticMesh where TMesh : struct, IStaticMesh
where TMat : struct, IStaticMaterial where TMat : struct, IStaticMaterial_InstancedProcedural
{ {
public readonly Quaternion Rotation; public readonly Quaternion Rotation;
public readonly Vector3 Position; public readonly Vector3 Position;
@ -184,17 +184,17 @@ namespace DCFApixels
#region Line #region Line
[IN(LINE)] [IN(LINE)]
public DrawHandler Line<TMat>(Vector3 start, Vector3 end) public DrawHandler Line<TMat>(Vector3 start, Vector3 end)
where TMat : struct, IStaticMaterial where TMat : struct, IStaticMaterial_InstancedProcedural
{ {
return Gizmo(new WireLineGizmo<TMat>(start, end)); return Gizmo(new WireLineGizmo<TMat>(start, end));
} }
[IN(LINE)] [IN(LINE)]
public DrawHandler Line(Vector3 start, Vector3 end) public DrawHandler Line(Vector3 start, Vector3 end)
{ {
return Gizmo(new WireLineGizmo<LineMat>(start, end)); return Gizmo(new WireLineGizmo<UnlitMat>(start, end));
} }
private readonly struct WireLineGizmo<TMat> : IGizmo<WireLineGizmo<TMat>> private readonly struct WireLineGizmo<TMat> : IGizmo<WireLineGizmo<TMat>>
where TMat : struct, IStaticMaterial where TMat : struct, IStaticMaterial_InstancedProcedural
{ {
public readonly Vector3 Start; public readonly Vector3 Start;
public readonly Vector3 End; public readonly Vector3 End;
@ -256,7 +256,7 @@ namespace DCFApixels
} }
} }
private readonly IStaticMaterial _material; private readonly IStaticMaterial_InstancedProcedural _material;
private int _buffersLength = 0; private int _buffersLength = 0;
private PinnedArray<Matrix4x4> _matrices; private PinnedArray<Matrix4x4> _matrices;
@ -271,7 +271,7 @@ namespace DCFApixels
public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual int ExecuteOrder => _material.GetExecuteOrder();
public virtual bool IsStaticRender => true; public virtual bool IsStaticRender => true;
public MeshRendererBase(IStaticMaterial material) public MeshRendererBase(IStaticMaterial_InstancedProcedural material)
{ {
_materialPropertyBlock = new MaterialPropertyBlock(); _materialPropertyBlock = new MaterialPropertyBlock();
_material = material; _material = material;
@ -316,7 +316,7 @@ namespace DCFApixels
} }
public void Render(CommandBuffer cb) public void Render(CommandBuffer cb)
{ {
Material material = _material.GetMaterial_SupportCumputeShaders(); Material material = _material.GetMaterial_InstancedProcedural();
var items = new GizmosList<UnmanagedGizmoData>(_gizmos.Array, _prepareCount).As<GizmoData>().Items; var items = new GizmosList<UnmanagedGizmoData>(_gizmos.Array, _prepareCount).As<GizmoData>().Items;
_materialPropertyBlock.Clear(); _materialPropertyBlock.Clear();
_jobHandle.Complete(); _jobHandle.Complete();
@ -340,44 +340,46 @@ namespace DCFApixels
public readonly Vector3 Position; public readonly Vector3 Position;
public readonly Vector3 Size; public readonly Vector3 Size;
} }
private struct DrawData
{
public Matrix4x4 Matrix;
public Color Color;
}
private struct PrepareJob : IJobParallelFor private struct PrepareJob : IJobParallelFor
{ {
[NativeDisableUnsafePtrRestriction] [NativeDisableUnsafePtrRestriction]
public Gizmo<GizmoData>* Items; public Gizmo<GizmoData>* Items;
[NativeDisableUnsafePtrRestriction] [NativeDisableUnsafePtrRestriction]
public Matrix4x4* ResultMatrices; public DrawData* ResultData;
[NativeDisableUnsafePtrRestriction]
public Vector4* ResultColors;
public void Execute(int index) public void Execute(int index)
{ {
ref readonly var item = ref Items[index]; ref readonly var item = ref Items[index];
//if (item.IsSwaped == 0) { return; } (ResultData + index)->Matrix = Matrix4x4.TRS(item.Value.Position, item.Value.Rotation, item.Value.Size);
ResultMatrices[index] = Matrix4x4.TRS(item.Value.Position, item.Value.Rotation, item.Value.Size); (ResultData + index)->Color = item.Color;
ResultColors[index] = item.Color;
} }
} }
private readonly IStaticMesh _mesh; private readonly IStaticMesh _mesh;
private readonly IStaticMaterial _material; private readonly IStaticMaterial_InstancedProcedural _material;
private readonly MaterialPropertyBlock _materialPropertyBlock; private readonly MaterialPropertyBlock _materialPropertyBlock;
private GraphicsBuffer _graphicsBuffer;
private int _buffersLength = 0; private int _buffersLength = 0;
private PinnedArray<Matrix4x4> _matrices; private PinnedArray<DrawData> _drawDatas;
private PinnedArray<Vector4> _colors;
private PinnedArray<Gizmo<GizmoData>> _gizmos; private PinnedArray<Gizmo<GizmoData>> _gizmos;
private JobHandle _jobHandle; private JobHandle _jobHandle;
private int _prepareCount = 0; private int _prepareCount = 0;
public InstancingMeshRendererBase(IStaticMesh mesh, IStaticMaterial material) private readonly bool _enableInstancing;
public InstancingMeshRendererBase(IStaticMesh mesh, IStaticMaterial_InstancedProcedural material)
{ {
_mesh = mesh; _mesh = mesh;
_material = material; _material = material;
_materialPropertyBlock = new MaterialPropertyBlock(); _materialPropertyBlock = new MaterialPropertyBlock();
_drawDatas = PinnedArray<DrawData>.Pin(DummyArray<DrawData>.Get());
_matrices = PinnedArray<Matrix4x4>.Pin(DummyArray<Matrix4x4>.Get()); _enableInstancing = IsSupportsComputeShaders && _material.GetMaterial_InstancedProcedural().enableInstancing;
_colors = PinnedArray<Vector4>.Pin(DummyArray<Vector4>.Get());
} }
public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual int ExecuteOrder => _material.GetExecuteOrder();
public virtual bool IsStaticRender => true; public virtual bool IsStaticRender => true;
@ -390,10 +392,10 @@ namespace DCFApixels
if (_buffersLength < count) if (_buffersLength < count)
{ {
_matrices.Dispose(); int capacity = DebugXUtility.NextPow2(count);
_colors.Dispose(); _drawDatas.Dispose();
_matrices = PinnedArray<Matrix4x4>.Pin(new Matrix4x4[DebugXUtility.NextPow2(count)]); _drawDatas = PinnedArray<DrawData>.Pin(new DrawData[capacity]);
_colors = PinnedArray<Vector4>.Pin(new Vector4[DebugXUtility.NextPow2(count)]); AllocateGraphicsBuffer(capacity);
_buffersLength = count; _buffersLength = count;
} }
if (ReferenceEquals(_gizmos.Array, items) == false) if (ReferenceEquals(_gizmos.Array, items) == false)
@ -408,31 +410,39 @@ namespace DCFApixels
var job = new PrepareJob var job = new PrepareJob
{ {
Items = _gizmos.Ptr, Items = _gizmos.Ptr,
ResultMatrices = _matrices.Ptr, ResultData = _drawDatas.Ptr,
ResultColors = _colors.Ptr,
}; };
_jobHandle = job.Schedule(count, 64); _jobHandle = job.Schedule(count, 64);
} }
protected void Render(CommandBuffer cb) protected void Render(CommandBuffer cb)
{ {
Material material = _material.GetMaterial_SupportCumputeShaders();
Mesh mesh = _mesh.GetMesh(); Mesh mesh = _mesh.GetMesh();
_materialPropertyBlock.Clear(); if (_enableInstancing)
_jobHandle.Complete();
if (IsSupportsComputeShaders)
{ {
_materialPropertyBlock.SetVectorArray(ColorPropertyID, _colors.Array); Material material = _material.GetMaterial_InstancedProcedural();
cb.DrawMeshInstanced(mesh, 0, material, -1, _matrices.Array, _prepareCount, _materialPropertyBlock); _jobHandle.Complete();
_graphicsBuffer.SetData(_drawDatas.Array);
cb.DrawMeshInstancedProcedural(mesh, 0, material, -1, _prepareCount, _materialPropertyBlock);
} }
else else
{ {
Material material = _material.GetMaterial();
_jobHandle.Complete();
for (int i = 0; i < _prepareCount; i++) for (int i = 0; i < _prepareCount; i++)
{ {
_materialPropertyBlock.SetColor(ColorPropertyID, _colors.Ptr[i]); _materialPropertyBlock.SetColor(ColorPropertyID, _drawDatas.Ptr[i].Color);
cb.DrawMesh(mesh, _matrices.Ptr[i], material, 0, -1, _materialPropertyBlock); 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<DrawData>());
_materialPropertyBlock.SetBuffer(_BufferPropertyID, _graphicsBuffer);
}
} }
#endregion #endregion
@ -469,7 +479,7 @@ namespace DCFApixels
} }
} }
private readonly IStaticMesh _mesh = default(WireLineMesh); private readonly IStaticMesh _mesh = default(WireLineMesh);
private readonly IStaticMaterial _material; private readonly IStaticMaterial_InstancedProcedural _material;
private readonly MaterialPropertyBlock _materialPropertyBlock; private readonly MaterialPropertyBlock _materialPropertyBlock;
private GraphicsBuffer _graphicsBuffer; private GraphicsBuffer _graphicsBuffer;
@ -480,11 +490,14 @@ namespace DCFApixels
private JobHandle _jobHandle; private JobHandle _jobHandle;
private int _prepareCount = 0; private int _prepareCount = 0;
public WireLineRendererBase(IStaticMaterial material) private readonly bool _enableInstancing;
public WireLineRendererBase(IStaticMaterial_InstancedProcedural material)
{ {
_material = material; _material = material;
_materialPropertyBlock = new MaterialPropertyBlock(); _materialPropertyBlock = new MaterialPropertyBlock();
_drawDatas = PinnedArray<DrawData>.Pin(DummyArray<DrawData>.Get()); _drawDatas = PinnedArray<DrawData>.Pin(DummyArray<DrawData>.Get());
_enableInstancing = IsSupportsComputeShaders && _material.GetMaterial_InstancedProcedural().enableInstancing;
} }
public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual int ExecuteOrder => _material.GetExecuteOrder();
public virtual bool IsStaticRender => true; public virtual bool IsStaticRender => true;
@ -516,22 +529,19 @@ namespace DCFApixels
}; };
_jobHandle = job.Schedule(count, 64); _jobHandle = job.Schedule(count, 64);
} }
private readonly static int _BufferPropertyID = Shader.PropertyToID("_DataBuffer");
public void Render(CommandBuffer cb) public void Render(CommandBuffer cb)
{ {
Mesh mesh = _mesh.GetMesh(); Mesh mesh = _mesh.GetMesh();
if (IsSupportsComputeShaders) if (_enableInstancing)
{ {
Material material = _material.GetMaterial_SupportCumputeShaders(); Material material = _material.GetMaterial_InstancedProcedural();
_jobHandle.Complete(); _jobHandle.Complete();
_graphicsBuffer.SetData(_drawDatas.Array); _graphicsBuffer.SetData(_drawDatas.Array);
cb.DrawMeshInstancedProcedural(mesh, 0, material, -1, _prepareCount, _materialPropertyBlock); cb.DrawMeshInstancedProcedural(mesh, 0, material, -1, _prepareCount, _materialPropertyBlock);
} }
else else
{ {
Material material = _material.GetMaterial_Default(); Material material = _material.GetMaterial();
_jobHandle.Complete(); _jobHandle.Complete();
for (int i = 0; i < _prepareCount; i++) 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) private void AllocateGraphicsBuffer(int capacity)
{ {
_graphicsBuffer?.Dispose(); _graphicsBuffer?.Dispose();

View File

@ -202,7 +202,7 @@ namespace DCFApixels
public void Render(Camera camera, GizmosList<WidthLineGizmo> list, CommandBuffer cb) public void Render(Camera camera, GizmosList<WidthLineGizmo> list, CommandBuffer cb)
{ {
if (camera == null) { return; } if (camera == null) { return; }
default(UnlitOverwriteMat).GetMaterial_SupportCumputeShaders().SetPass(0); default(UnlitOverwriteMat).GetMaterial_InstancedProcedural().SetPass(0);
GL.Begin(GL.QUADS); GL.Begin(GL.QUADS);
Vector3 cameraPosition = camera.transform.position; Vector3 cameraPosition = camera.transform.position;
foreach (ref readonly var item in list) foreach (ref readonly var item in list)
@ -256,7 +256,7 @@ namespace DCFApixels
public void Render(Camera camera, GizmosList<WidthOutLineGizmo> list, CommandBuffer cb) public void Render(Camera camera, GizmosList<WidthOutLineGizmo> list, CommandBuffer cb)
{ {
if (camera == null) { return; } if (camera == null) { return; }
default(UnlitOverwriteMat).GetMaterial_SupportCumputeShaders().SetPass(0); default(UnlitOverwriteMat).GetMaterial_InstancedProcedural().SetPass(0);
GL.Begin(GL.LINES); GL.Begin(GL.LINES);
var cameraPosition = camera.transform.position; var cameraPosition = camera.transform.position;
foreach (ref readonly var item in list) foreach (ref readonly var item in list)
@ -318,7 +318,7 @@ namespace DCFApixels
{ {
if (camera == null) { return; } if (camera == null) { return; }
GL.PushMatrix(); GL.PushMatrix();
default(UnlitOverwriteMat).GetMaterial_SupportCumputeShaders().SetPass(0); default(UnlitOverwriteMat).GetMaterial_InstancedProcedural().SetPass(0);
GL.Begin(GL.LINES); GL.Begin(GL.LINES);
var cameraPosition = camera.transform.position; var cameraPosition = camera.transform.position;
foreach (ref readonly var item in list) foreach (ref readonly var item in list)

View File

@ -8,13 +8,13 @@ Material:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Line m_Name: Line
m_Shader: {fileID: 4800000, guid: 4dc765b931552b54b957905b156bae66, type: 3} m_Shader: {fileID: 4800000, guid: 37036939f3d0a824c82a3f34093d4a42, type: 3}
m_Parent: {fileID: 0} m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0 m_ModifiedSerializedProperties: 0
m_ValidKeywords: [] m_ValidKeywords: []
m_InvalidKeywords: [] m_InvalidKeywords: []
m_LightmapFlags: 4 m_LightmapFlags: 4
m_EnableInstancingVariants: 0 m_EnableInstancingVariants: 1
m_DoubleSidedGI: 0 m_DoubleSidedGI: 0
m_CustomRenderQueue: -1 m_CustomRenderQueue: -1
stringTagMap: {} stringTagMap: {}
@ -24,7 +24,10 @@ Material:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: [] m_TexEnvs: []
m_Ints: [] m_Ints: []
m_Floats: [] m_Floats:
m_Colors: [] - _FakeLight: 0
- _VertexColor: 0
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1 m_AllowLocking: 1

View File

@ -24,7 +24,8 @@ Material:
m_Shader: {fileID: 4800000, guid: 37036939f3d0a824c82a3f34093d4a42, type: 3} m_Shader: {fileID: 4800000, guid: 37036939f3d0a824c82a3f34093d4a42, type: 3}
m_Parent: {fileID: 0} m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0 m_ModifiedSerializedProperties: 0
m_ValidKeywords: [] m_ValidKeywords:
- _VERTEXCOLOR_ON
m_InvalidKeywords: [] m_InvalidKeywords: []
m_LightmapFlags: 4 m_LightmapFlags: 4
m_EnableInstancingVariants: 1 m_EnableInstancingVariants: 1
@ -110,6 +111,7 @@ Material:
- _DstBlend: 0 - _DstBlend: 0
- _DstBlendAlpha: 0 - _DstBlendAlpha: 0
- _EnvironmentReflections: 1 - _EnvironmentReflections: 1
- _FakeLight: 0
- _GlossMapScale: 0 - _GlossMapScale: 0
- _Glossiness: 0 - _Glossiness: 0
- _GlossyReflections: 0 - _GlossyReflections: 0
@ -124,6 +126,7 @@ Material:
- _SrcBlend: 1 - _SrcBlend: 1
- _SrcBlendAlpha: 1 - _SrcBlendAlpha: 1
- _Surface: 0 - _Surface: 0
- _VertexColor: 1
- _WorkflowMode: 1 - _WorkflowMode: 1
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:

View File

@ -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

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e3db4ecf82b06ef4fa7fdb30e68362fa
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -199,7 +199,7 @@ Transform:
m_GameObject: {fileID: 817216530089604692} m_GameObject: {fileID: 817216530089604692}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 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_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []

View File

@ -45,7 +45,6 @@ Shader "DCFApixels/DebugX/Handles Buillboard"
v2f o; v2f o;
UNITY_SETUP_INSTANCE_ID(v); UNITY_SETUP_INSTANCE_ID(v);
float4 worldOrigin = mul(UNITY_MATRIX_M, float4(0, 0, 0, 1)); float4 worldOrigin = mul(UNITY_MATRIX_M, float4(0, 0, 0, 1));
float4 viewOrigin = float4(UnityObjectToViewPos(float3(0, 0, 0)), 1); float4 viewOrigin = float4(UnityObjectToViewPos(float3(0, 0, 0)), 1);
float4 worldPos = mul(UNITY_MATRIX_M, v.vertex); float4 worldPos = mul(UNITY_MATRIX_M, v.vertex);
@ -56,7 +55,6 @@ Shader "DCFApixels/DebugX/Handles Buillboard"
o.vertex = clipsPos; 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; return o;
} }

View File

@ -50,7 +50,6 @@ Shader "DCFApixels/DebugX/Handles Dot"
distance = lerp(distance, 1, isOrthographic); distance = lerp(distance, 1, isOrthographic);
float fov = radians(UNITY_MATRIX_P[1][1] * 2.0); float fov = radians(UNITY_MATRIX_P[1][1] * 2.0);
float scale = distance * (1 / fov) * 0.015; float scale = distance * (1 / fov) * 0.015;
return scale * _DebugX_GlobalDotSize; return scale * _DebugX_GlobalDotSize;
@ -68,7 +67,6 @@ Shader "DCFApixels/DebugX/Handles Dot"
M._m22 *= scaleMultiplier; M._m22 *= scaleMultiplier;
float4 worldOrigin = mul(M, float4(0, 0, 0, 1)); float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
float4 viewOrigin = float4(UnityObjectToViewPos(float3(0, 0, 0)), 1); float4 viewOrigin = float4(UnityObjectToViewPos(float3(0, 0, 0)), 1);
float4 worldPos = mul(M, v.vertex); float4 worldPos = mul(M, v.vertex);
@ -77,9 +75,8 @@ Shader "DCFApixels/DebugX/Handles Dot"
float4 clipsPos = mul(UNITY_MATRIX_P, viewPos); float4 clipsPos = mul(UNITY_MATRIX_P, viewPos);
o.vertex = clipsPos; 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; return o;
} }
ENDCG ENDCG

View File

@ -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<InstanceData> _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
}
}
}

View File

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

View File

@ -3,6 +3,9 @@ Shader "DCFApixels/DebugX/Handles Unlit"
Properties Properties
{ {
_Color ("Color", Color) = (1,1,1,1) _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 SubShader
{ {
@ -19,12 +22,57 @@ Shader "DCFApixels/DebugX/Handles Unlit"
#pragma vertex vert #pragma vertex vert
#pragma fragment frag #pragma fragment frag
#pragma multi_compile_instancing #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" #include "UnityCG.cginc"
#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
struct InstanceData
{
float4x4 m;
float4 color;
};
StructuredBuffer<InstanceData> _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 struct appdata_t
{ {
float4 vertex : POSITION; float4 vertex : POSITION;
#if _FAKELIGHT_ON
float3 normal : NORMAL;
#endif
#if _VERTEXCOLOR_ON
float4 color : COLOR; float4 color : COLOR;
#endif
uint instanceID : SV_InstanceID;
UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID
}; };
@ -34,18 +82,28 @@ Shader "DCFApixels/DebugX/Handles Unlit"
half4 color : COLOR; half4 color : COLOR;
}; };
UNITY_INSTANCING_BUFFER_START(Props) float4 _Color;
UNITY_DEFINE_INSTANCED_PROP(float4, _Color)
UNITY_INSTANCING_BUFFER_END(Props)
float4 _DebugX_GlobalColor; float4 _DebugX_GlobalColor;
v2f vert (appdata_t v) v2f vert (appdata_t v)
{ {
v2f o; 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.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; return o;
} }
ENDCG ENDCG
@ -60,6 +118,7 @@ Shader "DCFApixels/DebugX/Handles Unlit"
} }
ENDCG ENDCG
} }
Pass Pass
{ {
ZTest Greater ZTest Greater

View File

@ -43,12 +43,17 @@ namespace DCFApixels.DebugXCore
public readonly struct MaterialsList public readonly struct MaterialsList
{ {
public readonly Material Lit; public readonly Material Lit;
//public readonly Material Lit_InstancedProcedural;
public readonly Material Unlit; public readonly Material Unlit;
public readonly Material Line; //public readonly Material Unlit_InstancedProcedural;
public readonly Material UnlitOverwrite; public readonly Material UnlitOverwrite;
//public readonly Material UnlitOverwrite_InstancedProcedural;
public readonly Material Billboard; public readonly Material Billboard;
//public readonly Material Billboard_InstancedProcedural;
public readonly Material Dot; public readonly Material Dot;
//public readonly Material Dot_InstancedProcedural;
public readonly Material Wire; public readonly Material Wire;
//public readonly Material Wire_InstancedProcedural;
internal readonly Material TextBackground; internal readonly Material TextBackground;
} }

View File

@ -5,8 +5,11 @@ namespace DCFApixels.DebugXCore
public interface IStaticMaterial : IStaticData public interface IStaticMaterial : IStaticData
{ {
int GetExecuteOrder(); int GetExecuteOrder();
Material GetMaterial_SupportCumputeShaders(); Material GetMaterial();
Material GetMaterial_Default(); }
public interface IStaticMaterial_InstancedProcedural : IStaticMaterial
{
Material GetMaterial_InstancedProcedural();
} }
public interface IStaticMesh : IStaticData 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 int GetExecuteOrder() => 0;
public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Lit; public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Lit;
public Material GetMaterial_Default() => 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 int GetExecuteOrder() => 100_000;
public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Unlit; public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Unlit;
public Material GetMaterial_Default() => DebugXAssets.Materials.Unlit; public Material GetMaterial() => DebugXAssets.Materials.Unlit;
} }
public readonly struct LineMat : IStaticMaterial public readonly struct BillboardMat : IStaticMaterial_InstancedProcedural
{
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 int GetExecuteOrder() => 200_000; public int GetExecuteOrder() => 200_000;
public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Billboard; public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Billboard;
public Material GetMaterial_Default() => 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 int GetExecuteOrder() => 300_000;
public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Dot; public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Dot;
public Material GetMaterial_Default() => 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 int GetExecuteOrder() => 1_000_000;
public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Unlit; public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Unlit;
public Material GetMaterial_Default() => 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 int GetExecuteOrder() => 1_000_000;
public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.UnlitOverwrite; public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.UnlitOverwrite;
public Material GetMaterial_Default() => 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 int GetExecuteOrder() => 1_000_000;
public Material GetMaterial_SupportCumputeShaders() => DebugXAssets.Materials.Wire; public Material GetMaterial_InstancedProcedural() => DebugXAssets.Materials.Wire;
public Material GetMaterial_Default() => DebugXAssets.Materials.Wire; public Material GetMaterial() => DebugXAssets.Materials.Wire;
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////