:让 3D 衣服“活起来“的飘逸魔法)
写在最前面欢迎回来嘿小朋友又见面啦之前我们一起认识了好多 3D 动画的秘密骨骼层级角色身体里的骨头家谱蒙皮让皮肤跟着骨头动的魔法正向动力学FK和逆向动力学IK控制骨头的两种方法动画混合让动作丝滑切换的神奇技巧今天我们要学一个超级浪漫、超级飘逸的魔法布料模拟Cloth Simulation听到布料模拟你可能觉得有点陌生。但其实你在电影和游戏里早就见过它了那个飘逸的披风、那条随风摆动的裙子、那面飘扬的旗帜、那张铺在桌上的桌布……它们都是布料模拟的杰作今天讲完后你就会知道这些飘逸感是怎么来的啦准备好了吗我们出发第一章先来想想一个问题在讲布料模拟之前我先问你一个问题。你穿过裙子或者披风吗或者见过别人穿当你走路、转身、跳跃的时候裙子和披风会怎么样它们会飘起来、摆动、鼓起来对吧裙子摆来摆去披风迎风招展超级好看那么问题来了在 3D 游戏和电影里那些角色身上的衣服是怎么做到飘起来的呢让我们一起来思考一下。第二章最笨的方法你可能会想“很简单啊让动画师把衣服的每一帧都画出来不就行了”理论上是可以但是……让我们算一笔账。游戏一秒钟有 60 帧。也就是说一秒钟动画师要画 60 个衣服飘动的样子如果是一段 10 秒钟的动画要画 600 个而且每一次角色动作不同衣服的飘动方式都不一样角色向前跑裙子是一种飘法。角色向后跑裙子是另一种飘法。角色转圈裙子又是另一种飘法。角色跳跃裙子又是另一种飘法。每一种情况都要单独做动画**动画师要累死了**而且更可怕的是游戏里玩家可以自由控制角色玩家想怎么动就怎么动谁知道下一秒角色会做什么动作动画师根本不可能提前把所有情况都做好所以这个笨方法行不通我们需要一个超级聪明的方法。第三章聪明的想法让我们换个思路。既然我们没办法提前做好所有动画。那能不能让电脑自己算衣服怎么飘呢也就是说让电脑模拟真实世界里布料的物理规律自动算出每一帧衣服应该是什么样子这就是布料模拟是不是超级聪明但是问题来了电脑要怎么模拟布料呢布料看起来软软的、飘飘的规律好复杂啊别急让我们一步一步来。第四章把布料拆开来看要理解布料模拟我们先要做一件事用全新的眼光看布料你平时看一块布觉得它就是一整块对吧但是在电脑眼里布料是这样的布料是由无数个小颗粒用看不见的小绳子连在一起的啊什么意思让我们用生活中的例子来理解。例子一网兜你见过那种装水果的网兜吗它是用很多很多根绳子编织成的网。每根绳子的端点绳子打结的地方都是一个节点。绳子把节点连接起来。整个网兜就是由节点 绳子组成的电脑眼里的布料就和网兜差不多例子二蚊帐蚊帐也是一样它是由很多个小方格组成的。每个方格的角都是一个节点。把节点连起来就成了蚊帐在电脑眼里电脑会把一块布料拆成很多很多个小点节点。每个小点之间用看不见的**“小弹簧”**连接起来听起来是不是很神奇布料 一堆小点 一堆小弹簧第五章为什么是小弹簧你可能会问“为什么是小弹簧不是小绳子吗”好问题让我们做个对比绳子拉不长但是会变弯软软的弹簧可以拉长也会缩短有弹性布料的特性更像弹簧你试试用手拉一下你的衣服是不是会稍微变长松手后是不是会自己缩回去这就是弹性所以电脑用小弹簧来模拟布料超级符合真实情况而且弹簧还有一个超棒的特性它会自动让两个点保持合适的距离。太近了弹簧把它们推开。太远了弹簧把它们拉近。这样布料就能保持它原本的形状和大小不会突然变成一团也不会突然拉得超级长第六章让小点动起来好现在我们已经把布料拆成了小点 小弹簧。接下来怎么让它飘起来呢答案是给每个小点施加力什么是力力就是能让东西动起来或者改变方向的看不见的手。布料上的每个小点都会受到很多种力的影响力一重力重力就是地球往下拉的力。你跳一下是不是会落回地面就是因为重力布料上每个小点都会受到重力所以布料自然会下垂。如果只有重力布料就会软绵绵地垂下来像一块毛巾挂在那里。力二风力风吹过来会推动布料。风从哪边吹布料就往哪边飘。风大飘得厉害。风小轻轻摆动。这就是为什么旗帜会飘扬披风会迎风招展力三弹簧力刚才说的小弹簧会互相拉扯如果两个点离得太远弹簧会把它们拉近。如果两个点离得太近弹簧会把它们推开。这种力保证布料不会变形太厉害。力四碰撞力如果布料碰到了身体或者地面。布料就不能继续往下了身体和地面会挡住布料给它一个反向的力。这样布料就会搭在身体上或者铺在地面上综合起来每一帧电脑会计算每个小点受到的所有力。然后根据这些力算出小点该往哪里移动移动多远100 个小点每个都算一遍。1000 个小点每个都算一遍。10000 个小点每个都算一遍电脑超级快百分之一秒内就能算完所以你看到的就是流畅飘逸的布料动画第七章用床单理解布料模拟让我们用一个超级生动的例子来理解。想象一张铺在床上的床单。场景一床单铺在床上床单是平的铺在床上。每个小点都受到重力往下拉。但是床面挡住了床单给它向上的力。两个力平衡了所以床单安静地铺在床上。场景二你抓起床单的中间你用手抓起床单的中间往上提。中间被你抓着不能动。但是周围的部分还有重力往下垂所以床单变成了一个三角形的山这就是布料模拟会自动算出来的场景三你松开手床单掉下来中间一松开。重力开始作用床单慢慢落下来飘飘悠悠落到床上后因为弹簧力的作用。床单会摊开恢复成铺平的样子这整个过程电脑只需要计算每个小点受到的力 → 算出移动方向 → 更新位置 → 下一帧每一帧都这样算布料就飘起来了第八章布料模拟的超酷应用布料模拟在游戏和电影里有超多酷炫的应用让我们看几个经典例子。应用一飘逸的披风超级英雄电影里超人、蝙蝠侠的披风他们飞起来时披风迎风招展落下时披风慢慢垂下来跳跃时披风优雅地飘动这些都是布料模拟的功劳应用二长裙公主电影里的漂亮长裙转圈时裙子散开成一个圆跑步时裙子摆来摆去走路时裙子轻轻摇晃每一种动作下裙子的飘动都完全不一样这都是布料模拟实时计算出来的应用三飘扬的旗帜战争电影里的旗帜战场上风很大旗帜呼啦啦地飘风停了旗帜慢慢垂下来旗帜在游戏里是永远不重复的因为风是随机的每一秒旗帜的样子都不一样应用四被子和窗帘家居场景里的被子和窗帘被子盖在床上自然地搭在四周。窗帘挂在窗户上有点皱褶。风吹过来窗帘轻轻飘动让虚拟的房间看起来超级真实应用五船帆海盗游戏里的船帆风从一边吹来船帆鼓起来风变方向了船帆啪嗒一下变到另一边这种动态变化全部依靠布料模拟应用六头发你猜怎么着头发也可以用类似的方法模拟每一根头发都被看作一根长长的布条。或者用一根根小弹簧链条来模拟头发的飘动游戏角色甩头发的酷炫效果就是这么来的第九章布料模拟的翻车现场虽然布料模拟超级聪明但它也会出问题翻车一穿模最常见的问题布料穿过了身体比如裙子穿过了腿披风穿过了肩膀看起来像是布料消失在身体里了超级诡异解决办法让电脑更仔细地检测碰撞但这会变得更慢。翻车二拉得太长如果布料动得太快弹簧可能会来不及反应结果布料被拉得超级长像橡皮糖一样解决办法让计算更精细或者限制布料的最大拉伸长度。翻车三抖动有时候布料会莫名其妙地抖动像是在发抖或者抽筋这是因为各种力互相打架没有平衡好。解决办法让模拟更平滑避免突然的力变化。翻车四太慢布料模拟超级消耗电脑性能如果一个场景里有 100 个角色每个角色都穿着飘逸的衣服。电脑可能会算不过来游戏开始卡顿解决办法只对重要角色用高级布料模拟。远处的角色用简化版布料模拟。或者干脆预先做好动画翻车五超慢动作的诡异布料模拟在慢动作里会显得很奇怪因为现实中布料的飘动是有自己的节奏的。如果你把动画放得很慢布料看起来就像在水里飘一样不过有些电影会故意用这个效果看起来超级唯美第十章布料模拟的高级版本布料模拟还有一些更高级的形式高级版本一考虑布料的材质不同的布料有不同的特性丝绸轻飘飘的很容易飘动牛仔布硬邦邦的不太爱动皮革有点重慢慢摆动天鹅绒柔软厚重摆动幅度小高级的布料模拟会模拟这些特性让丝绸裙子飘得像云一样让牛仔裤动得像板子一样让皮夹克摆得很有质感高级版本二考虑布料的湿度湿了的布料和干的布料完全不同干衣服轻盈飘逸湿衣服沉重粘身游戏角色从水里出来后衣服会贴在身上超级真实高级版本三撕裂和切割更厉害的还能模拟布料被撕开刀剑砍过去布料真的会被切成两半被划开的口子会慢慢扩大战斗游戏里超级酷炫高级版本四和液体互动布料碰到水会吸水变重布料碰到油漆会染上颜色布料浸入水中会漂浮起来这些都是最最高级的布料模拟高级版本五AI 加速最近 AI 也来帮忙了AI 学习了几千个布料飘动的样子。然后能超级快地预测布料该怎么动比传统计算快 10 倍以上未来的游戏里所有衣服都会飘得超级自然第十一章让我们回顾一下布料模拟Cloth Simulation到底是什么我们用一句话总结布料模拟就是把布料拆成很多小点用小弹簧连起来然后模拟各种力重力、风力、弹簧力、碰撞力让电脑自动算出布料怎么飘它的关键概念✨ 节点布料上的小点✨ 弹簧连接小点的看不见的弹力线✨ 力重力、风力、弹簧力、碰撞力✨ 实时计算每一帧都重新算它的优点 让虚拟世界的衣服超级真实 应对各种动作永远不重复 飘逸感超级唯美 不需要动画师手动做每一帧它的缺点❌ 计算量超大消耗性能❌ 可能出现穿模问题❌ 调参不好会抖动❌ 远处角色不太适合用它的应用 超级英雄的披风 公主的长裙 战场的旗帜 海上的船帆 房间里的窗帘 角色的头发 撕裂效果 湿衣服效果没有布料模拟3D 角色的衣服就是僵硬的塑料壳那就太丑了第十二章今天的智慧亲爱的小朋友让我们一起总结一下今天学到的智慧。智慧一复杂的东西可以拆开看一块布料看起来复杂飘逸。但其实就是小点 弹簧 力复杂的东西拆开看就简单了。这个思维方式叫分解思维。下次你遇到一道很难的题试着把它拆成小步骤。每一步都简单加起来就解决了大问题智慧二模拟真实规律电脑不是记住所有布料的样子。而是模拟布料的物理规律。这样不管角色怎么动电脑都能自动算出布料的样子理解规律胜过记住答案。学数学也一样不要死记硬背公式。要理解公式为什么是这样的理解了规律遇到任何新题都能解智慧三飘逸来自约束布料能飘得这么美是因为有各种力的约束重力把它往下拉。弹簧让它保持形状。碰撞让它搭在身上。正是这些约束造就了美丽的飘动。生活也是一样如果完全没有规矩就会一团糟。如果规矩太严又会很僵硬。合适的约束能让生活变得既自由又有秩序。智慧四每一个细节都重要游戏里的衣服飘动看起来是小细节。但正是这些小细节让虚拟世界变得真实如果裙子是僵硬的、披风不会飘、旗帜不会动。游戏就完全没有质感了伟大的作品都是由无数小细节堆出来的。学习和做事也一样不要忽视小细节。每一个小细节都在为最终的效果加分最后的话亲爱的小朋友。下次当你玩游戏或者看电影时看到 超级英雄披风迎风招展 公主的长裙优雅旋转 战场上旗帜呼啦啦飘扬 海盗船的帆鼓起又松开 角色的长发随风飞舞 战斗中衣服被划破撕裂请记得那些飘逸唯美的画面背后是一套布料模拟系统在默默工作。是电脑每一帧都在飞速计算每个小点的位置。是无数个看不见的小弹簧在拉扯着每一寸布料。是重力、风力、弹簧力、碰撞力这些看不见的手在编织美丽。“FK 让我们控制骨头IK 让我们指挥末端动画混合让动作丝滑过渡布料模拟让世界飘逸唯美。”“没有布料模拟3D 世界就是僵硬的塑料模型有了布料模拟3D 世界就有了风的呼吸。”️“理解了布料模拟你就理解了’用规律创造美’的艺术。”✨那个游戏里披风飞扬的超级英雄那个电影里长裙翩翩的舞者那部动画里头发飘逸的少女。它们每一个飘逸的瞬间背后都是布料模拟在飞速计算、细致模拟、精心调和。都是把复杂拆成简单这个智慧的伟大胜利。下次你看到一件 3D 世界里的衣服飘动请想想它是怎么自动知道该怎么飘的那些飘逸的曲线背后藏着多少看不见的小弹簧这就是布料模拟的魔法。✨“在 3D 世界里骨骼是结构蒙皮是皮肤FK/IK 是控制动画混合是协调布料模拟是灵魂的飘动。”“它让虚拟世界有了风让数字角色有了优雅。”恭喜你又毕业了下次再见时我们一起去探索更多有趣的 3D 秘密✨