《Afterlight》中泰坦星环境的实现方法

作者: Víctor Franco Unity官方平台 2019-08-07
我们曾分享过一款2.5D科幻象征主义横向滚屏游戏《Afterlight》。游戏把玩家带到了22世纪,各国的航天机构为了征服宇宙而联合。征服宇宙的第一步是在泰坦星建立殖民地,故事就从泰坦星的一场严重的着陆事故从而展开。

本文将由负责游戏设计并担任编剧的Víctor Franco分享,《Afterlight》中泰坦星环境的实现方法。


实现光照和环境的方法-粒子及雾效果

首先,我们希望尽可能逼真地模拟环境和光照。通过对泰坦星上的光照进行研究,我们起初使用近似的流明值在Unity重现这种效果。但结果并不理想,场景几乎完全黑暗。

在《Afterlight》中,我们希望通过自然的光照带来外星景观效果,所以我们决定使用塔科夫斯基对电影拍摄的一些方法来呈现泰坦星的氛围和大气,这让环境和纹理变得非常重要。


我们使用Unity中Post-Processing Stack后期特效处理包来实现屏幕空间的雾基础,并使用Next-Gen Soft-Shadows资源包中极其柔和的阴影效果,这款资源由Psychose Interactive Inc.制作。雾效很好地模拟了环境深处的密度、阴影、以及光线透过浓雾的效果。

Next-Gen Soft-Shadows资源包:

https://assetstore.unity.com/packages/vfx/shaders/next-gen-soft-shadows-137380

在第二个图层,我们加入两个粒子系统:一个用于实现局部的雾,另一个用于实现漂浮的粒子。局部的雾通过自定义着色器实现,该着色器的灵感来自Playdead开发的《Inside》游戏中的烟雾效果和水泡。

该着色器使用一个纹理图集,作为实现多样性的第一步,它也有少量UV变形,以及朝着粒子移动方向的翻滚动画。我们通过Unity中粒子系统的顶点流功能实现这种效果。


目前,我们正在制作体积雾系统的原型,以减少大量的Overdraw,使烟雾粒子符合雾的大量积聚效果。

漂浮粒子的原理很简单:它们的运动和旋转都基于噪声,我们只需给它们添加纹理图集来增加多样性即可。


我们计划不久后,将这些CPU粒子替换为GPU粒子,从而在不产生高昂CPU开销的情况下,生成数百万个粒子。

地形变形

泰坦星环境中最有趣的特征之一,是泰坦星表面被冰冻的碳氢化合物沙丘所覆盖。这样产生了可变形的地形效果,使角色可以留下自己的脚印。

为此,我们在渲染纹理上绘制贴花,从而为脚印生成高度图。通过光线投射,我们可以把位置包含在地形的UV中,从而使用自定义着色器把贴花绘制到特定位置。该着色器会让贴花互相混合。最后,通过使用另一个着色器,高度图会逐渐变得模糊,然后消融。

高度图会移动地形的顶点,该着色器有很高级别的曲面细分来实现该功能,因此变形效果具有大量细节。


最后,地形法线使用DICE工作室在《战地3》所使用的的方法来进行计算,这是一种非常简单的方法,可以为变形处光照实现不错的法线。

表面-冰沙

表面着色器的灵感来自《风之旅人》的沙子效果,为了实现这种效果,我们需要4个步骤:

我们需要一个波痕法线,它使沙丘避免看起来单调乏味。

我们需要一个粒状法线来提供混乱的噪声。

我们会处理镜面效果,它会受到之前法线和视图方向取得的菲涅尔效果所遮罩。

为了在地面实现发光效果,我们需要使用白噪声纹理,它会根据视图方向动态变化。


岩石半透明效果

为了使泰坦星的岩石看起来冰冷,有冻结的效果,我们通过次表面散射效果制作了自定义半透明着色器。

为了实现该着色器,我们使用了DICE工作室开发《战地3》时使用的一些技巧,这种方法实现半透明效果的开销很小。


此外,我们必须展现结冰的岩石中的一些结构,例如裂缝,因此我们通过视差映射模拟这种效果。

在进入设施场所时,游戏主角Xin会改变她的装扮。在设施内,Xin穿着太空服,为了突出服装的区别,我们在服装上使用了和岩石一样的方法。这样我们可以取得更加自然的外观,使她在黑暗场景中凸显出来。

液态甲烷

泰坦星上湖泊和海洋这样的液体都是以液态甲烷为基础。为了使用合适效果来模拟这种画面,我们学习了Playdead的《Inside》游戏中分层水体的渲染方法。

该效果分为:首先是液体的表面材质,然后是与这个表面相互作用的粒子。


我们的表面也是分层的:

我们需要把表面和其它元素混合起来,我们为此使用Alpha Blending模式。

平滑的相交部分通过对比摄像机深度纹理和当前表面深度来实现。它和“软粒子”使用的是相同的系统。

我们为相交部分使用常见的水泡效果。为了实现水泡效果,我们使用平滑相交部分的类似方法。

为了给它多样性和移动,我们使用分层噪声的相同方法:泡沫纹理会复制到单独呈现的图层中,然后互相混合。

我们将处理水下的扭曲效果:折射效果。表面会获取下方渲染的内容,然后使用被表面法线贴图扭曲的UV再次进行投影。

我们会实现反射效果。为此,我们使用辅助摄像机进行平面反射,它用于渲染反射效果的一部分内容,使它作为表面上的纹理进行投影。该纹理也会受到法线贴图的扭曲。

最后,水表面会受到简单的海洋镜面调节。


一共有三种不同粒子:波纹粒子、水泡粒子和水花粒子。

波纹粒子是圆环形状的纹理,会从起点向外展开,它们使用了和表面相同的扭曲效果。通过圆环形状的法线,波纹粒子会混合到下层表面,为其增加效果。

水泡和表面的相同,但它会继承和波纹粒子相同的变大动画。

最后,水花粒子的发射过程和大小调节取决于在表面上生成水花的对象的移动速度。

小结

《Afterlight》中泰坦星环境的实现方法就介绍到这里。下载Unity Connect APP,请点击此处。观看部分Unity官方视频,请关注B站帐户:Unity官方。


作者: Víctor Franco  
来源:Unity官方平台
原地址:https://mp.weixin.qq.com/s/QtkLfIllcISzh9QlnW_WlQ

最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多