现在的位置: 首页 > 综合 > 正文

Unity3d游戏场景优化杂谈(4)

2013年10月08日 ⁄ 综合 ⁄ 共 2336字 ⁄ 字号 评论关闭


左边的场景使用了遮挡剔除
. 右边的场景未使用遮挡剔除.

遮挡剔除的运行将通过在场景中使用一个虚拟的摄像机来创建一个物体潜在可视性状态(set)的层级. 这些数据可以让每个运行时间内的摄像机来确定什么能看见什么看不见。通过这些数据,
Unity
 将确定只把可以看见的物体送去渲染. 这将降低 draw
calls
 的数量并提供游戏的运行效率.

occlusion culling的数据由单元(cells)组成. 每个单元是整个场景范围数值的一部分. 更多特定的单元来自一个二叉树( binary
tree
.
Occlusion Culling
使用两个叉, 一个给 View
Cells (
静态物体) 另一个给 Target
Cells (
移动物体).
View Cells map
给出了一个定义了静态可视物体的索引列表 (精确剔除后的静态物体).

非常重要的一点是在创建你的物体时要随时注意,因为你需要在物体的尺寸和单元的尺寸间取得一个好的平衡. 理想情况下,
you shouldn't have cells that are too small in comparison with your objects but equally you shouldn't have objects that cover many cells.
有时你可以通过将大的物体拆成几个部分来改进遮挡剔除效果. 无论如何你仍然能够将小的物体合并为一体来降低draw
calls,
在它们都属于一些小的组件的时候,
occlusion culling
 将不起作用.确定组件中那个是可视的组件的选集和可视信息被认为是 PVS
(
潜在可视状态Potentially Visible Set).

Occlusion Culling设置

为了使用遮挡剔除 需要进行相关的手动设置.首先 你关卡中的几何体必须被分割成明显的不同尺寸的块. 这也有助于布置关卡中小块的容易定义的区域 被其他大物体遮挡(例如墙,建筑物) 这意味着每个单独的mesh被确定是否渲染取决于 occlusion 数据. 所以如果你有一个物体包含了房间里的所有家具那么所有的家具要么全渲染,要么全不渲染. 是否渲染是基于组件而不是基于每个单独物体自身的。

在检视面板(Inspector 你需要标识(tag 所有需要应用遮挡剔除的场景物体。最快的方法是是将你需要标示为 Static的物体作为一个 Empty GameObject 的子物体并设置这个Empty GameObject Static,option出现的时候选择affect
children.
 当子物体被tagged
as Static
你可以取消子物体和Empty GameObject的父子关系.

Unity3d游戏场景优化杂谈(4)

检视面板中的 Static
checkbox  

下一步点击Tools->Occlusion
Culling
. 打开 Occlusion
Culling
 检视面板,在面板中你会发现几个数值被调整过了。这些数值前面描述过:-

Occlusion
Culling - Object

Unity3d游戏场景优化杂谈(4)

 遮挡剔除检视面板的 object标签.

Object标签可以让你创建 Occlusion
Areas
 GameObjects.
 这些区域让你指定什么地方你会使用遮挡剔除.

注意: 默认情况下如果你不创建任何遮挡剔除区域, 整个场景都会进行遮挡剔除.

Properties

 

 

Quick Select

快速选择和创建一个 Occlusion
Area
并且快速编辑它.

None

这个是默认值.

Create New

创建一个新的Occlusion
Area GameObject.

当你点击 Create
New
 in the Quick Select drop down, Unity将自动创建一个 Occlusion
Area
 并且删除默认区域(整个场景). 现在你可以根据需要开始调整Occlusion
Area(s).

Unity3d游戏场景优化杂谈(4)

Occlusion Area 检视面板.

Properties



Size

定义 Occlusion
Area
的尺寸.

Center

选择 Occlusion
Area
的中心.
B
默认为0,0,0 并在box的中心位置.

Is View Volume

定义摄像机的活动范围区域. 点选这个选项才能应用遮挡剔除在Occlusion
Area
内的静态物体.

Is Target Volume

如果你要遮挡剔除运动物体,打开这个选项.

Target Resolution

确定区域内的 Occlusion
Culling
精度. 即一个 Occlusion
Area
的单元尺寸. 注意: 这个选项只对 Target
Areas
(移动物体)起作用.

Low

减少计算时间但同时精度降低.

Medium

计算时间和精度中等,比较平均.

High

计算时间长但精度高.

Very High

精度很高,计算时间更长.

Extremely High

最高精度.注意: 计算时间令人发指。

如果摄像机处于遮挡区域之外或者任何物体超出区域, 这些物体将不会被遮挡剔除.

Occlusion Culling - Bake

Unity3d游戏场景优化杂谈(4)

 

 Occlusion
culling
 检视面板 bake
tab.

Properties

 

 

View Cell Size

每个 view
area
单元的尺寸, 尺寸越小遮挡剔除越精确. 这个数值用来平衡遮挡剔除的精度和存储容量

Near Clip Plane

Near clip plane 如果设置最小数值 那么游戏中所有摄像机都可看到.

Far Clip Plane

Far Clip Plane 用于选择 objects. 任何物体的距离大于这个设定数值都会被自动遮挡.(Should
be set to the largest far clip planed that will be used in the game of all the cameras)

Quality

品质级别

抱歉!评论已关闭.