《Breaking The Walls》算法的第一印象和空间分割杂论

这个算法来自于国外的一篇论文《Breaking the Walls: Scene Partitioning and Portal Creation》(以下简称论文,为虾米不是国内滴? -_-b),全名在这个Blog转载Dreams_wu的那篇文章里,大家可以去下来看。

当处理室外场景的时候,四叉和八叉毫无疑问,室内场景的时候,Bsp和室内八叉也是挺不错的,其中以Bsp为最好。但是有一种场景,四叉和八叉显得力不从心,Bsp又显得有点过分,这就是传说中的“城市场景”。

城市场景的特点是:数据量异乎寻常的巨大,具有大量不规则的平面,八叉分割很容易就将场景划分得过于细致而丧失了八叉本身的优势。而Bsp则由于不规则平面的存在,易将场景切分得毫无规则可言,如一团乱麻(图片来自论文):

注意,白色的部分是建筑物。

这样的分割本身或许不是什么错误,但是,大空间的分割将直接导致大BSP树的产生,从而最终导致BSP算法效率的下降,同时,建筑物的外表面往往极为复杂(拜那些变态设计师所赐),没必要发生的BSP分割也因此增多了起来,最终的结果就是上图左:也就是我常说的诡异的空间~~ ^_^。

而相对而言,右边的算法:也就是所谓的Breaking The Wall (BW)算法,看起来就好很多。

BW算法基于这样一个理论:我们将3D的摩天大楼投影到2D平面(地面),那么,凡角落处,必有Portal,Portal和墙面围出的区域,必为Cell。这应该很好理解,建筑的外墙与另一栋相邻建筑的外墙之间,大凡就是街道和小巷,人能在其中穿行以跨越不同的区域,所以,这些地方肯定是要诞生Portal和Cell的。只是论文似乎忽略了一个问题(或者是我忽略了):天桥怎么办呢?还有连接两栋楼的那种天桥,他们是悬空的,投影时怎么投影呢?这个目前还没有想到解决方案。

BW算法的核心是一个2D平面的蔓延算法,这和我现在工作中所作的蔓延算法有点相似,但他是2D空间中发生的,而我所作的是3D的蔓延。蔓延和BSP一样,最后的结果都是Cell和Portal,Cell组成空间,Portal连接Cell。唯一的不同是,Bsp以平面划分空间,以分出Cell和Portal,它所依据的是“平面等分空间为正反”的真理,因此,凡分割必要求将上级空间切分完全,完全切分成正负两个半空间。

而BW蔓延法虽然也是以墙面(平面)作为基础,但它只是以墙面延伸而不是平面作为分割基础,因此不必要受平面无限延展的限制,可以看作特别优化过的BSP。对于一些划分过小的空间,BSP是无法忽略的,因为平面必须跨越整个分割空间,而蔓延法会直接将之忽略,因为延伸不必考虑全空间的问题,只需要尽可能延展就可以,灵活很多。因此最后的结果看起来就比BSP规则很多。我们可以想象一下,BSP类如切西瓜,每刀下去,西瓜必定一刀两断。而BW就不会那么冲动,它只要求尽可能分割,就如同雕冰雕,适可而止,决不容许一刀两断的事情发生——太浪费了。

最近上了上Gameres,发现OGRE社群在批判BSP方面很有一手,或者说,他们主要批判的是传统经典BSP分割算法。关于这个问题,我是这样认为的:首先,作为自动空间分割的方案,我们不可能要求太高,相对于让美工一个个Portal去摆的方案而言,任何自动算法肯定都是傻而又蛮的。开发的高效性和运行的高效性总是反比。BW在处理这类问题的时候,其性能已经很不错了,你当然不能拿他来跟手动摆Portal的方案相比,但是,也没必要这样比,因为手动Portal的话,BSP其实就表现得很不错了,开发效率又高,运行效率也不低。放着成熟的技术不用,总是在开发新的技术和概念,很没必要的。

空间分割的首要原则应该是:没有普适分割法,只有最适分割法。只有知道自己要分割什么,目标是什么,才能得到最好的分割法和最好的空间。在这一点上,我的想法是:什么都不用批判,什么也都不需要批判,一切都是恩典,懂得感恩,才能获得一切。大家认为呢?

关于BW,简单说到这里,论文写得最全,大家可以下来看看。原文正在翻译,不过遇到点麻烦,有些句子实在有点难懂,我尽量快点吧,大家有什么内外结合或者城市场景分割的更好方案,请麻烦告诉我一声啊~

李巍[ noslopforever(天堂里的死神) ] 原作,转载请注明出处:http://blog.csdn.net/noslopforever

email : noslopforever@yahoo.com.cn

《Breaking The Walls》算法的第一印象和空间分割杂论相关推荐

  1. “AI颜狗”来啦!第一眼看到照片,就能预测人们对你的第一印象

    转自大数据文摘 世人皆是颜狗. 心理学家弗雷特说,以貌取人是人类的一种本能,这有可能是长期自然进化选择的结果. 因为人的大脑总是会选择对自己来说,是最不需要动脑思考的思维方式. 所以,人们就更倾向于通 ...

  2. 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础

    一个小白的算法学习之路.读<算法导论>第一天.本文仅作为学习的心得记录. 算法(Algorithm) 对于一个程序员来说,无论资历深浅,对算法一词的含义一定会或多或少有自己的体会,在< ...

  3. 雷声大,雨点小——《多任务下的数据结构与算法》初印象

    本文由恋花蝶最初发表于:http://blog.csdn.net/lanphaday和http://lanphaday.bokee.com,转贴请保留这一声明,谢谢. 雷声大,雨点小 <多任务下 ...

  4. 零起点学算法01——第一个程序Hello World!

    零起点学算法01--第一个程序Hello World! Description 题目很简单 输出"Hello World!"(不含引号),并换行. Input 没有输入 Outpu ...

  5. 一时技痒 不用模拟第一印象的构造 通过三个观察得来的规律解决N^2个往返接力问题...

    问题原题  见银河使者的随笔  http://www.cnblogs.com/nokiaguy/archive/2009/07/24/1530139.html 第一印象  我得到了和他一样的解法,就是 ...

  6. 网络研讨室_网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法...

    网络研讨室 在此网络研讨会上听我们对新Java版本的一些初步想法 关于Java 9的新版本,有很多宣传.将Java平台迁移到模块上,由Mark Reinhold领导的专门团队进行了近十年的艰苦工作. ...

  7. [免费网络研讨会] Java 11的第一印象

    一年多以前,我们正焦急地等待新的模块化Java 9的到来.大约在同一时间,引入了一个新的发布周期,该周期将每6个月发布一次新版本,并提供长期支持(LTS).每3年发行一次(或每6个版本发行一次). 根 ...

  8. 网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法

    在此网络研讨会上听我们对新Java版本的一些初步想法 Java 9的新版本引起了很多炒作.在Mark Reinhold领导的专门团队的带领下,将Java平台迁移到模块花费了近十年的辛苦工作. 除了备受 ...

  9. gradle kotlin_我对Gradle Kotlin DSL的第一印象

    gradle kotlin by Adam Arold 亚当·阿罗德(Adam Arold) 我对Gradle Kotlin DSL的第一印象 (My first impressions of Gra ...

最新文章

  1. 【实用】一个移动端简单的UI弹窗组件,虽算不上高大上,但至少耐看
  2. 高性能的MySQL(7)字符集和校对
  3. JAVA 编写程序实现如下功能:一个线程进行如下运算1*2+2*3+3*4+……+19*20,而另一个线程则每隔一段时间读取前一个线程的运算结果。
  4. Kogito,ergo规则:从知识到服务,轻松自如
  5. json请求 post vue_Spring Boot+Vueaxios异步请求数据的12种操作(上篇)
  6. Web高效管理多个项目的SVN仓库
  7. mysql触发器的要素_MySQL触发器
  8. Elasticsearch7.15.2 修改IK分词器源码实现基于MySql8的词库热更新
  9. SAP License:SAP中的PRC增值税概念
  10. Java Scanner 类,获取用户输入的值
  11. [codeup 2031]To Fill or Not to Fill
  12. php中拼音转汉字,php 汉字拼音如何转换
  13. 计算机开机主机无法启动,手把手教你电脑无法启动怎么办
  14. loj10099 矿场搭建
  15. MTKLOG简介和基本的分析流程
  16. 常见Linux命令pwd实现
  17. 什么是静态的html页面,什么是静态页面?什么是动态页面?二者有什么区别
  18. 福利分享:1024程序员节,给大家推荐一个极简win10
  19. mac 系统怎么更改 pip 源
  20. 基于Java的开源 Carrot2 搜索结果聚合聚类引擎 2.0发布了

热门文章

  1. Linux系统三步安装QQ
  2. 从excel表格中批量给图片重命名
  3. XlistView多条目加载简单实现
  4. 如何与芯片代理商FAE打交道
  5. jQuery.serializeArray() 函数详解
  6. 在SQL server中设置表的自动编号功能
  7. 专利01 | 未来世界已来,会不会可以脑控家居
  8. C++17 判断文件是否存在
  9. CollapsingToolbarLayout + Toolbar结合使用minHeight不生效源码分析
  10. react全生命周期