杨帆,唐政磊
(山东港通工程管理咨询有限公司)
由于计算机软件、硬件性能的提高和网络功能的增强,使得很多困难的算法和很多图形学上的难点都可以由计算机来实现,因此运用全新的科技手段将海洋流场的可视化变为可能。流体的运动是一个非常复杂的过程,为了能够尽可能详细的了解流体的运动规律,需要限定一些客观因素并使用诸多方法,其中包括数学表达式等手法去描述其中可能的运动规律。“数字化海洋”伴随“数字地球”的提出应运而生,同时“数字化海洋”是“数字地球”理论和技术在海洋工程领域的体现和再创新[1-2]。然而面对求解数学表达式得到的大量数据,科学计算可视化正是将数据信息转化成图像、图形信息的重要手段。对于海洋流场的可视化研究可以更好的掌握海洋的规律,这对我们建设海洋强国有十分重要的意义[3]。
基于UE4引擎,同时应用多种不同的数据处理方法,将多元化的数据整理成为可理解的信息,足以达到“数字海洋”的系统信息需求,以此作为基础,本论文主要针对海洋中海浪模拟为起点,依据海洋数据时空模型,借由UE4引擎设计模拟海洋海浪效果以海洋可编程特效来实现海洋海浪从生成到消亡的全过程。
目前我们能够获得的海洋数据格式多种多样,类型繁杂。本次论述主要会涉及的控件数据模型为场(Field)模型。场模型在二维或者三维空间中被看作是连续变化的数据,场模型的数据主要是用来驱动海洋水体的模拟表现形态,最终模拟的数据给到UE4引擎当中进行可视化模拟。针对文中对于海洋中海浪的模拟过程,为了能够真实的反映海洋数据的动态、多维度、多源等特征,同时也要适应海洋现象仿真和可视化分析的需求,采用海洋时空数据模型来表达。其中包括海洋数据的处理、海洋数据可视化和海洋数据分离等操作,每一个工作节点都可能会派生出新的海洋特征数据,甚至重新生成海洋特征数据。重新生成或者派生出的新特征数据对于原有数据无疑是一种扩充,甚至可以直接服务于海洋,本次基于UE4引擎的数据模型也是利用了这些海洋特征数据,并将数据模型储存在引擎当中,将最终的模拟结果可视化,以便用户更直观地观察到数据的变化。
2.2.1 选择引擎
针对海洋研究领域实际需求出发,伴随着大数据采集和探测遥感应用的飞速发展,虚拟现实与可视化研究的关键技术在海洋领域愈加被广泛使用,近些年来为数众多的国内外研发团队对于进军海洋领域跃跃欲试,其中不乏国际巨擘,如美国的Google Earth,国内的“数字海洋”原型系统、EVGlobe等,提供真实、可靠、快速、立体的海洋环境场景的虚拟现实搭载并通过可视化的形式展示分析海洋数据已经作为一种直观而有效的手段逐步为人们所接受[3]。
UE4引擎是一款具有强大物理模拟的引擎,UE4引擎同时具有强大的全局光照系统和材质编辑器,UE4区别其他引擎表达的最大优点是其内部参数可以根据所需的数学公式进行表现,让材质能够更好地表现真实。
2.2.2 引擎实现框架构成
MVC是一种软件设计规范,用数据显示分离的方法来组织实现过程[4]。文中所提及的海洋图形可视化渲染引擎的基础框架构成,是基于MVC的基础设计理念而形成的(见图1)。
图1 引擎实现框架构成基础框架
1)视图
UE4视图最终表现的页面,同时也是用来观察和监测效果的页面,在UE4引擎中最基础的界面包含很多内容,在常见的UMG或者一些控件已经被UE4的开发者封装,我们可以用引擎封装的控件进行二次开发。使用者或开发者在二次开发的过程中,只需将这些界面控件对应的类和资源应用即可。UE4引擎允许开发者去使用封装的控件,同时也可以直接调取底层数据库进行修改或者新模块的添加。UE4引擎将控件中的数据暴露出来,作为底层基础接口,使用者或开发者只需要从控件类和使用控件中继承下来,作为子类直接调用父类的内容,底层交互接口不需要有更多的变化,实现了软件的开放性和可重用性,节省了很多软件的运行成本。
2)适配器
引擎的UI使用Slate UI框架表编译的,UE4引擎的优点在于直观性。交互信息的应包括控件点击、复选框点击、展开按钮点击等和复杂功能的实现,被提取出来作为引擎的操作,并设计其交互和实现的虚接口,这种方法更好支持程序化UI的生成。
3)海洋可编程特效(Marine Effect)
UE4特效系统的优点是:数据共享、可添加多种数据类型,将图标范式与堆栈范式结合加强用户对行为的控制。
①数据共享。实现用户全面控制,从数据访问开始,将UE4引擎的所有数据进行公开,结合外界采集的数据一并公开,以便于用户对于数据的操作和调用。
②堆栈范式(例如Cascade中所用范式)和图表范式(例如蓝图中所用范式)各有优势。堆栈提供模块化行为和可读性,图表增强用户对行为的控制。从概念上讲,UE4的粒子模拟是作为堆栈范式运行的,模拟从堆栈顶部流向底部,一次执行各组模块,关键点在于每个模块指定到组,以确定模块执行的时间。每个组中都有多个层级,会在一个系统的生命周期内的特定时间点上调用他们。
4)GPU基于顶点着色器
随着GPU顶点着色器和片段着色器的出现,图形开发人员可以编写运行于显卡芯片上的汇编程序来控制逐个顶点和像素的具体渲染过程,这给图形软件带来了极大的灵活性。
体绘制是在传统计算机图形学基础之上发展出的一门交叉学科,其中包括了计算机图形学、数字图形处理以及计算机视觉等,不再仅仅关注与物体表面的转换和显示问题,体绘制则更多研究的是物体所包含的和能够提取出的数据信息。因此,相较于传统计算机图形学来说,体绘制的数据信息更加丰富和完整。
不同于传统的光线投射算法,本次计算采用球面体绘制,球面绘制能够将海洋波浪的复杂和多样性表达出来,本次研究是基于球体的光线投射法,既以球体坐标系作为基础坐标系,并且在坐标系转换过程中也沿用了球体坐标系,并在虚拟球的投射方进行了绘制。
在确定了球体绘制作为绘制的基础后,不具有一定密度分布的发光粒子集合视作球体的数据,并将密度映射为RGBA光学属性值,通过合成绘制积分最终生成图像。投射光线定义为x(t),t表示离视点的举例,沿光线标量值表示为s(x(t))。体绘制积分沿投射光线积分吸收系数K(s)和颜色C(s),在这里主要是对于发射与吸收光学模型采用的系数,同时为了表述的简化,将K(s)简化为K,c(s)简化为c。距离视点t=d的点沿实现光学能量被吸收,那么可知,其中只会有部分能量c’最终能够到达视点。假设吸收系数为K=const时,则c’等于:
如果沿光线吸收系数不为常量,而是需要由位置来决定,那么所得到的吸收常量为:
依照整条光线的光学属性积分定义为:
对于连续重采样点间距为Δt的光线分段,其光学深度为:
基于上述光线分段的不透明度和颜色定义,体绘制积分方程为:
投射光线最终点获取:最终点的获取是获取通过每个像素点的射线的三维数据场的三维向量和速度向量,需要获得每个像素点的位置以及入场数据的三维向量和速度方向,在通过像素点后会出现衰减,最终获得离开数据场的位置,如图2b所示。在帧缓存中绘制包围盒的表面,盒体每个面的四个顶点与相机距离的插值对应盒体的顶点坐标值(x,y,z)∈(0,1)相等,在绘制流程的光栅化阶段通过对图形的二线性插值,盒体表面的每个点的颜色和他的空间坐标与相机插值相对应,用UE4软件模拟如图2a所示。
图2 体绘制积分UE4模拟效果
顶点程序的任务是把八个顶点的场景坐标转化成屏幕控件中的坐标,所得到的结果进行图元装配、挑选、光栅化。每一个输入的图元顶点都会执行一次顶点程序,并得到一个新的采样点r(n),用该采样点的三维坐标对体数据属性值采样。在片段程序中,需要求得光线方向矢量的长度,将光线方向矢量归一化,得到投射光线方程:
输入信息里的纹理坐标,就是进入点的纹理坐标,并利用输入信息里的屏幕控件坐标在二维纹理中进行采样计算下一个坐标r(n+1),一直到光线投射出包围盒或光线提前终止。投射循环终止的条件取决于光线矢量长度小于或者等于0;光线提前终止的条件取决于阻光度的积累,即小于1,绘制如图2c所示。
为了方便计算和展示,本次采用单一光源,入光角度为烟台正午平均高度角27.5度,并假定不会随着数据场的旋转而改变,根据投射光线路径上点的海洋流场的方向分别向前和向后来计算,并取随机噪声值输入参与随机化偏航中,取迭代次数为10次,得到如图3a的点信息。
在初始点信息的基础上,继续迭代1000次,获得如图3b的效果。
剔除所有高度小于1的数值获得计算结果如图3c,将计算结果导入UE4材质中获得最终效果,制作最终的海浪效果。
海洋水体渲染是引擎海洋环境仿真的一个重要部分,它实现海水水体要素,包括动态海水海面、动态海浪及海面水体的光照特效渲染。渲染使用实时更新的顶点纹理和实时计算的法线纹理、反射纹理、刻蚀纹理来渲染动态海面、光照、倒影等海洋海浪的效果。
引擎在实时对水面和水下光照纹理图案的计算还需要考虑反射、折射以及水下刻蚀现象的模拟和仿真。将初始UE4材质的混合模式改为半透明模式,着色模型为光照模式,光照模式改为表面半透明体积形式,D3D11曲面细分模式更改为PN三角细分模式。调节后,材质输出结果如图4a所示。
对于波浪的动态绘制分作三个步骤,首先根据相机位置渲染水面反射的纹理,引擎绘制水面节点时,需选取Camera Position即以相机的位置中心点向外部扩散依次渲染,以相机的位置判定海水的颜色以及反射的效果。如图4所示,利用Pixl Depth深度像素表达式输出当前渲染像素的深度,即该像素与相机之间的距离。利用Scene Depth场景深度表达式输出现有的场景深度,可以在空间中任何位置进行取样,利用Pixl Depth和Scene Depth的差值获取纹理取样深度,并将输出结果连接在折射上,得到绘制折射队列的折射效果,根据相机与水面的像素关系,计算出折射率。
然后制作多层次的海浪,制作一层叠一层,第一层向前推进的过程中第二层波浪起伏叠在第一层上,逐一叠加的状态。利用第三章中生成的灰度图基础,创建以为灰度图为核心的动态元素。如图4b所示以此作为单元元素进行叠加,动态材质效果。最后将折射纹理和反射纹理作为水面片段着色器的输入纹理进行混合得到水面效果。最终利用Lerp表达式计算出叠加得到4层海浪与相机的交叉成绩,并输出产生的三通道矢量值,最终结果如图5a所示。
图3 海洋波浪点信息绘制
图4 在UE4中动态海浪材质节点
图5 UE4软件海洋渲染的最终效果
最后混合水面折射和反射纹理图来获得最终水面效果。最终的水面效果如图5c所示。
目前计算机行业不断发展,将虚拟现实技术运用到海洋模拟领域是必然的趋势,在总结UE4制作仿真教学过程中的海洋实时可视化模拟方面是进一步探索应用于可视化水体海浪的一些具体算法和操作方法,在UE4强大的软件支持下画面质量更高,可视化视觉更高,模拟的效果更真实的特点。未来,我们会进一步优化,使场景中能够承载更加丰富,效率更高的可视化渲染。