模型渲染占用CPU过多,可采用LOD技术,降低远处模型精度,使得渲染CPU占用率下降,配合使用的还有灯光烘焙技术,灯光烘焙可以建模软件烘焙后直接使用,也可以U3的直接烘焙,此处暂且不讲。
LOD重要的组件LODGroup部件,此部件为一个封闭组件,改动LOD的等级和render显示后,需要重新设置SETLod方可正常使用。由此LODGroup的每个层级的比例属性screenRelativeTransitionHeight不能直接设置使用。
1、LOD层级和渲染的重新构造
LOD[] lods = new LOD[2];
Renderer[] renderers = new Renderer[1];
//LOD0:
renderers[0] = cubeTra.GetComponent<Renderer>();
lods[0] = new LOD(1.0F, renderers);
//设置lod参数
lods[0].screenRelativeTransitionHeight = lodFloat;
lods[1].screenRelativeTransitionHeight = 0f;
//lod应用
cubeTra.parent.GetComponent<LODGroup>().SetLODs(lods);
cubeTra.parent.GetComponent<LODGroup>().RecalculateBounds();
2、构造后探测LOD现在显示的等级
LOD使用的时候,是显示其render,模型并不会被隐藏。
但可用以下方法探测正在显示的render。
private IEnumerator CheckLOD_RenderVisible()
{
yield return new WaitForSeconds(0.01f);
Transform lodTrans = cube.GetComponentInParent<LODGroup>().transform;
foreach (Transform item in lodTrans)
{
var rend = item.GetComponent<Renderer>();
if (rend == null)
{
Debug.Log("lodFloat: ");
}
else
{
if (rend.isVisible)
Debug.Log(item.name);
else
{
Debug.Log("rend.isVisible:" + rend.isVisible);
var lodGGG = cube.GetComponentInParent<LODGroup>().GetLODs();
}
}
}
}
3、运行中强制操作LOD参数
手机游戏中经常有模型精度选择,ForceLOD此函数可以控制模型精度。
参数为int型,值为-1,则正常显示,超出LODGroup等级则不显示render。
参数1,则显示LOD1,以此类推;
lodG = gameObeject.GetComponent<LODGroup>();
lodG.ForceLOD(1);
END!!!
兄弟们,点个赞呗,激情易退,热血难凉。
附赠照片一张;