跳到主要内容

MipMap与LOD是何物?

· 阅读需 5 分钟
苏明才
Vulkan驱动填坑狮

MipMap与LOD是何物?

LOD:模型金字塔

LOD:全称Level Of Detail,中文翻译“细节级别渐变”,顾名思义,不同的级别展示不同的细节,那么究竟这个技术是如何运用在游戏项目中的呢?通过例子我们来学习一下。关于为什么要使用这个技术,和游戏优化是密不可分的,使用这个技术可以减少需要处理的模型顶点数目,降低GPU性能瓶颈的风险。

原理:当模型离摄像机(可以是人物摄像机或其他摄像机)很远时,然后根据距离的远近使用不同模型级别,远的时候就选择低级别的模型,近的时候选择高细节模型,这样就可以减少模型上面的顶点和面片数量从而提高性能。

准备:准备三个相同的模型,但是这三个模型他们的三角面和顶点数都不同,这样就可以代表三种从高—中—低的层级。(由于没有找到模型资源,所以这里我们使用最能体现GPU性能消耗的particle特效来做,rate分别是20,10,5)

首先在层次面板创建一个EmptyGo,命名为TestLOD,对你找来的三个模型以“...LOD01”(结尾序号表示层级)命名,最后全部拖放到TestLOD下,记住记住,这三个物体位置要全部相同。

img

img

接下来选择TestLOD,添加LODGroup组件,添加完事的组件面板应该如图:

img

常用参数详解:

  • FadeMode:这个表示模型级别变化时候的过渡方式

  • LOD 0 ..:细节级别,百分比表示摄像机的可见范围(范围可调)

接下来我们运行游戏,在场景视图中我们手动拖动主摄像机,打开profile(性能分析器),可以看到在不同距离的时候,GPU的性能参数有明显的不同:

img

(后)

img

(前)

img

其中绿线就表示批处理数目,明显发现后面的批处理数目降低了一个,蓝线表示pass数目,pass数目也降低了一个,后面的顶点数也将低了0.1k。为什么要强调这个?因为我们优化就是从减少DrawCall开始的,减少DrawCall需要使用批处理技术开始的。

MipMap:纹理贴图金字塔

正如上面所说,mipmap针对的是纹理贴图,大白话就是,一个模型身上会有贴图,当我们对这个贴图使用了MipMap技术之后,那么在游戏运行中这个模型的贴图会根据摄像机距离模型的远近而调整不同的不同质量的贴图显示。

在这个游戏场景中,我们给一个模型贴了一个木纹贴图,当我们没有对这个贴图使用MipMap技术的时候,无论我们摄像机距离模型的位置在哪,这张贴图永远都是显示一样的,这样是完全没有必要的,我们使用这个技术就是为了让当摄像机比较远的时候,你用在精细的贴图我们玩家也看不见,而且还浪费资源,提高了性能瓶颈。

img

img

img

上面就是我们没有对贴图使用MipMap技术,然后测试的结果,那当我们使用了MinMap技术之后,结果又会是什么样子的呢?

发现图片大小变大了,这是因为我们使用MipMap技术之后,会对这个贴图生成八张精度质量不同的贴图,所以内存占用变大了。

所以关于这个技术是否使用,根据你的项目而定,什么都是有利有弊的。

img

img

img


原文链接:https://blog.csdn.net/penchaoo/article/details/54291529