聚光灯 一叶舟 开发日志03
大家好,这里是SafeHeaven,全员社畜而且名字拼错了的开发小组。
本次选择的品类是2.5D视角的滚球游戏,在实现2.5D效果的过程中发现了一些有趣的事情,前来分享一下。
2.5D的实现是通过俩个图层,一个图层(素材层)把2D美术素材平面垂直于相机射线,另一个图层(背景层)平行于XY轴(某些引擎里是XZ轴),通过调整摄像机参数实现的。
在这个效果实现的过程中,我们发现,玩家控制的小人在和素材层的资产的位置重叠的时候,超过资产的中心时小人的贴图会消失,被资产所遮挡。
可能有熟悉图形学的同学已经有思路了,其实是和渲染管线的深度测试Z-Depth Testing有关联。
在 3D 渲染管道中,当对象投影到屏幕上时,投影屏幕图像中生成的Fragment的深度(z 值)将与缓冲区中已存储的值(深度测试)进行比较。如果新值更接近,则替换它。
具体原因是渲染时进行 Z-深度测试的时候判断小人素材实际在资产素材后面被遮挡,导致混合效果无法正常工作。
基于以上原理,我们通过控制资产素材透明图层来调整Z-深度测试失败的位置。实现玩家控制的小人在建筑物后方被建筑物所遮挡的效果,无需一行shader代码。