版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、游戏中的场景管理技术作业对游戏的评价每个人 10%小组游戏proposal (每组) 10%对其他小组游戏proposal的评价每组10%请用OGRE实现恣意一项 10%三维光照场景组织光影特效包括阴影大程作业 40%平常点名 20%游戏Quake3的场景 三维游戏场景的组织和绘制三维游戏中的图形技术可分为三个方面场景的几何组织与优化着重于提高绘制效率场景的画面真实度,采用一系列特效生成技术包括高级纹理映射,过程式建模等基于真实物理定律的游戏效果模拟主要是阴影模拟和碰撞检测本次课程将着重讲解三维游戏场景的几何组织,优化管理以及在此根底上的OGRE中的复杂场景的管理三维游戏场景的组织和绘制三维场
2、景的组织和管理游戏场景的几何优化三维场景的快速可见性判别与消隐地形场景的绘制与遨游碰撞检测简介基于场景图(Scenegraph)的表达和管理第一步根据游戏的需求更新场景图必要的部分这种更新是部分的,不需求从根节点遍历第二步场景图的剔除和绘制太阳系的场景图基于绘制形状的场景管理把场景物体按照绘制形状分类绘制状态集合A 砖块纹理 细节纹理 红色材质 无融合模式绘制状态集合B 砖块纹理 细节纹理 灰色材质 无融合模式绘制状态集合C 砖块纹理 凹凸纹理 红色材质 无融合模式绘制状态集合D 立方体纹理 无纹理 单色材质 加法融合模式 绘制形状集合实例 绘制形状树实例 基于场景包围体的场景组织加速判别场景
3、物体之间的空间关系,主要有两种方法对单个物体建立包围体,在包围体的根底上建立包围盒层次树场景剖分常用的包围体技术包围体和包围球例如球的体积比立方体大 OBB树的构造表示图 物体的凸包围体常用的类型增量式(incremental)礼包式(gift-wrapping)分治式(divide-and-conquer)快速凸包算法(quick-hull)k-dop(discreted orientation polytope,离散有向多面体)比上述的包围体更严密地包围原物体,创建的层次树节点更少8-dop构造场景绘制的几何剖分将场景中的几何物体经过层次性机制组织起来优点运用灵敏,能快速剔除层次树的整个分
4、枝留意要坚持树的平衡!包围树常用的几何剖分技术BSP树 左场景的BSP树剖分;右BSP树构造表示图 BSP树的构造过程 左一次剖分后的场景平面图;右一次剖分后的BSP树 左两次剖分后的场景平面图;右两次剖分后的BSP树 BSP算法处置四个嵌套遮挡的多边形用画家算法无法处置四个嵌套遮挡的多边形情形四叉树 a场景多边形; b第一次剖分; c第二次剖分 八叉树 a b ca初始节点; b第一次剖分; c第二次剖分景物包围体和场景剖分技术比较左场景包围体技术右场景剖分技术 景物包围体和场景剖分技术比较技 术 名 称适 用 场 景构建复杂度实 用 性二叉树尺寸不是特别大的室内建筑场景复杂大部分三维游戏引
5、擎四叉树室外基于高度场的地形一般仅用于地形绘制八叉树大规模三维室内、外空间场景一般复杂三维游戏引擎均匀八叉树体素表示场景、分布均匀的三维场景简单少量三维游戏引擎景物包围体和场景剖分技术比较场景包围体技术场景剖分技术表 示 方 式层次物体表示层次空间表示剖 分 方 式物体剖分场景剖分聚 类 方 式物体的层次聚类空间的层次聚类层 次 细 节物体层次细节空间层次细节主 要 作 用围绕物体将空间区域区分开来围绕区域将物体区分开来代 表 方 法包围球树OBB-树、AABB树、k-DOPS二叉树、四叉树、八叉树、均匀三维网格、kD树层次细节(LOD)技术简单取舍型LOD平滑过渡型LOD静态LOD动态LOD
6、LOD经典的简化算法顶点删除边删除最有效!面删除基于边删除的顶点简化 兔子模型的四个层次 LOD Models渐进网格和延续多分辨率绘制技术对于数据量庞大的复杂模型LOD模型只能预先产生多个延续的简化模型引起实时绘制时图形画面的腾跃为抑制LOD的缺陷,Huppe等人于1995年提出渐进网格技术(Progressive Mesh)估计算简化过程中原顶点和新顶点的关系由根本网格模型逐渐恢复模型细节例如: SpeedTree的LOD过渡例如: SpeedTree的LOD过渡例如:SpeedTree的LOD过渡Demo场景的可见性判别可见性判别算法分类遮挡面剔除技术遮挡面剔除技术适用于人造建筑物少的室
7、外场景代表性算法:基于阴影体技术左遮挡剔除之前;右基于阴影体的遮挡剔除 包围球加速 左球A 至少在一个平面之外,球B在一切平面之内,但其半径大于球心到其中一个平面的间隔,球C在一切平面之后且到一切平面的间隔足够大。右一种包围球没有被完全遮挡但包围盒被完全遮挡的情形,故物体不应被绘制 可见性计算适用于室内场景可见性Visibility算法用于决议场景中能够可见的物体普通的:保守地指定这些物体并将他们发送到图形绘制引擎确切的可见性决议对于游戏而言是能够的,但是代价太大因此,存在平衡:在软件中进展可见性判别的时间和在硬件中绘制多余的不可见物体的代价最简单的就是绘制引擎本身自带的视域裁剪算法但是这个算
8、法对于高度复杂性的场景并不适宜,特别当很多物体位于单个象素之后比如,第一人称视角游戏中常见的建筑物具有高度的深度复杂性。区分可见性信息Cell-to-Cell 可见性告知在一个cell中的某点处能否可以看到其他的房间但是无法知道每个房间的那个部分能够是可见的,也无法知道察看者在这个房间的哪个地方可以见到另外的房间Cell-to-Region 可见性可以知道某点处,其他房间的哪些部分是可见的Cell-To-Object: 对于某给定的房间,告知哪些物体是可见的。Eye-To-Region 可见性记录当前视点处的哪些房间的哪些部分是可见的同理,Eye-to-Cell 以及 Eye-To-Objec
9、t基于入口(Portal)技术的可见性判别根据单元与单元之间的邻接图,经过深度遍历建立起单元与单元的入口序列基于入口构造的绘制技术分为两类精细型入口绘制方式粗略型入口绘制技术优点方便定义场景快速绘制缺陷耗费大量的内存,换取效率的提高不适宜室外渲染Cell-Portal 构造许多可见性算法假设单元和入口的数据构造数据构造类似于一个图:节点是房间,边是入口Portals本质的意思是两个房间的墙之间存在洞Portal 外形普通是多边形两个房间之间也可有多个Portals如何建立这个数据图?Kd-trees 或者BSP树用于生成cell构造以及寻觅与之相关的 portals自动或者手工生成建筑物最适宜
10、这种情况Cell Portal 实例Portals 可以是房间的边缘即墙壁Graph普通保管相邻信息每个房间保管其外向的边即portalsABCDEFABCDEFCell-Portal 可见性跟踪察看者所在的房间然后遍历graph穷举一切可见的区域可以预处置,对每一个房间计算能够可见集合potentially visible set (PVS)Cell-to-region 可见性,或者 cell-to-object 可见性也可以在运转之间更进一步地准确获得可见集合从知察看者的位置出发Eye-to-region 或者 Eye-to-cell 可见性平衡:节省以下的时间 vs. 计算小的能够可见集
11、合的代价与所在环境有关,如房间的尺寸、房间物体的个数PVS:能够可见集PVS: 对于某个特定的房间,能够可以看到的房间/区域/物体/多边形普通地,保管可以看见的物体的标识号也要思索内存的要素预处置的计算过程应该能良好地管理动态变化的物体列表用法:可见性确定 对于当前房间,绘制一切PVS中的多边形做为第一步:获得能够相关的区域,并做进一步处置Cell-to-Cell PVSCell A 在 B的 PVS中,当且仅当存在一根线,从B出发射到A,并且在途中与任何物体不相交隔壁房间理所当然在PVS之中IJHGACBEFDI 的PVS 包括:B, C, E, F, H, JStab 树这个树状构造表示:
12、当前房间的PVS一个串着的相关的portal序列在进一步的可见性处置中可以减少需求检查处置的cells/portals 数目ACDEA/CC/D1C/D2C/EABCDEFDFD/FCell-to-Cell的用法大多数算法比cell-to-cell可见性算法更复杂由于它过估计 当实践上99.6%的模型应该是不可见的时候,仅排除了大约90%的模型, 而更好的算法可以排除98%但是,坚持cell-to-cell可见性有利于动态物体当房间中有一个挪动的物体并且房间是静态的Cell-to-Cell的缺陷存在的问题:将一个房间中的一切物体都标志为能够可见,虽然只需一小部分是能够可见假设我们要列出能够可见
13、集意味着我们要将这个房间中的一切物体都列出来。并没有思索到察看者的位置,无法报告察看者能够看不到的物体进一步处置可以处理这个问题Cell-To-Region 可见性记录房间中某点处能够可见的某个房间的某个区域因此,只绘制这个区域中的物体关键想法视设置隔离平面对于二维,就是隔离线):假设将左边的portal视为光源动态可见性处置PVS 完全是一个预处置过程在运转时辰,只需求绘制PVS即可更进一步的优化是做进一步处置有时候由PVS指点大多数游戏不这么做一个能够的方法是察看者的位置知,因此可以运用 Eye-to-Region的可见性Eye-to-Region (1)ViewEye-to-Region
14、 (2)没有Cell 或者Portals怎样办?很多场景并没有好的cell和portal构造场景中没有大的共面多边形去做为遮挡器或者房间的墙例如森林-他无法看到后面的场景,但是总不能设置叶子为Cell处理方案?定义一些遮挡物体,称为occluders并利用他们来剔除几何物体Occluders假设 occluder是一个多边形否那么,运用物体的侧影轮廓线从视点和多边形的边构成裁剪平面也叫支撑平面:Supporting planes一切在支撑平面内部的是不可见的Occluder本身是一个裁剪平面位于其外部的是可见的eyeoccludersupporting planesOccluders续Occl
15、uders 普通在预处置阶段获得选择的规范?假设它遮挡了很多物体假设大的多边形与视点很近,该方法很有效场景中的一些物体也可以交融起来构成大的occluders例如,将很多树的billboards交融occluding 多边形可以恣意指定,但是,每一occluder 只对某一些视点区域有效问题:假设一个物体被某个occluder部分遮挡,又被另外一个部分遮挡, 那么很难决议能否该物体被全部遮挡Occluders续用多个occluders来隐藏一个物体是一个很有趣的问题Hierarchical Z-Buffer 方法在图像屏幕空间建立遮挡子需求特殊的图形硬件与软件实现张寒松的Hierarchica
16、l Occlusion Maps层次遮挡图 将遮挡子绘制到一个纹理图中,然后将物体与纹理比较Schaufler Occluder Fusion 建立一个被遮挡区域的空间数据构造真实的游戏场景当翻开遮挡面剔除时,仅需绘制7,000个三角形,帧率为50fps。当遮挡面剔除封锁时,三角形绘制数目增长到17,300, 帧率下降到20 fps 地形场景的绘制与遨游 上左地形的根底三角网格; 上右高度图;下左运用高度图后的地形网格; 下右渲染后的地形图 游戏中的地形场景地形绘制基于四叉树的绘制方法利用图形硬件加速绘制方式保管方式立刻方式绘制优化运用场景的层次剖分技术进展视域剔除消除对画面奉献极小的多边形自
17、顺应的四叉树剖分根据当前节点的误差度量判别能否需求继续剖分能够在两个相连的节点之间产生破绽处理方法保证两个相邻节点之间最多相差1个层次保证两个相邻的边拥有一样的顶点数目地形绘制的优化动态层次细节算法缺陷层次之间切换会产生腾跃感几何变形法具有光滑过渡的视觉效果地形绘制中的难题存储量大,内存耗费太多处理的方法细节纹理细节纹理的拼接具有很大的挑战性!利用细节纹理技术的地形绘制实例 OGRE的场景树OGRE中的场景管理在OGRE中场景管理器的类型有四种:ST_GENERIC 普通场景ST_EXTERIOR_CLOSE 室外封锁场景ST_EXTERIOR_FAR 室外无限场景ST_INTERIOR 室内
18、场景室内场景首先读入地图包。代码如下BspApplication() / Load Quake3 locations from a file ConfigFile cf; cf.load(quake3settings.cfg); mQuakePk3 = cf.getSetting(Pak0Location); mQuakeLevel = cf.getSetting(Map);选择正确的场景管理器 void chooseSceneManager(void) mSceneMgr = mRoot- getSceneManager(ST_INTERIOR); 最后是创建场景 void createSc
19、ene(void) / Load world geometry mSceneMgr-setWorldGeometry(mQuakeLevel); / modify camera for close work mCamera-setNearClipDistance(4); mCamera-setFarClipDistance(4000); / Also change position, and set Quake-type orientation / Get random player start point ViewPoint vp = mSceneMgr-getSuggestedViewpo
20、int(true); mCamera-setPosition(vp.position); mCamera-pitch(90); / Quake uses X/Y horizon, Z up mCamera-rotate(vp.orientation); / Dont yaw along variable axis, causes leaning mCamera-setFixedYawAxis(true, Vector3:UNIT_Z); 室外场景OGRE在其引擎提供的Plugin_OctreeSceneManager.dll插件中提供了经过八叉树算法实现的ST_EXTERIOR_CLOSE室外
21、封锁场景管理器。 室外场景 室外场景遨游 首先需求选择室外场景管理器,代码如下:virtual void chooseSceneManager(void) / Get the SceneManager, in this case a generic one mSceneMgr = mRoot-getSceneManager( ST_EXTERIOR_CLOSE );室外场景遨游选择好室外场景管理器后,经过该场景管理器创建场景就可以了。void createScene(void) / Set ambient light mSceneMgr-setAmbientLight(ColourValue(
22、0.5, 0.5, 0.5); / Create a light Light* l = mSceneMgr-createLight(MainLight); / Accept default settings: point light, white diffuse, just set position / NB I could attach the light to a SceneNode if I wanted it to move automatically with / other objects, but I dont l-setPosition(20,80,50); mSceneMgr
23、 - setWorldGeometry( terrain.cfg ); mSceneMgr-setFog( FOG_EXP2, ColourValue:White, .008, 0, 250 ); mRoot - showDebugOverlay( true );White&Black碰撞检测 碰撞检测问题是机器人、动画仿真、虚拟现实等领域不可逃避的问题根本义务确定两个或多个物体彼此之间能否发生接触或穿透。来源早期在机器人途径规划、自动装配规划等领域中,为检测机器人与场景中的物体或零件与零件之间能否发生碰撞,产生了一系列碰撞检测算法。碰撞检测算法分类 从两个角度对碰撞检测算法进展分类 从时间域
24、的角度来分从空间域的角度来分 基于时间域的碰撞检测算法分类 分为静态、离散和延续的碰撞检测算法静态碰撞检测算法静止形状下进展碰撞检测Dobkin 1985Agarwal 1991Chazelle 1989 离散碰撞检测算法在每一时间的离散点上进展碰撞检测是研讨的重点和热点 Lin 1998Jimnez 2001 基于时间域的碰撞检测算法分类离散碰撞检测算法存在问题存在刺穿景象 脱漏应该发生的碰撞 延续碰撞检测算法延续的时间间隔内进展碰撞检测计算速度还太慢 Cameron 1990Canny 1986Redon 2001Redon 2002a基于空间域的碰撞检测算法分类基于物体空间的碰撞检测算法
25、基于图象空间的碰撞检测算法基于空间域的碰撞检测算法分类 基于物体空间的碰撞检测算法采用普通表示模型的碰撞检测算法 采用空间构造的碰撞检测算法 基于空间域的碰撞检测算法分类基于物体空间的碰撞检测算法采用普通表示模型的碰撞检测算法多边形表示模型多边形集合,构造化表示模型非多边形表示模型CSG表示模型,隐函数曲面,参数曲面,体表示模型基于空间域的碰撞检测算法分类基于物体空间的碰撞检测算法采用普通表示模型的碰撞检测算法面向多边形表示模型的碰撞检测算法Hubbard 1995Gottschalk 1996 Klosowski 1998Zachmann 1998 面向凸体的碰撞检测算法基于空间域的碰撞检测
26、算法分类基于物体空间的碰撞检测算法面向凸体的碰撞检测算法基于特征的碰撞检测算法Lin-Canny的“最临近特征算法Lin 1991, Lin1993 Lin 1995, Cohen 1995, Chung 1996, Mirtich 1998, Ehmann 2000, Ehmann 2001 基于单纯形Simplex的碰撞检测算法 Gilbert、Johnson和Keerthi Gilbert 1988Gilbert 1990提出的GJK算法 Cameron 1997Bergen 1999 基于空间域的碰撞检测算法分类基于物体空间的碰撞检测算法采用普通表示模型的碰撞检测算法面向CSG表示模型Zeiller 1993Su 1996Poutain 2001 面向隐函数曲面表示Farouki 1989Miller 1991Shene 1991 面向参数曲面表示非均匀有理B样条曲线NURBS Turnbull 1998 体表示模型 主要用于虚拟手术中可变形物体的碰撞检测Heidelb 2003Boyles1999魏迎梅 2001 基于空间域的碰撞检测算法分类基于物体空间的碰撞检测算法采用普通表示模型的碰撞检测算法采用空间构造的碰撞检测算法空间剖分法space decomposition均匀剖分、BSP树、k-d树和八叉树Octree等Samet 1989Naylor 1990B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度技术开发合作合同:某互联网公司与软件开发团队的合作协议
- 2024年度幼儿园幼儿保险服务合同
- 药用糖浆市场发展现状调查及供需格局分析预测报告
- 2024年度个人劳动合同中农民工权益保障
- 2024年度安全保卫服务承包合同协议
- 2024年度企业间跨区域产品代理销售合同
- 2024年度工业区物业全面服务合同
- 电线市场发展现状调查及供需格局分析预测报告
- 眼影盘市场发展预测和趋势分析
- 2024年度商用厨房设备供货与安装合同
- 胸痛中心培训课件高危胸痛识别
- 中考数学规律类试题集锦(含答案)
- 课程思政理念下的小学道德与法治课堂教学探析
- SolidWorks3维设计及运动仿真实例教程全套教学课件
- 化工中级职称答辩试题
- 人教版八年级上册古诗词默写上下句(最全版)
- 《圆的认识》 单元作业设计
- 物业公司安全生产风险分级管控和隐患排查治理双体系方案全套资料2019-2020完整实施方案模板
- 氯霉素的制备-氯霉素的合成工艺技术
- 体育考研体育管理学36问
- 5G NR中SRS和CSI-RS信号学习笔记
评论
0/150
提交评论