概述
一,用物理模型进行高效的水模拟
一句话概括:基本网格的几何波动+动态法线贴图。
1.1现状
1,快速傅里叶FFT在大中尺寸栅格取得逼真效果,并能适用于顶点shader和像素shader
2,能基于体素(Voxel)对简化的Navier-Stokes方程求解
1.2gpu水模拟目前的改进
1,顶点着色器,
(1)四个正弦波相加,可以计算水面的高度和方位
(2)三个Gerstner波可以计算水面高度
2,像素着色器
周期波函数加和,来创建动态的平铺(tiling)凹凸贴图,从而获得水面细节
1.2正弦近似值的加和
需要运行两个表面模拟:(1)表面网格的几何波动(2)网格上法线图的扰动
由简单的正弦函数波叠加得到一个连续函数。这个连续函数可以描述水面上所有点的高度和方向。
如果在顶点水平位置对函数取样,则可以使网格细分形成连续水面。
类似,如果在纹理空间中,对近似正弦叠加的发现取样,通过rtt,可以产生表面的法线图。
为每帧渲染法线图,允许有限数量的正弦波相互独立运行,可以大大提高渲染的逼真度。
水纹理的波纹好坏决定着模拟的逼真度,波纹表面的几何波动提供了呈现纹理的精细框架结构。
波的选择:波长,振幅,速度,方向。所有波的总表面是正弦波的叠加。Wi(x,y,t)=Ai*sin(Di(x,y)*yi+t*ki
为了提供场景动力学的变量,将在约束中随机产生这些波参数。随着时间的变化,不断将一个波淡出,再以一组不同的参数将其淡入。这些参数是相关的。
法线是副法线和切线的叉积 。副法线是对x求偏导,切线是对y求偏导。在表面上的三维位置p是p(x,y,t)=(x,y,H(x,y,t))。
几何波数量限制为4个。分为方向波和圆形波。方向波每个Di是波寿命常数。对于圆形波,方向必须在每个顶点计算,它是从波中心Ci到顶点的规范化向量。Di(x,y) = [ ((x,y)-Ci)/|(x,y)-Ci|].
对于大的水体,是水吹动产生模型,用方向波。对于较小的池塘中的水,产生波的原因不是由于风,用圆形波。
海水建模用Gerstner波函数,可以提供一些表面的微妙运动,顶点朝着每个浪头移动形成更尖的峰,在表面上浪头更尖。
最后
以上就是害怕缘分为你收集整理的第1章 用物理模型进行高效的水模拟的全部内容,希望文章能够帮你解决第1章 用物理模型进行高效的水模拟所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复