五月三日更..
同学说这样写下去我之后论文答辩要被查重了怎么办...
五月二日更..
这个圈子实在是太小了,瞬间都被人认出来了。。
更新整个回答框架如下:
1.物理引擎中的布料 (5.1完结)
2.布料建模的一些方法
2.1 现实生活中布料的一些基本问题
2.2 常用的建模方法一览
2.3 几何方法
2.4 三种物理方法 (5月3日更新到这里)
2.5 一些新的模型,包括Yarn-Based Cloth Simulation
2.6 真实不止是因为物理,还有渲染相关
3.实际游戏中的布料
3.1 根本就是骗人的重复播放的帧动画的假布料
3.2 看起来真的好棒的使用物理引擎的布料制作流程
4. 其他
4.1 头发和布料的关系
4.2 一些参考书籍
/* 请不要随便转载 */
// ----------------------------------------------------------------------------
Milo的爱丽丝博文中已经非常详细地讲清楚了一个简单的头发物理系统是如何模拟的。
布料和头发在模拟过程中,早期使用的技术和物理模型基本上是类似的,都是对纤维结构的表现形式的一种抽象,某种程度上来说,布料的结构相对于稍微复杂一点。后来因为头发和布料各自独有的一些特点,逐渐细化。这里我简单描述一下布料模拟的一些历史和技术。
1. 物理引擎中的布料
对于现在的游戏开发来说,使用成熟的物理引擎可以非常简单的建立布料系统。目前被游戏开发者使用的最多的物理引擎包括Bullet, Physx/APEX, Havok都包含了功能非常强大的布料模拟。目前Havok物理引擎中的Cloth组件仍需要商业授权,下面的图片除Havok外来自各个SDK中Demo的截图,这些程序Demo可以非常方便的下载和编译得到。
图1 Bullet物理引擎中的SoftBody模拟的布料效果,图示表示5片随风飘动的布料(Bullet 2.82)
图2 Physx物理引擎中模拟布料和斗篷的效果,图示表示多个旗帜和一件斗篷(Physx 3.32)
图3 APEX制作出的服装效果,图示演示了走路的人身上衬衫和裤子的变化(APEX1.3.2)
图4 Havok Cloth制作出的舞女效果(图片来源Youtube视频)
对于普通的游戏开发者来说,只要引入了物理引擎,就可以很方便的规避布料实现的各种细节。包括布料的数据结构,布料各项参数的建模、碰撞检测及积分运算等等。同时,游戏策划和美术可以更加专注地使用商业引擎提供的工具可视化地调节需要的布料的艺术效果,满足所需的游戏性,对于程序员而言也显著地降低了工作量。
当然,物理引擎也有自己的局限性,当需要自定义一些特殊的布料效果时,部分物理引擎就显得捉襟见肘了。
2. 那游戏引擎内部是怎么做的呢
上一节的答案肯定是不能满足题主的。物理引擎为游戏开发者提供了一个黑盒子,只要游戏策划和美术设计好游戏角色身上布料相应的参数,丢给物理引擎,它就可以Duang的一下,加好各种特效。本节将会解释布料本身常用的物理模型、简单的碰撞检测内容。
注:本节和本节之后使用的图片都是自己照着一些论文和书籍手动画的,应该不会有版权问题的说…不过有可能有学术错误,欢迎指正。
2.1 现实生活中布料的复杂性
图5 不同布料的结构和纺织界对于布料的力学模型的简单建模
现实生活中的布料是非常复杂的,如图5上半部分所示。自珍妮纺织机改进之后,人类对于舒适和时尚的追求也是孜孜不倦。一匹成品布看上去、摸上去不尽相同,主要有三个方面的原因:
使用了不同的纤维:棉、麻、化纤……采用的不同的编织纹:平纹、斜纹、缎纹……
编织时采用了不同的参数:支数、针数……
纺织学家为了对纺织布料的可控,也建立了一些力学模型,最早可以追溯到1937年Peirce的模型[1],该模型其实就是一个剖面图。在此基础上,后续也有许多改进。这些基本的模型也启发了计算机图形学对于布料模拟相应的研究。
2.2 图形学布料仿真模型历史
图6 常见的几种布料模拟的模型
常见的布料模拟模型包括几何模型、弹簧质点模型、弹力模型和粒子模型。接下来我来简要解释一下各个模型的基本思想和适用场合,其中由于弹簧质点模型为现在游戏中的主流解决方案,我将会仔细地介绍其步骤和各项细节。
2.3 几何模型
1986年Weil在当年的Siggraph上发表了关于几何模型构建布料的方法[2]。这个方法将布料描述为由3D点阵构成的2D网格。整个算法步骤也简单,就不详细的讲了。大致的意思可以这样形象的理解(基本上是自己脑洞出来的理解,这样就可以一点都不涉及公式了,所以不见得准确
"╮( ̄▽ ̄"")╭"):
图7 两个钉子悬挂绳子
在墙上钉两个钉子,一根很长的绳子搭在两个钉子上,从两头开始分别放松这个绳子。我们可以把中间这一段想象成一块布料的侧视图(比如在学校操场的双杠上晒被子,如图8,把被子跨过两个双杠,然后从双杠两边把被子往中间放松)。这样的几何形状看起来就像一块自然舒展的布料,将这个模型放在三维空间中,假设有很多符合条件的钉子,我们将这些线段进行放松,然后让计算机通过一系列数学公式的迭代,就可以得到一块类似悬挂的布料的几何形状。
图8 双杠晒被子(图片来自网络),侧视图看起来如图7一样。
总的来说,这个方法不算是很精确,而且只能提供一个静态的悬挂形状。不过这是非常有用的,比如建模一块静态的布料,或者画画的时候画出一个具有动感的衣服、桌布的图片,这会是一个让人看起来感觉真实的思路。
2.4 物理模型
所谓物理模型,就是在模拟布料的时候,用到了基本的物理定律。主流的物理模型有图6中所示的另外三种:
弹力模型粒子模型
质点弹簧模型
2.4.1 弹力模型
弹力模型的想法非常简单,它是在1986年由Feynman提出的[3]。我们先可以想一想,为什么上面的几何模型最后的结果看起来像一块布或者绳子呢,这里面一定是物理规律在起着作用。高中时候学过化学的话就知道,在不违背泡利原理的情况下,核外电子总是尽量排布在能量最低的轨道上,电子也相应地处于稳定状态。我们身边的万事万物都想维持自己的稳定,让自己处于「极小能量」的状态,每个物体具有势能,当它的势能极低的时候,它的状态是稳定的。维稳总是神秘又让人着迷的话题:比如爹妈想喊你回家当公务员,这就产生了一定的饭碗势能,如果没有额外的能量输入,就只能往回滚了。又比如身边的同学都有女朋友,家里亲戚隔壁左右的小孩都结了婚,这就产生了一定的结婚势能……呃,扯远了。
作为一块愿望非常淳朴的布料,它的基本修养也是这个样子:无论是被穿在身上还是铺在桌上,它都想维护自己的稳定。那么布料里的势能该如何描述呢?弹力模型借助了经典牛顿力学里面的弹力理论,将布料的势能描述为包含一系列能量函数,包含布料的拉伸、弯曲、重力等等。将得到的公式进行求解,就可以得到布料在哪种状态下能量极低,这个解这就是这块布料看起来十分自然的样子时候的姿势。
2.4.2 粒子模型
= =先占坑码代码去了,回来再写。
(你们快点评论一下,有疑惑我就顺便改(ง •̀_•́)ง )
参考文献
[1] Peirce F T. Thegeometry of cloth structure[J]. J. Text. Inst., 1937, 28: T45.
[2] Weil, Jerry. "Thesynthesis of cloth objects." ACM Siggraph Computer Graphics 20.4 (1986):49-54.
[3] Feynman, Carl Richard.Modeling the appearance of cloth. Diss. Massachusetts Institute of Technology,1986.