简介
细节层次(Level of Detail,LOD)的基本思想是当物体对渲染出图像贡献越少,使用越简单的形式来表达该物体。这是一个已经在各种游戏中广泛使用的基本优化技术
链接
Github 浅墨 游戏开发中的渲染加速算法总结
19.9 细节层次(LOD) - Justin的文章 - 知乎
过程
- 生成
- 生成不同细节的模型表示
- 选择
- 基于某种准则选取一个层次细节模型,比如屏幕上的评估面积
- 切换
- 从一个细节层次转换到另一个细节层次的过程
LOD切换技术
- Discrete Geometry LODs(离散几何 LOD)
- 离散几何LOD是最简单的LOD算法,不同的表示是不同图元数量的同一模型,但这种方法突越现象严重
- 离散几何LOD是一种LOD算法,即层次细节模型,是一种实时三维计算机图形技术,可以根据物体对渲染出图像的贡献程度,选择不同数量的几何体来表达该物体
- 这种算法非常适合现代图形硬件,因为这些单独的静态网格可以存储在GPU内存中并重用
- 但是,这种算法也有一个缺点,就是当从一个LOD切换到另一个LOD的时候,会产生突跃现象,即模型的忽然替换会引起观察者的注意
- Blend LODs(混合 LOD)
- 在概念上,完全可能存在一种直观的方法,从一个LOD切换到另一个LOD,只需要在较短的时间内在两个LOD之间执行一个线性混合,这种方法无疑可以得到一种比较平滑的切换,但是这种混合操作的代价较高。渲染两个LOD要比一个LOD需要更大开销,因此也就违背了LOD的初衷。但LOD切换通常发生在较短时间内容,在同一时间也不是对场景中所有物体进行切换,所以依然可以从中获益
- Alpha LODs(透明 LOD)
- 完全避免突越现象的一种简单方法便是使用alpha LOD。其中并没有使用同一物体很多不同细节的实例,而且每个物体只有一个实例。
- 随着LOD选取度量值(如与物体之间的距离)的增大,物体整体透明度也随之增大(也就是alpha值减小),当完全透明时,物体最终就会消失。
- 这种方法的优点是,比离散几何LOD方法上感觉更连续一些,可以避免突跃现象。此外,由于物体最终会完全消失而不需要进行渲染,可以得到很好的加速效果
- 使用Alpha LOD对图中的圆锥体进行渲染,当距离圆锥体较远时,就提高它的透明度,直到最后消失。直线左边的图像是从同一距离处进行的观察,而直线右边的图像是左边图像不同尺寸的情形
- CLODs and Geomorph LODs(连续 LOD 和 几何形变 LOD)
- 连续细节层次(Continuous Level of Detail , CLOD)的基本思想是基于LOD选取值来精确决定可见多边形的数量。在100m远处,模型包含1000个多边形,当移动的到101m的地方时,模型减少到998个多边形
- 几何形变层次细节(Geomorph LODs)是基于简化生成的一组离散模型,且其中模型顶点之间的链接关系保持不变。而网格简化的过程可以从一个复杂的物体中创建各种不同的LOD模型,具体做法可以参见《Real-Time Rendering 3rd》12.5.1一节,一种方法就是创建一组离散的LOD,然后按照上文中提到的方法来使用。这里的边塌陷(Edge Collapse Methods)方法有一个有趣的性质,即允许在不同的LOD之间采用其他过渡方法
- 连续细节层次和几何形变LOD的区别是,连续细节层次是基于LOD选取值来动态地调整物体的多边形数量,而几何形变LOD是基于简化生成的一组离散模型,且在不同模型之间进行顶点插值,也就是说,连续细节层次是一种连续的LOD技术,而几何形变LOD是一种离散的LOD技术,但可以实现平滑的过渡效果
- 两者的优缺点如下:
- 连续细节层次的优点是,它可以根据实际需要来调整物体的细节程度,而不是像离散几何LOD那样只能选择预先定义好的模型,这样可以提高渲染效率和质量
- 连续细节层次的缺点是,它需要进行复杂的网格简化和插值运算,这会增加计算开销
- 几何形变LOD的优点是,它不仅可以生成一组离散的LOD模型,而且可以在这些模型之间进行顶点插值,以实现平滑的过渡效果,这样可以避免突跃现象,也就是当物体从一个LOD切换到另一个LOD时,出现明显的形状变化
- 几何形变LOD的缺点是,它需要额外的存储空间来保存不同模型之间的顶点链接关系,而且需要进行顶点插值运算,这会增加计算开销
- 几何形变LOD的简化模型图示。左边和右边的图像所示分为为低细节层次和高细节层次的模型,中间的图像是在左右模型中间进行插值生成的几何变形模型。注意。中间的牛模型和右边的模型具有相同数量的顶点和三角形。
LOD的选取技术(基于距离和基于投影面积的LOD选取最常用)
- Range-Based(基于距离的LOD选取)
左图为基于距离的LOD的原理示例图。其中,LOD3是一个空物体,也就是表示当物体大于r3时,就不渲染任何物体,因为物体对图像的贡献度不够。右图为场景中的一个LOD节点,它只有一个子节点基于r - Projected Area-Based(基于投影面积的LOD选取)
- 投影面积越大,就选取细节越丰富的LOD。
- Hysteresis(基于滞后的LOD选取)
- 若用于确定LOD度量标准围绕某个值ri在画面之间是变化的,那么就会出现不必要的突跃现象,也就会在不同的LOD之间来回快速切换。对此,可以引入一个围绕ri值的滞后来解决这个问题。如下图,这是一个基于距离的LOD,可以应用于任何类型,当r增大时,使用上一行的LOD距离;当r减小时,使用下面一行的LOD距离
灰色区域表示的是基于滞后的LOD选取方法的滞后区域