当前位置: 首页 > article >正文

MagicArticulate: Make Your 3D Models Articulation-Ready 论文解读

目录

一、概述

二、Articulation-XL

1、数据集收集与过滤

2、父子层级关系

三、MagicArticulate

1、自回归骨架生成

2、预测蒙皮权重

四、实验


一、概述

        该论文提出MagicArticulate框架,旨在将静态的3D模型自动转换为支持动画的articulation-ready资产。

        以往的3D模型都是静态模型,转换成可连接的关节模型需要专业人员手动放置骨骼,定义联合层次结构。而后续的自动骨架提取方法,对于复杂的形状很难实现,或者依赖于固定的模版,有很差的通用性。

        主要贡献:

(1)第一个包含over 33k的高质量关节注解数据集

(2)一个两阶段的框架,用于有效地处理骨架的生成和蒙皮权重预测

(3)在现实世界的动画pipeline中展示出SOTA性能

        下图用Rodin Gen-1和Tripo 2.0生成input mesh,Maya Software Renderer渲染的骨骼和蒙皮

二、Articulation-XL

1、数据集收集与过滤

        Articulation-XL是MagicArticulate模型后续使用到的数据集,因为考虑到传统数据集缺乏对动画所需骨骼和权重的标注,所以建立了一个新的数据集。

        数据来源:Objaverse-XL(原有1000w+个3D models)中筛选出大约33万个候选模型,覆盖人物、动物、工具、机械等可动画的物体类别。

        初步过滤:基于骨架和网格相似性去除重复数据,排除仅单个skeleton结构的模型,并过滤over 100 skeletons的数据。

        基于VLM过滤:由于经过初步过滤还有一些无法评定的骨骼(如下图),所以进行基于VLM的过滤。基于VLM从四个角度来渲染每个对象的skeleton,并利用GPT-4o根据特定标准评估骨架质量(比如该骨骼是否合理),之后使用Pyrended4形成了四视图渲染、3D模型以及骨架。形成了Articulation-XL。其中每个模型的骨骼数量在2-100,关节数3-101个。

        类别标注:利用了一个VLM进行类别标注,人类相关的最多。

2、父子层级关系

        根据自动化骨骼生成工具进行初步生成,比如选择几何中心为根关节,利用最小生成树/层次聚类方法来确定父子关节。

        另外通过VLM来进行过滤,如果VLM判定层次不合理,则重新进行骨骼标注。

        还可以加以物理仿真,测试是否存在网格变形异常(撕裂或者穿透),来判定层次存在问题。

        注意Articulation-XL数据集中没有蒙皮权重,是后面预测的。

三、MagicArticulate

1、自回归骨架生成

        相较于以往的固定模版的方法,MagicArticulate使用一个自回归生成框架来处理3D对象的固有结构多样性。

        那为什么要建立上面的数据集呢,当然是与自回归生成的skeleton进行比较啦,做损失函数用的。

        目的:根据一个3D mesh\mathcal{M}生成skeleton\mathcal{S}。骨架由两个部分组成,一组关节J定义空间位置,骨连接B决定拓扑结构,就是骨骼上的点和线,最终得到一个条件概率p(\mathcal{S|M})=p(\mathbf{J,B}|\mathcal{M})

        自回归网络原理如下:

(1)利用rodin Gen1生成3D mesh作为输入,利用点云编码器(PointNet++)提取3D模型的点云信息(全局特征,作为骨骼的条件),一共采样8192个点。

在这一部分论文提到了MeshAnything和MeshAnythingv2模型,前者是文本/图像生成3D网格的框架,结合了扩散模型和可微渲染技术,后者在其基础上,支持更复杂的网格编辑和细节生成。

(2)利用Shape Encoder(论文中用的是Michelangelo预训练的encoder模型,很多模型都是encoder+transformer的也合理)将原始三维点云转换为适合transformer处理的固定长度的shape token部分,用于后续自回归的生成,最后接一个【BOS】作为结尾。

(3)骨骼结构序列化

        对Articulation-XL数据集中的骨骼进行标记化,每一个skeleton标记成一个序列,每一个骨骼由两个连接的关节定义(6个坐标,两组xyz)。

        标记过程:为了保证一致和离散的表示,将输入mesh和相应的skeleton缩放并转换成一个单位cube [-0.5,0.5]^3,来确保空间对齐,之后将归一化的关节坐标映射到128^3的空间中(就是放大数值),从而得到一共b个skeleton总共序列长度为6b。

        层次标记顺序:按照层次顺序(前序遍历)将关节排列为序列。

        坐标顺序:对于每一个关节的空间坐标按照z-y-x升序排序。

        将骨骼标记后,作为自回归的transformer的输入skeleton token部分,最后接一个【EOS】作为结尾。

        下图Hierachical sequence ordering第二列为实际的标记方式,即从根节点往子节点放射式标记。

        相比于MeshGPT,我们基于数据集的分析省略了VQ-VAE的compress step,为什么呢?因为数据集模型比较简单,本身数据量不多,压缩只会造成伪影。

(4)自回归架构部分

        注意到,AR Transformer部分最终输出只有skeleton的结构,shape tokens只是作为输入的参考信息。

        自回归架构使用decoder-only的架构,OPT-350M模型,这个模型在序列建模中效果较好。,并利用交叉损失来进行监督。

                                                L_{pred}=CE(\mathbf{T,\hat{T}})

        其中两个不同的T就是GT和pred的骨骼序列。

2、预测蒙皮权重

(1)为什么要用蒙皮权重?

        蒙皮权重(Skinning Weights)定义了模型中每个顶点(Vertex)受哪些骨骼关节(Joints)的影响,以及影响的程度。当骨骼运动时,顶点位置根据权重和关节变换动态调整,从而实现平滑的形变。

        想象你穿着连帽卫衣做「抬起手臂」的动作:

  • 肘部弯曲时:卫衣袖子在手肘处的褶皱会紧贴肘关节移动(受肘关节控制)。
  • 靠近肩膀的袖子部分:既会被肩膀抬起带动,也会被肘部弯曲轻微牵拉(同时受肩和肘影响)。
    这里的「布料如何跟随身体运动」就是蒙皮权重在3D模型中的体现。

        假设骨骼有一个顶点A靠近肘部,顶点B靠近肩膀。那么顶点A可能受到肘关节权重=0.9,肩关节权重=0.1,因为顶点A主要随肘部移动,形成明显褶皱。而顶点B可能受到肘关节权重=0.3,肩关节权重=0.7。

(2)为什么需要人工智能预测?

        手动调节需要艺术家的调整,依赖经验又耗时。

(3)预测蒙皮权重流程:

        体积测地距离计算预处理+Functional Diffusion

(4)体积测地距离计算预处理

        目的:量化顶点与关节之间的几何关联性(非表面距离)

        方法:将模型体素化为三维网格。使用Dijkstra算法在体素空间内计算顶点到各关节的最短路径距离。
        ​示例:对于管道内部的顶点,体积测地距离可穿透管壁直接连接关节,而表面测地距离会沿管道外壁绕行

(4)Functional Diffusion预测网络

        核心思想:

        将权重视为连续函数:蒙皮权重是顶点到关节的连续影响函数,而非离散分配。扩散模型通过逐步去噪,生成平滑且符合几何规律的权重分布。

        体积测地距离先验:在三维体积空间(而非表面)计算顶点到关节的测地距离,更准确建模空心结构。

        网络架构:DDPM,但是应该提前编码了

        公式解释:可以将这个扩散模型定义为f_0,其实就是所有顶点的蒙皮权重分布状态。那么f_t(x)就是时间步t下,顶点x的蒙皮权重分布。

         然后目的就是训练一个denoiser D:

四、实验

        对比实验和效果。

        左侧为使用ModelsResource数据集的效果,右侧为Articulation-XL数据集的效果,这应该是在不同数据集上的泛化性

 

         后续的都是对比GVB和RigNet的量化信息。

        这个就是第一步采集点信息的数量的对比。 

        对于预测蒙皮权重中,是否使用测地线,归一化,和shape features(有吗这个,我忘了在哪里了) 

 

相关项目:MagicArticulate: Make Your 3D Models Articulation-Ready

相关论文:https://arxiv.org/pdf/2502.12135​​​​​​


http://www.kler.cn/a/573033.html

相关文章:

  • SSE 和 WebSocket 的对比
  • 如何在Spring Boot中读取JAR包内resources目录下文件
  • 【封闭式】论文写作技巧--集中学习+集中写作
  • 高并发应用分层架构
  • 【MySQL】索引|作用|底层数据结构|常见问题
  • unity6 打包webgl注意事项
  • sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)
  • 【Linux】http 协议
  • 如何通过卷积神经网络(CNN)有效地提取图像的局部特征,并在CIFAR-10数据集上实现高精度的分类?
  • FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)
  • 数据结构与算法:堆排序
  • Android 14 - HDMI_CEC架构分析
  • 本地部署类似 ChatGPT 的大模型:基于 Ollama + Open-WebUI
  • XTDrone+Mavros+Gazebo仿真——配置与控制不同的无人机
  • html中几个符号的转义和还原
  • LeetCode 79: 单词搜索 (Word Search)
  • C++11中atomic
  • 【SpringBoot】一文讲懂什么是scanBasePackages
  • [MySQL初阶]MySQL(3)表的约束
  • 华为最新OD机试真题-计算堆栈中的剩余数字-Python-OD统一考试(E卷)