[Unity优化]减少顶点数目

版权声明:欢迎转载,欢迎讨论,大家一起共同进步!呵呵哒~ https://blog.csdn.net/lyh916/article/details/51993596

参考链接:

http://www.ceeger.com/Components/class-LODGroup.html

http://www.ceeger.com/Manual/OcclusionCulling.html


一、优化几何体

在模型制作时,减少顶点数。


二、LOD

LOD,Level Of Detail,根据摄像机离对象的远近,网格有不同的细节级别。当对象逐渐远离摄像机时,减少模型上的面数,从而提高性能。

LOD Groups,用来管理物体的LOD。


上面的颜色条,这个百分比指的是物体在屏幕的高与屏幕高的比例。可以通过拖拽相机图标来观察LOD的变化。下面的Add按钮是为当前LOD等级设置网格对象,你可以分别为LOD0、LOD1、LOD2和Culled设置网格对象,这样当LOD发生变化时,就会使用不同的网格对象。你还可以通过右键点击颜色条来增加或者删除LOD。


下面通过一个例子来熟悉一下:

新建一个场景,新建一个Cube、Sphere和Capsule,并给Capsule挂上LOD Group组件。从面数和顶点数来看,Cube < Sphere < Capsule,因此分别为LOD0、LOD1和LOD2加上Capsule、Sphere和Cube。然后更改Capsule的位置。观察一下渲染统计窗口,面数和顶点数确实在减少。当然实际情况需要准备网格,这里只是模拟。




三、遮挡剔除

遮挡剔除,可以用来消除那些被物体遮住的物体,进而减少顶点数。遮挡剔除在3D图形计算中并不是自动进行的。因为在绝大多数情况下离 camera 最远的物体首先被渲染,靠近摄像机的物体后渲染并覆盖先前渲染的物体(这被称为重复渲染"overdraw")。这里需要把遮挡剔除和摄像机的视锥体剔除区分开来。视锥体剔除只会剔除掉那些不在摄像机视野范围内的对象,但不会判断视野中是否有物体被其他问题遮住。而遮挡剔除则会。


使用遮挡剔除需要预先烘焙好运行时所需的场景数据。遮挡剔除的相关数据无法动态实时的生成,因此,如果在运行时场景中有变动 ,那么需要在烘焙时为会变动的游戏对象勾选Occludee Static。


下面通过一个例子来熟悉一下:

1.新建一个场景,然后放一些几何体,形成遮挡关系。然后为这些几何体设置Static。右击Inspector中的Static,Occluder即遮挡体,Occludee即被遮挡体。对于透明的、特别小的以及将来会控制其移动的游戏对象通常不会遮挡其他对象,此类对象只需要勾选Occludee Static项即可,这将有助于减少计算量。


2.菜单栏Window/Occlusion Culling,有三个标签页:Object、Bake和Visualization。

Object:设置选中对象的Static状态。注意这里还有一个叫"遮挡区域"的东西,默认如果你没有创建遮挡区域,遮挡剔除将应用到整个场景。每当相机在遮挡区域之外,遮挡剔除将不应用。重要的是这种遮挡区域覆盖的地方要有相机,但这样做会使遮挡区域太大,会导致烘焙更多开销。


Bake:点击"Set default parameters"可以设置默认值,一般来说,使用默认值就可以取得不错的结果了。如果想要更好的效果,可以自行调节值。

a.Smallest Occluder:遮挡物的最小大小。任何小于这个值的都不会被认定为遮挡物。例如,当值为5,则任何高或宽大于5的物体都会被认定为遮挡物。

b.Smallest Hole:物体之间一般会存在一些间隙,要确保这个值小于最小的间隙。

c.Backface Threshold:使用遮挡剔除时,unity会保留一些背面数据。而这个参数取值在5-100之间,当为100时,完全保留这些数据;为5时完全删除这些数据。

个人经验:一般来说,只需根据情况修改Smallest Occluder即可。

然后点击下方的Bake按钮进行烘焙,然后点击Visualization标签页,移动摄像机即可看到效果。同时观察渲染统计窗口也可以看到顶点数面数在变化。



Visualization:需要观察结果时点击该标签页。



3.Occlusion Area

a.上面的适用于静态物体,如果想在运动物体应用遮挡剔除,你必须创建一个Occlusion Area(遮挡区域)然后修改其大小来适应运动物体的活动空间(注意:运动物体不能被标示为静态).。您可以创建遮挡区域,把遮挡区域组件添加到一个空的游戏物体。

b.可以通过Size和Center来修改遮挡区域的大小。对于Is View Volume,选中这个选项,可以遮挡遮挡区域内的静态物体。


4.Occlusion Portal

为了创造实时可开启和可关闭的遮挡,Unity使用遮挡入口(Occlusion Portals)。

猜你喜欢

转载自blog.csdn.net/lyh916/article/details/51993596