LOD技术

摘 要:虚拟现实中场景的生成对实时性要求很高,LOD技术是一种有效的图形生成加速方法。本文主要介绍了LOD技术的研究内容、LOD模型的生成算法以及LOD模型在虚拟场景生成中的选择。最后,对LOD技术未来的研究方向作了展望。

 

  要害词:虚拟现实 虚拟场景生成 细节层次 网格简化

 

  一、引言

 

  虚拟现实技术是一种逼真地模拟人在自然环境中视觉、听觉、触觉及运动等行为的人机交互技术。它融合了计算机图形学、多媒体技术、人工智能、人机接口技术、数字图像处理、网络技术、传感器技术以及高度并行的实时计算技术等多个信息技术分支。它的主要特征是沉浸感、交互性和想象力。 它的要害技术包括:环境建模技术、立体声合成和立体显示技术、触觉反馈、交互技术、系统集成技术。

 

  虚拟现实中最重要的是人可以在随意变化的交互控制下感受到场景的动态特性,也就是虚拟现实系统要求随着人的活动即时生成相应的图形画面。有两种重要指标衡量用户对虚拟环境的沉浸效果和程度:一是动态特性,自然的动态特性要求每秒生成和显示30帧图形画面,至少不能少于10帧,否则将会产生严重的不连续和跳动感。另一个指标是交互延迟,系统的图形生成对用户的交互动作做出反应的延迟时间不应大于0.1秒,最多不能大于1/4秒。以上两种指标均依靠于系统生成图形的速度。显而易见,图形生成速度是虚拟现实的重要瓶颈。

 

  图形生成的速度主要取决于图形处理的软硬件体系结构,非凡是硬件加速器的图形处理能力以及图形生成所采用的各种加速技术。虽然现今的图形工作站得益于高速发展的CPU和专用图形处理器性能得到很大的提高,但距离VR的需求仍有相当大的差距。考虑到VR对场景复杂度几乎无限制的要求,在高质量图形的实时生成要求下,如何从软件着手,减少图形画面的复杂度,已成为VR图形生成的主要目标。
1976年,Clark[1]提出了细节层次(Levels of Detail,简称LOD)模型的概念,认为当物体覆盖屏幕较小区域时,可以使用该物体描述较粗的模型,并给出了一个用于可见面判定算法的几何层次模型,以便对复杂场景进行快速绘制。1982年,Rubin[2]结合光线跟踪算法,提出了复杂场景的层次表示算法及相关的绘制算法,从而使计算机能以较少的时间绘制复杂场景。

 

  90年代初,图形学方向上派生出虚拟现实和科学计算可视化等新研究领域。虚拟现实和交互式可视化等交互式图形应用系统要求图形生成速度达到实时,而计算机所提供的计算能力往往不能满足复杂三维场景的实时绘制要求,因而研究人员提出多种图形生成加速方法,LOD模型则是其中一种主要方法。这几年在全世界范围内形成了对LOD技术的研究热潮,并且取得了很多有意义的研究结果。

 

  二、LOD技术

 

  1. LOD技术的概念和应用领域

 

  LOD技术在不影响画面视觉效果的条件下,通过逐次简化景物的表面细节来减少场景的几何复杂性,从而提高绘制算法的效率。该技术通常对每一原始多面体模型建立几个不同逼近精度的几何模型。与原模型相比,每个模型均保留了一定层次的细节。在绘制时,根据不同的表准选择适当的层次模型来表示物体。LOD技术具有广泛的应用领域。目前在实时图像通信、交互式可视化、虚拟现实、地形表示、飞行模拟、碰撞检测、限时图形绘制等领域都得到了应用,已经成为一项要害技术。很多造型软件和VR开发系统都开始支持LOD模型表示。

 

  2.虚拟场景生成中LOD模型的选择

 

  恰当地选择细节层次模型能在不损失图形细节的条件下加速场景显示,提高系统的响应能力。选择的方法可以分为如下几类:一类是侧重于去掉那些不需要用图形显示硬件绘制的细节。一类是去掉那些无法用图形硬件绘制的细节,如基于距离和物体尺寸标准的方法。另一类是去掉那些人类视觉觉察不到的细节,如基于偏心率,视野深度,运动速度等标准的方法。此外还有一种方法考虑的是保持恒定帧率。

 

  (1)剔除法

 

  在一些特定的情况下,场景中的一部分几何形体是什么时候都无法被观察者看到的。在此情况下,图形系统不再绘制这部分物体。

 

  (2)距离标准

 

  这种方法考虑的是物体到观察者的距离。这个距离是从视点到物体内指定点的欧氏距离。这种方法的理论依据是当一个物体距离视点越远,此物体能够被观察到的精细的细节部分就越少。这就意味着选择较粗糙的细节层次来表示物体不会对显示的逼真度有很大影响。

 

  (3)尺寸标准

 

  这种方法利用了人眼辨识物体的能力随着物体尺寸的减小而减弱的特性。它考虑到待表示物体的尺寸,较小的物体用较粗糙的细节层次,较大的用较精细的细节层次。

 

  (4)偏心率

 

  此方法利用了人眼辨识物体的能力随着物体逐渐远离视域中心而减弱的特性。视网膜的中心对物体细节的分辨能力较强,视网膜边缘的分辨能力较弱。根据这个原理,将显示的场景分为具有较精细细节层次的中心部分(对应于眼睛视域的中心)和外围部分(对应于视域的外围部分)。

 

  (5)视野深度

 

  这种方法根据观察者眼睛的焦距来为物体选择合适的细节层次。在聚焦区域的前面或者后面的物体不被聚焦。

 

  (6)运动速度

 

  该方法是根据物体相对于观察者视线的角速度选择合适的细节层次。在屏幕上快速运动的物体看起来是模糊的,这些物体只在很短的时间内被看到,因而观察者可能看不清它们。这样就可以用较粗糙的细节层次来表示它们。

 

(7)固定帧率

 

  保持一个较高并且稳定的帧率对于良好的交互性能是非常重要的。这就意味着一旦选定一个帧率,就要保持恒定,不能随场景复杂度的改变而变化。

 

  3.LOD模型的生成

 

  (1)光照模型

 

  这种方法利用光照技术得到物体的不同细节层次。例如,我们可以用较少的多边形和改进的光照算法得到同包含较多的多边形的表示相似的效果。

 

  (2)纹理映射

 

  该方法是适用一些纹理来表示不同的细节层次。具有精细细节层次的区域可以用一个带有纹理的多边形来代替。这个多边形的纹理是从某个特定的视点和距离得到的这个区域的一幅图像。

 

(3)多边形简化

 

  多边形简化算法的目的是输入一个由很多多边形构成的精细模型,得到一个跟原模型相当相似的但包含较少数目的多边形的简化模型,并保持原模型重要的视觉特征。大多数的细节层次简化算法都属于此类。

 

  4.LOD细模型的实现方式

 

  (1)静态Lod

 

  在预处理过程中产生一个物体的几个离散的不同细节层次模型。实时绘制时根据特定的标准选择合适的细节层次模型来表示物体。

 

  (2)动态Lod

 

  在动态Lod算法中生成一个数据结构,在实时绘制时可以从这个数据结构中抽取出所需的细节层次模型。从这个数据结构中可以得到大量不同分辨率的细节层次模型,分辨率甚至可以是连续变化的。

 

  三、LOD模型生成算法的分类

 

  由于人们通常用多边形网格(特例为三角形网格)来描述场景中的图形物体,因而LOD模型的生成就转化为三维多边形网格简化问题。网格简化的目的是把一个用多边形网格表示的模型用一个近似的模型表示,近似模型基本保持了原模型的可视特征,但顶点数目少于原始网格的顶点数目。多边形网格简化算法进行分类的方法有多种:

 

  1.按是否保持拓扑结构分类

 

  拓扑结构保持算法:较好的视觉逼真度,但是限制了简化的程度,并且要求初始模型是流形。拓扑结构非保持算法:可实现大幅度地简化,逼真度较差

 

  2.按简化机制不同分类

 

  自适应细分型:首先建立原始模型的最简化形式,然后根据一定的规则通过细分把细节信息增加到简化模型中。不常用,因为构造最初网格的最简模型相当困难,主要适用与均匀网格。

 

  采样型:类似于图像处理的滤波方式,把几何包围盒中的一组顶点用一个代表顶点代替。适用于具有光滑表面的模型。

 

  几何元素删除型:通过重复地把几何元素从三角形中“移去”来得到简化模型。这里地移去包括:直接删除、合并、折叠。这类算法实现简单,速度快。大多数的简化算法都属于这一类。

 

  3.局部算法/全局算法

 

  全局算法是指对整个物体模型或场景模型的简化过程进行优化,而不仅仅根据局部的特征来确定删除不重要的元素。局部算法是指应用一组局部规则,仅考虑物体的某个局部区域的特征对物体进行简化。

 

  四、典型的LOD模型生成算法概述

 

  1.近平面合并法

 

  Hinkler等的几何优化方法[3]检测出共面或近似共面的三角面片,将这些三角面片合并为大的多边形,然后用较少数目的三角形将这个多边形重新三角化。这个方法的步骤是(1)迅速地将面片分类为近似共面的集合(2)快速合并这些集合中的面片(3)简单而且鲁棒的三角化。面片分类依据的是他们的各自的法线之间的夹角。该算法的误差衡量标准可以归为全局误差,但是由于它仅仅依据法线之间的夹角,它的误差评估准确性较差。它不能保证一定误差限制。

 

  2.几何元素(顶点/边/面)删除法

 

  几何元素删除法由局部几何优化机制驱动,要计算每次删除产生的近似误差。

 

  Schroeder的顶点删除算法[4]通过删除满足距离或者角度标准的顶点来减小三角网格的复杂度。删除顶点留下的空洞要重新三角化填补。该算法速度快,但不能保证近似误差。它估算局部误差,未考虑新面片同原始网格的联系和误差积累。

 

  Hoppe渐进网格算法[5]包含基于边折叠的网格简化方法、能量函数优化和新的多分辨率表示。算法采用了单步和可逆的边折叠操作,可以将整个简化过程存入一个多分辨率数据结构(称为渐进网格表示(PM))。PM方案由一个简化网格Mk和一系列细化记录(通过与从原始网格M0得到简化网格Mk的简化步骤的相反的步骤得到), 这些细化记录可以使网格Mk通过逐步求精得到任意精确度的网格Mi。在简化过程中,将每条边按照其折叠的能量代价排序得到一个优先级队列,通过这个队列实现边折叠操作。该算法也是采用全局误差度量。

 

  3.重新划分算法

 

  Turk的重新划分算法[6]先将一定数量的点分布到原有网格上 ,然后新点与老顶点生成一个中间网格 ,最后删除中间网格中的老顶点 ,并对产生的多边形区域进行局部三角化 ,形成以新点为顶点的三角形网格 .其中分布新点采用排斥力算法 ,即先随机分布新点 ,然后计算新点之间的排斥力 ,根据排斥力在网格上移动这些新点 ,使它们重新分布 .排斥力的大小与新点之间的距离、新点所在三角形的曲率和面积有关。这种方法对那些较光滑的模型是很有效的 ,但对于那些不光滑的模型 ,效果较差; 由于根据排斥力重新分布新点 ,涉及到平面旋转或投影 ,计算量和误差都较大。

 

  4.聚类算法

 

  Rossignac等的顶点聚类算法[7]通过检测并合并相邻顶点的聚类来简化网格。每个聚类被一个代表顶点取代,这个代表顶点可能是顶点聚类的中心或者是聚类中具有最大权值的顶点(定义顶点的权值是为了强调相对的视觉总要性)。然后,去处那些由于聚类操作引起的重叠或者退化的边或者三角形。算法简化引入的误差由用户定义的准确度控制,这个标准用来驱动聚类尺寸的选择。该算法实现简单、速度快,但是没有考虑到保持原始网格的拓扑和几何结构,有可能生成非常粗糙的近似网格。

 

  5.小波分解算法

 

  Eck等的基于小波变换的多分辨率模型[8]使用了带有修正项的基本网格,修正项称为小波系数,用来表示模型在不同分辨率情况下的细节特征。算法的三个主要步骤:分割:输入网格M被分成一些(数目较少)三角形的区域T1,......,Tn, 由此构成的低分辨率三角网格称为基本网格K0。参数化:对于每个三角区域Ti,根据它在基本网格K0上相应的表面进行局部参数化。重新采样:对基本网格进行j次递归细分就得到网格Kj,并且通过使用参数化过程中建立的参数将Kj的顶点映射到3维空间中得到网格Kj的坐标。此算法可以处理任意拓扑结构的网格,而且可以提供:有界误差、紧凑的多分辨率表示和多分辨率尺度下的网格编辑。

 

  五、结束语

 

  LOD技术在虚拟场景生成中具有非常要害的作用,本文讨论了LOD技术的研究内容、LOD模型的生成算法和其在虚拟场景生成中的应用方式。LOD技术今后需要进一步研究的内容包括:简化过程中模型表面属性的处理以及特征保持问题;建立统一的误差评价测度;
不同细节层次之间的平滑过渡;视点相关的LOD生成算法研究等。

转载于:https://www.cnblogs.com/irvinow/archive/2009/03/07/1405617.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Level of Detail for 3D Graphics作者: David Luebke , Martin Reddy , Jonathan D. Cohen , Amitabh Varshney , Benjamin Watson , Robert Huebner 出版:Morgan Kaufmann The Morgan Kaufmann Series in Computer Graphics and Geometric ModelingSeries Editor: Brian A. Barsky, University of California, BerkeleyLevel of detail (LOD) techniques are increasingly used by professional real-time developers to strike the balance between breathtaking virtual worlds and smooth, flowing animation. Level of Detail for 3D Graphics brings together, for the first time, the mechanisms, principles, practices, and theory needed by every graphics developer seeking to apply LOD methods.Continuing advances in level of detail management have brought this powerful technology to the forefront of 3D graphics optimization research. This book, written by the very researchers and developers who have built LOD technology, is both a state-of-the-art chronicle of LOD advances and a practical sourcebook, which will enable graphics developers from all disciplines to apply these formidable techniques to their own work.This Book:* Is a complete, practical resource for programmers wishing to incorporate LOD technology into their own systems.* Is an important reference for professionals in game development, computer animation, information visualization, real-time graphics and simulation, data capture and preview, CAD display, and virtual worlds.* Is accessible to anyone familiar with the essentials of computer science and interactive computer graphics.* Covers the full range of LOD methods from mesh simplification to error metrics, as well as advanced issues of human perception, temporal detail, and visual fidelity measurement.* Includes an accompanying Web site rich in supplementary material including source code, tools, 3D models, public domain software, documentation, LOD updates, and more.http://pixhost
Three.js提供了LOD(Level of Detail)技术,可以在不损失场景质量的情况下,提高性能和渲染速度。使用LOD技术,可以根据相机距离对象的远近,选择不同的模型细节级别进行渲染。 以下是使用LOD技术的步骤: 1. 导入Three.js库和需要使用LOD技术的模型文件。 2. 创建一个LOD对象,并定义不同的模型细节级别。例如: ``` var lod = new THREE.LOD(); var geometry1 = new THREE.SphereGeometry(10, 32, 32); var material1 = new THREE.MeshBasicMaterial({color: 0xff0000}); var mesh1 = new THREE.Mesh(geometry1, material1); lod.addLevel(mesh1, 200); var geometry2 = new THREE.SphereGeometry(10, 16, 16); var material2 = new THREE.MeshBasicMaterial({color: 0x00ff00}); var mesh2 = new THREE.Mesh(geometry2, material2); lod.addLevel(mesh2, 400); var geometry3 = new THREE.SphereGeometry(10, 8, 8); var material3 = new THREE.MeshBasicMaterial({color: 0x0000ff}); var mesh3 = new THREE.Mesh(geometry3, material3); lod.addLevel(mesh3, 800); ``` 上述代码创建了一个LOD对象lod,并定义了三个模型细节级别:mesh1、mesh2和mesh3。不同的模型细节级别对应不同的几何体geometry和材质material,同时指定了距离参数,如200、400和800。 3. 将LOD对象添加到场景中。 ``` scene.add(lod); ``` 4. 在渲染循环中更新LOD对象的距离级别。 ``` lod.update(camera); ``` 以上代码将根据相机(camera)与LOD对象的距离,自动选择合适的模型细节级别进行渲染。在渲染循环中,需要每帧更新一次LOD对象的距离级别,以保证模型细节的正确显示。 总之,使用LOD技术可以优化Three.js的场景性能和渲染速度,提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值