3D游戏图形游戏中的场景管理技术
2020-03-01 130浏览
- 1.关于课程设计 多在网上查阅资料,重点查阅 Ogre 和其他 引擎的如何融合 组内 成 组组要合理分工 组 组 组 组 组组同工作 组组 要有耐心,要迎难而上,在编译、运行阶段 遇到各种各样的问题都是很正常的,努力去 解决,千万别放弃!! 一个组组组 程、 组 组组 游组组 开组组 有组组 情的人通常都通宵 组组组组组组组 达旦地去解决一个组 组 组 。
- 2.关于课程设计 每周上课时,各组用 ppt 汇报下本组进展情 况,遇到了什么组 组 组 ,组 组 如何解决, 组组组组组组组 都 做了哪些工作(每组 5 分钟) 下周开始,下周汇报内容可把前面的游戏开 发建议书汇报下,同时汇报别的组对你的建 组。
- 3.游戏中的场景管理技术
- 4.游戏 Quake3 的场景
- 5.三维游戏场景的组织和绘制 三维游戏中的图形技术可分为三个方面 场景的几何组织与优化 着重于提高绘制效率 , 建立优化的场景表达模型 场景的画面真实度 , 采用一系列特效生成技术 包括高级纹理映射 , 过程式建模等 基于真实物理定律的游戏效果模拟 主要是阴影模拟和碰撞检测 本次课程将着重讲解三维游戏场景的几何组织 , 优 化管理以及在此基础上的 OGRE 中的复杂场景的管 理
- 6.三维游戏场景的组织和绘制 三组 组 组 景的 组组组组 和管理 组组 游戏场景的几何优化 三维场景的快速可见性判断与消隐 地形场景的绘制与漫游 碰撞检测简介
- 7.基于场景图 (Scenegraph) 的表达和管 理 场景图是一种将场景中的各种数据以图的形式组织在一 起的场景数据管理方式。 场景图是一个树状结构,根结点是整个场景,树中的每 个节点可以有任意多的子节点,每个节点存储场景集成 的数据结构,包括几何物体、光源、相机、声音、物体 包围盒、变换和其他属性。 基于场景图表示场景绘制分两步进行:
- 8.基于场景图 (Scenegraph) 的表达和管 理 第一步 根据游戏的需 要更新场景图 必要的部分 这种更新是部 分的 , 不需要 从根节点遍历 第二步 场景图的剔除 和绘制 . 首先 剔除不可见部 分,并保存上 一节点绘制状 态 太阳系的场景图
- 9.基于绘制状态的场景管理 基本思路:把场景物体按照绘制状态分类 , 对于相同状态的物体只设置一次状态并始终保存当前状态列表。 状态切换是指任意影响画面生成的函数调用,包括纹理、材质、光照、融合等函数。 由于状态切换是一个非常耗时的操作,在实际的绘制操作中应避免频繁的状态切换 . 绘制状态集合 A ● 砖块纹理 ● 细节纹理 ● 红色材质 ● 无融合模式 绘制状态集合 B ● 砖块纹理 ● 细节纹理 ● 灰色材质 ● 无融合模式 绘制状态集合 C ● 砖块纹理 ● 凹凸纹理 ● 红色材质 ● 无融合模式 绘制状态集合实例 绘制状态集合 D ● 立方体纹理 ● 无纹理 ● 单色材质 ● 加法融合模 式
- 10.绘制状态树实例 砖块纹 理 组 组 组 理 红色材质 无融合模 式 灰色材质 无融合模 式 凹凸组 理 组 红色材质 无融合模 式 立方体纹 理 无纹 理 单色材质 加法融合模 式
- 11.基于场景包围体的场景组织 加速判断场景物体之间的空间关系 , 主要有 两种方法 对单个物体建立包围体 , 在包围体的基础上建立 包围盒层次树 场景剖分
- 12.常用的包围体技术 (1)包围球 (2)AABB 包围盒 (3)OBB 包围盒 (4)平行六面包围体 (5)k 对平行面包围体
- 13.包围体和包围球示例 球的体积比立方体大
- 14.OBB 树的构造示意图 OBB (有向包围盒)本质上是一个最近贴近物体的长方体 比包围球和 AABB 更加逼近物体,能显著减少包围体的个数 通常进行两个回合的碰撞 / 相交检测时,用包围球进行第一回合的 快速测试,用 OBB 进行第 2 回合的测试 构造方式如下:
- 15.物体的凸包围体 常用的类型 增量式 (incremental) 礼包式 (gift-wrapping) 分治式 (divide-and-conquer) 快速凸包算法 (quick-hull) k-dop(discreted orientation polytope, 离散有向多 面体 ) 是指由 k/2 对平行平面包围而成的凸多面体,其中 k 为法向量的个数。其优点是比上述的包围体更紧 密地包围原物体 , 创建的层次树节点更少
- 16.8-dop 结构
- 17.场景绘制的几何剖分 将场景中的几何物体通过层次性机制组织起来 优点 使用灵活 , 能快速剔除层次树的整个分枝 , 并加速碰撞检测 过程 . 注意 要保持树的平衡 !
- 18.包围树
- 19.常用的几何剖分技术 BSP( 空间二叉剖分 ) 树 (左)场景的 BSP 树剖分;(右) BSP 树结构示意图
- 20.BSP 树的构造过程 (左)一次剖分后的场景平面图;(右)一次剖分后的 BSP 树 (左)两次剖分后的场景平面图;(右)两次剖分后的 BSP 树
- 21.BSP 算法处理四个嵌套遮挡的多边形 BSP 树是一个预处理的排序算法,因此 BSP 树本质上可看作画家 算法的扩展。 用画家算法无法处理四个嵌套遮挡的多边形情形
- 22.BSP 树的缺点 尽管已被已被广泛使用在三维游戏引擎中, 但存在一些问题: 不太适合动态场景 构造时间长,只能以预处理方式进行 通常可以结合 PVS( 潜在可见集 ) 减少实时 漫游时 BSP 树遍历的复杂度
- 23.四叉树 ( a )场景多边形; ( b )第一次剖分; ( c )第二次剖分
- 24.八叉树 (a) ( a )初始节点; (b) ( b )第一次剖分; (c) ( c )第二次剖分
- 25.八叉树与 BSP 树比较 八叉树易于构造和使用,而且在视域裁剪和 碰撞检测过程中,八叉树要优于 BSP 树 . BSP 树的长处在于能进行深度排序,方便处 理透明度和可见性计算
- 26.景物包围体和场景剖分技术比较 (左)场景包围体技术(右)场景剖分技术 场景包围体技术紧密包围物体,不同的包围体可能有重合 场景剖分技术紧密贴合空间,一个物体可能会跨越几个子空间
- 27.场景剖分技术比较 技 术 名 称 适 用 场 景 构建复杂度 实 用 性 二叉树 尺寸不是特别大的室内建筑场景 复杂 大部分三维游戏引擎 四叉树 室外基于高度场的地形 一般 仅用于地形绘制 八叉树 大规模三维室内、外空间场景 一般 复杂三维游戏引擎 均匀八叉树 体素表示场景、分布均匀的三维 场景 简单 少量三维游戏引擎
- 28.景物包围体和场景剖分技术比较 场景包围体技术 场景剖分技术 表 示 方 式 层次物体表示 层次空间表示 剖 分 方 式 物体剖分 场景剖分 聚 类 方 式 物体的层次聚类 空间的层次聚类 层 次 细 节 物体层次细节 空间层次细节 主 要 作 用 围围物 体将空 围围 区域区分开来 围 围 围 围 围 围绕区域将物体区分开来 代 表 方 法 包围球树 OBB- 树、 AABB 树、 k-DOP 二叉树、四叉树、八叉树、均匀三维网 格
- 29.层次细节 (LOD) 技术 简单取舍型 LOD 平滑过渡型 LOD 静态 LOD 动态 LOD
- 30.LOD
- 31.经典的简化算法 顶点删除 边删除 最有效 ! 面删除 基于边删除的顶点简化
- 32.兔子模型的四个层次
- 33.LOD Models
- 34.渐进网格和连续多分辨率绘制技术 对于数据量庞大的复杂模型 LOD 模型只能预先产生多个间断的简化模型 引起实时绘制时图形画面的跳跃 为克服 LOD 的缺点 ,Huppe 等人于 1995 年 提出 渐进网格技术 (Progressive Mesh) 预计算简化过程中原顶点和新顶点的关系 由基本网格模型逐步恢复模型细节
- 35.示例 : SpeedTree 的 LOD 过渡
- 36.示例 : SpeedTree 的 LOD 过渡
- 37.示例 :SpeedTree 的 LOD 过渡
- 38.
- 39.组 景 的可 组组组 性判断 组
- 40.可见性判断算法分类
- 41.遮挡面剔除技术
- 42.遮挡面剔除技术 适用于人造建筑物少的室外组组 景 代表性算法 : 基于组组 影体技 组组组 (左)遮挡剔除之前;(右)基于阴影体的遮挡剔除
- 43.包围球加速 在实际绘制时遮挡应先被处理。处理遮挡时先进行遮挡测试, 一般采用包围体加速技术 (左)球 A 至少在一个平面之外,球 B 在所有平面之内,但其半径大 于球心到其中一个平面的距离,球 C 在所有平面之后且到所有平面的距 离足够大。(右)一种包围球没有被完全遮挡但包围盒被完全遮挡的情形 ,故物体不应被绘制
- 44.可见性计算(适用于室内场景) 可见性( Visibility )算法用于决定场景中可能可见的 物体 一般的:保守地指定这些物体并将他们发送到图形绘制引擎 确切的可见性决定对于游戏而言是可能的,但是代价太大 因此,存在平衡:在软件中进行可见性判断的时间和在硬件 中绘制多余的不可见物体的代价 最简单的就是绘制引擎本身自带的视域裁剪算法 但是这个算法对于高度复杂性的场景并不合适,特别当很多 物体位于单个象素之后 比如,第一人称组 角游 组组 组组 中常 组组组 的建筑物具有高 组组 组组组 组 度的深度复杂性。
- 45.区分可见性信息 Cell-to-Cell 可见性 Cell-to-Region 可见性 告知在一个 cell 中的某点处是否可以看到其他的房间 但是无法知道每个房组 的那个部分可能是可 组组组组组组组组组组组 的,也无法知道 组组组组组组 观察者在这个房间的哪个地方可以见到另外的房间 可以知道某点处,其他房间的哪些部分是可见的Cell-To-Object:对于某给定的房间,告知哪些物体是可见的。 Eye-To-Region 可见性 记录当前视点处的哪些房间的哪些部分是可见的 同理, Eye-to-Cell 以及 Eye-To-Object
- 46.基于入口 (Portal) 技术的可见性判断 根据单元与单元之间的邻接图 , 通过深度遍 历建立起单元与单元的入口序列
- 47.基于入口结构的绘制技术 分为两类 优点 精细型入口绘制方式 粗略型入口绘制技术 方便定义场景 快速绘制 缺点 消耗大量的内存 , 组取 效率的提高 不适合室外渲染
- 48.Cell-Portal 结构 许多可见性算法假设单元和入口的数据结构 数据结构类似于一个图:节点是房间,边是入口 Portals 本质的意思是两个房间的墙之间存在洞 Portal 形状一般是多边形 两个房间之间也可有多个 Portals 如何建立这个数据图? Kd-trees 或者 BSP 树用于生成 cell 结构以及寻找与之相关的 portals 自动或者手工生成 建筑物最合适这种情况
- 49.Cell Portal 实例 A B A B C D C D E F E F Portals 可以是 房间的边缘 (即墙壁) Graph 一般保 存相邻信息 每个房间保 留其外向的 边(即 portal s)
- 50.Cell-Portal 可见性 跟踪观察者所在的房间 然后遍历 graph 穷举所有可见的区域 可以预处理,对每一个房间计算可能可见集合 potentially visible set (PVS) Cell-to-region 可见性,或者 cell-to-object 可见性 也可以在运行之间更进一步地精确获得可见集合 从已知观察者的位置出发 Eye-to-region 或者 Eye-to-cell 可见性 平衡:节省下列的时间 vs. 计算小的可能可见集合的代价 与所在环境有关,如房间的尺寸、房间物体的个数…
- 51.PVS:'>PVS: