问题描述:
在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型)
可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示:
如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:
所以现在的解决办法是,2D模型还是斜着放(不让这里的福压扁),而做深度检测的时候用竖立起来的那个模型所在的深度值(避免模型穿插问题,使前后关系看起来是正确的)
怎么才能既保证2D模型的正常显示(Billboard效果),又能有预期的前后遮挡关系(不穿模),鱼和熊掌是可以兼得的,解决思路来源:https://www.bilibili.com/video/BV1rr4y1c7wz
解决方案:
使用斜着的2D模型经过MVP变化后的结果进行渲染,但是在顶点变换的最后,需要用上面竖立时所处的深度值修改顶点的深度值,就能欺骗过VertShader与FragmentShader之间的深度检测环节,就可以达到预期想要的遮挡关系,防止前后穿模。
下面是将2D模型竖立起来,沿着2D模型的脚下旋转到垂直:
需要注意的是我们是从侧面来看,则是沿着ZY平面进行旋转的,所以需要先找到旋转的中心点(脚下),如这个