From ce6090f1d79e172985d6e1e1fa82b9138dc468b4 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 30 Mar 2021 22:41:24 +0900 Subject: [PATCH] LoadGeometryAsync --- .../Runtime/UniGLTF/IO/ImporterContext.cs | 19 ++++------ .../VRM10/Runtime/IO/RuntimeUnityBuilder.cs | 37 ++++++++++++++++--- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs index 548432658..12dcf7f86 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs @@ -41,8 +41,6 @@ namespace UniGLTF TextureFactory m_textureFactory; public TextureFactory TextureFactory => m_textureFactory; - IAwaitCaller m_awaitCaller; - public ImporterContext(GltfParser parser, IEnumerable<(string, UnityEngine.Object)> externalObjectMap = null) { @@ -81,7 +79,6 @@ namespace UniGLTF { awaitCaller = new TaskCaller(); } - m_awaitCaller = awaitCaller; if (MeasureTime == null) { @@ -109,17 +106,17 @@ namespace UniGLTF await LoadMaterialsAsync(); } - await LoadGeometryAsync(MeasureTime); + await LoadGeometryAsync(awaitCaller, MeasureTime); using (MeasureTime("AnimationImporter")) { AnimationImporter.Import(this); } - await OnLoadModel(m_awaitCaller, MeasureTime); + await OnLoadModel(awaitCaller, MeasureTime); } - protected virtual async Task LoadGeometryAsync(Func MeasureTime) + protected virtual async Task LoadGeometryAsync(IAwaitCaller awaitCaller, Func MeasureTime) { var inverter = InvertAxis.Create(); @@ -130,7 +127,7 @@ namespace UniGLTF using (MeasureTime("ReadMesh")) { var x = meshImporter.ReadMesh(this, index, inverter); - var y = await BuildMeshAsync(MeasureTime, x, index); + var y = await BuildMeshAsync(awaitCaller, MeasureTime, x, index); Meshes.Add(y); } } @@ -142,7 +139,7 @@ namespace UniGLTF Nodes.Add(NodeImporter.ImportNode(GLTF.nodes[i], i).transform); } } - await m_awaitCaller.NextFrame(); + await awaitCaller.NextFrame(); using (MeasureTime("BuildHierarchy")) { @@ -174,7 +171,7 @@ namespace UniGLTF } } } - await m_awaitCaller.NextFrame(); + await awaitCaller.NextFrame(); } public async Task LoadMaterialsAsync() @@ -201,11 +198,11 @@ namespace UniGLTF return Task.FromResult(null); } - async Task BuildMeshAsync(Func MeasureTime, MeshImporter.MeshContext x, int i) + async Task BuildMeshAsync(IAwaitCaller awaitCaller, Func MeasureTime, MeshImporter.MeshContext x, int i) { using (MeasureTime("BuildMesh")) { - var meshWithMaterials = await MeshImporter.BuildMeshAsync(m_awaitCaller, MaterialFactory, x); + var meshWithMaterials = await MeshImporter.BuildMeshAsync(awaitCaller, MaterialFactory, x); var mesh = meshWithMaterials.Mesh; // mesh name diff --git a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs index 26b236441..0eb6222d2 100644 --- a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs +++ b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs @@ -37,7 +37,7 @@ namespace UniVRM10 /// /// /// - protected override async Task LoadGeometryAsync(Func MeasureTime) + protected override async Task LoadGeometryAsync(IAwaitCaller awaitCaller, Func MeasureTime) { // fill assets for (int i = 0; i < m_model.Materials.Count; ++i) @@ -46,6 +46,8 @@ namespace UniVRM10 var dst = MaterialFactory.Materials[i].Asset; } + await awaitCaller.NextFrame(); + // mesh for (int i = 0; i < m_model.MeshGroups.Count; ++i) { @@ -69,10 +71,13 @@ namespace UniVRM10 // 頂点バッファの連結が必用 throw new NotImplementedException(); } + + await awaitCaller.NextFrame(); } // node: recursive CreateNodes(m_model.Root, null, m_asset.Map.Nodes); + await awaitCaller.NextFrame(); if (Root == null) { @@ -89,6 +94,7 @@ namespace UniVRM10 m_asset.Map.Nodes[m_model.Root] = Root; } m_asset.Root = m_asset.Map.Nodes[m_model.Root]; + await awaitCaller.NextFrame(); // renderer var map = m_asset.Map; @@ -107,7 +113,29 @@ namespace UniVRM10 var renderer = CreateRenderer(node, go, map, MaterialFactory.Materials); map.Renderers.Add(node, renderer); m_asset.Renderers.Add(renderer); + await awaitCaller.NextFrame(); } + } + + protected override async Task OnLoadModel(IAwaitCaller awaitCaller, Func MeasureTime) + { + Root.name = "VRM1"; + + // VrmController + + // meta + + // humanoid + + // firstPerson + + // expression + + // lookat + + // springBone + + // constraint // var humanoid = m_asset.Root.AddComponent(); // humanoid.AssignBones(map.Nodes.Select(x => (ToUnity(x.Key.HumanoidBone.GetValueOrDefault()), x.Value.transform))); @@ -116,16 +144,13 @@ namespace UniVRM10 // var animator = m_asset.Root.AddComponent(); // animator.avatar = m_asset.HumanoidAvatar; - } - - protected override async Task OnLoadModel(IAwaitCaller awaitCaller, Func MeasureTime) - { - Root.name = "VRM1"; // UniVRM10.ComponentBuilder.Build10(m_model, m_assets); // var model = VrmLoader.CreateVrmModel(parser); // model.RemoveSecondary(); + + await awaitCaller.NextFrame(); } public static HumanBodyBones ToUnity(VrmLib.HumanoidBones bone)