2021-12-25-影片技术分析Pre-基于物理的动画-影视制作中的FX流程-byLLY

注:本篇由同组同学LLY编写,本人代完成格式化 电影制作流程中的物理模拟 视效制作流程 在了解物理模拟在视效中的流程之前,我们需要先了解一下整个视效制作的大框架。 FXPipeline 特效(FX)部门简述 动力学和模拟技术是数字特效的核心组成部分。从广义上讲,它们试图在数字领域复制真实世界的物理特征,这样就可以通过让软件计算适当的结果而不需要关键帧动画来实现真实的行为和交互。 这可能是因为实际拍摄的话,成本过高(可能需要多个模型来允许重新拍摄),无法提供所需的可控性与可指导性,或者新一代监管人员对数字技术比传统的实际效果更满意。不管是什么原因,自20世纪90年代初以来,实际效果越来越被数字所取代,以至于模拟物体、流体和火的复杂相互作用现在已司空见惯。Dante的Peak(1997)使用简单的粒子系统对模型和微缩模型进行数字增强,同时使用真实拍摄,2012(2009)模拟了整个数字城市的大规模破坏。 虽然模拟技术通常与毁灭和混乱联系在一起,包括破裂和变形物体、爆炸、火灾、烟雾和液体,但它们也被用来给角色穿衣服、造型和移动头发,以及移动皮肤下的肌肉。可以预期,通过模拟比通过关键帧更容易实现真实的复杂交互。 3D动画中特效的种类 毛发模拟 Hair and Fur Simulation 模拟系统创建头发或毛发的模拟,不仅对环境因素作出反应,还对其附着角色头部或身体的运动作出反应。这是一个极其复杂的模拟,除了高预算项目以外,通常没有条件获取这样的资源。 刚体&柔体模拟 Body Simulation 包括刚体模拟和柔体模拟。刚体用于模拟木材、石头、玻璃,或者其他形变不大的物体。刚体模拟处理的是物体间的相互作用、碰撞、破碎等效果。柔体模拟包括模拟刚性较低的材料,如布料、皮肤、土壤、身体组织等其他任何可能弯曲、扭曲活波动的材料。 流体模拟 Fluid Simulation 流体模拟不仅包括水或液体,还包括气体、凝胶,或任何其他流体运动的物质。包括浓雾、明胶、燕麦等其他类似的物质。流体模拟器通常基于真实世界流体物理中涉及的方程进行计算。 粒子模拟 Particle Simulation 粒子模拟器在空间中创建点,这些点具有分散的特征,如雨、烟、灰尘、群集、人群、前进的军队、飞溅的火花等等。艺术家将行为和视觉属性指定给粒子,使其外观和移动与艺术家想要的一样。与其他类型模拟相同,艺术家定义了基于物理的参数,如重力、风力等,粒子会做出相应的反应,创造出令人惊讶的逼真的效果,如暴风雪、迁徙的蜜蜂、攻击的鸟类,或者任何所需要的效果。 我们今天主要从粒子、刚体、流体三个方面来讲,基本上从原理上涵盖了上述所有类型物体的模拟。 FX部门流程与分工 RnD:Research and Development 研发部门。负责创新研发解决棘手问题的新方案,不断发展现有的能力。根据画面需求,对学术界现有的算法进行调研,寻找、整合可用于生产的解决方案。 TD:Techinal Director 技术指导。TD是科学家与艺术家之间的桥梁,将研发部门开发的算法编写成艺术家能够上手使用的工具。他们使爆炸、浓烟、激流等效果更加容易使用。FX TD构建和测试工具,然后将其整合到VFX工作流程的制作pipeline当中。所有TD都是问题解决者。每个项目都有其复杂的地方,他们确保效果一致并且令人信服。 FX Artist FX 艺术家。艺术家们使用TD创建出来的工具,通过自身的艺术造诣和导演的要求,为单个镜头创建效果。他们是视觉效果的生产者。 FX 工作流程 因为今天演讲的主题是模拟相关,所以我们关注的FX部门的流程将不涉及到特效评估、数据统计、特效整理、测试、预演等细化工作。 FX部门流程 首先,导演提出视效需求给视效总监,由视效总监判断现阶段视效能否实现。若不能实现,则交给RnD部门研发该效果,并准备可行备用方案。若可以实现,则将其交给视效制片规划制作方案。当RnD研发好算法后,将算法交给TD。TD询问艺术家的工作习惯、预期希望可以调整的方面等需求,编程、制作成实现容易,并为艺术家暴露出可修改的参数。在制作阶段,视效制片将相应的特效镜头派发给FX部门,相应的镜头将被派发给不同的FX艺术家。FX艺术家在制作时会收到来自其他部门的模型文件、跟踪数据、关键帧动画等信息,进行特效的制作。其中,每一个部门都有相应的组长,会对艺术家所制作的镜头进行评估和审核。全部制作完成的特效镜头,会经过各个监管的层层审核与反馈迭代,最后给到剪辑进行素材的回插。

2021-12-05-影片技术分析Pre-基于物理的动画-刚体系统-byLLY

注:本篇由同组同学LLY编写,本人代完成格式化 刚体 在物理学里,刚体是一种形变为0,或者形变可以忽略的固体。理想刚体在运动中和受到力的作用后,形状和大小不变,而且内部各点的相对位置不变。这种物体不可能实际存在,但固体通常可以假定为刚体。所以我们使用刚体来对固体进行模拟。在模拟时,我们通常使用Mesh来表示一个刚体。 刚体属性与表达 为了表示一个刚体,我们首先需要知道刚体的质心。在这里因为篇幅限制,我们不讨论质心是如何求得的,把质心当作已知量就可以了。质心有三维坐标 \(\mathbf x\) 和速度 \(\mathbf v\) 。其次,刚体还需要定向。选择一个相对刚体固定,原点在刚体质心的坐标系,称为局部坐标系。刚体及模拟的其他对象被放置在世界坐标系中。 质心 为了指定刚体在世界坐标系中的放置方式,我们指定其位置 \(\mathbf x\) 和 方向 \(R\) 。局部坐标为 \(\mathbf p_0\) 的点,世界坐标系下的坐标为:\(\mathbf p = \mathbf x + R \mathbf p_0\) 物体坐标系和世界坐标系 我们想知道这个点在世界坐标系中如何随时间变化,所以对时间进行求导,得出: $ = + R + p_0 $ 因为在局部坐标系中 $ $ = 0 , 所以得出: $ = v + p_0 $ 所以我们只需要求出每个时间的 \(\mathbf v\) 和 $ $ 就可以描述刚体随时间的运动状态了。 为了确定方向的变化率,需要引入角速度的概念。角速度通常表示为三维矢量。方向代表旋转轴,大小代表旋转的快慢,通常以弧度/秒为计量单位。 角速度 我们知道 \(R\) 的列是刚体坐标系的坐标轴的方向向量在世界坐标系下的坐标,因此, $ $ 由这些方向向量的导数组成: \[ \displaystyle\dot{R} = [\dot{\hat{u_x}}\quad\dot{\hat{u_y}}\quad\dot{\hat{u_z}} ] \] 于是 \(\dot{R}\) 就被简化成为求旋转矢量的导数的问题。旋转中心位置是 \(\mathbf x\) ,旋转点位置是 \(\mathbf p\) ,旋转中心到位置 \(\mathbf p\) 的向量为 \(r\) 。我们的目的是测定 \(r\) 的变化率。由于 \(\mathbf p\) 以角速度 \(\omega\) 旋转,所以其瞬时速度与 \(r\) 和 \(\omega\) 垂直。瞬时速度方向由 \(\omega\times r\) 表示,大小与向量积大小一致。于是我们可以得到: $ = r$...

2021-12-05-影片技术分析Pre-基于物理的动画-最新进展与应用

影视制作中的最新进展与应用 学术界发展动向 在讨论影视工业中物理模拟的最新方向之前,我们先看看学界这两年都在做什么——技术的发展顺序大部分情况下都是先从学术界开始的。 我整理出了近三年国际图形学顶级学术会议Siggraph发表的论文中,基于物理的动画方向的所有论文: Siggraph 2021 Revisiting Integration in the Material Point Method: A Scheme for Easier Separation and Less Dissipation 重新审视物质点法(MPM):更易分离、更少耗散的方法 Mechanics-Aware Deformation of Yarn Pattern Geometry 纱织物几何体的力学感知变形 Kelvin Transformations for Simulations on Infinite Domains 无限域模拟的开尔文变换 QuanTaichi: A Compiler for Quantized Simulations QuanTaichi:一种量化模拟编译器 A Unified Second-Order Accurate in Time MPM Formulation for Simulating Viscoelastic Liquids with Phase Change 相变粘弹性液体模拟的统一二阶时间精确MPM公式 Bijective and Coarse High-Order Tetrahedral Meshes 双射和粗高阶四面体网格 Physical validation of simulators in Computer Graphics: A new framework dedicated to slender elastic structures and frictional contact 计算机图形学模拟器的物理验证:一种细长弹性结构和摩擦接触的新型框架 Stream-Guided Smoke Simulations 流向烟雾模拟 Solid-Fluid Interaction with Surface-Tension-Dominant Contact 表面张力主导接触的固液相互作用 Fire in Paradise: Mesoscale Simulation of Wildfires 天堂之火:野火尺度模拟 Systematically Differentiating Parametric Discontinuities 系统区分参数不连续性 Thin-Film Smoothed Particle Hydrodynamics Fluid 薄膜平滑粒子流体动力学(SPH)流体 Clebsch Gauge Fluid Clebsch规范流体 Incompressible Flow Simulation on Vortex Segment Clouds 涡段云上的不可压缩流体 Codimensional Incremental Potential Contact 共维增量潜在接触(C-IPC) Intersection-free Rigid Body Dynamics 无交点刚体动力学 Medial IPC: Accelerated Incremental Potential Contact With Medial Elastics Medial IPC:结合Medial Elastics的IPC方法 High-order Differentiable Autoencoder for Nonlinear Model Reduction 非线性模型重建的高阶可微自动编码器 Fast Linking Numbers for Topology Verification 拓扑验证的快速链接数 of Loopy Structures 环状结构 Learning Contact Corrections for Handle-Based Subspace Dynamics 基于句柄的子空间动力学的接触修正学习 The Shape Matching Element Method: Direct Animation of Curved Surface Models 形状匹配元素方法:曲面模型的直接动画 GPU-Based Simulation of Cloth Wrinkles at Submillimeter Levels 基于 GPU 的亚毫米级布料皱纹模拟 Multiscale Cholesky Preconditioning for Ill-conditioned Problems 病态问题的多尺度Cholesky预处理 A Momentum-Conserving Implicit Material Point Method for Surface Tension with Contact Angles and Spatial Gradients 具有接触角和空间梯度的表面张力动量守恒隐式材料点法 SANM: A Symbolic Asymptotic Numerical Solver with Applications in Mesh Deformation SANM:网格变形中应用的符号渐近数值求解器 Learning Meaningful Controls for Fluids 流体有意义控制学习 Unified Particle System for Multiple-fluid Flow and Porous Material 多流体流动和多孔材料的统一粒子系统 Constrained Projective Dynamics: Real-time Simulation of Deformable Objects With Energy-momentum Conservation 约束投影动力学:能量-动量守恒的可形变物体的实时模拟 TOG:...

2021-12-05-影片技术分析Pre-基于物理的动画-流体系统

流体系统 最后,在相对简单的前两个部分介绍后,我们还是不得不面对一个需要更多数学的系统,流体。 流体与流体力学 首先第一个问题是什么是流体。流体的定义是在承受剪应力(物体在外力作用时,内部任一截面上会出现的相互作用力,“内力”)时将会发生连续变形的连续介质,包括气体和液体。 所有液体 所有气体 具备流动特征的固体:如沙丘 流体主要具备以下性质: 流动性(fluidity):流体间的分子作用力较小,难以保持一定的形状,在受到外界的作用力或能量不平衡时,流体会发生流动。 变形性(deformability):在受到剪切力持续作用时,与固体的微小变形或有限变形不同,流体产生程度很大的、甚至作用时间无限长的变形。 粘性(viscosity):相邻两层流体之间发生相对运动时,在两层流体的接触面会产生对于变形的抗力,与固体的摩擦力不同,这种抗力不与流体的变形大小有关,而与流体的变形速度正相关,这种抵抗变形的特性称为粘性。 正相关的形式: 线性相关 - 牛顿流体 \(\tau=\mu\dfrac{du}{dy}\) 非线性相关 - 非牛顿流体 \(\tau=\mu(T,p)\left(\dfrac{du}{dy}\right)^2\) 可压缩性(compressibility)/不可压缩性(incompressibility):在一定的温度下,单位压强增量引起的体积变化率定义为流体的压缩性系数(coefficients of compressibility),其值越大,流体越容易压缩,反之,不容易压缩。 在影视制作的物理模拟中,一般模拟的是不可压缩流体。 Navier-Stokes 方程 一般形式 \[ 动量方程\quad\displaystyle\underbrace{\frac{\mathrm D\mathbf u}{\mathrm Dt}}_{\frac{\partial\mathbf u}{\partial t}+\mathbf u\cdot\nabla\mathbf u}=\frac{1}{\rho}\nabla\cdot\underbrace\sigma_{应力加速度张量}+\mathbf g\\ 质量方程\quad\nabla\cdot\mathbf u=0 \] 不可压缩流体 Navier-Stokes 方程 \[ 动量方程\quad\displaystyle\overbrace{\underbrace{\frac{\partial\mathbf u}{\partial t}}_{非稳态加速度}+\underbrace{\mathbf u\cdot\nabla\mathbf u}_{对流加速度}}^{惯性加速度\frac{\mathrm D\mathbf u}{\mathrm Dt}}+\underbrace{\frac{1}{\rho}\nabla p}_{压强梯度}=\underbrace{\mathbf g}_{外力加速度}+\underbrace{\nu\nabla\cdot\nabla\mathbf u}_{粘滞力加速度(经常忽略)}\\ 质量方程\quad\nabla\cdot\mathbf u=0 \] 补充数学: \[ 哈密顿算子\quad\nabla=\left(\dfrac{\partial}{\partial x},\ \dfrac{\partial}{\partial y},\ \dfrac{\partial}{\partial z}\right)\quad\\ {\bf散度}\ \nabla\cdot \vec F\quad{\bf旋度}\ \nabla\times \vec F\ \\ 拉普拉斯算子\quad\Delta=\nabla\cdot\nabla=\nabla^2=\left(\dfrac{\partial}{\partial x},\ \dfrac{\partial}{\partial y},\ \dfrac{\partial}{\partial z}\right)^2\\ {\bf梯度}的{\bf散度}\ \Delta\vec F \]...

2021-11-23-影片技术分析Pre-基于物理的动画-粒子系统与基于粒子的模型

这节课开始我们将花两节课的时间从粒子、刚体、流体三种系统,来简要介绍一些基于物理的动画的基本原理与实现,并给大家展示一些具体的制作方法和成果。 粒子系统 基于粒子的模型是基于物理的动画的一个基础模型,是拉格朗日方法中最典型的一种。这里的粒子系统个人认为广义地来说就是基于粒子的模型,是以粒子视点对物理现象做点采样的所有动画系统,但业界我们往往狭义地认为其典型就是特指由发射器发射大规模粒子、通过外力驱动运动、渲染成具体的无定形形象的系统。我们这一章的陈述主要还是以典型的粒子系统为主,会拓展些基于粒子的、但并不一定称为粒子系统的模型。 粒子系统一般用来表现雨、雪、火、烟、尘、沙尘暴、烟花、水花、喷雾等等“无定形现象(Amorphous Phenomena[1])”,当然也包括我们常见的一些“非物理现象”,诸如哥斯拉的吐息、猩红女巫的魔法光效等等,这些非物理现象同样要通过我们的物理系统去驱动粒子来产生这些效果。 一个粒子 在开始讲粒子系统之前,我们还是要讲一下一个粒子的运动:粒子的运动只有位移——就如我们中学物理中常做的质点模型一样,对一个粒子而言,所需要的动力学参数仅有、位置、速度、加速度、受力、质量等。在这之中,质量将受力与加速度联系为同一个概念,位置的变化(位移)是速度的积分、速度的变化又是加速度的积分。而且与中学物理不同的是,这里的每一个量都是三维空间中的向量了。 那么在这里,我们就第一次涉及到了时间积分概念的应用,也就是我们上节课刚刚讲过的如何在时间离散系统里做积分。 我们用上图这样的近似积分方式,就能够表达粒子随着时间的运动。那么知道了如何描述一个粒子的运动,我们就能够描述一堆粒子的运动了——换言之,我们可以开始了解一个基本的粒子系统。 基本粒子系统 我们来了解一个基本的粒子系统。在一个基本粒子系统的模拟过程中,通常包含了生成、模拟、消失三个过程,再加上把模拟过程渲染出来的渲染环节,我们分别讲解。 粒子生成 粒子生成器 粒子生成字面含义就是粒子是怎样初始化的,怎样给大量的粒子赋予初始的参数。因此我们设计了“生成器”,或者也可以称为“发射器”。 从发射器的形状说起,我们一般有点发射、平面发射、三维表面发射三种。 点发射顾名思义就是从同一个位置发射所有粒子,方向上有朝单一矢量、全方向两种。 平面发射中,平面主要有圆盘平面和多边形(三角形)平面两种。 三维表面发射中,以模型表面为发射器,可以认为是多个多边形平面发射的组合;另一种是在体积内发射,即在一个区域内随即发射。 生成器分类 粒子生成的随机算法 我们想象,以相同的质量、速度、加速度、方向、位置等参数来初始化大量粒子会出现什么现象:所有粒子会以相同或平行的轨迹运动。所以我们这里需要使用随机算法来初始化粒子的参数、方向矢量、位置,也就是需要生成随机数、随机矢量和随机点三种数据类型。 随机数 —— 为了控制粒子形态,我们一般不会直接使用系统的 rand() 来产生均匀分布的随机数,这就涉及到随机分布的概念: 均匀分布:均匀分布即每一个数出现的概率是均等的,经典案例就是抛硬币。只有我们希望空间中充满随机的点运动时才会使用。 高斯分布 / 正态分布:概率密度函数 \(p(x)=\dfrac{1}{\sigma\sqrt{2\pi}}e^{\frac{(x-\mu)^2}{2\sigma^2}}\) (概率密度函数 PDF 指的是概率密度 - 数值,概率密度大家可以类比中学统计中的概率/区间宽度,区间宽度 -> 0) 利用高斯分布,我们就可以得到一个“大部分粒子以这个参数运动,少量随机发散”的结果,比如火花飞溅时,大部分火花都会溅射在一个区域范围内,有少量迸发到外面的样子。能够让我们更好地控制粒子的运动。 随机矢量:首先我们要了解如何生成一个均匀的球面分布,大家想象我们的地球上的任意一个点,做与球心的连线投影到赤道平面上得到长度 \(r\) ,与子午分割线成 \(\theta\) 角,那么我们只要随机 \(h=\sqrt{1-r^2}\) 和 \(\theta\) 两个值就能够得到随机矢量 \(\begin{bmatrix}r\cos\theta\\h\\r\sin\theta\end{bmatrix}\) ,经数学证明,球面上的点随 \(\theta\) 和 \(h\) 线性分布,因此,只要控制这两个随机数就可以控制球面的随机矢量。 同理我们可以得到控制下图两种:点向圆盘方向发射、圆盘发射时控制随机矢量的参数,分别是\(\theta \ \phi\) 和 \(\theta\ r\) 。也就是把随机向量转换成了两个随机数的问题。 随机点:三维空间中的一个点其实就是三个数,我们按照需要来生成三个随机数即可。当然也可以用一个随机矢量(两个随机数)+随机长度(一个随机数)的方式生成。随机点主要应用于表面发射的偏移和体积内发射。 粒子模拟 碰撞 在不考虑交互的情况下(后面会专门讨论),粒子在模拟过程中除了随着力场一步一步地迭代和人工控制之外的会产生剧变的现象就是碰撞了。粒子系统通常工作在含有模型的场景中,我们就需要考虑与模型的碰撞,其实也就是与一个个平面三角形的碰撞。问题在于,粒子是一个无体积的点,而粒子所处的位置又是离散的点,粒子恰好停在一个表面的概率微乎其微,那么我们如何判定碰撞而不是让粒子直接穿越表面呢?下面我们就会讲到。 碰撞主要分为两个步骤,分别是碰撞检测和碰撞响应。首先我们得发现产生了碰撞,在发现碰撞之后,就可以执行相应的碰撞响应,这里的响应可以是让粒子消失、吸附、飞出去各种,下面举例说最简单的反弹这种。 处理一个点与一个面的碰撞主要有Penalty(惩罚)和Impulse(冲击)两种思路: Penalty 碰撞检测:通过点与面的距离 \(\phi(x)\) 判断 碰撞响应:更新 \(f\) ,判定碰撞后的下一个时间步更新粒子状态...

2021-11-18-影片技术分析Pre-基于物理的动画-发展历史与基本概念

基于物理的动画/物理模拟 Physically Based Animation 今天我和李乐游给大家讲一下基于物理的动画这个题目。首先我们来解释一下这个题目,这个动画指的不是一部动画片的那个动画,是指在动画片/视效制作中的一个环节,也是计算机图形学的三个大方向之一:建模Modeling、动画Animation、渲染Rendering。也就是驱动我们的模型动起来的过程——那么怎样驱动我们的模型动起来呢。大家最熟悉的一种方式就是Key关键帧,比如大家建了一个肖翱的模型,要驱动我去运动,那自然是要把我绑定到骨骼上,对每个关节去打关键帧,比如把我的手十秒后挪到这里。但是呢,不是所有的动画都适合用关键帧来驱动,比如窗外雪花飘飘、一辆车跌落悬崖、瀑布飞流直下,这样的镜头如果用Key关键帧的方法去完成,那就不是Key我身上的几十个关节这么“容易”的事了。但这种物理现象往往是遵循物理规律的,我们想让他看起来真实,那么我们就可以用物理规律去驱动它运动;又或者是一个非自然的物理现象,我们也可以创造非自然的物理规律去驱动它运动。这样的动画方法我们称之为基于物理的动画,也称为物理模拟,也有人将模拟Simulation单独作为图形学的第四个方向。下面我们说到这两个词大家知道都是指同一个东西就行了。 那么基于物理的动画,在我们的电影中能做出什么样的效果呢,我们剪了一段经典影片中的Showreel给大家欣赏一下。然后我们将从发展历史、基本概念出发,介绍影视制作中的物理模拟制作流程、几种系统的算法原理与实现、展示一些我们自己制作的和经典影片中的基于物理的动画镜头,最后对物理模拟这项技术的未来再做一个分析和展望。 发展历史 1940年代和1950年代 基于物理的动画来源于计算机模拟技术。它的首次大规模开发是著名的曼哈顿计划中的一个重要部分。在第二次世界大战中,为了模拟核爆炸的过程,人们应用蒙特·卡罗方法用12个坚球模型进行了模拟。计算机模拟最初被作为其他的方面研究的补充,但当人们发现它的重要性之后,它便作为一门单独的课题被使用得相当广泛。 之后便逐渐应用于军事和制造业。但在很长一段时间内,计算机计算非常昂贵,通常只有军事会使用这项技术。 20世纪70年代和80年代初 计算机图像生成技术兴起,1972年,第一部计算机生成的动画《A Computer Animated Hand》诞生,其中的一部分在1976年的电影《未来世界》中出现。这是电影第一次使用计算机生成图像。1982年《星际迷航II:可汗之怒》中的“创世纪”片段被普遍认为是VFX和计算机图形学的里程碑。这个片段首次使用了粒子系统,用CG的形式表现了爆炸效果。它是SIGGRAPH军事研究和电影工业早期交叉的产物之一。 20世纪80年代初至90年代 20世纪80年代的技术进步使电脑比前几十年更便宜、功能更强,这促进了Xbox游戏等的兴起。1985年,任天堂发布了任天堂娱乐系统(NES),NES成为视频游戏史上最畅销的游戏机之一。20世纪90年代,随着模拟人生、命令与征服等游戏的发布,以及台式电脑的不断增强,电脑游戏变得越来越流行。 1993年,电影《侏罗纪公园》成为第一部广泛使用计算机生成图形的电影,将计算机模拟的模拟恐龙几乎无缝地融入到实景中,这一事件改变了电影业。1995年,《玩具总动员》是第一部只使用计算机生成图像的电影,1998年,《蚁哥正传》第一次在动画中使用流体模拟。到了21世纪,计算机生成图像成为电影特效的主要选择。 21世纪初至今 计算机图形学技术走向成熟,游戏和电影领域普遍使用基于物理的动画,在虚拟世界中模拟真实世界中物体之间的相互作用。 基本概念 讲完发展历史,我们要开始正式进入基于物理的动画的世界。我把影视制作中基于物理的动画的制作归结为:“在计算机系统中、建立一定的物理模型、模拟生成动画并渲染成画面”。那么我们就需要首先了解一些基本概念。 物理学的运动 在进入计算机之前,我们就需要把我们想要表现的画面、或者说想要模拟的现象,依据物理定律建构为物理模型。所以我们所有模拟首先要依赖于物理定律,由于目前影视制作的物理特效还很少涉及微观物理世界和超宏观物理世界(《蚁人2》、《星际穿越》这样的影片也仅仅是通过物理学家作为顾问来补齐一些“科幻设定”),所以我们使用的物理定律主要还是一般宏观视角的规律,如牛顿三大运动定律、各种守恒: 牛顿运动定律 第一定律 假若施加于某物体的外力为零,则该物体的运动速度不变(惯性定律)【力是改变物体运动状态的原因】 第二定律 \(F = ma\) 【核心】 第三定律 当两个物体相互作用于对方时,彼此施加于对方的力,其大小相等、方向相反(作用力与反作用力定律) 三大守恒 质量守恒 动量守恒 \(\dfrac{d}{dt}mv=0\Rightarrow mv={\bf constant}\) 【来源自牛二定律】 能量守恒 在力学模拟中常常体现为机械能守恒 \(\dfrac{1}{2}mv^2+mgh+\dfrac{1}{2}k\Delta x^2(\Delta x=\int adt)+\dots={\bf constant}\) 有了基本定律,我们就可以考虑要建构怎样的模型了。不同性质的物体,所形成的物理模型显然是不同的,典型的物体性质按材料分有刚体、软体、流体等等,针对不同的物体,我们有不同的物理模型,用各种系统去做模拟方法,第二节课我们就会说到其中一些代表性的模拟系统。 计算机的离散系统 计算机与真实的物理世界最大的不同在于离散与连续。真实世界是一个连续的世界,我手在空中划过,我可以任取无数个时间点、我的手所在的位置,我的手的运动轨迹上的每一个点都是存在的。而如果在计算机系统中,这就是不可能的,我的手在计算机中一定会有一个计算精度,导致大量的点是不存在的,我手的运动其实是一次次“瞬移”组合而成的。这种离散化体现在两个方面:空间上和时间上。 空间上的离散化 两种基本的观察视点 我们在观测一个物理现象时,一般有两种观察的方法:一种是盯着某个物体,观察物体的运动,视线随着物体走;一种是盯着某个区域,观察物体在这个区域的运动。到计算机中离散存储空间运动时,也需要用这两种观察方法:记录物体、把物体的状态信息存储在物体上,即拉格朗日视点;把空间网格化,记录某一位置是否有物体、物体的属性是什么,即欧拉视点(需要强调,这里的欧拉与前面的欧拉法解线性方程并不一样,我们伟大的数学、物理学家的名字可不能只用在一种地方啊)。 拉格朗日视点 欧拉视点 视效工作中常用的三种表达方法 我们再具体一点,在视效工作中,离散化一个物理系统通常有以下几种: 粒子 Particle 粒子就是把物体作为一个个“质点”的组合,假设还是观察挥手这个动作,那么把我的手当成一群点组成的点集(大家可以理解为细胞?或者我手上的所有分子?),追溯每一个点的位置、速度、加速度,对每一个点去迭代。这是一个很典型的拉格朗日视点方法。 物体网格 Mesh (粒子的复合体) 第二种大家应该是比较熟悉的。我们在雪松老师的建模课上、在MAYA中处理的大多数模型都是这种离散化方法。用一个个的面去组成我们的风车、无人机、甲壳虫,再如我的手。而我们建模课上,雪松老师无数次强调要用“四边面”来方便进一步细分曲面处理,但无论是四边面还是最终渲染管线中的三角面,都是由一个个的点组成的。我们在模拟迭代计算时,仍然考虑点的状态,因此这也是一种拉格朗日视点的方法。 空间网格/体素 Grid/Voxel 现在大家考虑把我手的运动的这个区域框成一个空间,把这个空间网格化,这个过程可以类比二维情况下的像素化,我们称为“体素”,以1mm*1mm*1mm的立方体作为一个体素来描述这个空间。我的手从左到右挥过这个空间,首先是左边的空间有物体存在,然后中间,最后右边。我们记录每一个体素上是否有物体、物体的运动速度、加速度等信息,来迭代。这种方法就是欧拉视点的方法了。 在后面我们的具体方法介绍中,大多数都使用的拉格朗日视点的方法,到流体部分会涉及到欧拉视点和两种视点混合的新型方法。 时间上的离散化 时间维度上,我们用“时间步”的概念来离散化我们的物理模型,每一次需要计算的“点”称为一个时间步。假定我们的时间步长是1/24s,那么我们就会对相应物理模型每1/24s做一次计算(这个1/24s是物理模型的1/24s,不是我计算花的时间,事实上计算一个时间步所花的时间一般要比时间步长长得多),例如我的手花了1s挥过,那么我只计算其中的24个点、我的手位于什么位置,最终组合成一个动画。...