文章目录

  • 概述
  • LOD Group 选择条
  • 预览 LOD 切换
  • Renderers for LOD Meshes
  • LOD切换
  • Fade Transition Width
  • Working with Speed Tree mode
  • API

概述

当绘制对象时,单位像素绘制的三角形数量越多,效率就越低。因此我们希望在保证精度的前提下渲染尽量少的三角形数量,LOD可以解决这个问题。

LOD(Level of Detail),根据对象距离摄像机的距离,使用合适的渲染数据(Renderer,Mesh,Material)来对对象进行渲染。典型的,一个角色,当距离摄像机特别近时,我们希望展现更多的细节,比如布料纹理,花纹。但是当距离摄像机特别远时,即使渲染了这些细节,屏幕上也不一定能看到,因为这些细节可能比一个像素还要小,这些渲染就没有效果了。同时,近处栩栩如生的细节,到一定距离后,会产生像素抖动,例如衣服上耀眼的金线,在远处由于误差,可以一会渲染,一会不渲染,效果就是一些杂乱的亮点在闪烁,显得很脏。所以无论是为了降低渲染负载,还是降低像素抖动,当对象离我们较远时,都应该用简化的Mesh,简单的材质进行渲染。这就是LOD的作用。

题外话,其实对于其它部分,比如动画播放,AI更新,也是适用该概念的,远处的东西执行简化的逻辑。

在Unity中,使用 LOD Group 组件用来管理对象细节等级(Level of Detail)。

控制LOD切换

LOD选择条,选择LOD Levels,进行编辑,以及查看效果。

Load Bias质量设置信息。图中的信息表示当前设置为2.0,只要设置为1以外的值,都会出现该提示。在Editor>ProjectSettings>Quality>Other>LOD Bias进行设置。该值用来定义摄像机距离对象多远时,开始执行LOD逻辑。

Fade Transition Width,定义淡入淡出距离。当不选择Animate Cross-fading时,选择Culled前面的LOD,该参数会出现。主要是解决2个问题:浮点抖动,即由于浮点误差,摄像机和对象都不动时,在可见距离判断上不精确,结算结果一会可见,一会不可见,对象会闪烁。二是如果该判断范围太小,则相对距离在很小的范围内变化时,也会比较频繁地在可见,不可见之间切换,该width实际上定义了一个缓冲区来避免该现响。

该LOD级别进行渲染的Renderer,可以有多个。

此外,在该组件底部还有2个按钮

Recalculate Bounds:当添加进新的LOD Mesh Renderer 时,重新计算 Bounding Volume(包围体)。

Recalculate Lightmap Scale:当LOD包围体更新后,重新计算对象的所有的Mesh Renderers的 lightmap scale 属性。

LOD Group 选择条

LOD Group Selection Bar 用带颜色的框来表示选中的LOD。

LOD框内的百分数,是该LOD激活的阈值,该阈值是对象在屏幕空间中的高度与屏幕总高度的比值。例如,如果LOD1的threshold被设置成了50%,则当拉远摄像机,到该对象在视口中的高度小于视口高度的一半时,显示该LOD。

A:LOD预览的播放指示器。可以拖动摄像机图标来在LOD之间切换。在其底部显示了当前的百分比。

B:点击level框选中一个LOD,选中后,可以编辑两侧的框线来编辑其切换区域值,以及编辑显示用的渲染器(Renderers)。

C:在LOD框内,点击鼠标右键,会弹出菜单,可以删除该LOD,活在在LOD前插入新的LOD。

D:Level调整控制。拖动框的边线来改变LOD等级的百分比。

注意:如果 LOD Bias 的值不是1,则进行LOD切换时的摄像机位置可能不是对象在屏幕中高度比时的位置,所以会显示警告。

预览 LOD 切换

当在Scene视口中选中一个对象,并用滚轮移动摄像机,或者直接在LOD Group 组件上拖动摄像机图标,可以看到距离多远时进行LOD切换。

当切换LOD时,会渲染对象当前LOD的包围盒,以及当前LOD文字。

Renderers for LOD Meshes

选中一个LOD后,可以编辑他的渲染模型。

Renderers 是该LOD要进行渲染的Mesh,通常是挂载了LOD Group组件的对象的子对象。

点击Add按钮添,会弹出窗口,列表中是当前场景的所有对象,可以选择一个作为该LOD渲染的Mesh,也可以直接从Hierarchy窗口中直接拖动一个对象上去来添加,完成后该按钮变成一个Mesh预览,并显示“-”按钮来删除。同时后面会显示Add按钮。

如果添加的对象,不是该对象的子对象,Unity会提示将其编程子对象。

LOD切换

游戏过程中,我们不想让玩家明显地感觉到切换的过程,因此要实现一种平滑地切换。

当切换时,Unity会同时渲染当前和下个LOD地Mesh,并分别淡入和淡出。

Cross-fading 是同一时刻,用0-1地权重,渲染2个等级地技术。

Unity实现了2种方式地切换,混色和半透明。

对于最后一个LOD,没有cross-fading,仅仅是淡出,后面没东西淡入了:)

设置平滑切换:

  1. Fade Mode 选择 Cross Fade。

注意,如果使用了Speed Tree,请使用 Speed Tree 模式

  1. 默认地,Animate Cross-fading 是勾选的,意思是Unity会按照时间来执行淡入淡出。如果想要自定义根据摄像机位置的切换区域,取消该选项,并设置 Fade Transition Width参数来控制。

Fade Transition Width

当模型的高度比例到达下个LOD的阈值时,开始切换LOD,例如如果LOD1的阈值时60%,当高举比例为60%时,立即进行LOD0和LOD1之间的切换,切换会持续一定的时间。

当勾选 Animate Cross-fading时,该过程是自动的,不需要进行任何设置。每个LOD切换执行同样的过程和时间。

也可以选择在LOD内定义其切换区域。Animate Cross-fading未选择时,该参数会显示。每个区域开始,并在下个LOD的阈值前结束。该区域定义的是在该LOD时,到达下个LOD差的百分比为多少时,开始执行(相当于提前进行)LOD的切换。

设置方法:

  1. 取消 Animate Cross-fading 复选框
  2. 选择一个LOD,并调整 Fade Transition Width 的值。

该值是当前LOD的整个长度的百分比。越大,开始的越早。

Working with Speed Tree mode

Speed Tree 的集合体为每个顶点存储了下一个LOD的位置信息,每个顶点知道如何在当前LOD位置和下个LOD位置之间进行插值。导入speed tree构建的模型时,Unity会自动选择Speed Tree mode。

Unity只需要渲染当前的LOD几何体,并提供一个0-1的值来控制每个顶点逐步的移动到下一个LOD的位置。在LOD切换结束后,就变成下个LOD的几何体了。

Speed Tree 模式用该 Blend Factor 对顶点位置,在当前Mesh LOD Level和下个Mesh LOD Level之间进行插值。用茶之后几何体进行渲染。

注意:Speed Tree 模式仅混合2个Mesh LOD levels,即它们都是Mesh Renderer。如果是切换到billboard片LOD级别或完全消失,则执行Cross-fading模式。

Blend Factors in Shader code

Unity并没有内建的提供混合两个Mesh的技术。如果需要,则要自己实现。

Unity会根据对象的屏幕尺寸计算混合因子,并传递给shader,存储在unity_LODFade.x中,y则是LOD Level。根据Fade Mode,在shader中对应LOD_FADE_PERCENTAGE和LOD_FADE_CROSSFADE。

API

编程接口

Unity LOD Group相关推荐

  1. Unity【LOD Group】- 关于性能优化中LOD的使用与总结

    LOD是性能优化中常考虑的一项内容,本文分为以下部分介绍LOD的相关内容: 目录 一.什么是LOD: 二.LOD如何使用: 三.使用LOD的弊端: 四.使用LOD的注意事项: 一.什么是LOD: LO ...

  2. Unity User Group深圳站——Timeline Cinemachine分享

    报名说明:UUG深圳站,2月分享活动正式启动,1月29日中午12:00前报名可获赠Unity精美纪念礼物一份~ 关于Unity Unity 是一款多平台的综合型游戏开发工具,它的出现对蓬勃发展的全球游 ...

  3. Unity - 人物对象的 LOD 管理

    文章目录 Unity 没有内置的人物角色 LOD 管理 可以自己写脚本按距离来控制 扩展.及其问题 References Unity 没有内置的人物角色 LOD 管理 参考了 Unity 论坛上的某个 ...

  4. Unity - 搬砖日志 - 获取 LODGroup 当前显示的 LOD 级别

    最近 QA 同学需要在 某个 LODGroup 对象,当前显示的 LOD 是哪个级别的功能,所以上网搜索了一下,发现:Current LOD level - LOD Group Unity 也有人需求 ...

  5. Unity优化之 LOD 和 HLOD

    /// Shader LOD - 这个是另外一种控制细节级别的技术 - 在一个Shader当中,可以给不同的subshader指定不同的LOD属性,例如: SubShader {         LO ...

  6. Unity的Realtime GI, Probe Volumes, LOD Groups

    Unity的Realtime GI, Probe Volumes, LOD Groups RealTime GI Light Probe Proxy Volumes LOD Groups Refere ...

  7. Unity最全渲染优化(LOD、遮挡剔除、光照贴图、Mash合并)

    LOD技术 1.创建空物体,添加组件Lod Group 2.把不同细节的模型分别拖入到相对应的LOD0.LOD1.LOD2中去 3.调节每个区间的大小,测试 遮挡剔除 概念:只渲染那些在视野内的游戏物 ...

  8. Unity场景模型优化技术--LOD和OcclusionCulling

    LOD和Occlusion Culling Lod和遮挡剔除. Occlusion Culling:Occlusion Culling 技术是指当一个物体被其他物体遮挡住而相对当前摄像机为不可见时,可 ...

  9. Unity优化 lod技术

    Unity优化 lod技术 LOD Group是unity里面的一项插件,他的功能是可以随着摄像机视角的不断远离或靠近来显示设定好的模型. 为什么使用lod: 当场景有许多模型而且都是面数很多的高模, ...

最新文章

  1. 《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》——1.2 数字图像处理与机器视觉...
  2. 苹果免费Mac OS X和办公软件动了谁的奶酪
  3. Basic Example of JMX Technology--转载
  4. Apexchart整数多出小数点
  5. P2197 【模板】nim 游戏(python3实现)
  6. 配置nfs环境的一些命令
  7. Linux kill 命令 以及USR1 信号解释
  8. 将自己电脑的SSH key添加到GitHub上
  9. UOJ424 Count 生成函数、多项式求逆、矩阵快速幂
  10. vmware workstation虚拟环境安装及创建虚拟机
  11. 职称计算机考试excel内容,2020年职称计算机考试EXCEL试题练习
  12. rpgmakermv存档修改网站_NexT 网站配置——雏形初成
  13. 毛星云opencv之用鼠标进行交互操作
  14. BUCK电感工作模式
  15. lte网络是什么意思
  16. Fortran编程(VScode配置)——笔记2
  17. 选择排序总结以及排序算法的稳定性
  18. RANSAC如何动态更新最大迭代次数
  19. GIF修复(图片隐写)
  20. 异或差分序列_差分序列的性质及应用

热门文章

  1. FAST-LIO2.0代码解析(一)preprocess.h
  2. CAD全版本软件安装包(含最新2023)
  3. seo伪原创文章优化(怎么找可以做伪原创的文章)
  4. 虚拟中的多态与现实中多态
  5. R | failed to load cairo DLL
  6. Mysql按条件求和Sum函数
  7. 探究ESP32S【第六天】——接入米家(插曲)
  8. 宝贝不哭,妈妈打它--转贴
  9. 苹果怎么登录服务器未响应,王者荣耀登陆游戏服务器未响应该怎么解决 王者荣耀无法登陆解决办法...
  10. 13、Kanzi插件——通过Kanzi Engine插件创建自定义节点+代码解析