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

2023-11-07

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 剔除

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

渲染性能优化之几种LOD层次细节总结 的相关文章

  • vue动态合并行

    这个 处理数据 将表格数组传入 在获取到数组时调用 getSpanArr data this spanArr for var i 0 i lt data length i if i 0 this spanArr push 1 空数组 用来记
  • Linux下生成patch和打patch

    通过diff工具生成补丁 patch工具打上补丁 在使用diff之前 你需要保留一份未修改过的源码 然后在其它地方修改源码的一份拷贝 diff对比这两份源码生成patch 修改过的源码必须保留原来的文件名 例如 如果你修改源码中的a c文件
  • chinesecalendar 模块判断节假日

    chinesecalendar是python 中判断date类型的日期是工作日 还是节假日 比较准确地模块 先安装该模块 pip install chinesecalendar 导入模块的用法如下 import datetime from
  • PowerShell 基本知识

    常见的 powershell 攻击工具 PowerSploit powershell 后期漏洞利用框架 常用于信息探测 特权提升 凭证窃取 持久化等操作 Nishang 基于 PowerShell 的渗透测试专用工具 集成了框架 脚本和各种
  • Android 自定义控件+下拉选择框实现

    自定义控件 下拉选择框实现 当系统自带的控件不能满足我们的需求 而我们又会经常使用到 这个时候我们就可以自定义控件 下拉框是我们在做项目中经常会需要用到的 上图就是一个自定义的控件 点击显示下拉框进行选择 pop view xml 自定义控
  • docker-compose 部署JavaWeb

    目录结构 1 迅雷提取上面tar文件包 里面有一个项目 别TM反编译我的项目 链接 https pan xunlei com s VNDqngi2KD6Go2SmYGZiAizjA1 pwd b2w5 提取码 b2w5 2 搭建Linux
  • linux后台启动seata,yearning

    1 yearning nohup Yearning run b 8 142 131 56 p 9000 gt opt yearning log yearning log 2 gt 1 2 seata nohup sh seata serve
  • Vue项目部署到Linux服务器

    首先用到一个软件为finalshell 下面是我的百度网盘文件 永久有效嗷 链接 https pan baidu com s 1fUPI1RtHwTsvbfqctO1WDw 提取码 ymme FinalShell 简介 FinalShell
  • mysql 主从 mysqldump_MySQL5.7基于mysqldump的主从复制

    1创建账号 创建用于复制的账号 GRANT REPLICATION SLAVE ON TO repl 192 168 1 IDENTIFIED BY PASSWORD repl4salve 创建用于监控的账号 grant replicati
  • javascript模块化理解(通俗易懂)

    http www ruanyifeng com blog 2012 10 javascript module html http www ruanyifeng com blog 2012 10 asynchronous module def
  • epoll多路复用-----epoll_create1()、epoll_ctl()、epoll_wait()

    include
  • 虚幻引擎程序化资源生成框架PCG 之 常用撒点方法小结

    PCG真好玩 门槛很低 天花板很高 文章目录 前言 1 基本撒点 1 1 Landscape上撒点 1 2 使用射线检测在地表面撒点 1 3 使用曲线撒点 1 3 1 沿曲线撒点 1 3 2 在闭合曲线内部撒点 1 4 在StaticMes
  • 液晶LCD1602使用介绍

    液晶LCD1602简介 LCD1602液晶也叫1602字符型液晶模块 LCD1602液晶是一种专门用来显示字母 数字 符号的点阵型液晶模块 LCD1602液晶是由若干个5x7点阵字符位组成 每个点阵字符位都可以显示一个字符 包括字母 数字
  • Elasticsearch更新语法

    文章目录 update 语法 示例 数值计算 add列表元素 remove列表元素 add字段 remove字段 delete文档 detect noop upsert更新 新增 scripted upsert doc as upsert
  • python读取二进制文件并画图_使用Python读取二进制文件的实例讲解

    目标 目标文件为一个float32型存储的二进制文件 按列优先方式存储 本文使用Python读取该二进制文件并使用matplotlib pyplot相关工具画出图像 工具 Python3 matplotlib os struct numpy
  • 理解深度学习中的学习率

    学习率是最影响性能的超参数之一 如果我们只能调整一个超参数 那么最好的选择就是它 相比于其它超参数学习率以一种更加复杂的方式控制着模型的有效容量 当学习率最优时 模型的有效容量最大 从手动选择学习率到使用预热机制 本文介绍了很多学习率的选择

随机推荐

  • 渲染富文本编辑器并设置富文本编辑器的高度

    目标 富文本编辑器 vue quill editor 的基本使用 vue quill editor npm 一 渲染富文本编辑器 运行如下的命令 在项目中安装富文本编辑器 npm i vue quill editor 3 0 6 S 在项目
  • 关于android指纹识别兼容6.0以下版本

    指纹识别功能以及兼容6 0以下的版本 刚好公司安全问题用到了指纹识别和人脸识别 下面就介绍一下指纹识别的功能 其实看了源码要实现这个挺简单的 其实要使指纹识别功能能兼容6 0以下的版本主要是用FingerprintManagerCompat
  • java自学笔记1:java中的类

    一 1 类的重要性 所有java程序都以class为组织单元 2 什么是类 类是模子 确定对象将会y拥有的特征 属性 和行为 方法 3 类的组成 属性和方法 4 定义一个类的步骤 a 定义类名 b 编写类的属性 c 编写类的方法 publi
  • 如何在html中加入视频

    第一步 首先下载video js 百度一下就能找到 这个是下载后的目录 第二步 先把要用到的js css swf都加载到html页面上 如 第三步 加入下面的代码
  • 源根‘E:\XXX’在模块‘项目名’中重复

    解决办法 新建一个文件夹存储项目 然后打开新建好的项目 就没有报错了
  • stem课程方案

    现在人们开始关注孩子的STEM教育 为了推动这一新的教育发展势头 父母可以在激发孩子关于STEM教育及其专业可能性方面发挥重要作用 在孩子的stem教育上 父母究竟应该怎么做呢 格物斯坦小坦克来告诉你 发现孩子天生的亲和力和学习能力 每个孩
  • Unicode转Utf-8. C++ 中文字符串比较

    c 中如何比较中文字符串 假如通过TCP UDP从其他地方传过来一个UTF 8编码的中文字符串 现在需要你判断这个字符串是否是你想要的 之前的尝试 std string recv data std string my string 字符串
  • 关于数据生成二维码保存和解密删除二维码

    文章目录 前言 一 pom配置依赖 二 文件引入 1 BufferedImageLuminanceSource 2 QRCodeUtil 3 MyPicConfig 4 UploadUtils 三 测试 前言 所需文件 MyPicConfi
  • 荣耀总裁赵明:年轻人拖着世界往前走

    有限的资源聚焦一个领域 才能在纵深上发展 一点的突破可以带动一个行业的发展 赵明在演讲中提到 自认资源有限的荣耀 找准了两个基点 一个是年轻人 一个是科技 两者间相互映照 年轻人更易于接受 也更热爱科技 科技在年轻人身上会出现更强的化学反应
  • 卡诺图简单逻辑化简与五变量卡诺图化简

    一 格雷码编码规则 画卡诺图的时候需要先将所有变量可能以格雷码的形式排列在方格两侧 所有变量有2 n个 虽然我们常用的变量为四个及以下 可以熟记格雷码 但为了学习还是有必要了解格雷码的编码规则 格雷码的基本特点就是任意两个相邻的代码只有一位
  • 什么?强化学习竟然来源于心理学?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由罗晖发表于云 社区专栏 1 Google的DQN论文 2015年2月 Google在Nature上发表了一篇论文 见附件 Human level control through
  • GO语言网络编程(并发编程)Sync

    GO语言网络编程 并发编程 Sync 1 Sync 1 1 1 sync WaitGroup 在代码中生硬的使用time Sleep肯定是不合适的 Go语言中可以使用sync WaitGroup来实现并发任务的同步 sync WaitGro
  • MySQL 数据库中的视图

    大家好 作为一名互联网行业的小白 写博客只是为了巩固自己学习的知识 但由于水平有限 博客中难免会有一些错误出现 有不妥之处恳请各位大佬指点一二 博客主页 链接 https blog csdn net weixin 52720197 spm
  • SQLServer修改表数据

    使用SSMS数据库管理工具修改数据 修改任意一条或者多条都可以 1 打开数据库 选择数据表 右键点击 编辑所有行 如未配置 点击编辑前200行 2 编辑需要修改的数据 编辑完成后 右键点击空白处 选择执行SQL即可编辑成功 使用T SQL脚
  • 【qt】在qt里调用shell脚本-实现上位机调用Detectron的推断

    qt调用shell脚本有三种方法 目的 用qt做一个界面 本质是调用写好的shell脚本 调用detectron的infer simple py文件进行样本推断并显示在界面里 遇到的问题 但是本人只有system 可以行得通 而且调用的脚本
  • 故障排除经验——笔记本电脑重启后键盘失灵的解决办法(亲测可用)

    问题描述 下午 卸载了360软件 安全卫士 软件管家 360安全浏览器 后 重启电脑 然后电脑开始硬盘扫描 检测 结果告知不能成功修复 随后 我选择 继续使用Win10 选项 就发现电脑键盘已经失灵 无法输入开机密码 一度让我抓狂 在随后的
  • 堆栈相关应用算法

    栈的压入 弹出序列 题目描述 输入两个整数序列 第一个序列表示栈的压入顺序 请判断第二个序列是否可能为该栈的弹出顺序 假设压入栈的所有数字均不相等 例如序列1 2 3 4 5是某栈的压入顺序 序列4 5 3 2 1是该压栈序列对应的一个弹出
  • 什么能力很重要: 维持自己的框架的能力

    作者 纸箱之神 链接 https www zhihu com question 305507128 answer 637314109 有人答努力 坚持 选择 自律 学习 这些都很重要 但是我觉得 还有一个能力是凌驾于所有这些答案之上的 那就
  • 使用idea创建项目的步骤

    使用idea创建项目的步骤 1 点击桌面安装好的idea 2 由于我之前创建好了 所以打开的时候直接就进去 接下来 创建idea 3 File new project 4 点击project 创建项目 5 进行下一步 6 继续下一步 7 会
  • 渲染性能优化之几种LOD层次细节总结

    CIM 城市信息模型 这种大场景或者说特大场景LOD是非常重要的 城市 BIM 地形都非常系需要 根据公司的项目需求这里做了一下总结各种LOD的技术 算法 策略 首先 我们公司对于城市这种大场景我们提出使用如下技术 1 组织 符合3Dtil