模型渲染占用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!!!

兄弟们,点个赞呗,激情易退,热血难凉。

附赠照片一张;

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐