第一讲:数值积分基础

2022-04-06  本文已影响0人  离原春草

现代物理,本质上只包含几何与材料两块的内容。几何描述的是物件的空间结构,对于给定的几何结构,不同的材料对于外界的反应是不同的。现代物理,不论是刚体软体流体,甚至是量子力学,本质上就是为了将这两种内容分开。

计算机动画,本质上是一种视觉上的体验,通过视觉暂留效应用离散的图片模拟出连续的动画效果。

最早的动画可以追溯到公元前三千年,人们发现的一个陶罐上面通过手绘多个图片,将多个图片串联起来就构成了一只山羊跳起来吃树叶的动画,而这种通过序列帧模拟连续运动的方式一直持续到早期的游戏制作,甚至今天2D游戏还依然大量使用这类动画技术。

一些3D游戏中的角色的动作目前基本上是通过骨骼蒙皮实现,这种动画着眼于大体的肢体动作,数据量少,通过堆人力的方式可以得到很好的效果,但是对于头发飘动、衣服的褶皱与抖动等效果由于数据量过大则是无法通过这种方式实现,这类动画我们称之为secondary fact,因此我们需要一种自动化的方法或者技术来实现对secondary fact的模拟与计算,而这就是这门课的意义与目的。

要想实现自动创造动画的目的,我们就需要遵循一套最基本的最好的规则,这就是所谓的第一性原理(即抛开所有的杂项,只聚焦在最关键的部分上),而最好的规则就是基于物理的方法来创造计算机动画,这是因为基于物理原理的算法输出的结果是自然的真实的,能够让人信服的。

现在的计算机动画最主要的内容就包括如下三块:

  1. 刚体模拟
  2. 软体模拟
  3. 流体模拟

当然,我们经常在游戏中看到一些其他效果,如雪、破碎、沙子等,这些现象其实可以拆分成上述三种模拟的一种或者多种,或者说前面的三种模拟就是物理动画模拟的基向量。

1. 动画模拟趋势观察分析

所有的技术最终都是为如下三个目的中的一个或者多个服务的:

  1. 提高产品质量、增强效果
  2. 降低成本、增强效率
  3. 扩大应用范围与边界

从学术界来看,计算机动画的趋势有三种:

  1. 不同scale的动画模拟,以及不同物理现象融合在一起的动画效果
  2. 神经网络+机器学习带动下的基于数据驱动的动画模拟
  3. 多态(不仅仅局限于视觉,还会扩展到触觉以及声音等现象的)模拟

1.1 多scale模拟

可以参考Siggraph 2008年的一篇文章:Wavelet Turbulence[Kim et al. 2008]。这篇文章通过将一个复杂的动画效果拆解成多个不同scale的简单动画效果,从而以较低的消耗近似模拟出一个高复杂度的动画效果:

另外,Siggraph 2018年的一篇文章(Chen et al. Siggraph Asia 2018)也使用了这种方式实现了对沙子(Granular Material)的模拟:

上图中,左边是将每颗沙子都单独建模进行模拟的效果,右边是红色沙子当成流体进行模拟,蓝色沙子还是单独建模进行模拟,两者效果看起来差不多,不过右边的方案计算效率有6.8倍的提升。

除此之外,Siggraph 2021年的一篇文章(Huang et al. Siggraph Asia 2021)也是基于这个思想实现的:大尺度的海洋用简化的方案模拟,船跟海洋交互产生的浪花则是使用较为精细的方案模拟。

UCLA的一个组用这种方案实现了对船在海洋中运动的交互效果。

除了上面之外,还有一些其他的工作也是基于这种想法做出来的,这里就不一一罗列了。

1.2 数据驱动方法

基于数据驱动的方案介绍之前,先来看下一种十分古老的动画模拟方案:Model Reduction。翻译一下,就是模型简化,即将一个复杂的模型分解成若干种简单的模型再进行模拟的方案,图形学中的球谐函数SH其实也是基于这种方式来完成对光照的模拟的。

上图中的公式中D就是模拟盘子形变各点受力情况的项,在这一项中,由于需要模拟的点非常多,因此是一个十分高纬度的向量,而u则是这个向量的一个表示,而通常对这个的求解是通过将高纬度的u转换为低纬度的q来实现的,其中一个关键问题是,如何找到完成这个转换的矩阵U,而这个矩阵的求解则是通过数据驱动(如神经网络,机器学习等)的方法实现的。

Siggraph 2013的一篇文章通过暴力罗列所有动画输入与输出效果映射数据的方式实现了对衣服布料的实时模拟,上面的第二张图就是对应于不同的布料状态在不同的输入下的输出分支,可以理解为布料的整体模拟效果的分支,这个方案的问题在于需要消耗较高的内存(据说是几百兆)。

除此之外,GDC中以及Google的科学家也在摸索通过机器学习以及神经网络来通过当前帧的数据模拟输出下一帧的动画数据的方法,不过总的来说,在当前的技术水平上,这种方式可能还仅仅只能停留在学术层面,无法做到工业应用。

直接通过机器学习与神经网络根据当前帧数据输出下一帧数据的方法目前还面临很多问题,比如稳定性,比如last mile problem等,可能在十几帧中可以得到不错的表现,但是在继续模拟下去得到的结果就是满天乱飞,或者可能99%的情况下可以得到正确的效果,但是1%的可能会导致错误的结果,而这1%的错误可能导致后面的模拟就完全是错误的,无法回到正确结果,这显然也是无法接受的。

不过,基于数据的方法虽然在现在还不能直接用来计算最终的效果,但是却可以用于对传统的方案中的某一步或者某几步进行加速或者提升。

前面说过,通过model reduction可以实现对复杂物理效果的模拟,但是这种模拟只能模拟给定采样点的形变,相邻区域的数据则是通过插值求得,上面这里给出的了一种方法,通过神经网络在给定的Reduction Model下,可以实现任意点的变换,通过这种方式可以移除此前采样点离散导致的精度问题。

1.3 多态模拟

体感模拟

触觉对时间的敏感度高于视觉,需要做到至少1000 fps才能达到可以接受的地步,因此需要较高的性能。

声音模拟

上面展示的是通过计算机模拟出场景交互中的声音(比如盘子掉在地上发出的声音)。

如上图所示,声音的模拟需要完成如上两步的计算,分别是物件交互的震动模拟,以及震动转换为声波的传播的计算。顺便提一下,声音模拟计算性能要求还要高于体感模拟,每秒中要生成44100个数据点(与人耳的感知频率范围有关,根据奈奎斯特采样定律得到)。

2. 整个课程概览

这门课是郑昌熙教授在哥伦比亚大学为大四或者研一的学生所开设的计算机动画课程衍生而来,对课程感兴趣的同学可以去搜寻相应的材料。

整个课程会分为如下四个部分:

  1. 数值积分基础
  2. 刚体动力学
  3. 软体动力学
  4. 流体动力学
上一篇下一篇

猜你喜欢

热点阅读