《新神》刚开始开发的时候,考虑到成本和能力限制,我决定做成 2D 像素风格游戏。不过,像素风格不代表容易或简陋,实际上可能比非像素还难做。现在的像素风格已经不是 FC 时代那种淳朴的像素风格了,比如 17 年 E3 上惊艳世界的《The Last Night》就用到了光照、反射、景深、体积光等现代 3D 游戏技术。虽然此游戏至今都没做完,但凭借优秀的美术已赚足了关注。
《The Last Night》给了我启发,我决定在像素风格基础上加入 PBR 光照,同时启用 HDR 渲染。渲染时使用原始分辨率,仅让物体像素化。这样一来,2D 物体就有了“厚度”感,简洁的像素配上光照也显得很精致。
但要实现这一点并不轻松。《新神》是双摇杆射击游戏,这意味着物体是可以旋转的。另外为了更好的相机控制,画面需要支持缩放。一般游戏实现旋转和缩放都不是问题,但像素游戏就麻烦了,因为像素图案可能变得边缘模糊、难以辨识。这与贴图的采样原理有关。
下左图是直接放大三倍的原始像素图,看起来没问题;将它旋转一定角度后就变成了下中图,这时我们发现它的像素轮廓变得杂乱;您可能发现这是使用最近点采样的结果,于是我换成了 双线性过滤,结果就是下右图,虽然看不到杂乱的轮廓,但物体也变得模糊了,因为原图分辨率不足。
最直接的解决办法是,将原始图像放大几倍再渲染,但这会占用放大倍数的平方倍的显存,对工作流也会产生巨大影响。因此我没有这样做,我的做法是将像素图矢量化。
在商店资源 Pixel Mesh Builder 的基础上,我加入了法线、自发光和平滑度的支持,并且将所有信息存储在一个 Mesh 上。在渲染时,开启 MSAA 即可产生既锐利又平滑的像素边缘,也可以不受限制地旋转和缩放了。
至此像素风格的技术问题基本解决了,但画面表现力仍然不足。对比《The Last Night》就可以发现,它的画面富有层次。于是,我决定加上更多的 2D 图层。
这方面很多 2D 游戏都做得不错,其中《Ori》系列给我留下了深刻的印象。之前看过一篇文章,《Ori》的开发者分享了他们的多图层实现方案。他们将不同的图层分别独立渲染然后混合起来,而不是放在一起渲染。
将不同图层分别独立渲染的好处是,可以分别设置每个图层的渲染质量、渲染缩放以及整体颜色系数,还可以将图层模糊以模拟镜头虚化。因为虚化的图层并不需要渲染的很清晰,因此分辨率不必太高。通过调节每一层相机的渲染缩放,可以让每个图层运动速度产生差异,模拟出透视效果。整体颜色系数可以用来微调各层的亮度和颜色,甚至可以让前景半透明,以免挡住玩家视线。
在《新神》里,我通过改造 Unity 的通用渲染管线实现了多图层渲染。这里有几个细节值得一提。
评论区
共 3 条评论热门最新