mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-06-02 22:14:30 -05:00
Merge pull request #2449 from ousttrue/fix/export_index_of
Fix/export index of
This commit is contained in:
commit
0e9020a8cb
|
|
@ -185,11 +185,14 @@ namespace VRM
|
|||
{
|
||||
VRM.firstPerson.firstPersonBone = Nodes.IndexOf(firstPerson.FirstPersonBone);
|
||||
VRM.firstPerson.firstPersonBoneOffset = firstPerson.FirstPersonOffset;
|
||||
VRM.firstPerson.meshAnnotations = firstPerson.Renderers.Select(x => new glTF_VRM_MeshAnnotation
|
||||
{
|
||||
mesh = Meshes.IndexOf(x.SharedMesh),
|
||||
firstPersonFlag = x.FirstPersonFlag.ToString(),
|
||||
}).ToList();
|
||||
VRM.firstPerson.meshAnnotations = firstPerson.Renderers
|
||||
.Select(x => new glTF_VRM_MeshAnnotation
|
||||
{
|
||||
mesh = Meshes.IndexOf(x.SharedMesh),
|
||||
firstPersonFlag = x.FirstPersonFlag.ToString(),
|
||||
})
|
||||
.Where(x => x.mesh != -1)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
// lookAt
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ namespace VRM
|
|||
// fallback
|
||||
asset.Preset = CachedEnum.ParseOrDefault<BlendShapePreset>(group.name, true);
|
||||
}
|
||||
asset.Values = group.binds.Select(x =>
|
||||
asset.Values = group.binds.Where(x => x.mesh >= 0 && x.mesh < Meshes.Count).Select(x =>
|
||||
{
|
||||
var mesh = Meshes[x.mesh].Mesh;
|
||||
var node = transformMeshTable[mesh];
|
||||
|
|
|
|||
|
|
@ -8,13 +8,23 @@ namespace UniVRM10
|
|||
{
|
||||
public static class ExpressionExtensions
|
||||
{
|
||||
public static UniVRM10.MorphTargetBinding Build10(this MorphTargetBind bind, GameObject root, Vrm10Importer.ModelMap loader, VrmLib.Model model)
|
||||
public static MorphTargetBinding? Build10(this MorphTargetBind bind, GameObject root, Vrm10Importer.ModelMap loader, VrmLib.Model model)
|
||||
{
|
||||
var libNode = model.Nodes[bind.Node.Value];
|
||||
var node = loader.Nodes[libNode].transform;
|
||||
var mesh = loader.Meshes[libNode.MeshGroup];
|
||||
var relativePath = node.RelativePathFrom(root.transform);
|
||||
return new UniVRM10.MorphTargetBinding(relativePath, bind.Index.Value, bind.Weight.Value);
|
||||
if (bind.Node.TryGetValidIndex(model.Nodes.Count, out var nodeIndex))
|
||||
{
|
||||
var libNode = model.Nodes[nodeIndex];
|
||||
if (libNode.MeshGroup == null)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
var node = loader.Nodes[libNode].transform;
|
||||
var relativePath = node.RelativePathFrom(root.transform);
|
||||
return new MorphTargetBinding(relativePath, bind.Index.Value, bind.Weight.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
||||
public static UniVRM10.MaterialColorBinding? Build10(this MaterialColorBind bind, IReadOnlyList<MaterialFactory.MaterialLoadInfo> materials)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ namespace UniVRM10
|
|||
}
|
||||
|
||||
// material and textures
|
||||
var rendererComponents = root.GetComponentsInChildren<Renderer>();
|
||||
var rendererComponents = root.GetComponentsInChildren<Renderer>().Where(x => x.gameObject.activeInHierarchy && x.enabled).ToArray();
|
||||
{
|
||||
foreach (var renderer in rendererComponents)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -646,7 +646,13 @@ namespace UniVRM10
|
|||
};
|
||||
foreach (var f in firstPerson.Renderers)
|
||||
{
|
||||
vrm.FirstPerson.MeshAnnotations.Add(ExportMeshAnnotation(f, vrmController.transform, getIndex));
|
||||
var annotation = ExportMeshAnnotation(f, vrmController.transform, getIndex);
|
||||
if (annotation.Node < 0)
|
||||
{
|
||||
// maybe disabled Rendeer
|
||||
continue;
|
||||
}
|
||||
vrm.FirstPerson.MeshAnnotations.Add(annotation);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -718,6 +724,15 @@ namespace UniVRM10
|
|||
Func<string, int> getIndexFromRelativePath = relativePath =>
|
||||
{
|
||||
var rendererNode = vrmController.transform.GetFromPath(relativePath);
|
||||
var renderer = rendererNode.GetComponent<Renderer>();
|
||||
if (renderer == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (!renderer.enabled)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
var node = converter.Nodes[rendererNode.gameObject];
|
||||
return model.Nodes.IndexOf(node);
|
||||
};
|
||||
|
|
@ -751,7 +766,14 @@ namespace UniVRM10
|
|||
{
|
||||
try
|
||||
{
|
||||
vrmExpression.MorphTargetBinds.Add(ExportMorphTargetBinding(b, getIndexFromRelativePath));
|
||||
var binding = ExportMorphTargetBinding(b, getIndexFromRelativePath);
|
||||
if (binding.Node < 0)
|
||||
{
|
||||
// node もしくは renderer が存在しない
|
||||
continue;
|
||||
}
|
||||
|
||||
vrmExpression.MorphTargetBinds.Add(binding);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -316,7 +316,10 @@ namespace UniVRM10
|
|||
|
||||
if (expression.MorphTargetBinds != null)
|
||||
{
|
||||
clip.MorphTargetBindings = expression.MorphTargetBinds?.Select(x => x.Build10(Root, m_map, m_model))
|
||||
clip.MorphTargetBindings = expression.MorphTargetBinds?
|
||||
.Select(x => x.Build10(Root, m_map, m_model))
|
||||
.Where(x => x.HasValue)
|
||||
.Select(x => x.Value)
|
||||
.ToArray();
|
||||
}
|
||||
else
|
||||
|
|
@ -492,13 +495,16 @@ namespace UniVRM10
|
|||
var fp = vrmExtension.FirstPerson;
|
||||
foreach (var x in fp.MeshAnnotations)
|
||||
{
|
||||
var node = Nodes[x.Node.Value];
|
||||
var relative = node.RelativePathFrom(Root.transform);
|
||||
vrm.FirstPerson.Renderers.Add(new RendererFirstPersonFlags
|
||||
if (x.Node.TryGetValidIndex(Nodes.Count, out var index))
|
||||
{
|
||||
FirstPersonFlag = x.Type,
|
||||
Renderer = relative,
|
||||
});
|
||||
var node = Nodes[x.Node.Value];
|
||||
var relative = node.RelativePathFrom(Root.transform);
|
||||
vrm.FirstPerson.Renderers.Add(new RendererFirstPersonFlags
|
||||
{
|
||||
FirstPersonFlag = x.Type,
|
||||
Renderer = relative,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user