CIM(城市信息模型)这种大场景或者说特大场景LOD是非常重要的,城市、BIM、地形都非常系需要,根据公司的项目需求这里做了一下总结各种LOD的技术、算法、策略。

首先,我们公司对于城市这种大场景我们提出使用如下技术:

1. 组织、符合3Dtiles 这种规范,城市要按照tiles加载切换(类似于地图一样)
2. 使用LOD(包括减面、平滑处理的一套)
3. 纹理的压缩,使用硬解为DDS类型

LOD也称为层次细节模型,是一种实时三维计算机图形技术,最先由Clark于1976年提出,其工作原理是:
视点离物体近时,能观察到的模型细节丰富;视点远离模型时,观察到的细节逐渐模糊。系统绘图程序根据一定的判断条件,选择相应的细节进行显示,从而避免了因绘制那些意义相对不大的细节而造成的时间浪费,同时有效地协调了画面连续性与模型分辨率的关系。

OSG实现LOD

使用osg来讲解实现LOD基于OSG讲解一下LOD

LOD细节层次(Level of Detail,LOD)

的基本思想是当物体对渲染出图像贡献越少,使用越简单的形式来表达该物体。这是一个已经在各种游戏中广泛使用的基本优化技术。一般情况下,完整的LOD算法包含3个主要部分:

  1. 生成Generation(手动生成可以也可以减面生成)

  2. 选择Selection

  3. 切换Switching(切换不同精度的模型)

从一个细节层次转换到另一个细节层次,而这个过程便称为LOD切换。

LOD的切换 | LODSwitching

当从一个LOD切换到另一个LOD的时候,忽然的模型替换往往会引起观察者的注意。这种现象被称为突越(Poping)。这里有几种不同的LOD切换方法,有着不同的特性:离散几何LOD | Discrete Geometry LODs混合LOD | Blend LODs透明LOD | Alpha LODs连续LOD和几何形变LOD | CLODs and Geomorph LODs

离散几何LOD | Discrete Geometry LODs

离散几何LOD是最简单的LOD算法,不同的表示是不同图元数量的同一模型,但这种方法突越现象严重。

混合LOD | Blend LODs

在概念上,完全可能存在一种直观的方法,从一个LOD切换到另一个LOD,只需要在较短的时间内在两个LOD之间执行一个线性混合,这种方法无疑可以得到一种比较平滑的切换,但是这种混合操作的代价较高。渲染两个LOD要比一个LOD需要更大开销,因此也就违背了LOD的初衷。但LOD切换通常发生在较短时间内容,在同一时间也不是对场景中所有物体进行切换,所以依然可以从中获益。Giegl等人在

《Unpopping: Solvingthe Image-Space Blend Problem for Smooth Discrete
LOD Transition 》

这篇文章中提出了一种方法,实际应用的效果较为出色。思路是在两个LOD之间有一个alpha值的过渡,有兴趣的朋友可以进一步了解。

透明LOD | Alpha LODs

完全避免突越现象的一种简单方法便是使用alpha LOD。其中并没有使用同一物体很多不同细节的实例,而且每个物体只有一个实例。随着LOD选取度量值(如与物体之间的距离)的增大,物体整体透明度也随之增大(也就是alpha值减小),当完全透明时,物体最终就会消失。这种方法的优点是,比离散几何LOD方法上感觉更连续一些,可以避免突跃现象。此外,由于物体最终会完全消失而不需要进行渲染,可以得到很好的加速效果。使用Alpha LOD对图中的圆锥体进行渲染,当距离圆锥体较远时,就提高它的透明度,直到最后消失。直线左边的图像是从同一距离处进行的观察,而直线右边的图像是左边图像不同尺寸的情形。 与混合LOD的区别是只渲染一个LOD ,只是改变它的透明度,使得突越不这么明显!

连续LOD和几何形变LOD | CLODs and Geomorph LODs

连续细节层次(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之间采用其他过渡方法。在UE4中就是HLOD!几何形变LOD的简化模型图示。左边和右边的图像所示分为为低细节层次和高细节层次的模型,中间的图像是在左右模型中间进行插值生成的几何变形模型。注意。中间的牛模型和右边的模型具有相同数量的顶点和三角形。

LOD的选取 | LOD Selection

给定一个物体不同细节层次,必须做一个选择,决定渲染或者混合其中的哪一个层次,这就是LOD选择(LOD selection)的任务。有几种不同的LOD选择方案,这些方案也可以用于遮挡裁剪算法。常见的三种LOD选取技术是:基于距离的LOD选取( Range-Based )基于投影面积的LOD选取( Projected Area-Based )基于滞后的LOD选取(Hysteresis) 依然是分别进行简要概述基于

距离的LOD选取 |Range-Based

选取LOD的一种常用方法是将物体的不同LOD于不同距离联系起来。细节最丰富的LOD的距离从0到一个用户定义值r1之间,下次层次的LOD的距离位于r1~r2之间 ,LOD3是一个空物体,也就是表示当物体大于r3时,就不渲染任何物体,因为物体对图像的贡献度不够。右图为场景中的一个LOD节点,它只有一个子节点基于r;

基于投影面积的 LOD选取 | Projected Area-Based

基于投影面积的LOD选取,顾名思义,即投影面积越大,就选取细节越丰富的LOD。

基于滞后的LOD选取 |Hysteresis

若用于确定LOD度量标准围绕某个值ri在画面之间是变化的,那么就会出现不必要的突跃现象,也就会在不同的LOD之间来回快速切换。对此,可以引入一个围绕ri值的滞后来解决这个问题。如图,这是一个基于距离的LOD,可以应用于任何类型,当r增大时,使用上一行的LOD距离;当r减小时,使用下面一行的LOD距离。灰色区域表示的是基于滞后的LOD选取方法的滞后区域;

基于Tessellation shader的LOD

Tessellation(曲面细分)是一种将多边形分解成更加细小的碎片以提升几何逼真度的方法。例如,如果处理一个正方形并将其沿对角线切开,那么实际上就是将这一正方形“曲面细分”成为两个三角形。就其本身而言,Tessellation(曲面细分)并不能提升半点逼真度。 置换的贴图就是一个存储高度信息的纹理。当应用到某一表面上时,该贴图让这一表面的顶点能够根据高度信息调高或调低。 例如,使用一块大理石板,图形艺术家能够通过“置换”顶点的方法打造雕刻效果。另一种流行技术是将置换的贴图应用到地形上,以雕琢出弹坑、峡谷以及山峰。从本质上来讲,Displacement Mapping(贴图置换)需要Tessellation(曲面细分),反之亦然。 动态Tessellation(曲面细分)通过即时改变精细度,解决了这一问题。例如,当远处的建筑物首次映入眼帘时,也许仅使用10个三角形来渲染它。随着用户视野的拉近,该建筑物的显著特征开始浮现,更多三角形则被用来描绘窗子和屋顶等细节。当你最终到达门口时,单单旧式铜质门把手一项就动用了一千个三角形来进行渲染;Displacement Mapping(贴图置换)细致地雕刻出了每一道凹槽。由于消除了动态Tessellation(曲面细分)对象的时隐时现,因此游戏环境现在可以扩展至几乎无限的几何精细度。
听前辈说的现在UE5的几千万面片的地形

参考材料:

opengl LOD
细节层次节点
渲染性能优化之Culling 剔除

渲染性能优化之几种LOD层次细节总结相关推荐

  1. 渲染性能优化之Culling 剔除

    几种剔除: 背面裁剪(Backface Culling) 视锥裁剪(View Frustum Culling) 遮挡剔除(Occlusion Culling) 层次视锥裁剪(Hierarchical ...

  2. 从Webkit内部渲染机制出发,谈网站渲染性能优化

    点击上方"IT平头哥联盟",选择"置顶或者星标" 一起进步- 作者:jerryOnlyZRJ 本文是对前文:网站性能优化实战--从12.67s到1.06s的故事 ...

  3. 携程RN渲染性能优化实践

    一.背景 随着 React Native 在前端业界规模性的应用越来越多,各大厂也对其渲染性能越来越看重. 渲染性能的主要评判指标是FMP与TTI,在 React Native 以跨平台前端框架身份逐 ...

  4. 干货 | 携程RN渲染性能优化实践

    作者简介 佳璐,前端开发专家,关注前端框架.性能.质量.效率和新技术. 一.背景 随着 React Native 在前端业界规模性的应用越来越多,各大厂也对其渲染性能越来越看重. 渲染性能的主要评判指 ...

  5. 【转】渲染性能优化:如何平衡GPU和CPU

    本节主要讲一下虚幻渲染之前,都发生了什么. 渲染流程: 首先,虚幻的渲染由三个线程共同完成.分别是CPU线程,DRAW线程,和GPU线程. CPU线程:顾名思义,运行在CPU上,用于计算游戏中的所有逻 ...

  6. 奇舞周刊第 412 期:从硬件、渲染、计算三大视角解析渲染性能优化的本质

    记得点击文章末尾的" 阅读原文 "查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞精选 ■ ■ ■ 从硬件.渲染.计算三大视角解析渲染性能优化的本质 渲染性能优化是个经久不衰的话 ...

  7. golang string 加号连接性能慢_面试必备:浅析C#性能优化的若干种方法

    浅析C#性能优化的若干种方法 1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意. 1.1.1 避免不必要的对象创建 由于垃圾回收的代 ...

  8. MySQL 性能优化:8 种常见 SQL 错误用法!

    声明:转载自 MySQL 性能优化:8 种常见 SQL 错误用法! 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是 ...

  9. MySQL性能优化的9种方法

    MySQL性能优化的9种方法 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快.因此,在创建表的时候,为 ...

最新文章

  1. python 语言-python是一门什么样的语言?
  2. mysql输入select now()_mysql 中select now(); 是怎么执行的?没有指定FROM tablename?
  3. ASP用DSN连接数sql数据库
  4. 从运营角度看待UE设计
  5. java简单系统_Java简单学生管理系统
  6. 关于TCHAR和string对象的c.str()一些注意事项
  7. 单元测试之误解与困境
  8. win10 uwp 渲染原理 DirectComposition 渲染
  9. 群晖nas存储系统原理_为群晖 NAS 加上 SSD 缓存,享受高速带来的酸爽吧!
  10. Android打开系统文件管理器
  11. CSS - font-size 设置小字体不生效解决方案(小于12px)
  12. 解决打印机后台程序服务没有运行
  13. gtid_executed和gtid_purged变量是如何初始化的
  14. 【C】狐狸找兔子问题
  15. 构建根文件系统(一)
  16. java 从已知日期计算干支纪日_天干地支纪日怎么计算?
  17. 青玉案.元夕-2023
  18. 视频号一场书法直播近20万人观看
  19. 基于java我爱短视频管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  20. python中pack函数_关于pack()函数的文章推荐10篇 - pack

热门文章

  1. 星巴克、瑞幸、连咖啡,在新零售三岔路口分道扬镳
  2. 【刷题汇总】 CSP/NOIP真题分析 基础OJ刷题包
  3. 证途网可靠吗,我在证途网备考一建之路
  4. 小米VR安装第三方APP的方法!
  5. 西南石油大学绩点计算器
  6. Python 实现动态人流量计数, 百度AI接口
  7. m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
  8. 计算机应用基础贴吧,计算机应用基础,有会做的吗?
  9. 中国联通与用友签署合作框架协议 多领域展开全面合作
  10. 【人工智能行业大师访谈】1. 吴恩达采访 Yoshua Bengio