层级细节LOD Group
随着场景变大,性能将成为越来越重要的考虑因素。管理此情况的方法之一是根据摄像机与对象之间的距离,使网格具有不同的细节级别。 我们将此级别称为__级别__(Level of Detail,缩写为 LOD)。
LOD Group 用于管理游戏对象的细节级别 设置LOD的等级级别显示,当距离在LOD 0时显示的是精度最高的物体,当距离在LOD 1时显示精度中等的物体,当距离在LOD 2时显示精度较低的物体,当距离在Culled时不显示物体
LOD 0时
LOD 1时
LOD 2时
Culled时
遮挡剔除
当对象被其他对象阻挡(遮挡)而不能被摄像机所看到时,遮挡剔除 (Occlusion Culling) 功能会禁用对象的渲染。
视锥体剔除:常规视锥体剔除仅渲染摄像机视野内的对象,将摄像机范围外的物品剔除。
遮挡剔除:受益于视锥体剔除将视野外的物品剔除,如果有对象被更近的对象完全遮挡,则遮挡剔除可进一步从摄像机渲染工作中移除这些被遮挡的对象。
设置遮挡剔除
将游戏类的可被遮挡剔除的遮挡物标记为(Occluder Static),不太可能遮挡其他对象的小型对象应标记为被遮挡物 (Occludee)
将需要剔除的游戏物体在Occlusion给他烘焙游一下
在这里选择需要烘焙的摄像机
烘焙完成在Game窗口进行查看
在图片1中物体的三角面(Tris)比图二少了1700个
遮挡区域
要将遮挡剔除应用于移动对象,必须创建遮挡区域 (Occlusion Area),然后修改其大小以适合移动对象所在的空间(当然,移动对象不能标记为静态)。,通过将遮挡区域 (Occlusion Area) 组件添加到空游戏对象来创建遮挡区域(菜单:Component > Rendering > Occlusion Area)。
创建__遮挡区域__后,请选中 Is View Volume 复选框以遮挡移动对象。
Mesh合并
void MeshCome()
{
MeshFilter[] filters = GetComponentsInChildren<MeshFilter>();
//用数组来获取他的所有子集上的MeshFilter
CombineInstance[] comb = new CombineInstance[filters.Length];
//创建一个CombineInstance来接收子集上MeshFilter
for (int i=0;i<filters.Length;i++)
{
comb[i].mesh = filters[i].sharedMesh;
//
comb[i].transform = filters[i].transform.localToWorldMatrix;
//计算transform矩阵,将子对象本地转世界的矩阵和本对象世界转本地的矩阵相乘,就得到了子对象转换到本对象本地的矩阵。
}
Mesh Meshfinel = new Mesh();
Meshfinel.CombineMeshes(comb);
GetComponent<MeshFilter>().sharedMesh = Meshfinel;
}
获取所有子对象的MeshFilter并创建出一个新的Mesh
原物体的Mesh Reader关闭并给予物体新材质