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”。
![](https://img-blog.csdn.net/20161125232221181?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一个经验法则,默认情况下,如果不是所有的渲染器作为被遮挡的物体,你最好预先设定好大多数配置,以便于在全影技术下可以自动剔除不必要的景物。同样,也是在默认的情况下,多数的静态渲染器(static renderers)都可以作为遮光物,只要确保你的渲染器不是透明的即可。但是,如果物体的缝隙很小(像是浓密的植物),你又想透过它们看到景物,只是减小这些缝隙的最小值是没有用的,而应该从渲染器中移除这些遮挡标识(occluder flag)。
(2) Window->Occlusion Culling 再点击Bake
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
相关文章推荐
- unity中关于游戏场景的优化——遮挡剔除
- Unity3d 大场景优化 遮挡剔除
- Unity3d游戏场景优化杂谈(2)
- Unity3d 游戏场景优化 - LOD(Level-of-detail)
- Unity3d游戏场景优化杂谈
- 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)
- Unity3d游戏场景优化杂谈(3)
- 【浅墨Unity3D Shader编程】之一 游戏场景的创建 & 第一个Shader的书写
- 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景
- 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写
- Unity3d 游戏场景优化 第一章
- [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)
- Unity3d之游戏场景优化杂谈
- Unity3d游戏场景优化杂谈(2)
- Unity3D游戏场景优化之批处理
- Unity3d游戏场景优化杂谈
- Unity3d游戏场景优化
- 总结使用Unity3D优化游戏运行性能的经验
- 总结使用Unity3D优化游戏运行性能的经验
- Unity3d 游戏场景优化 第三章