3dsmax 蒙皮替换骨架

需求

本文描述部分来源于 TAZORN,最后附上Python实现

  • 保留蒙皮信息,将骨骼替换成新的骨架
  • 模型M上的Skin目前指定的是骨架A,在蒙皮信息不变的情况 下更换成骨架B

在这里插入图片描述
替换的操作需要用到 SkinUtilities 工具


手动进行骨骼替换的方法

  1. Snapshot原有模型,添加新的Skin以及指定新的骨架,
  2. 从原蒙皮模型上 导出Skin信息(通过SkinUtilities工具导出)
  3. 选择 新的蒙皮模型 以及Skin信息,进行骨架匹配和转换

步骤1,将原有模型Snapshot一份,添加Skin,赋予新的骨架
在这里插入图片描述


步骤2,导出原有模型的蒙皮信息

选择原始的蒙皮模型,导出蒙皮信息

需要用到SkinUtilities (默认在Utilties的More… 里面)
在这里插入图片描述
点ExtractSkinDataToMesh,会导出一个前缀 为 SkinData_ 的模型,里面记录着蒙皮信息
在这里插入图片描述


步骤3,通过SkinUtilities转换蒙皮信息

  • 将新旧蒙皮模型对齐

  • 选择新的蒙皮模型 , 再选择前缀为 SkinData_ 的模型,执行 ImportSkinDataFromMesh
    在这里插入图片描述

  • 会出现一个对话框,用于匹配 原蒙皮的骨骼 对应 新蒙皮的骨骼,设置好对应的骨骼
    在这里插入图片描述

  • 使用 MatchByFace 匹配
    在这里插入图片描述

  • 点OK完成蒙皮信息转换


  • 之后就可以删除 原蒙皮模型,前缀SkinData_的模型,以及原骨架
  • 剩下的新的蒙皮模型,新的骨架
    在这里插入图片描述

Maxscript方案

整个操作实现并不难

1,Snapshot原始模型,添加 Skin修改器,添加新的一套骨架

2,通过SkinUtilities 来导出原始模型蒙皮数据,然后与通过骨骼对应将蒙皮信息转换到新模型上

3,最后删除旧模型以及临时数据

蒙皮转换的入手点是 skinUtils 这个接口

showinterface skinUtils

会用到的函数其实就是导出 和导入,和手动操作中的一样

可以看到 导入函数带有一个 ImportSkinDataNoDialog,不显示窗口的调用

所以整个实现过程 稍有麻烦的地方在于骨骼名称的 匹配上,但是在工具中有一个自动匹配的功能

就是说如果两套骨架中的 骨骼名称相同,可以自动进行匹配,免去手动指定的麻烦

在这里插入图片描述

Python 实现

def copy_skin(object_node, prefix, suffix):"""Args:object_node:prefix:suffixReturns:"""skin_modifier = object_node.modifiers[rt.name('skin')]rt.modPanel.setCurrentObject(skin_modifier)if not skin_modifier:print('Current Object has No Skin Modifier')returnskinned_bone_count = rt.skinOps.GetNumberBones(skin_modifier)bone_name_lst = [(i + 1, rt.skinOps.GetBoneName(skin_modifier, i + 1, 0))for i in range(skinned_bone_count)]# extract skin weight meshrt.skinUtils.ExtractSkinData(object_node)skin_mesh_name = 'SkinData_' + object_node.nameskin_mesh_node = rt.getNodeByName(skin_mesh_name)# remove all bone in current skin modifiern = rt.skinOps.GetNumberBones(skin_modifier)while n > 0:rt.skinOps.SelectBone(skin_modifier, 1)rt.skinOps.removeBone(skin_modifier, 1)n = n - 1# add custom bone and copy weightcustom_bone_lst = list()for bone_index, bone_name in bone_name_lst:custom_bone_name = prefix + bone_name + suffixcustom_bone_node = rt.getNodeByName(custom_bone_name)custom_bone_lst.append(custom_bone_node)custom_bone_node.name = bone_namert.skinOps.addBone(skin_modifier, custom_bone_node, bone_index)rt.select(object_node)rt.selectMore(skin_mesh_node)rt.skinUtils.ImportSkinDataNoDialog(True, False, False, False, False,1.0, 0)# recover bone_namefor custom_bone_node in custom_bone_lst:custom_bone_node.name = prefix + custom_bone_node.name + suffix# remove skin data meshrt.delete(skin_mesh_node)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/124718.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模--时间序列预测模型的七种经典算法的Python实现

目录 1.开篇版权提示 2.时间序列介绍 3.项目数据处理 4.项目数据划分可视化 5.时间预测序列经典算法1:朴素法 6.时间预测序列经典算法2: 简单平均法 7.时间预测序列经典算法3:移动平均法 8.时间预测序列经典算法4:简单指…

2023年数学建模国赛A 定日镜场的优化设计思路分析

构建以新能源为主体的新型电力系统,是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件,其底座由…

Python中处理异常和错误

作为一种强大且灵活的编程语言,Python 提供了许多机制来处理程序运行过程中可能出现的异常和错误。本文将详细介绍如何在 Python 中以“优雅、高效”的方式进行异常处理,并提供实用技巧帮助开发者更好地应对各种情况。无论您是初学者还是有经验的开发人员…

深度学习推荐系统(七)NFM模型及其在Criteo数据集上的应用

深度学习推荐系统(七)NFM模型及其在Criteo数据集上的应用 1 NFM模型原理及其实现 1.1 NFM模型原理 无论是 FM,还是其改进模型FFM,归根结底是⼀个⼆阶特征交叉的模型。受组合爆炸问题的困扰,FM 几乎不可能扩展到三阶以上,这就不…

Python Flask Web开发二:数据库创建和使用

前言 数据库在 Web 开发中起着至关重要的作用。它不仅提供了数据的持久化存储和管理功能,还支持数据的关联和连接,保证数据的一致性和安全性。通过合理地设计和使用数据库,开发人员可以构建强大、可靠的 Web 应用程序,满足用户的…

Matlab图像处理-

有些时候,直接利用图像的灰度直方图选择阈值不是非常直观,这时,可以利用图像三个通道的直方图来进行图像分割,操作步骤如上文所示,下图为原始图片。 下图为三通道直方图。 下图将三个通道的直方图会绘制到一个图表上&a…

idea意外退出mac

目录 问题描述 解决过程 问题描述 mac上的idea我很久没用了,之前用的时候还是发布新版的开源项目,这几天再用的时候,就出现了idea意外退出的问题,我上网查找了很久,对于我的问题都没有很好的解决。 解决过程 在寻求…

yapi以及gitlab的容器化部署

yapi部署: https://blog.csdn.net/Chimengmeng/article/details/132074922 gitlab部署 使用docker-compose.yml version: 3 services: web: image: twang2218/gitlab-ce-zh:10.5 restart: always hostname: 192.168.xx.xx environm…

Redis的数据持久化方案

目录 前言 RDB方式 概述: 1.RDB手动 2.RDB自动 RDB优缺点 AOF方式 概述 AOF写数据的三种策略 AOF相关配置 AOF重写 AOF重写方式 手动重写 bgrewriteaof 自动重写 总结 前言 Redis是一个内存型数据库,也就是说如果不将内存中的…

stable diffusion实践操作-大模型介绍-SDXL1大模型

系列文章目录 大家移步下面链接中,里面详细介绍了stable diffusion的原理,操作等(本文只是下面系列文章的一个写作模板)。 stable diffusion实践操作 提示:写完文章后,目录可以自动生成,如何生…

Mysql 高阶语句

高阶语句 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理; 例如只取 10 条数据、对查询结果进行排序或分组等,来获取想要有用的数据 无非还是对于MySQL —— 增、删、改、查 的操作 升降序 SELECT…

Promise难懂?一篇文章让你轻松驾驭

✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强&a…

Vue框架学习记录之环境安装与第一个Vue项目

Node.js的安装与配置 首先是Node.js的安装,安装十分简单,只需要去官网下载安装包后,一路next即可。 Node.js是一个开源的、跨平台的 JavaScript 运行时环境 下载地址,有两个版本,一个是推荐的,一个是最新…

PostgreSQL PG15 新功能 PG_WALINSPECT

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 liuaustin3 (…

容器资料: Docker和Singularity

容器资料 Docker和Singularity Docker比较适合测试: 环境适配,每种环境对应一个容器。Docker需要host宿主机上运行Docker服务(root权限),隔离性很高,但会牺牲性能,对GPU环境支持不好(需要安装NVIDIAN公司的插件才能把GPU暴露给container) Sigularity可…

实时测试工具 Visual Studio 扩展 NCrunch 4.18 Crack

NCrunch Visual Studio 扩展 .NET 的终极实时测试工具 在编码时查看实时测试结果和内联指标。 下载v4.18 发布于 2023 年 7 月 17 日 跳过视频至: 代码覆盖率 指标 分布式处理 配置 发动机模式 Visual Studio 自动并发测试 NCrunch 是一个完全自动化的测试扩展&a…

stc单片机外部中断+EC11编码器实现计数功能

stc单片机外部中断+EC11编码器实现计数功能 🎬 串口输出测试效果: 📑EC11编码器原理图: 🍁EC11编码器输出信号说明: 📗检测说明: 📑以EC11-A信号作为一个时钟基准信号,检测到EC11-A之后,再去判断B的动作,一个相对的电平。当检测到A信号下降沿触发后,检测…

Linux系统中驱动面试分享

​ 1、驱动程序分为几类? 字符设备驱动 块设备驱动 网络设备驱动 2、字符设备驱动需要实现的接口通常有哪些 open、close、read、write、ioctl等接口。 3、主设备号与次设备号的作用 主设备号和次设备号是用来标识系统中的设备的,主设备号用来标识…

高级IO---五种IO模型多路转接之Select

文章目录 五种IO模型1、阻塞IO2、非阻塞IO3、信号驱动IO4、多路转接IO5、异步IO总结IO 同步与异步阻塞与非阻塞设置非阻塞利用fcntl接口实现一个设置非阻塞的函数 多路转接之Selectselect函数原型fd_set结构返回值 socket就绪条件读就绪写就绪 select的特点select使用示例Util.…

转载: 又拍云【PrismCDN 】低延时的P2P HLS直播技术实践

低延时的P2P HLS直播技术实践本文是第二部分《PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘》低延时的P2P HLS直播技术实践 [首页 > Open Talk NO.41 | 2018 音视频技术沙龙深圳站 > 低延时 WebP2P 直播技术实践https://opentalk-blog.b0.upaiyun.com/prod/2018-0…