`
javahigh1
  • 浏览: 1267171 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

基于LOD的大规模真实感室外场景实时渲染技术的初步研究 PART I

 
阅读更多

由于无法上传图片 完整文章请见
www.gameres.com/Articles/Visual/3D/largeLOD.pdf
gamehunter.3322.net/xpertsoft

第一章:大规模室外场景渲染技术简介

第一节:室内Vs.室外

第二节:Voxel Vs.LOD

第三节:动态地形Vs.静态地形

第四节:其他
 

第一部分 简 介

引 言

室外场景的实时渲染技术是游戏编程世界中的热点技术. 同时它在其它领域也有着同样重要的作用。如 GIS 系统,飞行模拟系统,VR系统以及数字地球技术等都离不开室外场景的实时渲染技术。一个优秀的室外场景实时渲染技术在保证实时性以外还能创造出非常逼真的、有说服力的虚拟自然环境。如Nova Logic公司的著名的3D射击游戏Delta Force 系列,它除了能模拟出各种如雪地、草地、沙漠等地形以外,还能模拟出各种树木,杂草,以及各种天气效果。

室外场景的实时渲染有许多技术上的难点,在以下的章节里我们将作详细的介绍以及针对一些主要问题的解决方案。

本文的主要内容分两个部分:一、大规模地形的渲染。二、如何提高场景的真实性。分别第二部分和第三部分。

3D场景的渲染离不开3D API。目前流行的3D API有两种,SGI公司的OpenGL和微软公司的Direct3D。两种API各自有自己的优点,均能很好的使用硬件加速功能。但是OpenGL是一种开放性的标准,有更好的移植性能,它能在Linux 和FreeBSD 下工作。甚至还可以使用硬件加速(nVidia公司专门为Linux /FreeBSD推出了驱动程序)。因此在本文里,我使用了OpenGL。不过如果熟悉原理,其实也大同小异,D3D到8.0以后做的非常的像OpenGL.

第一章:大规模室外场景渲染技术简介

一.室外 Vs. 室内

下面我们把室内场景和室外场景做一个对比,来看看室外场景的实时渲染的主要难点。

目前最成功的商业室内游戏引擎有Quake /DOOM系列、Unreal系列引擎。他们都基于BSP技术的。通过BSP技术,再加上PVS , Portal等技术可以大量减少场景的复杂程度,通过Portal技术甚至可以把一个室内场景和一个室外场景连接起来,关于室内引擎的渲染的进一步已经超出了本文的范围。

我们知道,当我们站在一个房间里的时候,我们能欣赏到的景物不过是这个房间的摆设以及透过这个房间的门和窗能看到的景物而已。你只能在墙壁的约束范围内走动。换句话说,我们处在一个有限的空间内。我们有足够的理由阻止人们穿过墙进入墙外的世界,也有足够的理由把视野约束在高墙以内。

图(1-1)

一个典型的室内场景,使用id Software的Quake III地图文件,用www.GameToturials.net 的程序渲染

但是,这些约束在一个室外的场景中都是不可能的。在一个飞行模拟器中,理论上你可以驾驶飞机朝任何一个无限远的飞去。因为事实也是如此,如果你愿意的话,你可以驾驶飞机绕着地球飞行而不用担心有墙来阻止你的前进。换句话说,一个室外场景的理想大小是无限的大!除了场景的大小以外,同时视野也是无限的。如果你站在高处,你可以俯视任何比你的底的地方,也就是说你有几乎无限的视野。

图(1-2)

典型室外场景,图片来自北航王正盛的Demo :Nature Wing2.0截图

我们知道,无限的大的场景需要无限的场景数据。但是这是不可能的,我们只能希望场景越大越好,室外场景的主要部分是地形的渲染,地形数据的多少决定了场景的大小。所以如何保存这些地形数据成了首要的问题。(但是在现在存储器成本迅速下降的今天,这个问题已经变的不是十分的突出。)其次是无限的视野问题,无限的视野就表示渲染无限的图元(图元即是3DAPI支持的简单的几何图形,详见OpenGL/Direct3D SDK),这也是不可能。图元的数量是以场景大小的平方的速度增长的。光考虑地形数据,一个2048X2048的地形,如果不考虑减低细节程度和裁剪的话,它将要渲染8M的三角形,这样的三角形量在PC级别上目前还是远不能实现交互式帧率的。所以,如何减少要渲染地形时候的图元数目成了室外场景实时渲染的关键问题。

其他的情况还有如野外的地表衍生物:树木、杂草、地貌等。同时天气效果,如下雨、下雪,刮风和闪电等.这些东西在一个室内的环境下基本上是不需要考虑的。而且模拟这些效果都需要很高的代价,有些甚至根本就没有办法模拟。

二.Voxel Vs LOD

综上,我们知道,室外场景实时性渲染的关键地形的渲染。我们需要一种技术来降低地形渲染的开销。

目前的地形渲染技术主要有两种Voxel和LOD,下面我来做个简单的介绍。

Voxel 也就是Volumetric Pixel。也就是所谓的“体素”,它是相对于像素来说的,如果说像素是一个二维的矩形的话,那么Voxel就是一个三维的立方体。它的原理是比较简单的。James Sharman自称他在1995年时就想出了这种方法。前面的提到的Delta Force游戏就是使用了Voxel 技术。关于Voxel的细节技术不是本文的重点,我不准备做深入的介绍。Voxel有一个天生的优点就是渲染的时候它和场景的大小没有关系,而且绝对不会渲染多余的东西(自带裁剪功能)。它的复杂度只和我们需要的视野,以及分辨率有关。而且可以在不使用硬件加速的情况下达到比较理想的速度(Delta Force I就没有使用硬件加速),生成的图象也比较的细腻。它的缺点就是不够的灵活。

LOD 也就是层次细节(Level of Detail)的简称,不同于Voxel技术,它是一种使用多边形的,真正的 3D渲染技术。它根据一定的规则来简化物体的细节,我们可以根据需要来选择不同细节程度的物体表达方式。如离观察者近的选择较高的细节程度、反之选择较底的细节程度。用在地形渲染中,有时我们也称它为多分辨率地形(Muti-resolution terrain)渲染技术。

图(1-3)

基于Voxel的渲染场景,图片来自中国游戏开发者网络,陈鹏《自己动手编Voxel 3D引擎》

图(1-4)

基于LOD的渲染结果,图片来自本文的Demo: Sim-Nature.

LOD算法处理起来比较复杂,但是它让我们可以足够自由的去控制我们的场景渲染,更加方便的使用显卡的硬件加速功能。而且可以很容易的在场景中组合其他的物体。如树木,太阳以及粒子系统等,天空如它可以方便的让观察者以任意的角度去观察场景,我们只要让摄影机旋转一定的角度就可以了。但是这在Voxel中是比较困难的,因为Voxel在处理非水平的视线的时候非常的麻烦。

LOD技术是本文将要使用和实现的地形渲染技术。

图(1-5)

经过LOD处理的地形网格,有不同的细节。图片来自本文的Demo: Sim-Nature.

三.动态地形Vs 静态地形

地形的渲染通常分为动态和静态的两种。

静态的地形的细节可以是均匀的,也可以是不均匀的。但是细节通常在事先就计算好了,不均匀细节的静态地形有许多的优点:如平原的地貌可以使用较底的细节,而起伏频繁的地方使用较高的细节等级。更为直观的一个例子是赛车一类的对可以到达地方有一定限制的应用,我们可以在离赛道近的地方建立起比较高的细节等级,而在较远的地方使用较少的细节。用这种方式也可以建立起不规则的地形。比如说,它可以沿着赛道的方向建立起一个地形模型,这样可以节省大量的空间。

动态的地形是视点相关的。它是本文将要采用和实现的方法。随着视点的移动,地形网格将被更新。相对于静态地形来说这是一种更为先进的算法。这种方式建立起来的场景更加符合人的视觉特性,即看到的细节是变化的。动态地形网格的建立和更新要耗费额外的时间,但是这种开销是值得的。动态地形网格的建立是比较复杂的,它需要注意很多东西:如何决定细节,如何避免裂缝是两个主要的问题。同时它还应该把不可见的地形部分切除,几何形变(随着细节改变,地形表面的呼吸现象)也应该被考虑到。这些问题都在以后的章节被详细的讨论到。

四:其他

我们说过,在一个室外场景的渲染中。除地形以外其他的一些元素也是十分的重要的,这些元素可以提高场景的真实性。本文将实现其中的一部分元素,这包括:树木、地面细节,太阳、天空已经运动模糊等效果。他们将在本文第三部分集中讨论。

分享到:
评论

相关推荐

    PPT模板 -龙湖新员工转正答辩模板.pptx

    PPT模板 -龙湖新员工转正答辩模板.pptx

    PPT模板 -生产计划管理.pptx

    PPT模板 -生产计划管理.pptx

    生产单元数字化改造23年国赛

    生产单元数字化改造23年国赛

    ECharts柱状图-极坐标系下的堆叠柱状图2.rar

    图表效果及代码实现讲解链接:https://blog.csdn.net/zhangjiujiu/article/details/143997013

    机器人算法的 Python 示例代码 .zip

    Pythonbot高斯网格图射线投射网格图激光雷达至网格地图k-均值对象聚类矩形接头大满贯迭代最近点 (ICP) 匹配FastSLAM 1.0路径规划动态窗口方法基于网格的搜索Dijkstra 算法A* 算法D*算法D* Lite 算法位场算法基于网格的覆盖路径规划国家网格规划偏极采样车道采样概率路线图(PRM)规划快速探索随机树(RRT)回程时间*RRT* 和 reeds-shepp 路径LQR-RRT*五次多项式规划Reeds Shepp 规划基于LQR的路径规划Frenet 框架中的最佳轨迹路径追踪移动到姿势控制斯坦利控制后轮反馈控制线性二次调节器 (LQR) 速度和转向控制模型预测速度和转向控制采用 C-GMRES 的非线性模型预测控制手臂导航N关节臂对点控制带避障功能的手臂导航航空导航无人机三维轨迹跟踪火箭动力着陆双足动物倒立摆双

    sql综合学习基础知识及练习题考试题实测题.zip

    SQL,全称为结构化查询语言(Structured Query Language),是用于管理和操作关系型数据库的标准化语言。它广泛应用于数据插入、查询、更新和删除等操作,并且拥有超过40年的历史,证明了其在数据处理领域的核心地位。以下是对SQL综合学习基础知识及练习题考试题实测题的介绍

    java面向对象 - 类与对象.doc

    java面向对象 - 类与对象 在Java编程语言中,面向对象编程(OOP)是一个核心概念。它强调以对象作为程序的基本单位,并将相关的数据和功能封装在对象中。类和对象是Java OOP的两个关键组成部分。 ### 类(Class) 类是一个模板或蓝图,它定义了对象的属性和行为。我们可以将类视为对象的类型或种类。通过类,我们可以创建(实例化)具有特定属性和行为的对象。 类的组成部分通常包括: 1. **成员变量**(属性):用于存储对象的状态或数据。 2. **方法**(行为):定义了对象可以执行的操作或功能。 3. **构造方法**:一种特殊类型的方法,用于在创建对象时初始化其状态。 4. **块**(如静态块、实例初始化块):用于执行类级别的初始化代码。 5. **嵌套类**:一个类可以包含其他类,这被称为嵌套或内部类。 ### 对象(Object) 对象是类的实例。它是根据类模板创建的具体实体,具有自己的状态和行为。每个对象都是其类的一个唯一实例,可以访问其类中定义的属性和方法。 创建对象的过程通常涉及以下几个步骤: 1. **声明**:指定对象的类型(即其所属的类

    原生JS实现鼠标感应图片左右滚动代码.zip

    原生JS实现鼠标感应图片左右滚动代码.zip

    随机密码生成器,支持字符、数字、字母大小写组合

    随机密码生成器,支持字符、数字、字母大小写组合

    自动化部署管道创建的代码库(含 Concourse 和 Jenkins 相关).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    高等工程数学试题详解:矩阵分析与最优化方法

    内容概要:本文档为一份高级数学复习试题,内容涵盖线性代数、数值分析及最优化理论等领域,主要包括矩阵范数的计算、遗传算法中的变异操作、内点法解非线性优化问题、证明矩阵有互异特征值、求解矩阵的标准形以及应用单纯形法和FR共轭梯度法解决具体的数学问题等方面。 适合人群:正在备考研究生入学考试或者准备参加各类数学竞赛的学生、对高等数学感兴趣的学习者及从事相关领域科研工作的专业人士。 使用场景及目标:用于巩固和检验个人关于矩阵论、优化方法及概率统计的知识掌握情况,帮助应试者系统地复习相关考点,提高解题技巧。 阅读建议:建议结合具体题目深入理解每一个概念及其应用方式,遇到复杂的计算或证明步骤不妨动手尝试推导一次,这样有助于加深记忆并培养灵活运用知识的能力。同时,在理解算法原理的基础上,还可以参考一些实际案例来进行练习。

    使用了脉冲码调制(PCM).计算了所需的比特率和信号量化误差Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    Google 表格 Python API.zip

    Google Spreadsheet Python API v4Google Sheets 配合使用的简单界面。特征通过标题、关键字或URL打开电子表格。读取、写入和格式化单元格区域。共享和访问控制。批量更新。安装pip install gspread要求Python 3.8+。基本用法在 Google API 控制台中创建凭据开始使用 gspreadimport gspreadgc = gspread.service_account()# Open a sheet from a spreadsheet in one gowks = gc.open("Where is the money Lebowski?").sheet1# Update a range of cells using the top left corner addresswks.update([[1, 2], [3, 4]], "A1")# Or update a single cellwks.update_acell("B42", "it's

    AICon 2024全球人工智能开发与应用大会(脱敏)PPT合集(30份).zip

    AICon 2024全球人工智能开发与应用大会(脱敏)PPT合集,共30份。 AI辅助编程测评与企业实践 SmartEV和AI 蔚来的思考与实践 下一代 RAG 引擎的技术挑战与实现 书生万象大模型的技术演进与应用探索 人工智能行业数据集构建及模型训练方法实践周华 全方位评测神经网络模型的基础能力 千亿参数 LLM 的训练效率优化 向量化与文档解析技术加速大模型RAG应用落地 基于大模型的缺陷静态检查 多环境下的 LLM Agent 应用与增强 大模型在华为推荐场景中的探索和应用 大模型在推荐系统中的落地实践 大模型的异构计算和加速 大模型辅助需求代码开发 大语言模型在法律领域的应用探索 大语言模型在计算机视觉领域的应用 大语言模型的幻觉检测 小米大模型端侧部署落地探索 快手可图大模型的技术演进与应用探索 提升大模型知识密度,做高效的终端智能 电商大模型及搜索应用实践 百度大模型 原生安全构建之路 硅基流动高性能低成本的大模型推理云实践 语言模型驱动的软件工具思考:可解释与可溯源 长文本大模型推理实践:以 KVCache 为中心的分离式推理架构 阿里云 AI 搜索 RAG 大模型优

    子弹打穿金属后留下弹痕flash动画.zip

    子弹打穿金属后留下弹痕flash动画.zip

    雷达目标一维距离像仿真实验,以及多目标成像 matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    原生js竖直动画手风琴下拉菜单代码.zip

    原生js竖直动画手风琴下拉菜单代码.zip

    受循环荷载作用的土壤或路面层分析Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    Centos6.x通过RPM包升级OpenSSH9.7最新版 升级有风险,前务必做好快照,以免升级后出现异常影响业务

    Centos6.x通过RPM包升级OpenSSH9.7最新版 升级有风险,前务必做好快照,以免升级后出现异常影响业务

    营销策划 -阿道夫洗护品牌新品小红书新品营销方案.pptx

    营销策划 -阿道夫洗护品牌新品小红书新品营销方案.pptx

Global site tag (gtag.js) - Google Analytics