diff --git a/Assets/RebootKit b/Assets/RebootKit index 6bda371..8f11cbe 160000 --- a/Assets/RebootKit +++ b/Assets/RebootKit @@ -1 +1 @@ -Subproject commit 6bda371baac905a9b9517cd021baf43111e8abf5 +Subproject commit 8f11cbe0375c2c6912c6f3cf17973b577e16a7b0 diff --git a/Assets/jelycho/Code/GutRenderer.cs b/Assets/jelycho/Code/GutRenderer.cs index f51d7c2..936a56a 100755 --- a/Assets/jelycho/Code/GutRenderer.cs +++ b/Assets/jelycho/Code/GutRenderer.cs @@ -1,8 +1,8 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Unity.Collections; using Unity.Mathematics; using UnityEngine; +using UnityEngine.Profiling; namespace RealityReboot.jelycho { [ExecuteInEditMode] @@ -18,20 +18,58 @@ namespace RealityReboot.jelycho { [SerializeField, Range(3, 128)] int m_Resolution = 16; [SerializeField] Mesh m_Mesh; + + [SerializeField, Header("Debug")] + bool m_ShowPositions = false; void Update() { - if (m_Mesh == null) { + Profiler.BeginSample("GutRenderer.GenerateMesh"); + GenerateMesh(); + Profiler.EndSample(); + + Graphics.DrawMesh(m_Mesh, Matrix4x4.identity, m_Material, 0); + } + + void OnDrawGizmos() { + Gizmos.color = Color.white; + for (int i = 0; i < m_Resolution; ++i) { + float angle = (float)i / m_Resolution * math.PI * 2.0f; + float3 pos = new(math.cos(angle), 0, math.sin(angle)); + + Gizmos.DrawSphere(pos, 0.1f); + } + + if (m_ShowPositions) { + if (m_Positions.Length < 2) { + return; + } + + for (int i = 0; i < m_Positions.Length - 1; i++) { + Gizmos.color = Color.white; + Gizmos.DrawLine(m_Positions[i], m_Positions[i + 1]); + + Gizmos.color = Color.yellow; + Gizmos.DrawSphere(m_Positions[i], m_Radius); + } + + Gizmos.DrawSphere(m_Positions[m_Positions.Length - 1], 0.1f); + } + } + + void GenerateMesh() { + if (m_Mesh is null) { m_Mesh = new Mesh { name = "GutMesh", indexFormat = UnityEngine.Rendering.IndexFormat.UInt32 }; + m_Mesh.MarkDynamic(); } if (m_Positions.Length < 2) { return; } - + int segmentCount = m_Positions.Length - 1; int vertexCount = m_Resolution * segmentCount; int triangleCount = (segmentCount - 1) * m_Resolution * 2; @@ -44,40 +82,41 @@ namespace RealityReboot.jelycho { for (int i = 0; i < m_Positions.Length - 1; i++) { float3 pos0 = m_Positions[i]; float3 pos1 = m_Positions[i + 1]; - + float startV0 = (float)i / (m_Positions.Length - 1); float startV1 = (float)(i + 1) / (m_Positions.Length - 1); - + for (int j = 0; j < m_Resolution - 1; j++) { - float t0 = (float)j / (m_Resolution - 1); - float t1 = (float)(j + 1) / (m_Resolution - 1); - float angle0 = math.lerp(0, math.PI * 2, t0); - float angle1 = math.lerp(0, math.PI * 2, t1); - + float t0 = (float)j / m_Resolution; + float t1 = (float)(j + 1) / m_Resolution; + + float angle0 = (float)j / m_Resolution * math.PI * 2.0f; + float angle1 = (float)(j + 1) / m_Resolution * math.PI * 2.0f; + float3 offset0 = new float3(math.cos(angle0), 0.0f, math.sin(angle0)) * m_Radius; float3 offset1 = new float3(math.cos(angle1), 0.0f, math.sin(angle1)) * m_Radius; - + int startIndex = positions.Length; positions.Add(pos0 + offset0); positions.Add(pos0 + offset1); positions.Add(pos1 + offset0); positions.Add(pos1 + offset1); - + uvs.Add(new float2(t0, startV0)); uvs.Add(new float2(t0, startV1)); uvs.Add(new float2(t1, startV0)); uvs.Add(new float2(t1, startV1)); - + normals.Add(math.normalize(offset0)); normals.Add(math.normalize(offset1)); normals.Add(math.normalize(offset0)); normals.Add(math.normalize(offset1)); - + indices.Add(startIndex + 0); indices.Add(startIndex + 1); indices.Add(startIndex + 2); - + indices.Add(startIndex + 3); indices.Add(startIndex + 2); indices.Add(startIndex + 1); @@ -89,24 +128,6 @@ namespace RealityReboot.jelycho { m_Mesh.SetNormals(normals.AsArray()); m_Mesh.SetUVs(0, uvs.AsArray()); m_Mesh.SetIndices(indices.AsArray(), MeshTopology.Triangles, 0, false); - - Graphics.DrawMesh(m_Mesh, Matrix4x4.identity, m_Material, 0); - } - - void OnDrawGizmos() { - if (m_Positions.Length < 2) { - return; - } - - for (int i = 0; i < m_Positions.Length - 1; i++) { - Gizmos.color = Color.white; - Gizmos.DrawLine(m_Positions[i], m_Positions[i + 1]); - - Gizmos.color = Color.yellow; - Gizmos.DrawSphere(m_Positions[i], 0.1f); - } - - Gizmos.DrawSphere(m_Positions[m_Positions.Length - 1], 0.1f); } } -} \ No newline at end of file +} diff --git a/Assets/jelycho/Worlds/dev/scn_map_dev.unity b/Assets/jelycho/Worlds/dev/scn_map_dev.unity old mode 100755 new mode 100644 index 8ec7785..82f9bff --- a/Assets/jelycho/Worlds/dev/scn_map_dev.unity +++ b/Assets/jelycho/Worlds/dev/scn_map_dev.unity @@ -590,11 +590,11 @@ Mesh: m_SubMeshes: - serializedVersion: 2 firstByte: 0 - indexCount: 132 + indexCount: 24 topology: 0 baseVertex: 0 firstVertex: 0 - vertexCount: 88 + vertexCount: 16 localAABB: m_Center: {x: 0, y: 0, z: 0} m_Extent: {x: 0, y: 0, z: 0} @@ -614,10 +614,10 @@ Mesh: m_KeepVertices: 0 m_KeepIndices: 0 m_IndexFormat: 1 - m_IndexBuffer: 00000000010000000200000003000000020000000100000004000000050000000600000007000000060000000500000008000000090000000a0000000b0000000a000000090000000c0000000d0000000e0000000f0000000e0000000d00000010000000110000001200000013000000120000001100000014000000150000001600000017000000160000001500000018000000190000001a0000001b0000001a000000190000001c0000001d0000001e0000001f0000001e0000001d00000020000000210000002200000023000000220000002100000024000000250000002600000027000000260000002500000028000000290000002a0000002b0000002a000000290000002c0000002d0000002e0000002f0000002e0000002d00000030000000310000003200000033000000320000003100000034000000350000003600000037000000360000003500000038000000390000003a0000003b0000003a000000390000003c0000003d0000003e0000003f0000003e0000003d00000040000000410000004200000043000000420000004100000044000000450000004600000047000000460000004500000048000000490000004a0000004b0000004a000000490000004c0000004d0000004e0000004f0000004e0000004d000000500000005100000052000000530000005200000051000000540000005500000056000000570000005600000055000000 + m_IndexBuffer: 00000000010000000200000003000000020000000100000004000000050000000600000007000000060000000500000008000000090000000a0000000b0000000a000000090000000c0000000d0000000e0000000f0000000e0000000d000000 m_VertexData: serializedVersion: 3 - m_VertexCount: 88 + m_VertexCount: 16 m_Channels: - stream: 0 offset: 0 @@ -675,8 +675,8 @@ Mesh: offset: 0 format: 0 dimension: 0 - m_DataSize: 2816 - _typelessdata: e17a9c4006818140cba181400000803f00000000000000000000000000000000d6f89b4006818140b05c8340645c573f0000000070670a3f000000000000003fdf4f3d40d7a33040cba181400000803f00000000000000008c2eba3d00000000c84b3c40d7a33040b05c8340645c573f0000000070670a3f8c2eba3d0000003fd6f89b4006818140b05c8340645c573f0000000070670a3f8c2eba3d00000000fd9b9a4006818140f78a844046b1d43e00000000a6dd683f8c2eba3d0000003fc84b3c40d7a33040b05c8340645c573f0000000070670a3f8c2e3a3e0000000017923940d7a33040f78a844046b1d43e00000000a6dd683f8c2e3a3e0000003ffd9b9a4006818140f78a844046b1d43e00000000a6dd683f8c2e3a3e0000000018d3984006818140a8cc844003bb11be00000000f1647d3f8c2e3a3e0000003f17923940d7a33040f78a844046b1d43e00000000a6dd683fe9a28b3e000000004e003640d7a33040a8cc844003bb11be00000000f1647d3fe9a28b3e0000003f18d3984006818140a8cc844003bb11be00000000f1647d3fe9a28b3e00000000382f974006818140e70c8440f6a427bf00000000cc78413fe9a28b3e0000003f4e003640d7a33040a8cc844003bb11be00000000f1647d3f8c2eba3e000000008cb83240d7a33040e70c8440f6a427bf00000000cc78413f8c2eba3e0000003f382f974006818140e70c8440f6a427bf00000000cc78413f8c2eba3e00000000aa359640068181409788824056a175bf000000003a3f903e8c2eba3e0000003f8cb83240d7a33040e70c8440f6a427bf00000000cc78413f2fbae83e0000000070c53040d7a330409788824056a175bf000000003a3f903e2fbae83e0000003faa359640068181409788824056a175bf000000003a3f903e2fbae83e00000000aa35964006818140ffba804054a175bf00000000473f90be2fbae83e0000003f70c53040d7a330409788824056a175bf000000003a3f903ee9a20b3f0000000070c53040d7a33040ffba804054a175bf00000000473f90bee9a20b3f0000003faa35964006818140ffba804054a175bf00000000473f90bee9a20b3f00000000382f9740068181405e6d7e40f4a427bf00000000ce7841bfe9a20b3f0000003f70c53040d7a33040ffba804054a175bf00000000473f90bebae8223f000000008cb83240d7a330405e6d7e40f4a427bf00000000ce7841bfbae8223f0000003f382f9740068181405e6d7e40f4a427bf00000000ce7841bfbae8223f0000000018d3984006818140dded7c40e7ba11be00000000f1647dbfbae8223f0000003f8cb83240d7a330405e6d7e40f4a427bf00000000ce7841bf8c2e3a3f000000004e003640d7a33040dded7c40e7ba11be00000000f1647dbf8c2e3a3f0000003f18d3984006818140dded7c40e7ba11be00000000f1647dbf8c2e3a3f00000000fd9b9a40068181403f717d404bb1d43e00000000a4dd68bf8c2e3a3f0000003f4e003640d7a33040dded7c40e7ba11be00000000f1647dbf5d74513f0000000017923940d7a330403f717d404bb1d43e00000000a4dd68bf5d74513f0000003ffd9b9a40068181403f717d404bb1d43e00000000a4dd68bf5d74513f00000000d6f89b4006818140cdcd7f40685c573f000000006a670abf5d74513f0000003f17923940d7a330403f717d404bb1d43e00000000a4dd68bf2fba683f00000000c84b3c40d7a33040cdcd7f40685c573f000000006a670abf2fba683f0000003fd6f89b4006818140cdcd7f40685c573f000000006a670abf2fba683f00000000e17a9c4006818140cba181400000803f000000002ebd3b342fba683f0000003fc84b3c40d7a33040cdcd7f40685c573f000000006a670abf0000803f00000000df4f3d40d7a33040cba181400000803f000000002ebd3b340000803f0000003fdf4f3d40d7a33040cba181400000803f0000000000000000000000000000003fc84b3c40d7a33040b05c8340645c573f0000000070670a3f000000000000803fdf4f3d4014aee73fcba181400000803f00000000000000008c2eba3d0000003fc84b3c4014aee73fb05c8340645c573f0000000070670a3f8c2eba3d0000803fc84b3c40d7a33040b05c8340645c573f0000000070670a3f8c2eba3d0000003f17923940d7a33040f78a844046b1d43e00000000a6dd683f8c2eba3d0000803fc84b3c4014aee73fb05c8340645c573f0000000070670a3f8c2e3a3e0000003f1792394014aee73ff78a844046b1d43e00000000a6dd683f8c2e3a3e0000803f17923940d7a33040f78a844046b1d43e00000000a6dd683f8c2e3a3e0000003f4e003640d7a33040a8cc844003bb11be00000000f1647d3f8c2e3a3e0000803f1792394014aee73ff78a844046b1d43e00000000a6dd683fe9a28b3e0000003f4e00364014aee73fa8cc844003bb11be00000000f1647d3fe9a28b3e0000803f4e003640d7a33040a8cc844003bb11be00000000f1647d3fe9a28b3e0000003f8cb83240d7a33040e70c8440f6a427bf00000000cc78413fe9a28b3e0000803f4e00364014aee73fa8cc844003bb11be00000000f1647d3f8c2eba3e0000003f8cb8324014aee73fe70c8440f6a427bf00000000cc78413f8c2eba3e0000803f8cb83240d7a33040e70c8440f6a427bf00000000cc78413f8c2eba3e0000003f70c53040d7a330409788824056a175bf000000003a3f903e8c2eba3e0000803f8cb8324014aee73fe70c8440f6a427bf00000000cc78413f2fbae83e0000003f70c5304014aee73f9788824056a175bf000000003a3f903e2fbae83e0000803f70c53040d7a330409788824056a175bf000000003a3f903e2fbae83e0000003f70c53040d7a33040ffba804054a175bf00000000473f90be2fbae83e0000803f70c5304014aee73f9788824056a175bf000000003a3f903ee9a20b3f0000003f70c5304014aee73fffba804054a175bf00000000473f90bee9a20b3f0000803f70c53040d7a33040ffba804054a175bf00000000473f90bee9a20b3f0000003f8cb83240d7a330405e6d7e40f4a427bf00000000ce7841bfe9a20b3f0000803f70c5304014aee73fffba804054a175bf00000000473f90bebae8223f0000003f8cb8324014aee73f5e6d7e40f4a427bf00000000ce7841bfbae8223f0000803f8cb83240d7a330405e6d7e40f4a427bf00000000ce7841bfbae8223f0000003f4e003640d7a33040dded7c40e7ba11be00000000f1647dbfbae8223f0000803f8cb8324014aee73f5e6d7e40f4a427bf00000000ce7841bf8c2e3a3f0000003f4e00364014aee73fdded7c40e7ba11be00000000f1647dbf8c2e3a3f0000803f4e003640d7a33040dded7c40e7ba11be00000000f1647dbf8c2e3a3f0000003f17923940d7a330403f717d404bb1d43e00000000a4dd68bf8c2e3a3f0000803f4e00364014aee73fdded7c40e7ba11be00000000f1647dbf5d74513f0000003f1792394014aee73f3f717d404bb1d43e00000000a4dd68bf5d74513f0000803f17923940d7a330403f717d404bb1d43e00000000a4dd68bf5d74513f0000003fc84b3c40d7a33040cdcd7f40685c573f000000006a670abf5d74513f0000803f1792394014aee73f3f717d404bb1d43e00000000a4dd68bf2fba683f0000003fc84b3c4014aee73fcdcd7f40685c573f000000006a670abf2fba683f0000803fc84b3c40d7a33040cdcd7f40685c573f000000006a670abf2fba683f0000003fdf4f3d40d7a33040cba181400000803f000000002ebd3b342fba683f0000803fc84b3c4014aee73fcdcd7f40685c573f000000006a670abf0000803f0000003fdf4f3d4014aee73fcba181400000803f000000002ebd3b340000803f0000803f + m_DataSize: 512 + _typelessdata: 7a145e4006818140cba181400000803f00000000000000000000000000000000e17a5440068181403e678440010000bf00000000d7b35d3f000000000000003fdf4f3d40d7a33040cba181400000803f0000000000000000abaaaa3e0000000046b63340d7a330403e678440010000bf00000000d7b35d3fabaaaa3e0000003fe17a5440068181403e678440010000bf00000000d7b35d3fabaaaa3e00000000e17a544006818140b1b87d40feffffbe00000000d8b35dbfabaaaa3e0000003f46b63340d7a330403e678440010000bf00000000d7b35d3fabaa2a3f0000000046b63340d7a33040b1b87d40feffffbe00000000d8b35dbfabaa2a3f0000003fdf4f3d40d7a33040cba181400000803f0000000000000000000000000000003f46b63340d7a330403e678440010000bf00000000d7b35d3f000000000000803fdf4f3d4014aee73fcba181400000803f0000000000000000abaaaa3e0000003f46b6334014aee73f3e678440010000bf00000000d7b35d3fabaaaa3e0000803f46b63340d7a330403e678440010000bf00000000d7b35d3fabaaaa3e0000003f46b63340d7a33040b1b87d40feffffbe00000000d8b35dbfabaaaa3e0000803f46b6334014aee73f3e678440010000bf00000000d7b35d3fabaa2a3f0000003f46b6334014aee73fb1b87d40feffffbe00000000d8b35dbfabaa2a3f0000803f m_CompressedMesh: m_Vertices: m_NumItems: 0 @@ -730,8 +730,8 @@ Mesh: m_BitSize: 0 m_UVInfo: 0 m_LocalAABB: - m_Center: {x: 3.8260252, y: 2.9285, z: 4.051} - m_Extent: {x: 1.0639746, y: 1.1185, z: 0.098982215} + m_Center: {x: 3.139, y: 2.9285, z: 4.051} + m_Extent: {x: 0.33099985, y: 1.1185, z: 0.08660257} m_MeshUsageFlags: 0 m_CookingOptions: 30 m_BakedConvexCollisionMesh: @@ -2367,7 +2367,7 @@ MonoBehaviour: m_Rope: {fileID: 2047055850} m_Material: {fileID: 2100000, guid: 1a1dad1a9d40a4c498aa7e08bcef586e, type: 2} m_Positions: - - x: 4.79 + - x: 3.37 y: 4.047 z: 4.051 - x: 2.858 @@ -2377,8 +2377,9 @@ MonoBehaviour: y: 1.81 z: 4.051 m_Radius: 0.1 - m_Resolution: 12 + m_Resolution: 3 m_Mesh: {fileID: 328708626} + m_ShowPositions: 0 --- !u!1 &2142333103 GameObject: m_ObjectHideFlags: 0