GIS融合之路(五)给CesiumJS加上体积云(Volumetric Cloud)和高度雾(Height Fog)

同样在这篇文章开始前重申一下,山海鲸并没有使用ThreeJS引擎。但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合。

系列传送门:

山海鲸可视化:GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns?

山海鲸可视化:GIS融合之路(二)CesiumJS和ThreeJS深度缓冲区整合

山海鲸可视化:GIS融合之路(三)CesiumJS和ThreeJS相机同步

山海鲸可视化:GIS融合之路(四)如何用CesiumJS做出Cesium For Unreal的效果

上一篇文章我们已经将大气散射和空气透视的效果整合到了CesiumJS之上,不过真实感渲染除了大气部分,还有体积云和高度雾。照例我们先看下山海鲸中的效果图

山海鲸体积云效果

山海鲸高度雾效果

具体山海鲸中的效果和设置教程可以移步这个的视频教程的前半部分的内容:

【山海鲸可视化GIS系统】第十课 CesiumJS项目移植

感兴趣的朋友也欢迎下载软件试一试:山海鲸可视化-一站式数字孪生开发平台-海量数据可视化大屏模板

相比于大气散射来说,体积云可以说要复杂的多,主要复杂在以下几个方面:

1.体积云包含建模和光照两个方面。

2.体积云需要和大气散射,空气透视,高度雾进行融合。

3.由于云的多样性,因此体积云需要同时考虑易用性和灵活性。

4.体积云由于性能问题,需要大量的性能优化方案。

实际上,体积云也已经有了海量的文章在解释如果去建模和光照了,我也大体给大家总结一下方案的脉络。

体积云目前的方案主要是由地平线最先提出,后期经过寒霜,荒野大镖客等引擎或3A游戏的进一步完善,逐渐形成了一套标准的方案。就是通过Worley-Perlin噪声贴图进行建模,同时使用太阳和大气对体积云进行光照计算。

除了几篇英文的ppt分享外,比较推荐大家去看网易这篇分享文章,基本综述了当前的体积云算法,同时也非常全面,我就不再重复技术细节了:

网易游戏雷火事业群:体积云效果的实现,游戏世界的云合雾集

这套基本的逻辑还是比较容易实现了,我们看下山海鲸中体积云的建模效果和光照效果:

山海鲸中体积云效果

补充一下在山海鲸中体积云的实现的一些具体的要点:

1.首先同样如上一篇系列教程提到的,由于Webgl中不支持ComputeShader,由于体积云采用Temporal Reprojection和Bilateral Upsample,因此过程中需要大量用到ComputeShader,此处在webgl上都得用ScreenViewQuad进行代替。

2.云影的实现;大部分文章并没有提及云影。不过这块实现相对简单,只需要采用太阳光的角度再渲染一张正交投影的深度贴图,渲染过程中值得注意的是要设定好合适的贴图分辨率和渲染的空间范围。另外在体积云建模过程中,需要注意调低步进次数,只需保证大体的质量即可。

3.体积云实时反射;参考云影的实现,由于山海鲸数字孪生项目中大部分有玻璃和水面都需要去反射天空和体积云,因此仅使用平面反射是不够的。同时需要参考UE中的实时天光抓取,因此山海鲸中的天空和体积云的实时反射是直接抓取天空的Cubemap之后再做实时滤波去计算漫反射部分的光照。这样反射虽然需要渲染6次,但可以作为多个不同物体以及不同角度的反射,同时还可以直接获取天光作为场景中的环境光补充。

4.关于云的环境光照部分,Unity中是直接抓取环境的球谐并采样顶底颜色,这样处理之后云底颜色过于受到地面的影响。因此我们采用UE中两个环境光照中相对简单的方案,就是只要采用海拔6km处积分结果的distantskylut中的颜色直接作为环境光照。

说完了体积云之后,我们看下指数高度雾。上一篇文章已经提到过了,大气散射已经是高度指数雾了,无论是瑞丽散射和米氏散射的密度分布都是高度指数递减的,为什么我们还要再加上高度指数雾呢?实际上因为两点:

1.可以增加复杂的密度分布函数,目前山海鲸和UE一样,提供了两级高度雾,在叠加大气散射中的米氏分布函数,可以提供很复杂的密度分布函数。更容易模拟山间的云雾密度。

2.可以增加颜色的更灵活的设置,高度雾的颜色默认也是使用DistantSkyLut中的颜色进行动态光照的,但可以对每一级的雾的inscattering的颜色进行单独设置,实现更加灵活的雾的色彩控制。

OK,我们将体积云和高度雾实现了之后,同样和上一篇文章一样,我们叠加到CesiumJS中只需要使用Cesium Color Texture和Cesium Depth Texture两张贴图即可实现体积云和高度雾的叠加。

到这一步位置,我们基本上将天空部分的效果整合完毕了,下一步我们就看一下如何结合天空来实现Cesium中的雨雪效果和雨雪覆盖。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity URP Volumetric Fog是对Unity 2019版以上的渲染管线(即Universal Render Pipeline)实现的一种插件。作为一种视觉效果的工具,Volumetric Fog是一种模拟令人印象深刻的3D效果的方法。可实现的这种效果是由于的密度随着深度逐渐增加时,光线透过一定距离的细微颗粒物质产生的散射效应而表现出来的,这是一种既美观又真实的视觉效果。 相较于基于传统的渲染管线而载入,Unity URP Volumetric Fog这种插件借助了URP的一些便利,是更加轻量级的,能够更快速一些地呈现出的效果,并且更易于修改和优化。在近似真实的效果的同时,它还能为你的游戏制作过程提供更好的用户体验和更充满活力的视觉效果。 综上,通过使用Unity URP Volumetric Fog,您可以在Unity游戏中轻松地实现逼真的效果,为用户带来全新的游戏体验,并将游戏制作提升到一个新的高度。 ### 回答2: Unity URP(Universal Render Pipeline)是Unity引擎的渲染管线之一,它可以帮助游戏开发者轻松创建高质量的视觉效果。其中URP Volumetric Fog体积)是URP渲染管线中的一种特效,它可以使游戏中的场景更加逼真和真实。 URP Volumetric Fog通过在场景中添加效,来模拟弥散在空气中的水汽、烟和灰尘效果。效可以增强场景深度,对远景进行模糊处理,从而使远处的物体看上去更加模糊和朦胧,与真实情况更加相似,这也是现实中效的表现形式之一。 此外,URP Volumetric Fog还能够根据游戏场景的特点灵活调整,它可以根据的密度、颜色以及位置等因素进行设置,以适应不同的环境和氛围。例如,在一些恐怖游戏中,URP Volumetric Fog可以将场景的可视范围限制在一定范围内,增加游戏的紧张感和刺激度。 在技术实现上,URP Volumetric Fog是基于计算几何学方法进行实现的,这种方法可以模拟出真实世界中光线经过效之后的运动轨迹和扩散现象,从而达到类似真实的效果。 总之,URP Volumetric Fog是一种非常有用的特效,在游戏中能够更好地模拟出真实的环境和气氛,给玩家带来更加真实的游戏体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值