public static string NodeReduce(this ModelModifier modifier) { var count = modifier.Model.Nodes.Count; var removeNames = new List <string>(); // ノードを削除する foreach (var node in modifier.Model.GetRemoveNodes()) { modifier.NodeRemove(node); removeNames.Add($"[{node.Name}]"); } // 削除されたノードを参照する頂点バッファを修正する foreach (var meshGroup in modifier.Model.MeshGroups) { var skin = meshGroup.Skin; if (skin != null && skin.Joints.Contains(null)) { foreach (var mesh in meshGroup.Meshes) { skin.FixBoneWeight(mesh.VertexBuffer.Joints, mesh.VertexBuffer.Weights); } } } var joined = string.Join("", removeNames); return($"NodeReduce: {count} => {modifier.Model.Nodes.Count}"); // return $"NodeReduce: {joined}"; }
/// <summary> // [Debug向け]secondaryを除去 /// </summary> public static void RemoveSecondary(this Model model) { var secondary = model.Nodes .FirstOrDefault(x => (x.Name == "secondary" || x.Name == "SpringBone") && x.Parent == model.Root && x.Children.Count == 0) ; if (secondary != null) { var mod = new ModelModifier(model); mod.NodeRemove(secondary); } }