Unity【LOD Group】- 关于性能优化中LOD的使用与总结
LOD是性能优化中常考虑的一项内容,本文分为以下部分介绍LOD的相关内容:
目录
一、什么是LOD:
二、LOD如何使用:
三、使用LOD的弊端:
四、使用LOD的注意事项:
一、什么是LOD:
LOD技术(level of detail)被称作多层次细节,它的原理是模型物体在场景中根据距离相机的远近来显示不同细节程度的模型,距离渐近时,显示细节程度较高的模型,距离渐远时,显示细节程度较低的模型,从而节省性能的开销。
二、LOD如何使用:
Unity中通过LOD Group组件来实现LOD,如图所示的集装箱模型,我们准备了四个不同细节程度的Mesh网格:
新建一个空物体,添加LOD Group组件,默认是分为3个层次,最后的Culled层是指的剔除层,不会渲染任何模型:
这里我们需要四个层次,通过选中一个层次右键/Insert Before插入一个:
通过Add来添加不同层次要渲染的Mesh网格:
添加完成后在场景中进行预览:
除了在Inspector检视面板设置LOD外,在代码中也可以进行设置,LOD Group类中提供了SetLODs函数:
//
// 摘要:
// Set the LODs for the LOD group. This will remove any existing LODs configured
// on the LODGroup.
//
// 参数:
// lods:
// The LODs to use for this group.
[MethodImpl(MethodImplOptions.InternalCall)]
[FreeFunction("SetLODs_Binding", HasExplicitThis = true)]
public extern void SetLODs(LOD[] lods);
测试代码:
using UnityEngine;public class LODExample : MonoBehaviour
{private void Start(){LODGroup group = gameObject.AddComponent<LODGroup>();LOD[] lods = new LOD[4];for (int i = 0; i < lods.Length; i++){lods[i] = new LOD(1 - (i + 1) * .2f, new Renderer[] { transform.GetChild(i).GetComponent<Renderer>() });}group.SetLODs(lods);group.RecalculateBounds();}
}
三、使用LOD的弊端:
弊端也是显而易见的,首先是增加建模同事的工作量,要准备不同细节程度的模型,当然有很多自动减面的插件,例如资源商店中的Mesh Simplify插件,但是程序减面多多少少会破坏模型的原有外观,最理想的情况还是建模人员手动减面。另外,大量的模型文件不但会增加包体的大小,而且在运行时会大量增加内存消耗,因此对于LOD有一句空间换取时间的评价,当然最终是否采用LOD技术要根据具体情况而定,性能优化无非是CPU、GPU与内存之间的取舍。
四、使用LOD的注意事项:
只有最高层次细节的模型才会参与静态光照的烘焙,如图所示,当集装箱物体上的LOD0过渡到LOD1时会变黑,因为LOD1没有参与静态光照烘焙。
如果我们希望细节程度较低的模型看起来也正常,需要在周围放置Light Probe Group 即光照探针,以获取烘焙过程中的间接光照。
具体可以参考官方文档:https://docs.unity.cn/2017.2/Documentation/Manual/LODForBakedGI.html
Unity【LOD Group】- 关于性能优化中LOD的使用与总结相关推荐
- Unity移动端游戏性能优化简谱之 以引擎模块为划分的CPU耗时调优
<Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...
- Unity移动端游戏性能优化简谱之 常见游戏内存控制
<Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...
- 【Unity】学习笔记 | 性能优化(一)—— 渲染
Unity中,每一帧的渲染CPU和GPU都做了些什么 1. CPU检查场景中每个对象,判读他们是否应该被渲染.CPU收集即将被渲染的对象信息,并把这些信息分类为渲染指令(即draw calls) 2. ...
- 干货 | 数据思维在携程商旅页面性能优化中的一次实践
作者简介 Graviton,携程研发总监,专注数据思维驱动团队效能与技术发展. 本文旨在通过一个实际的例子,说明如何通过数据思维来解决研发工作中的一些棘手问题.通过此文,希望能够清楚地阐述我对下面几个 ...
- Oracle执行exists优化,PHP_解决Oracle性能优化中的问题, 在Oracle性能优化时,用exists - phpStudy...
在Oracle性能优化时,用exists替代in,用表链接替代exists,关于前者,一般效果比较明显,exists效率明显比in高,但是如果要想表连接的效率比exists高,必须在from子句中,将 ...
- 023-zabbix性能优化中的几个中肯建议
随着zabbix的广泛应用,少数人的zabbix服务器在性能上出现瓶颈,或者在未来会出现性能方面的瓶颈,接下来讨论几个有效并且简单的优化方案. 服务器硬件 想通过几个简单的配置让服务器提高成倍的性能, ...
- 域服务器性能,ADDS 性能优化中的站点定义和域控制器放置 | Microsoft Docs
域控制器的正确放置和站点注意事项 10/16/2017 本文内容 正确的站点定义对性能至关重要. 站点外客户端可能会遇到身份验证和查询性能不佳的问题. 此外,在客户端上引入 IPv6 后,请求可能来自 ...
- iOS最全性能优化(中)
续 性能优化(上) 9. 重用和延迟加载(lazy load) Views 更多的view意味着更多的渲染,也就是更多的CPU和内存消耗,对于那种嵌套了很多view在UIScrollView里边的ap ...
- oracle groupq by,oracle group by 性能优化
慕田峪9158850 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving ...
最新文章
- hive外部表改为内部表_3000字揭秘Greenplum的外部数据加载——外部表
- ARM处理器的工作状态
- Boost:align对齐的测试程序
- (五)boost库之随机数random
- YbtOJ#20236-[冲刺NOIP2020模拟赛Day9]红点蓝点【线段树,堆】
- P1726-上白泽慧音【tarjan,图论】
- 视图请求限定装饰器-101.课时101.【Django视图高级】限制请求method装饰器(Av61533158,P101)
- U盘安装CentOS Linux图文详解
- Team Foundation Server XXX 不存在,或者此时不可访问:解决方案
- HTML如何消除别的块的影响,CSS清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?...
- Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(3)- TSL指令...
- 康托尔、哥德尔、图灵——永恒的金色对角线
- 电脑出现0xv0000225无法开机的两种解决方法
- Java java.sql.SQLSyntaxErrorException:Duplicate column name ‘xxx‘问题解决
- [二叉树路径总和] 一杯茶一包烟,一个递归转一天
- 大数据应用安全研究报告
- linux系统如何安装adobe flash player
- 照片变古装软件叫什么?好用的古装app拍照软件分享
- 数据库(十)-单表查询(1)条件查询
- DZ论坛克米模板3.5版全解密+完整插件/教程