CG物理模拟系列
文章平均质量分 94
Tako小8君
90后,留日,Master毕业,初到杭州。擅长流体弹性体常用算法,熟悉OpenGL,OpenCV,Physics-Based Animation,ML,Unity,cocos2d.
Github:https://github.com/DonDracula/OpenGL_projects
展开
-
【CG物理模拟系列】流体模拟--粒子法之SPH(理论)
SPH法介绍SPH(Smoothed Particle Hydrodynamics)是早年银河系碰撞,天体形成等宇宙物理学模拟所使用的方法[Lucy1977],近年来被应用到流体,热等其他现象处理中。但是,由于是曾经宇宙物理学中常产生的压缩性流体问题的处理方法,并不适用于像水和流速较慢的空气(流速[Desbrun1996]将SPH法第一次应用于CG领域, 此后[原创 2016-05-31 13:46:30 · 5815 阅读 · 0 评论 -
【CG物理模拟系列】开篇:介绍(上)
本科时候学过游戏制作,经常使用过unity,cocos2d,unreal等游戏引擎,也学过一些计算机图形学知识(模型处理方向)。那时候觉得游戏制作还蛮简单的,只要有精美贴图,好模型,加上一些剧情,以及写写简单的算法就可以很快做出一款好游戏。然而某天玩 家用机游戏 的时候,忽然发现,有些游戏场景中发丝的飘动,衣服的随风摆动等效果竟然做的和真的一样,就一直好奇其实现原理。后来读了Master,进了Ph原创 2016-03-16 17:44:53 · 6223 阅读 · 0 评论 -
【CG物理模拟】风筝模拟
放风筝是一项起源于中国的传统娱乐项目,随后推广到世界各地。按作用可以分成节日庆典祝福风筝,体育竞技类,单纯的娱乐向风筝等。要想用计算机较为真实的模拟风筝运动,首先我们先得搞清楚风筝的受力情况。飞行原理如图(b)所示,风筝在天空中飞翔时所受的力为:风筝线的张力,尾巴的张力,自身的重力,以及风的作用力,这里我们分为升力和阻力。风筝飞行原理与飞机等类似,但是相比,因为本体非常薄,原创 2017-01-30 17:06:07 · 1757 阅读 · 1 评论 -
【CG物理模拟系列】粒子法--表面生成手法(下)
这一篇来说说 网格生成方法 中的 Screen Space Mesh 法。Screen Space Mesh 一般情况下,从隐函数曲面中提取出记载着表面数据的三角形网格面时,我们常用像Marching Cubes这样的方法,把3D空间划分成数个3D网格单元,然后在根据每个单元内生成网格面。与之相对,Screen Space Meshes(SSM)[1]则是指在2D屏幕空间中原创 2017-02-14 11:57:22 · 1107 阅读 · 0 评论 -
【CG物理模拟系列】流体模拟--粒子法之Position Based Fluids
Position Based Fluids我们使用粒子法进行流体模拟时,一个很重要的因素就是如何保持流体的非压缩性。非压缩性是指,随着流体的流动,密度在空间和时间上不发生变化,例如像水这样的流体,同时,与音速相比流速足够小的空气也可以当成非压缩性流体来考虑 (接近音速的时候,空气会发生压缩,音速飞机产生的冲击波也就是所谓的音爆便是由空气压缩产生的)。为了保持非压缩性,学者们提出了各种各样的原创 2017-02-21 14:45:25 · 3581 阅读 · 4 评论 -
【CG物理模拟系列】流体模拟--粒子法之SPH(实现)
邻域搜索的效率化SPH等粒子法,由于需要考虑到邻域粒子带来的影响,通常邻域搜索都会消耗大量时间。如果我们只是单纯的计算所有粒子组合的欧氏距离的话,计算时间只会呈指数增加。而空间分割法的出现,使邻域搜索实现了效率化。 空间分割法是一种,把希望检索到的物体存在的空间以格子等方式分隔开,只计算自身及相邻分割领域内包含物体的距离,可以使计算时间大幅减少的方法。空间分割法的处原创 2016-05-31 16:25:27 · 8316 阅读 · 8 评论 -
【CG物理模拟系列】粒子法--表面生成手法(上)
使用粒子法模拟水流时,水流表面生成方法主要分为以下两类。表面隐函数Muller的色彩函数 [1]Zhu and Bridson的方法 [2]Adams等的方法 [3]Anisotropic Kernel [4]Upsampling法 [5]生成网格(Mesh)Marching Cubes(MC) [6]Regularised marching tetra原创 2017-02-13 12:56:23 · 2038 阅读 · 0 评论 -
【CG物理模拟系列】流体模拟--粒子法之MPS法(理论)
MPS法 前面的文章里我们讲过SPH曾是为了处理压缩性流体问题而提出的方法,与之相对,这一篇来说说用粒子法处理非压缩性流体的研究方法--Moving Particle Semi-implicit (MPS)法(1)。 在MPS法中导入了粒子数密度,为了使这个密度保持不变,使用隐式方法求解泊松方程。 经此处理,使得流体整体具备了非压缩性。因为只有一部分使用了隐式解法,属于Semi-原创 2017-02-08 16:07:59 · 5939 阅读 · 0 评论 -
【物理模拟手法介绍】--有限差分法(FDM)和有限体积(FVM)
有限差分法简介有限差分法是,偏微分方程(PDE:Partial Differential Equation)的数值解法之一。先把计算空间按照有限size的空间大小进行分割,然后在每个小空间內的点(空间或边界的中心)上定义物理量(未知量)。根据这些未知量间值的有限差分,求分割后定义点间的距离等(差分商)的微分近似值,来求解PDE。例如,偏微分按照下式所示,求极限的方法来定义。原创 2017-02-11 13:23:53 · 5997 阅读 · 0 评论 -
【CG物理模拟系列】弹性体模拟--Position-based法之Shape Matching(代码实现)
Shape Matching法核心代码讲解这次讲讲Shape Matching 算法的具体代码实现。主要写在shape_matching.h和shape_matching.cpp两个文件中,以代码注释的形式进行讲解。之后是变量声明及函数声明,shape_matching.h头文件中主要定义了一个ShapeMatching类,这个类中包含了一个Cluster结构,用于区分顶点原创 2016-11-10 15:51:22 · 1706 阅读 · 0 评论 -
【CG物理模拟系列】弹性体模拟--Position-based法之Shape Matching
Position-based法Position-based法与传统的力学基础方法不同,根据构成物体的顶点等元素间的约束条件(Constraint),直接变更顶点的位置坐标的方法。 而传统的力学为基础的方法,则是按照加速度->速度->位置来计算,这样每一次积分产生的误差原创 2016-11-08 16:56:56 · 1647 阅读 · 0 评论 -
【CG物理模拟系列】流体模拟--粒子法之SPH(代码讲解)
WCSPH,PCISPH,IISPH等研究方法,其本质都是以非压缩性为目标,求解Navier-Stokes方程。本文以WCSPH为例,讲解下SPH方法代码的实现。代码讲解sph_type.h里定义几个vector函数类型#ifndef _SPHTYPE_H#define _SPHTYPE_Htypedef unsigned int uint;原创 2016-10-25 14:54:45 · 4930 阅读 · 7 评论 -
【CG物理模拟系列】流体模拟--粒子法之SPH法的加权函数计算
SPH法的加权函数Poly6 kernel[1]用于密度计算等。由于r只存在于2次项中,可以省去平方根的计算。梯度为,拉普拉斯算子为,如图所示,右侧坐标为拉普拉斯值Code Sample /*! * Poly6 kern原创 2016-06-06 20:04:10 · 1803 阅读 · 0 评论 -
【CG物理模拟系列】弹性体模拟--Mass Spring及绳子模拟
变形体中,变形后能恢复原状的物体称为弹性体,这种物理现象称为弹性变形;反之,发生变形后形状不能恢复的变形称为塑性变形,如黏土。通常的物体都会有弹性体和塑性体两种性质,一定力下发成弹性变形后能恢复原状,到达一定值则发成塑性变形。 本篇介绍一个弹性体模拟中最简单,也是曾经最常用的方法:质量弹簧系统(Mass spring system) 。 其应用根据维度可分为以下三种:原创 2016-06-07 16:40:59 · 5082 阅读 · 0 评论 -
【CG物理模拟系列】开篇:介绍(下)
上一篇介绍了CG物体模拟的定义,流程及种类,这一篇讲下物理模拟常用手法,物理模拟引擎,从物理模拟+3DCG程序的编写・到导出结果动画的处理顺序。物理模拟常用手法粒子法(Particle Method)有限差分法(FDM : Finite Difference Method)有限体积法(FVM : Finite Volume Method)有限元素法(FEM : Finite E原创 2017-02-01 14:26:32 · 1101 阅读 · 0 评论