大场景渲染加速算法

0. 实时渲染四大目标

  • 更高的每秒帧数
  • 更高的分辨率
  • 渲染更多的物体与更具真实感的场景
  • 实现更高的复杂度

1. 空间数据结构 | Spatial Data Structures

空间数据结构(Spatial Data Structures)是将几何体组织在 N 维空间中的一系列数据结构,而
且我们可以很容易地将二维和三维的一些概念扩展到高维之中。这些空间数据结构可以用于
很多实时渲染相关操作的加速查询中,如场景管理,裁减算法、相交测试、光线追踪、以及
碰撞检测等。
空间数据结构的组织通常是层次结构的。宽泛地说,即最顶层包含它之下的层次,后者又包
含更下层的层次,以此类推。因此,这种结构具有嵌套和递归的特点。用层次结构的实现方
式对访问速度的提升很有帮助,复杂度可以从 O(n)提升到 O(log n)。但同时,使用了层次结构
的大多数空间数据结构的构造开销都比较大,虽然也可以在实时过程中进行渐进更新,但是
通常需要作为一个预处理的过程来完成。
一些常见的空间数据结构包括:
• 层次包围盒(Bounding Volume Hierachy,BVH)
• 二元空间分割树(Binary Space Partitioning,BSP),
• 四叉树 (QuadTree)
• kd 树(k-dimensional tree)
• 八叉树(Octree)
• 场景图 (Scene Graphs)
其中,BSP 树和八叉树都是基于空间细分(Space Subdivision)的数据结构,这说明它们是对
整个场景空间进行细分并编码到数据结构中的。例如,所有叶子节点的空间集合等同于整个
场景空间,而且叶子节点不相互重叠。

1.1 层次包围盒 | Bounding Volume Hierarchies , BVH

层次包围盒(Bounding Volume Hierarchies, BVH)方法的核心思想是用体积略大而几何特征简
单的包围盒来近似地描述复杂的几何对象,从而只需对包围盒重叠的对象进行进一步的相交
测试。此外,通过构造树状层次结构,可以越来越逼近对象的几何模型,直到几乎完全获得
对象的几何特征。
对于三维场景的实时渲染来说,层次包围体(Bounding Volume Hierarchy,BVH)是最常使用
的一种空间数据结构。例如,层次包围体经常用于层次视锥裁减。场景以层次树结构进行组
织,包含一个根节点(root)、一些内部节点(internal nodes),以及一些叶子节点
(leaves)。顶部的节点是根,其无父节点。叶子节点(leaf node)包含需渲染的实际几何
体,且其没有子节点。
相比之下,内部节点包含指向它子节点的指针。因此,只要根节点不是这颗树唯一的一个节
点,那么它就是一个内部节点。树中的每一个节点,包括叶子节点,都有一个包围体可以将
其子树中的所有几何体包围起来,这就是包围体层次的命名来源,同时,也说明了根节点有
一个包含整个场景的包围体。


image.png

1.2 BSP 树 | BSP Trees

BSP 树(二叉空间分割树,全称 Binary Space Partitioning Tree)是一种常用于判别对象可见性的
空间数据结构。类似于画家算法,BSP 树可以方便地将表面由后往前地在屏幕上渲染出来,
特别适用于场景中对象固定不变,仅视点移动的情况。
其中,BSP 是 Binary SpacePartitioning(二叉空间划分法)的缩写。这种方法递归地将空间使
用超平面划分为凸面体集合。而这种子划分引出了借助于称之为 BSP 树的树形数据结构的场
景表示。


image.png

1.3 八叉树 | Octrees

八叉树(octree),或称八元树,是一种用于描述三维空间的树状数据结构。八叉树的每个节
点表示一个正方体的体积元素,每个节点有八个子节点,这八个子节点所表示的体积元素加
在一起就等于父节点的体积。一般中心点作为节点的分叉中心。
简单来说,八叉树的空间划分方式很简单,即递归地进行规整地 1 分为 8 的操作。如下图,
把一个立方体分割为八个同样大小的小立方体,然后递归地分割出更的小立方体。这个就是
八叉树的命名来源。这种分割方式可以得到比较规则的结构,从而使得查询变得高效。


image.png

相似地,四叉树是把一个二维的正方形空间分割成四个小正方形。而八叉树是四叉树的三维
空间推广。

1.4 场景图 | Scene Graphs

BVH、BSP 树和八叉树都是使用某种形式的树来作为基本的数据结构,它们的具体区别在于
各自是如何进行空间分割和几何体的存储,且他们均是以层次的形式来保存几何物体。然而
三维场景的绘制不仅仅是几何体。
然而,渲染三维场景不仅仅只是渲染出几何图形,对动画,可见性,以及其他元素的控制,
往往需要通过场景图(Scene Graphs)来完成。
场景图被誉为“当今最优秀且最为可重用的数据结构之一。”Wiki 中的对场景图的定义是
“场景图(Scene Graph)是组织和管理三维虚拟场景的一种数据结构,是一个有向无环图
(Directed Acyclic Graph, DAG)。
场景图是一个面向用户的树结构,可以通过纹理、变换、细节层次、渲染状态(例如材质属
性)、光源以及其他任何合适的内容进行扩充。它由一棵以深度优先遍历来渲染整个场景的
树来表示。


image.png

另外提一句,开源的场景图有 Open Scene Graph 和 OpenSG 等,有兴趣的朋友们可以进行进一
步了解。

裁剪技术 | Culling Techniques

参考文章Culling Techniques

层次细节 | LOD, Level of Detail

https://github.com/sp4cerat/Fast-Quadric-Mesh-Simplification 减面算法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342