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

新游戏中出现的基于BSP场景分割技术

阅读更多

前不久看了看WOW的WMO地图文件格式,发现这是一个规整的Interlocking Tiles+Portal+BSP分割体系,与FarCry的引擎体系几乎完全相同。它很通用,而且很有用。

我一说WOW的什么什么技术“很通用”,什么什么技术“挺简单”,就会被人扁,麻木了都。我说他通用,说他简单,并不代表我不顶礼膜拜。简单即美丽,正确的往往是相对于目标最优的路径,而不是最眩的路径。

我想先说说Dreams他们曾经讨论过的FarCry中的技术,这篇文章本来在Gameres的Blog中,但是我现在上不去这个Blog站了,很郁闷。FarCry用的是33X33的Interlocking Tiles室外场景,这一点注意一下WOW的室外场景,虽然NXN不好说,但是同样也是Interlocking Tiles!

首先,这里就能说明,WOW用的决不是什么高不可攀的技术,FarCry都已经诞生多少年了?!可以说:WOW用的是最成熟的技术,构架了最完美的世界。这点我希望大家认清楚WOW的技术实质,国外这是一套比较成熟的场景结合技术,并不是高不可攀。只不过,放到中国,本来大量有希望作出来的好的图形程序员都被某些公司当二奶包养着去做绿色网游了……操,说好这个话题不再说的!我毕竟还是相信山河虽已不幸若此,但好人还是有的!

首先,必须强调一点,FarCry的格式以及HL2的室内场景部分我并未具体研究过,所以以下的发言只是基于Dreams等人在讨论中传达出来的信息。如果大家能登录到Gameres的Blog,可以看看Dreams他们的讨论,关于FarCry主要透露出这样几个点:
1、FarCry的室外场景是IT四叉树,关于这个主题,在这个Blog的前面的文章中提过9X9标准IT算法,代码也有。
2、FarCry的室内场景是BSP。
3、FarCry的内外结合首先通过Portal。
4、FarCry使用IT+Portal可以在内外场景间建立PVS,从而可以在运行时使用PVS系统提高效率。

对于若Dreams、Skullwang这样的前辈来说,这应该是再规整不过的算法了,一点也不华丽。对于FarCry而言,室内场景毕竟并不是它主要想表达的东西,所以FarCry的室内场景或许可能会简单了些。因此,按照Dreams的讨论,它在室内场景的表达上也不会比HL2的概念显得优秀。按照讨论来看,HL2的室内场景概念不是太复杂的概念:
1、HL2的城市以Area作为单元,Area和Area之间通过Portal连接。一个Area,主要可能就是一栋栋房子,和一条条街道。
2、每个Area本身,进行标准BSP分割,分割为一个个Sector(就是房间)。

如果这里,Area不叫Area,而叫做Group,Sector不叫Sector,而叫做BspNode,那么,我们看看WOW的Wiki中WMO的格式,就能找到完全相同的名称。

WMO一个室内地形,由多个Group构成,每个Group可能都是一个规则的Bsp空间分割(Group内部出现了标准的BspNode结构),Group和Group之间以Portal连接。据我的老大说,魔兽中的Portal很少,我认为,我们能看到的Portal主要是G-G之间的Portal,而不包括BspNode之间的Portal,BspNode之间的Portal可能没有渲染出来,没有计入Header的Portal表中(应该是不必要计入),或者干脆可能已经被PVS优化掉。这个我没有具体跟踪一个WMO场景,所以不太清楚到底是那种情况。但无论是哪种情况,我认为,将WMO和BSP划清界线的做法并不可取。

通过这个方法,大空间BSP的“大树”问题被通过Area或者Group轻松干掉,而同时不会丢弃BSP本身的优势——这就类似于无限大场景之于四叉树,相辅相成,不可缺一。Area离开了Sector,房子是好筛选了,然而一次整体渲染一个房子,首先渲染就低效,房子内部的逻辑也不好走。Sector离开了Area,一个可能超过几千个节点的大树就会被建立出来,同时,还有大量的Portal,还有被分割平面分割得过分琐碎的空间——这也不像是一个优秀的算法应该拥有的效率。

BSP是一个老算法,但它不是一个不再发展的算法,相反,BSP在逻辑处理上的优点和高效性,目前没有新的算法可以抹杀,而BSP的缺点,却可以通过种种手段予以消弭。其中主要的琐碎空间问题,通过Area和Sector的划分,Area本身就可以避免大量不必要的空间划分,使得空间划分集中在每个Area本身内部。而在Area内部,又可以通过Struct Face和Detail Face的区分、甚至是手动分割面指定使得空间尽可能少被分割。而凸包问题也早已不是问题,现在的BSP就算是个凹多面体,也不会引发太大的问题——因为在更大的眼光来看,通过Struct Face,再BT的凹多面体都可以被当作凸多面体。而最复杂的光照计算,似乎3DMAX也提供了更简单的做法,可以直接在模型制作的阶段就能直接将光照图打进去。一切都在向着更好的方向走去,就像C++一样,可选的库越来越多,方案越来越多……只有对方案掌握的好坏,没有经典BSP本身的问题了……

BSP目前面临的主要困难应该还是在编辑器,你不能指望美工明确他所在的空间哪些是Struct Face,哪些是Detail Face,而Area的划分,则更必须通过编辑器来进行了,这可能也是导致BSP无法大规模成为制式方案的一个不足之处——在目前,特殊的历史时期,特殊的时代背景下,有足够米和人力的公司宁可花钱养一堆不干事的食客,也不会把这些人团结起来,让他们从事一些研究的工作。而本来被设计为担负这个任务的研究机构,却都据说去研究最关乎“国计民生”的问题了。初级阶段嘛……结果就是,只好靠自己精神病般的一腔狂热来独自面对这种变态问题。

如果有一个哪怕效率稍差的算法,可以连一个刚从学校毕业的美工都能轻松画出一个内外结合的地图,这个算法应该就会很容易替代掉BSP,曙光还未来临,吾辈还需努力!

分享到:
评论

相关推荐

    BSP空间分割简述

    BSP(Binary Space Partitioning,二叉空间分割)是一种广泛应用于计算机图形学中的数据结构和技术,主要用于空间分割和场景管理。其核心思想是将空间通过一系列的平面进行分割,形成一个层次化的结构,以便快速地...

    3D引擎中BSP技术的引用

    在3D游戏开发中,BSP(Binary Space Partitioning,二进制空间分割)技术是一种常用的场景管理方法,它能够高效地组织和渲染复杂的三维环境。BSP通过将三维空间分割成一系列互不重叠的区域,使得物体的碰撞检测、...

    3D场景的BSP分割算法

    在三维计算机图形学领域,尤其是在游戏开发中,为了高效地处理复杂的3D环境并优化渲染过程,**Binary Space Partitioning (BSP)** 树是一种非常重要的数据结构和技术。本文旨在深入探讨BSP树的概念、算法及其在实时...

    基于bsp的漫游程序框架

    在计算机图形学领域,BSP(Binary Space Partitioning,二进制空间分割)是一种广泛应用于游戏引擎和3D场景管理的技术。本篇文章将深入探讨如何利用BSP树构建室内场景漫游程序,以及它在碰撞检测中的应用。 **1. ...

    3D游戏中常用算法 如碰撞检测 A* 四叉树 BSP分割树 地形LOD等等

    在3D游戏中,它可以用来快速地将场景分割成小区域,从而提高碰撞检测和图形渲染的效率。当物体移动时,可以动态调整四叉树,以减少不必要的计算。 4. **BSP(二叉空间分割)树**:BSP树是一种分层数据结构,通过...

    bsp-tree.rar_bsp tree_bsptree_tree_场景检测

    ** BSP树(Binary Space Partitioning Tree)是一种在三维图形学和计算机图形学中广泛使用的数据结构,主要用于场景的管理和渲染优化。它通过将空间分割成两个子空间来组织物体,以此构建一棵树形结构,每个节点代表...

    BSP.rar_ bsp editor_BSP_bsp editor

    2. **自动构建BSP树**:通过算法自动生成BSP树,通常基于场景中的物体分布。 3. **可视化调试**:查看和编辑BSP树的分界面,确保它们合理地分割空间并优化性能。 4. **优化操作**:对已有的BSP树进行剪枝、合并等...

    Quake3场景管理技术研究报告

    - **场景管理技术**:Quake3采用了BSP(Binary Space Partitioning,二元空间分割)、Portal(门户)以及PVS(Potentially Visible Set,潜在可见集)技术。Portal技术主要用于生成PVS,在生成完成后不再使用。 - **...

    bsp_tree_demo_09_bsptree_DEMO_

    ** BSP树(Binary Space Partitioning Tree)是一种数据结构,它在计算机图形学和游戏开发中广泛应用,用于高效地管理和组织三维空间中的对象。这个“bsp_tree_demo_09_bsptree_DEMO_”是一个演示程序,展示了如何...

    SAP web 开发技术 BSP2 处理网页的

    通过一个具体的场景案例来引导读者了解BSP扩展的实际应用场景,帮助读者理解如何将理论知识应用于实际项目中。 ##### 1.3 关于BSP应用程序 详细解释了BSP应用程序的组成部分,包括页面、页面片段等,以及它们之间的...

    bsp文档

    根据提供的文件信息,我们可以深入探讨...总之,BSP树作为一种重要的空间分割技术,在计算机图形学和游戏开发领域扮演着至关重要的角色。虽然存在一些局限性,但通过不断的改进和发展,BSP树的应用前景仍然十分广阔。

    基于属性主题分割的评论短文本词向量构建优化算法_李志宇1

    《基于属性主题分割的评论短文本词向量构建优化算法》这篇文章由李志宇等人撰写,主要探讨了如何通过不同的词向量训练模式来优化评论短文本的词向量构建,从而提升其在自然语言处理任务中的性能。文章重点比较了三种...

    quakeII室内场景实例(源码)

    这个项目旨在帮助开发者了解如何通过编程技术来构建3D游戏环境,特别是那些基于BSP(Binary Space Partitioning)格式文件的游戏场景。源码的运行需要Visual Studio 2005或更高版本的IDE。 OpenGL是一个跨语言、跨...

    Doom BSP node builder:基于bsp v5.1源的Doom BSP节点构建器-开源

    Doom BSP节点构建器是一款专为Doom游戏引擎设计的重要工具,它基于BSP(Binary Space Partitioning)算法,用于优化游戏场景的渲染效率。这款构建器是用Free Pascal Compiler(FPC)和Lazarus IDE开发的,这两个开源...

    bsp讲解 3D object

    本文将介绍一种基于BSP树(Binary Space Partitioning Tree)的隐藏表面消除方法。 #### 二、BSP树简介 BSP树是一种空间划分数据结构,用于有效地组织三维空间中的多边形(通常为三角形),以便进行快速的渲染和隐藏...

    虚拟场景中碰撞检测技术研究

    - **BSP树**算法基于空间平面划分的概念,通过递归地将空间分割为两个子空间,可以高效地组织场景和对象,优化渲染流程。此方法特别适用于创建均衡的树结构,减少场景渲染时的深度,加快处理速度。 - **八叉树**是...

    基于LOD的大规模真实感室外场景实时渲染技术

    基于LOD的大规模真实感室外场景实时渲染技术的研究旨在解决大规模地形渲染中的两大问题:如何有效存储地形数据以及如何减少大量三角形带来的计算负担。通过采用LOD技术以及其他辅助技术如ROAM算法、多遍纹理映射等,...

    The Source Engine BSP File Format

    HDR技术的加入,意味着游戏能够在同一场景中同时展现极端亮度和极暗区域的细节,极大地增强了画面的真实感和沉浸感。 #### BSP文件结构概览 BSP文件是一种高效存储三维空间数据的格式,通过二进制空间分割算法将...

Global site tag (gtag.js) - Google Analytics