您的位置:首页 > 移动开发 > Unity3D

Unity3D——使用遮挡剔除优化游戏场景&DrawCall优化

2016-11-25 23:38 330 查看
 Draw
call


在游戏中每一个被展示的独立的部分都被放在了一个特别的包中,我们称之为“描绘指令”(draw
call),然后这个包传递到3D部分在屏幕上呈现出来。这就和你希望你的亲友收到准备好的圣诞礼物需要包装好然后穿过城市准时放在他应该出现的地方一样没什么不同。你的CPU来完成包装和传递他们的活,同时会消耗很多的带宽,所以最终分配好这些关键性资源很重要。

笔者所知道的降低DrawCall的方法:1.对图集的有效管理,按功能模块划分,相同模块下的图片资源放在一张图集中,公共部分的图片资源放在一起,合理的管理既能适当降低I/O操作,又能适当减少DrawCall(原则是:根据UI中图片的深度值来优化的,深度值相差为1的图片,若在同一图集中,则对应的DrawCall增加1,否则为2);2.遮挡剔除,即为摄像机照不到的地方,想办法通知CPU不进行渲染。

遮挡剔除方法

(1) 在游戏场景中选择所有你希望应用遮挡剔除和被遮挡剔除的场景物体,在检视面板(Inspector)中,选择的Static选项,只勾选其中的OcclusionStatic 和 Occludee Static。物体全影技术需要考虑两方面因素:静态遮挡物(occluder)和静态被遮挡物(occludee)。前者定义于几何学的角度,全影技术会将它们构建成单一、稳定的模型;后者定义于可见性的角度,全影技术通常会通过遮挡数据对其进行测试。从几何学角度来讲,遮光物是由大量的带有“Occluder
static”标识的设置组成的,而被遮挡物体的标识则是“Occludee static”。



一个经验法则,默认情况下,如果不是所有的渲染器作为被遮挡的物体,你最好预先设定好大多数配置,以便于在全影技术下可以自动剔除不必要的景物。同样,也是在默认的情况下,多数的静态渲染器(static renderers)都可以作为遮光物,只要确保你的渲染器不是透明的即可。但是,如果物体的缝隙很小(像是浓密的植物),你又想透过它们看到景物,只是减小这些缝隙的最小值是没有用的,而应该从渲染器中移除这些遮挡标识(occluder flag)。

(2) Window->Occlusion Culling 再点击Bake

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: