【博物纳新】Unreal 海洋场景构建

栏目: 后端 · 发布时间: 6年前

内容简介:【博物纳新】是UWA重磅推出的全新栏目,旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。更多精彩内容请关注:lab.uwa4d.comOcean Simulation for Unreal 是一个使用虚幻引擎4制作的海洋模拟项目,较为逼真地模拟了海洋系统,包括焦散、浮力、海浪、暴风、海底鱼群、水下失真、水下焦散等效果。对于这个功能强大的项目,

【博物纳新】是UWA重磅推出的全新栏目,旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。

更多精彩内容请关注:lab.uwa4d.com

导读

Ocean Simulation for Unreal 是一个使用虚幻引擎4制作的海洋模拟项目,较为逼真地模拟了海洋系统,包括焦散、浮力、海浪、暴风、海底鱼群、水下失真、水下焦散等效果。对于这个功能强大的项目,本文重点解析海面场景的构建过程。

效果展示:

【博物纳新】Unreal 海洋场景构建

高大上效果请戳原项目地址:

https://lab.uwa4d.com/lab/5b855a6702004fb659758add

细节放大后再来感受下波澜壮阔的宏伟之势:

【博物纳新】Unreal 海洋场景构建

【博物纳新】Unreal 海洋场景构建

【博物纳新】Unreal 海洋场景构建

【博物纳新】Unreal 海洋场景构建

【博物纳新】Unreal 海洋场景构建

使用方法

使用方法较为简单,作者已经将大部分重要参数可视化,直接在Detail面板中修改数值即可。

【博物纳新】Unreal 海洋场景构建

例如Heightmap栏中的参数:Scale决定海浪的范围大小,Speed决定流速,Displacement决定水量高度。

【博物纳新】Unreal 海洋场景构建

实现原理及方法

在计算机图形学中,流体仿真的其中一种做法是基于网格绘制,通过物理模拟(波动方程)来计算网格点位置,达到动态效果。此项目将这种思路简化,根据坐标计算每个点的位置及其渲染所需的参数。

此项目通过蓝图实现,较为重要的资源如下:

【博物纳新】Unreal 海洋场景构建

BP_Ocean类蓝图:用于初始化参数,并实例化材质。

【博物纳新】Unreal 海洋场景构建
  • MPC_Ocean材质参数集:保存渲染所需的参数,供多个材质使用。
  • MF_Gerstner_Wave材质函数:根据Gerstner Wave计算公式,计算偏移值和法线,用于模拟出水波尖锐的波峰效果。
    【博物纳新】Unreal 海洋场景构建

【博物纳新】Unreal 海洋场景构建

  • MF_Gerstner_Wave_Set材质函数:根据MF_Gerstner_Wave材质函数传入不同的数值创造出8中不同的Gerstner Wave波形。
  • MF_Pannner材质函数:用于计算产生一个位移向量,模拟流动。
  • SSS材质函数:用于计算产生一个向量,模拟次表面散射效果。
  • Motion_4WayChaosShared材质函数:用于产生一个混合的材质,模拟海面气泡。
    【博物纳新】Unreal 海洋场景构建
  • Motion_4WayChaos_NormalShared材质函数:用于产生一个混合的法线,用来做线性插值,参与颜色的计算。

不同的材质采用根据需要输入不同的参数,选择材质函数进行计算得到相应的功能。

例如M_Ocean材质的实现:

步骤一:使用Motion_4WayChaos_NormalShared产生两种法线向量:Medium Wave Normal与Detail Wave Normal。

【博物纳新】Unreal 海洋场景构建

步骤二:使用MF_Gerstner_Wave_Set得到Gerstner Wave Normal与Gerstne Wave Displacement。

【博物纳新】Unreal 海洋场景构建

步骤三:将三种法线经过运算后作为参数赋予SSS材质函数得到次表面反射效果。

【博物纳新】Unreal 海洋场景构建

步骤四:依据世界坐标、摄影机位置以及一些自定义参数进行透明度计算。

【博物纳新】Unreal 海洋场景构建

步骤五:依据次表面反射效果、透明度、海洋自定义基础颜色、自定义折射率等参数进行计算得出当前位置颜色。根据此像素与其后像素之间的距离,在基础颜色与场景颜色之间进行插值。

【博物纳新】Unreal 海洋场景构建

步骤六:使用此颜色,添加泡沫效果、进行Cubemap Reflection 与Fresnel Reflection计算,得到的颜色作为材质的基础颜色。

【博物纳新】Unreal 海洋场景构建

步骤七:材质的金属度、高光度、多边形细分乘数均为自定义变量。

【博物纳新】Unreal 海洋场景构建

步骤八:自定义Roughness、DepthTest与粗糙度纹理进过计算进行插值得到材质粗糙度。

【博物纳新】Unreal 海洋场景构建

性能测试

本次的性能测试选取使用M_Ocean材质制作的海洋场景进行PC端测试,为了排除其他因素的干扰,测试场景删除了部分Actor、地形,保留了人物与天空盒。

测试场景的海平面Mesh尺寸:

8192m*8192m

得到测试数据如下:

【博物纳新】Unreal 海洋场景构建

图1

【博物纳新】Unreal 海洋场景构建

图2

【博物纳新】Unreal 海洋场景构建

图3

从测试数据可以看出测试的平均帧率为51.4(图1),考虑到测试场景只绘制了一个海面效果,这个帧率在PC上还是偏低的。

在“各线程总体耗时占比”中可以看到Render Thread耗时占55%(图2),是导致CPU耗时的主要因素,然后我们可以在报告的“代码效率-RenderThread”页面中具体查看渲染线程的具体堆栈信息。

在图3中可以看到,有一个占98%的函数“STAT_D3D11PresentTime”。这个函数表示CPU正在等待GPU的渲染工作完成,从截图中可知这个函数的耗时均值为17.28ms,非常高,由此可见,GPU渲染是一个主要的性能瓶颈。

【博物纳新】Unreal 海洋场景构建

Draw Call数量较少,面片数量相对PC平台较为合理。

综上所述:

帧率较低的原因是渲染流程过长,参照项目中Material的构建蓝图,可以看出实现越好的模拟效果所需要的渲染时间会大幅增加。

【博物纳新】Unreal 海洋场景构建

开发者需要在实现效果与性能之间权衡,达到流畅又逼真的模拟效果为佳。

系统信息:

【博物纳新】Unreal 海洋场景构建

显卡信息:

【博物纳新】Unreal 海洋场景构建

本期开源库项目就推荐到这里啦,感兴趣的朋友可以戳此链接下载项目,也欢迎大家加入UWA技术讨论群(793972859),分享你见过的、用过的好项目!

https://lab.uwa4d.com/lab/5b855a6702004fb659758add

以上所述就是小编给大家介绍的《【博物纳新】Unreal 海洋场景构建》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mission Python

Mission Python

Sean McManus / No Starch Press / 2018-9-18 / GBP 24.99

Launch into coding with Mission Python, a space-themed guide to building a complete computer game in Python. You'll learn programming fundamentals like loops, strings, and lists as you build Escape!, ......一起来看看 《Mission Python》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具