mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-13 14:29:38 -05:00
LoadGeometryAsync
This commit is contained in:
@@ -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<string, IDisposable> MeasureTime)
|
||||
protected virtual async Task LoadGeometryAsync(IAwaitCaller awaitCaller, Func<string, IDisposable> 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<object>(null);
|
||||
}
|
||||
|
||||
async Task<MeshWithMaterials> BuildMeshAsync(Func<string, IDisposable> MeasureTime, MeshImporter.MeshContext x, int i)
|
||||
async Task<MeshWithMaterials> BuildMeshAsync(IAwaitCaller awaitCaller, Func<string, IDisposable> 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
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace UniVRM10
|
||||
/// </summary>
|
||||
/// <param name="MeasureTime"></param>
|
||||
/// <returns></returns>
|
||||
protected override async Task LoadGeometryAsync(Func<string, IDisposable> MeasureTime)
|
||||
protected override async Task LoadGeometryAsync(IAwaitCaller awaitCaller, Func<string, IDisposable> 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<string, IDisposable> MeasureTime)
|
||||
{
|
||||
Root.name = "VRM1";
|
||||
|
||||
// VrmController
|
||||
|
||||
// meta
|
||||
|
||||
// humanoid
|
||||
|
||||
// firstPerson
|
||||
|
||||
// expression
|
||||
|
||||
// lookat
|
||||
|
||||
// springBone
|
||||
|
||||
// constraint
|
||||
|
||||
// var humanoid = m_asset.Root.AddComponent<MeshUtility.Humanoid>();
|
||||
// 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>();
|
||||
// animator.avatar = m_asset.HumanoidAvatar;
|
||||
}
|
||||
|
||||
protected override async Task OnLoadModel(IAwaitCaller awaitCaller, Func<string, IDisposable> 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)
|
||||
|
||||
Reference in New Issue
Block a user