美文网首页Computer Graphics
大场景渲染加速算法

大场景渲染加速算法

作者: Cesium4Unreal | 来源:发表于2020-09-15 00:16 被阅读0次

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 减面算法

相关文章

  • 大场景渲染加速算法

    0. 实时渲染四大目标 1. 空间数据结构 | Spatial Data Structures 空间数据结构(Sp...

  • 移动端性能优化(5)

    渲染类 使用Viewport固定屏幕渲染,可以加速页面渲染内容 一般认为,在移动端设置Viewport可以加速页面...

  • 移动端性能优化(5)

    渲染类使用Viewport固定屏幕渲染,可以加速页面渲染内容一般认为,在移动端设置Viewport可以加速页面的渲...

  • React中的diff算法

    diff作为Virtual DOM的加速器,其算法上的改进优化是React整个界面渲染的基础和性能保障。传统的di...

  • three.js基础

    1.三大组建 2.渲染器renderer 3.场景 4.渲染器 5.渲染循环 渲染有两种方式:实时渲染和离线渲染 ...

  • 开启和关闭硬件加速

    硬件加速的优缺点 硬件加速能使用GPU来加速2D图像的渲染速度,但是硬件加速并不能完全支持所有的渲染操作, 针...

  • 基于物理的渲染

    基于物理的渲染和光线追踪算法 基于物理模型的渲染的目的是为了渲染出一张跟某个真实的3D场景一模一样的图片,就仿佛你...

  • iOS 离屏渲染

    离屏渲染的真正原因? 图层的叠加绘制遵循“画家算法”。油画算法:先绘制场景中的离观察者较远的物体,再绘制较近的物体...

  • 图算法领域10大经典算法 图像渲染 示例 1:输入:image = [[1,1,1],[1,1,0],[1,0,1...

  • GPU & OpenGL相关 & 状态机 2022-06-15

    渲染分离线渲染(离线烘焙) 和 实时渲染。 实时渲染的技术实现分 普通渲染 和 光线追踪算法渲染https://w...

网友评论

    本文标题:大场景渲染加速算法

    本文链接:https://www.haomeiwen.com/subject/nocxyktx.html