Пример #1
0
        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}";
        }
Пример #2
0
        /// <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);
            }
        }