3dsmax 蒙皮替换骨架

news2024/12/30 1:29:46

需求

本文描述部分来源于 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:
        suffix
    Returns:

    """
    skin_modifier = object_node.modifiers[rt.name('skin')]
    rt.modPanel.setCurrentObject(skin_modifier)

    if not skin_modifier:
        print('Current Object has No Skin Modifier')
        return

    skinned_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 mesh
    rt.skinUtils.ExtractSkinData(object_node)
    skin_mesh_name = 'SkinData_' + object_node.name
    skin_mesh_node = rt.getNodeByName(skin_mesh_name)

    # remove all bone in current skin modifier
    n = 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 weight
    custom_bone_lst = list()
    for bone_index, bone_name in bone_name_lst:
        custom_bone_name = prefix + bone_name + suffix
        custom_bone_node = rt.getNodeByName(custom_bone_name)
        custom_bone_lst.append(custom_bone_node)
        custom_bone_node.name = bone_name
        rt.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_name
    for custom_bone_node in custom_bone_lst:
        custom_bone_node.name = prefix + custom_bone_node.name + suffix

    # remove skin data mesh
    rt.delete(skin_mesh_node)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

maven打包时显示无效jdk版本

1、配置当前项目所需的Jdk版本 2、与当前项目指定的jdk版本相同 3、与当前项目指定的jdk版本相同 4、与当前项目指定的jdk版本相同 5、指定主项目启动时的vm配置与当前项目所需版本相同

手写Spring:第18章-数据类型转换工厂设计实现

文章目录 一、目标:数据类型转换工厂二、设计:数据类型转换工厂三、实现:数据类型转换工厂3.1 工程结构3.2 数据类型转换工厂类图3.3 定义类型转换接口3.3.1 类型转换处理接口3.3.2 类型转换工厂3.3.3 通用类型转换接口3.3.4 类型转换注册接口…

共筑安全防线|与安全狗相约2023年国家网络安全宣传周

在《关于网络安全和信息化工作重要指示》里 “坚持筑牢国家网络安全屏障”被提及 网络安全的重要性再次被重申 实际上 在“十四五”数字经济发展规划及“二十大”上 网络安全也被多次强调 “网络安全”不再简单停留在字面意思上 它成为囊括 你我个人隐私安全、信息安全 …

Linux:LVS (NAT群集搭建)

模拟环境 外网入口服务器 外网 192.168.8.88 内网ip 192.168.254.4 web1 服务器 ip 192.168.254.1 网关: 192.168.254.4 web2 服务器 ip 192.168.254.2 网关: 192.168.254.4 共享存储服务器 ip 192.168.254.3 介绍 访问 外网192.16…

方案:TSINGSEEE青犀AI智能分析网关森林防火智慧监管平台方案

一、方案背景 森林是地球上最重要的生态系统之一,对环境、气候、水循环和空气质量具有重要影响。森林火灾会造成巨大的经济损失,具有发生面广、突发性强、破坏性大、危险性高、处置扑救特别困难等特点,严重危及人民生命财产和森林资源安全&a…

video标签自动播放音视频并绘制波形图

html中的<video>标签可以用来播放常见的音视频格式&#xff0c;支持的格式包括:MP3、Ogg、WAV、AAC、MP4、WebM、AVI等&#xff0c;当然支持的格式也和浏览器和操作系统有关。这里以一个可以自动播放音视频并绘制波形图的页面为例说明一下<video>标签的用法。 vid…

NPM使用技巧

NPM使用技巧 前言技巧全局模块位置PowerShell报错安装模块冲突 NPM介绍NPM命令使用方法基本命令模块命令查看模块运行命令镜像管理 常用模块rimrafyarn 前言 本文包含NodeJS中NPM包管理器的使用技巧&#xff0c;具体内容包含NPM介绍、NPM命令、常用模块等内容&#xff0c;还包…

Android开发常见问题:字符串乱码问题

前言 最近的项目里遇到了字符串乱码的问题&#xff0c;记录一下研究心得。 正文 一、byte数组如何保存字符串 通常情况下&#xff0c;数据的传输和读取都是通过socket&#xff0c;读取socket需要使用byte数组&#xff0c;例如要写入一个字符串到socket中&#xff0c;我们需…

Redis-带你深入学习数据类型Hash【面试重点】

目录 1、基础知识 2、相关命令 2.1、hset、hget 2.2、hexists 2.3、hdel 2.4、hkeys、hvals、hgetall 2.5、hmget、hmset 2.6、hlen 2.7、hsetNX 2.8、Hincrby、Hincrbyfloat 3、应用场景-缓存 4、缓存方式对比 1、基础知识 redis中存储数据本身就是以键值对的形式…

华为OD机试 - 真正的密码 - 数据结构list(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路具体解题思路&#xff1a; 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#…

智慧商城项目

智慧商城 - 授课大纲 接口文档&#xff1a;https://apifox.com/apidoc/shared-12ab6b18-adc2-444c-ad11-0e60f5693f66/doc-2221080 演示地址&#xff1a;http://cba.itlike.com/public/mweb/#/ 01. 项目功能演示 1.明确功能模块 启动准备好的代码&#xff0c;演示移动端面…

视频用二维码怎么分享?扫码看视频在线制作方法

怎么将本地的视频生成二维码呢&#xff1f;相信很多小伙伴经常会储存许多自己喜欢的视频&#xff0c;那么如果想要给多人分享时&#xff0c;一个个发送会比较麻烦&#xff0c;那么将视频生成二维码就是提高分享效率的一种方式。制作视频二维码的方法也很简单&#xff0c;使用二…

【python】PySide中QMessageBox设置中文按钮及使用

PyQt、PySide使用QMessageBox的时候会发现按钮都是英文的&#xff0c;对于中文的应用软件来说会降低使用体验。本文将以问答对话框为例&#xff0c;介绍如何设置中文按钮&#xff0c;以及如何使用。 实验环境 本文实验环境为&#xff1a;Windows 10&#xff0c;Python 3.8&am…

UI基础——UGUI源码架构

文章目录 如何阅读源码UGUI源码整体架构源码整体类图事件模块EventSystem类图点击事件时序图 参考&#xff1a; 如何阅读源码 阅读源码是提高编程能力和技术水平的重要途径之一。以下是一些有效的阅读源码的方法&#xff1a; 确定目标&#xff1a;&#xff08;1&#xff09;了…

Linux系统中实现便捷运维管理和远程访问的1Panel部署方法解析

文章目录 前言 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、文件管理、数据库管理、容器管理等下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理…

【C刷题训练营】第三讲(c语言入门训练)

前言: 大家好&#xff0c;我决定日后逐渐更新c刷题训练营的内容&#xff0c;或许能帮到入门c语言的初学者&#xff0c;如果文章有错误&#xff0c;非常欢迎你的指正&#xff01; &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&…

如何做见效快的SEO推广?

答案是&#xff1a;见效快的推广可以选择谷歌SEO谷歌Ads双向运营。 关键词研究 对于任何SEO推广&#xff0c;一切始于准确的关键词研究。 使用专业工具 利用如SEMrush、Ahrefs等工具&#xff0c;找到与你业务相关&#xff0c;但竞争程度较低的关键词。 分析竞争对手 查看…

Mysql性能调优——1.深入理解Mysql索引数据结构和算法

本系列所说的Mysql性能调优&#xff0c;主要是针对开发者在实际环境中的sql调优&#xff0c;代码层面上的优化。不涉及到mysql底层代码的调优。 我们知道&#xff0c;一个mysql数据表&#xff0c;数据量小的时候&#xff0c;可能简单的查询耗时不会太久&#xff0c;性能也可以…

孤儿僵尸守护进程的简单理解

孤儿进程&#xff1a; 一个父进程退出&#xff0c;而它的一个或多个子进程还在运行&#xff0c;那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养&#xff0c;并由init进程对它们完成状态收集工作。 如何模仿一个孤儿进程&#xff1a; 答案是&#xff1a; kill 父…

Docker基础入门:Docker基础总结篇--超详细

Docker基础入门&#xff1a;Docker基础总结篇[docker3要素、docker安装配置、容器使用、镜像管理发布] 一、Docker 3要素1.1、镜像&#xff08;Image&#xff09;1.2、容器&#xff08;Container&#xff09;1.3、仓库&#xff08;Registry&#xff09;1.4 、总结 二、Docker安…