Skip to content

Commit

Permalink
vrm-1.0 import 時の index check. node.mesh あるか?
Browse files Browse the repository at this point in the history
  • Loading branch information
ousttrue committed Sep 26, 2024
1 parent badc8a5 commit c369439
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 14 deletions.
22 changes: 16 additions & 6 deletions Assets/VRM10/Runtime/IO/ExpressionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
21 changes: 13 additions & 8 deletions Assets/VRM10/Runtime/IO/Vrm10Importer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,10 @@ VRM10Expression GetOrLoadExpression(in SubAssetKey key, ExpressionPreset preset,

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
Expand Down Expand Up @@ -492,15 +495,17 @@ async Task<VRM10Object> LoadVrmAsync(IAwaitCaller awaitCaller, UniGLTF.Extension
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
{
// default 値を割り当てる
Expand Down

0 comments on commit c369439

Please sign in to comment.