![c9427936321b83c33b8ad32174df96c7.png](https://i-blog.csdnimg.cn/blog_migrate/40f260ef9393da08cedcb1516b6e1f7a.jpeg)
郭一璞 发自 云凹非寺
量子位 报道 | 公众号 QbitAI
一只3D的狗头卡通角色:
![8a48c37b89c4449f82cd4b5c2dc74e82.png](https://i-blog.csdnimg.cn/blog_migrate/fe987866031a627d1917519cf6f72767.png)
给它画上骨架:
![f5f07c8563e4326175717319d8362204.png](https://i-blog.csdnimg.cn/blog_migrate/bc0eb55b4357eac208515bbaec7d7350.png)
诶?就可以动起来了:
![9b636bedc748f67b10f5421789230d2f.png](https://i-blog.csdnimg.cn/blog_migrate/efee86cc80bfb0d0fc20bd29e11e0061.png)
同样的方法,也可以让3D小男孩动起来:
![64a6291c3704fe4a0cb063c316d44b46.gif](https://i-blog.csdnimg.cn/blog_migrate/f4c42c64062229b7203f0e97ac4cf0d1.gif)
让3D高挑大姐姐动起来:
![2d42ac8ffd4e7530919f5a1bdc0e89d5.gif](https://i-blog.csdnimg.cn/blog_migrate/33477babbe3d8e3f6609eb34ca1a80fd.gif)
让3D猫猫活蹦乱跳:
![8378ccfd794314f7121efa1b436e8c7c.png](https://i-blog.csdnimg.cn/blog_migrate/cf6bc55d0280442a9fde57302a5739c7.png)
总之,一切原本应该只是静态的3D角色模型,不管是人是动物,还是自然界不存在的卡通创意角色,都能见皮知骨,由静到动:
![43edabfee67b333c13ec3e06446bc7fe.png](https://i-blog.csdnimg.cn/blog_migrate/63b1d9ab3b2e168ec70202311b5f9c05.png)
![be66339e401c37c9a5d62db49eb40c0a.png](https://i-blog.csdnimg.cn/blog_migrate/db1dbb44ffe24cc2e504c1e778368aaf.png)
![117f9f85cb620d78a2804794c3716001.png](https://i-blog.csdnimg.cn/blog_migrate/d5be6e6b9e14b86b7f0eee7f9b661088.png)
连影子都配合的非常好!
只知道脱骨鸡、脱骨鸭掌,没想到,还有人反着来。
这一切,都是一个叫做RigNet的AI自动完成的。只要设计好角色的3D动态外形,它就可以自动预测角色骨架,预估骨架外皮肤的重量,生成角色运动的图像。
这可比人工制作动画方便多了,要是能用在3D动画或者3D游戏制作上,以后就不用担心拖更或跳票了呢。
这项研究也登上了SIGGRAPH 2020,作者来自马萨诸塞大学阿默斯特分校和多伦多大学。
![ae748ec3dd2cc7886e6eacb70600cef3.png](https://i-blog.csdnimg.cn/blog_migrate/32a42d9d48c3e3085738b9e288659051.png)
多网络合作实现
AI让3D角色动起来,需要经历两个步骤:先是确定骨骼的位置,再预测骨架之外皮肤的重量。
骨骼是有关节、会转动的,因此AI预测的时候也要先找到那些关节。
先用一个GMEdgeNet图神经网络,预测顶点向相邻关节的位移。
![a64b99519e065961d80854daa2551c9a.png](https://i-blog.csdnimg.cn/blog_migrate/f39f2d699f32a4e8000bffe15c1684ba.png)
这样,骨头大概长在什么地方就出来了。
同时,还准备了另一个GMEdgeNet,参数和前面的那个不太一样,用它来预测网格上的注意力函数,图上越红的位置,注意力就越强。
![f6e020b5ab5e3966b11d5c88eeb0c238.png](https://i-blog.csdnimg.cn/blog_migrate/8c9995829d16e3c8c5db1860176225c1.png)
划重点,GMEdgeNet长这样,后面还要用:
![e56b52d2ac931ec0bb92b756bc9fbc53.png](https://i-blog.csdnimg.cn/blog_migrate/e0ce342fcba193ad022a23eff70356c8.png)
![2c2ad0e664e555cbac562eb8f81f42fc.png](https://i-blog.csdnimg.cn/blog_migrate/403935f738408ceabd19c8cdd194f017.png)
做了这样的准备,就可以用聚类模型,找到关节的位置。
![9797b02930a49587c48144d8e1ad3664.gif](https://i-blog.csdnimg.cn/blog_migrate/5b65c38e099caa095f0934b00f590947.gif)
关节的分布和生物学意义上的脊椎动物并不完全一致,不过鉴于只是追求外在的运动效果,并不是做骷髅装饰品,因此有大致的位置来表示身体弯曲的节点就OK了。
现在找到了关节,我们再把关节连起来,给它装上骨头。
![7235b714c69d835de56076e707fb9af7.png](https://i-blog.csdnimg.cn/blog_migrate/16212d6ab1eac99a7a6d89edd0dfb05a.png)
装骨头用的是BoneNet模型和最小生成树算法,BoneNet负责预测每两个关节的连接里,哪些连接才是正确的骨头的位置,符合一般动物的身体结构。
BoneNet模型长这样:
![bf72581292ecaa7d04984b10930d0515.png](https://i-blog.csdnimg.cn/blog_migrate/58217367f926e657c4f95f1bc684528b.png)
同时,还要给这个3D角色找到“根关节”,就是下图的小红点,可以理解为“重心”,需要用到RootNet模型。
![9621f986cec8d78c0133d54341b9029a.png](https://i-blog.csdnimg.cn/blog_migrate/1f24ddc7b997559f0cc7d040a370ac35.png)
这真是“刻骨铭心”啊。
好的,现在关节、骨架和重心都有了,需要让这幅骨头感知一下皮肉的重量,它才能运动得符合自然规律也符合人们的观感。
![7c4f79496994a8fad720a2acbcec2948.png](https://i-blog.csdnimg.cn/blog_migrate/55c913f3f59d55053223c4ddfac616aa.png)
![42c706337261ad6436d26f121e168888.png](https://i-blog.csdnimg.cn/blog_migrate/cf89cd48996141a0d3345320b2f04681.png)
给皮肉“称重”的任务,还是GMEdgeNet模型来做,它来预测骨架蒙皮权重。
传送门
项目主页:https://zhan-xu.github.io/rig-net/
论文地址:https://people.cs.umass.edu/~zhanxu/papers/RigNet.pdf
GitHub:https://github.com/zhan-xu/RigNet
—完—
@量子位 · 追踪AI技术和产品新动态
深有感触的朋友,欢迎赞同、关注、分享三连վ'ᴗ' ի ❤