【代码便笺】一种非画中画瞄具的实现方式(深度剔除)
此方案已在Threshold中得到验证,相比画中画其有着极低的开销和很大的效果优化空间,在境内遮挡剔除的实现上相比传统的“替换瞄具LOD”、“换瞄具模型”等方案有着以下优点:
无需逐一修改每个瞄具模型,减少开发工作量。
支持过渡,非瞬切,效果也更好。
非画中画的实现方式可以参考以下:
瞄具包括四个网格组件 一个镜筒模型,三个镜片模型
镜片A(用于独立渲染深度的镜片网格). 在主世界不可见,用一台单独的相机渲染其深度,然后将他的深度和要剔除的材质(可能是手臂武器或者其他1p模型的材质)深度比较,最终会得到一个剔除蒙版,用于剔除掉镜片后的像素,这样就得到一个开阔境内的视野。
镜片B(瞄具外观镜片、非必须). 在主世界可见,但是会受 镜片A 所渲染的遮罩剔除掉一部分,另外还会随着开镜而逐渐变为全黑色遮罩,受镜片A遮挡剔除。
镜片C(后期蒙版镜片、非必须). 在主世界不可见,用于后期处理效果的蒙版,和后期处理效果结合使用,例如除镜片以外进行高斯模糊,或者实现类似夜视效果的瞄具都要用到这个蒙版,同样十字线也是在后期处理里面算的,后期处理有一个顺序,调整顺序可以使他忽略运动模糊的影响。
深度剔除的效果:
剔除前


在完成剔除步骤之后就可以随心所欲的用材质和后处理丰富镜内和镜外效果了!