专栏名称: 游戏葡萄
游戏葡萄:有前瞻、有判断的新锐游戏产业媒体。这里有关于游戏产业的深度分析、独家报道、交易资讯和热辣小道。投稿与商务合作邮箱: [email protected]
目录
51好读  ›  专栏  ›  游戏葡萄

【技术干货】想用好虚幻4引擎做游戏,你需要避免这些扰人的坑

游戏葡萄  · 公众号  · 游戏  · 2017-02-05 15:03

正文

请到「今天看啥」查看全文



像素深度撤销(Pixel Depth Offset)可以变更像素深度(Pixel Depth)


但是,就算是不透明的对象,设定回避Pre Z测试之后,便无法撤销本来能够撤销的Pre Z 测试。这种情况是因为虽然用了像素着色器处理,但是(之后的)Z测试失败,这一操作被撤销了,虽然绘制结果没有变得奇怪,不过性能会跌落到最坏结果。



Z值的预阶段“Z预阶段”的注意点


下一个主题是“Z预阶段(Z Pre Pass) ”。UE4的渲染管道,是在Bass Pass的物体缓冲写出来之前,在仅预处理深度值(Z值)之后,运行Z预阶段。




事先预处理深度值的目的,是将最终影像和同一深度缓冲的内容结果,在透视前获得。Z预阶段之后的Base Pass则是,参考预先得出的深度值缓冲进行Z预测试,因此通过在最终的画面里不留下像素痕迹(即编写后又被消去的像素),以回避像素着色器的运行。


虚幻4只将背景对象这种静态对象计入Z预阶段,而动态对象则不计入Z预阶段,以上设定为默认设定。但是虚幻4可以按照客户要求来设定项目文件“早Z阶段(Early Z-pass)”和“动态早Z阶段(Movables in early Z-pass)”。




或者通过勾选“作为遮光板使用(Use as Occluder)”可以设定各对象单位是否计入到Z预阶段之中。



各项目的关闭渲染选项里面,有“作为遮光板使用”这一项目。在设定为默认为ON时,勾选为off,就能够调整各项目单位是否参与早Z


通常默认设定应该就可以了,但是在多边形数很多的场景中,Z预阶段的运行本身会对GPU造成很大负担,所以这种场景下,上面提到的两个设定,通过选择on/off来比较性能可能会比较好。


光照的前段处理“预照明”需要注意的点


虚幻4中通过血溅和弹痕这种投射材质贴图来实行的印花式绘制,是在光照(Lighting)之前,即通过“预照明(Pre-Lighting)”部分来处理并设计的。对于后段的光照处理,可以将印花式绘制囊括在光照对象里。


和印花绘制相同,“从所有方向插入有关假想环境光的遮蔽率”(Ambient Occlusion,环境光遮蔽)的处理,也能通过预照明来完成。




与这种预光照绘制相关的麻烦已经成了常见问题,比如“印花被描绘得照明颜色过深”、“设置天窗后,印花下面变透明了”等等。





从结论来说,这是“虚幻4的做法”,当然《虚幻4》也提供了回避此类问题的对策。那就是“延迟贴花(DBuffer Decals)”功能。



所谓延迟贴花(或称Deferred Decal),是指和将印花进行物体缓冲不同,而是使用被称作“延迟贴花”这一印花专用特殊缓冲来进行绘制,用物体缓冲进行光照和阴影处理之后,延迟贴花的内容也反映并实行了出来。印花的绘画结果统合到了物体缓冲之中后,也因此出现了上文提到的问题。为了回避这个问题,要准备专用的缓冲。


但是,加上利用物体缓冲这一条件,绘制比之前的处理线程更多,绘制负担变高也成为其瓶颈。


虽然导致负担变高了,但是应该实行印花表现而导入物体缓冲吗?还是说应该选择别的表现方式来回避延迟贴花,这需要开发者好好考虑后再做决定。


通过光源周围的处理而改变性能的“照明”阶段







请到「今天看啥」查看全文