Beyond Polygons (超越多边形)

核心思想:为什么我们需要超越多边形?

传统的实时渲染严重依赖三角形网格来表示物体表面。但这并非万能钥匙。本章的核心在于探讨替代或补充多边形渲染的各种技术。

  • 核心权衡:传统的几何渲染,其成本与模型的顶点/三角形数量成正比。而本章介绍的许多技术,其成本与屏幕上渲染的像素数量成正比。
  • 适用场景:对于那些用三角形难以描述或效率低下的物体,例如毛发、云、烟雾、火焰、远处复杂的景物等,基于图像或其他体元的技术往往是更优解。

13.1 渲染频谱 (The Rendering Spectrum)

这是一个宏观概念,帮助我们理解不同渲染技术所处的位置。

  • 核心观点:渲染方法并非“非黑即白”,而是一个连续的频谱。频谱的一端是纯粹的几何体渲染(如三角形),另一端是纯粹的图像渲染(如一张照片)。
  • 关键术语
    • 渲染频谱 (Rendering Spectrum):一个描述从完全基于几何到完全基于图像的渲染方法连续过渡的概念。
    • 细节层次技术 (Level of Detail, LOD):根据物体与摄像机的距离,使用不同复杂度的模型进行渲染,是频谱中常见的一种思想。当物体极远时,用一个简单的图像(Impostor)来代替复杂的3D模型就是LOD思想的极致体现。

13.2 固定视图效果 (Fixed-View Effects)

当观察视角固定时,我们可以进行大量的预计算来“作弊”,极大地提升性能。

  • 核心观点:如果摄像机和场景中的静态部分不发生改变,那么这部分的渲染结果就可以被缓存和复用。我们只需要每帧重新渲染动态的物体即可。
  • 实现方法
    1. 缓存:首次渲染时,将静态场景的颜色缓冲区 (Color Buffer)深度缓冲区 (Z-buffer) 保存下来。
    2. 复用:在后续的每一帧,直接用缓存的数据来初始化帧缓冲,然后只在其上绘制动态物体(例如,一个走动的人物)。利用缓存的Z-buffer可以正确处理遮挡关系。
  • 关键术语
    • 重光照 (Relighting):一种更高级的技术,预计算出更复杂的数据结构,允许在固定视图下对场景进行实时的光照编辑。
    • 渐进细化 (Progressive Refinement):当视图和场景静止时,利用空闲的计算资源,随时间推移逐步提升画面质量(例如,进行更高质量的抗锯齿、光线追踪等)。这在CAD和可视化应用中非常有用。

13.3 天空盒 (Skybox)

用于模拟无限远处环境的经典技术。

  • 核心观点:远处的景物(如天空、远山)由于距离极远,其视差 (Parallax) 变化可以忽略不计。因此,我们可以用一个巨大的、纹理化的几何体(通常是立方体)将整个场景包裹起来,并让它跟随摄像机移动,以此来模拟远景。
  • 实现细节
    • 几何体:通常是一个立方体,使用立方体贴图 (Cube Map) 进行纹理映射。
    • 跟随摄像机:天空盒的中心始终与摄像机位置保持一致,这样无论摄像机如何移动,都无法“靠近”或“穿过”天空盒,从而制造出无限远的感觉。
  • 性能优化
    1. 关闭深度写入:天空盒永远在所有物体的最后面,所以不需要写入Z-buffer。
    2. 优化绘制顺序:推荐的绘制顺序是 不透明物体 天空盒 透明物体。这样,不透明物体已经填充了部分深度缓冲,可以有效剔除掉被遮挡的天空盒像素,减少不必要的像素着色器计算(利用Early-Z剔除)。
  • 重要公式:估算天空盒贴图所需的分辨率。
    • 解读:相机的视场角 (Field of View, fov) 越小(镜头拉得越近),你需要的天空盒纹理分辨率就越高,才能保证每个像素都能采样到足够的细节。

13.4 光场渲染 (Light-Field Rendering)

一种前沿的、纯粹基于图像的渲染技术,可以看作是全息摄影的数字版本。

  • 核心观点:通过从海量不同的视点捕捉一个物体的图像集合,来完整地记录该物体向各个方向辐射的光线信息(即光场)。渲染时,根据新的虚拟视点,从已记录的数据中插值出对应的图像。
  • 优势:渲染成本几乎是恒定的,与物体的几何复杂度和材质复杂度无关。可以完美重现真实世界的物体。
  • 挑战:需要巨大的数据存储,且数据采集过程复杂。
  • 现代前沿:这项技术是近年来大火的神经辐射场 (NeRF) 的前身和理论基础之一,在虚拟现实(VR)中用于解决人眼对焦问题也很有潜力。

13.5 Sprite和图层 (Sprites and Layers)

最基础、最古老的图像渲染图元之一。

  • 核心观点Sprite (精灵图) 本质上就是一个2D图像,可以被放置和移动在屏幕空间或世界空间中。通过将多个Sprite分层并按深度排序,可以构建出具有伪3D效果的场景。
  • 关键术语
    • Sprite:一个可以独立控制的2D图像。现代实现中通常是一个应用了透明纹理、且始终面向摄像机的四边形。
    • 图层 (Layers):将场景分解为多个前后堆叠的Sprite平面。这是传统2D动画(如迪士尼动画)和许多2D游戏(如《空洞骑士》)的基本原理。
    • 画家算法 (Painter's Algorithm):按照从后往前的顺序依次绘制图层,后面的物体自然就会被前面的物体覆盖,无需Z-buffer。

13.6 广告牌技术 (Billboarding)

这是使用基于图像的图元来模拟3D物体最核心、最常用的技术之一。

  • 核心观点广告牌 (Billboard) 是一个始终会根据观察方向调整自身朝向的纹理化四边形。它通过“欺骗”观察者,用一个简单的面片来高效地表现复杂的视觉现象。
  • 应用场景:几乎所有无法或不值得用复杂几何体建模的东西,如草、烟、火、爆炸、粒子效果、远处的树木等。

广告牌的数学基础:构建朝向

无论广告牌如何变化,其核心都是在程序中为这个四边形计算出一个正确的旋转矩阵。这个过程通常始于两个向量:

  1. 表面法线 (Normal) n:决定广告牌“面向”哪个方向。
  2. “上”方向 (Up Vector) u:决定广告牌的顶部朝向。

通常 nu 不是互相垂直的,我们需要通过以下步骤构建一个标准正交基(三个互相垂直的单位向量),它们将构成最终的旋转矩阵:

  1. 确定固定向量:在 nu 中选择一个作为基准,其方向不能改变。
  2. 计算“右”方向 r:通过叉乘得到同时垂直于 nu 的向量。
  3. 修正非固定向量:利用 r 和固定向量,通过另一次叉乘计算出与两者都垂直的、新的非固定向量。
    • 如果 法线 n 固定 (最常见):
    • 如果 “上”方向 u 固定 (用于轴向广告牌):
  4. 构建旋转矩阵:将这三个标准正交基向量 r, u', n (或 n') 作为列,组成旋转矩阵 M

接下来的不同类型的广告牌,其区别就在于如何定义初始的法线 n 和“上”方向 u


13.6.1 屏幕对齐的广告牌 (Screen-Aligned Billboards)

这是最简单的一种形式,效果等同于一个在3D空间中的2D精灵图。

  • 核心观点:广告牌完全平行于屏幕(视平面)。无论摄像机如何移动和旋转,它看起来都像一个贴在屏幕上的2D图像。
  • 向量定义
    • 法线 n:直接使用摄像机的观察方向的反方向。
    • “上”方向 u:直接使用摄像机的“上”方向。
  • 优势:实现简单,对于所有屏幕对齐的广告牌,该旋转矩阵在一帧内是恒定的,可以批量处理。
  • 应用场景:HUD元素、地图标记、3D空间中的文本注释。

13.6.2 面向世界的广告牌 (World-Oriented Billboards)

解决了屏幕对齐广告牌在摄像机倾斜(Roll)时的不自然旋转问题。

  • 核心观点:广告牌的法线始终朝向观察点,但其**“上”方向始终与世界空间的“上”方向对齐**(例如,世界坐标系的Y轴)。
  • 向量定义
    • 法线 n:从广告牌中心指向摄像机位置的向量。
    • “上”方向 u:固定的世界“上”方向,如 (0, 1, 0)
  • 关键问题与解决方案
    • 透视畸变:当视场角(FOV)很大时,位于屏幕边缘的广告牌会出现拉伸变形。这是因为所有广告牌都平行于同一个视平面。
      • 解决方案:采用面向视点 (Viewpoint-Oriented) 的对齐方式,即每个广告牌的法线都独立地指向摄像机的位置,而不是共享一个统一的“平行于屏幕”的法线。这会让广告牌的变形与真实三维球体的投影变形相匹配,看起来更自然。
    • 与几何体交叉:当广告牌(如烟雾)穿过墙壁或地面时,会产生一条非常生硬的交叉线,破坏真实感。
      • 解决方案软粒子 (Soft Particles)。在渲染广告牌的像素着色器中,采样深度图,获取其后方几何体的深度。如果广告牌像素的深度与几何体深度非常接近,就动态增加该像素的透明度,使其平滑地“淡入”到几何体中,消除硬边。
    • Alpha区域的性能浪费:许多特效纹理(如爆炸)有大量完全透明的区域,但GPU仍然需要处理这些透明像素。
      • 解决方案:用一个更紧凑的多边形(例如,贴合物体轮廓的八边形)来代替简单的四边形,从而从物理上减少需要处理的透明像素数量,降低填充率压力。
    • 穿过摄像机:当摄像机穿过粒子时,粒子会因为触及近裁剪面而突然消失。
      • 解决方案球形广告牌 (Spherical Billboards)体积广告牌。将广告牌视为一个虚拟球体或盒体的代表。像素着色器通过计算光线与该虚拟体积的入口点和出口点的距离,来模拟体积感和正确的淡出效果,完美处理与场景和近裁剪面的交叉。

13.6.3 轴向广告牌 (Axial Billboarding)

为那些自身有明显“主轴”的物体设计,如树木。

  • 核心观点:广告牌被限制只能围绕一个固定的世界空间轴旋转(例如树干的方向),并在该约束下,使其表面尽可能地朝向观察者。
  • 向量定义
    • 法线 n:初始为观察方向,但需要被修正。
    • “上”方向 u固定的,代表旋转轴的方向(例如树干的Y轴)。
  • 与“面向世界”的区别
    • 面向世界:法线优先朝向相机,然后调整“上”方向去贴近世界“上”方向。
    • 轴向:“上”方向被锁死,只能调整法线去贴近相机方向。
  • 应用场景远处的树木、草叶、激光束等具有明显圆柱对称性的物体。
  • 缺点:当从正上方或正下方观察时(例如飞过一棵树),广告牌会“露馅”,变成一条线。

13.6.4 Impostor (顶替者)

一种更高级、动态的广告牌技术,本质上是实时生成的LOD。

  • 核心观点Impostor 是一种特殊的广告牌,它的纹理是通过实时渲染一个复杂3D模型到一张纹理上而动态生成的。这张纹理随后被用在一个简单的广告牌上,来“顶替”原来的高精度模型。
  • 工作流程
    1. 选择一个远处的复杂物体。
    2. 从当前视角,将该物体单独渲染到一个离屏纹理 (Render Target) 中。
    3. 用这张新生成的纹理替换物体,渲染一个面向视点的广告牌。
    4. 在接下来的几帧中,复用这张纹理,直到视角变化过大(错觉被打破)时,才重新生成一次。
  • 优势:极大地降低了远处复杂物体的渲染开销,可以将渲染成本分摊到多个帧上。
  • 高级形式Polypostor,将一个复杂的动画模型(如一个角色)拆分成多个部分(头、躯干、四肢),为每个部分独立生成Impostor,从而可以表现动画。

13.6.5 广告牌表示 (Billboard Representation)

使用一组静态广告牌来近似一个复杂的静态模型。

  • 核心观点:通过离线分析一个高精度模型(如一棵树),自动生成一小组(几十到上百个)带有复杂透明纹理的、固定朝向的交叉广告牌来对其进行近似。这个集合被称为广告牌云 (Billboard Cloud)
  • 与 Impostor 的区别
    • Impostor:是动态的,通常只用一个广告牌,纹理会根据视角实时更新。
    • 广告牌云:是静态的,由多个广告牌组成,它们的朝向和纹理都是预计算好的,不再改变。从不同角度看,能看到不同的广告牌组合,从而产生立体感。
  • 优势:比单个Impostor能更好地模拟物体的三维结构和视差,效果更逼真。
  • 挑战:可能会产生大量的过度绘制 (Overdraw),因为广告牌之间会互相重叠。需要仔细权衡几何复杂度和像素填充率的开销。

13.7 位移技术 (Displacement Techniques)

这一系列技术的核心思想是:在基础的图像图元上附加额外的深度或高度信息,使其不仅仅是一张“平面贴图”,而是能表现出立体感,并与场景中的其他物体进行更精确的交互。

  • 核心观点:通过在纹理中存储位移数据,我们可以在像素级别上修正图元的深度或模拟表面细节,从而用极低的几何成本实现以假乱真的3D效果。

深度 Sprite / 钉板 (Depth Sprite / Nailboard)

这是对 Impostor 技术的直接增强。

  • 核心观点深度 Sprite 是一种特殊的 Impostor,它的纹理不仅包含颜色信息 (RGB),还包含一个额外的深度偏移 (Delta, ∆) 通道,构成 RGB∆ 纹理
  • 工作原理
    1. 在生成 Impostor 纹理时,对于每个像素,除了记录其颜色,还计算并存储该点真实表面深度与广告牌平面深度之间的差值
    2. 在渲染这个深度 Sprite 时,像素着色器会读取 值,并用它来手动修正当前像素输出到Z-buffer的深度值
  • 关键优势极大地改善了与场景几何体的交叉问题。普通的 Impostor 在与物体相交时会产生生硬的、不真实的切面,而深度 Sprite 可以在像素级别上实现正确的遮挡和相交效果,效果非常逼真。
  • 相关技术分层深度图像 (Layered Depth Image, LDI),一种更高级的格式,每个像素可以存储多个深度样本,用于处理当视角变化时,原本被遮挡的表面暴露出来(去遮挡)所产生的图像空洞问题。

浮雕纹理映射 (Relief Texture Mapping)

这是一种在任意多边形表面上创造复杂几何细节的技术。

  • 核心观点:使用一张高度场 (Heightfield) 纹理来描述一个平坦表面上凹凸不平的细节。渲染时,通过在像素着色器中进行光线步进 (Ray-Stepping) 来找到视线与这个虚拟高度场的实际交点。
  • 与视差贴图/法线贴图的区别:法线贴图只是模拟了光照效果,没有真实的位移,在物体轮廓或大角度观察时会“露馅”。而浮雕纹理映射能够模拟真实的位移和自遮挡,效果更上一层楼。
  • 应用场景:在单个四边形上渲染出极其复杂的表面,如石墙、编织物、复杂的机械表面等。
  • 高级应用浮雕顶替者 (Relief Impostor),常用于人群渲染。将一个角色模型分解为几个简单的包围盒,然后为每个包围盒的六个面生成浮雕纹理(颜色、法线、高度场)。渲染时,通过光线步进渲染这些包围盒,用极低的成本表现一个带有立体感的远距离角色。

几何图像 (Geometry Image)

这是一种将几何与图像统一起来的激进思想。

  • 核心观点:将一个不规则的3D网格的顶点位置信息完整地编码到一张规则的2D图像(纹理)中。
  • 工作原理:纹理的 (u,v) 坐标隐式地定义了网格的拓扑连接,而存储在纹素中的 (R,G,B) 值则直接对应顶点的 (x,y,z) 坐标。
  • 最吸引人的特性:可以对3D模型应用标准的图像处理算法。最典型的应用就是对几何图像进行 Mipmap 处理,这会自动生成一系列不同细节层次(LOD)的模型,非常优雅和高效。

13.8 粒子系统 (Particle Systems)

粒子系统是实时渲染中用于模拟各种“模糊”或“体积”现象(如火焰、烟雾、魔法效果)的主力军。

  • 核心观点粒子系统 是一个控制大量微小、独立的渲染图元(粒子)集合的框架。它负责管理每个粒子的整个生命周期:生成、动画(模拟)、渲染和销毁,通过这些粒子的集体行为来模拟复杂的视觉现象。
  • 粒子的形态:最常见的是广告牌 (Billboard),但也可以是简单的点、线段,甚至是小型网格。

粒子渲染的挑战与优化

由于粒子数量庞大且通常是半透明的,渲染它们极具挑战性。

  • 核心挑战半透明排序。为了正确的颜色混合,半透明物体需要从后往前绘制,但对成千上万个不断运动的粒子进行实时排序的开销是极其巨大的。
  • 实用优化策略
    • 避免排序
      • 使用镂空纹理 (Cutout/Alpha Test) 代替半透明,这样就没有排序需求。
      • 使用叠加混合 (Additive Blending) 或减法混合,这两种混合模式与绘制顺序无关。
    • 降低成本
      • 更少、但动画更复杂的粒子来代替大量静态粒子。
      • 为粒子数量设置一个动态上限,保证帧率稳定。
      • 将使用相同着色器和纹理的粒子批量处理,减少状态切换。使用纹理图集 (Texture Atlas) 来避免纹理绑定开销。
    • 低分辨率渲染:将烟雾等柔和的粒子效果渲染到一个低分辨率的缓冲区中,然后进行模糊处理并放大混合回主场景,可以极大地提升性能。

13.8.1 粒子着色 (Particle Shading)

如何让成千上万个简单的面片看起来具有真实的光照和阴影。

  • 光照 (Lighting)
    • 简单方法:逐顶点光照,速度快但效果平淡。
    • 改进方法:为粒子广告牌使用法线贴图 (Normal Map),赋予其表面细节和体积感。
    • 高级方法:为粒子实现类似延迟光照的系统。将大量粒子的光照计算所需数据(如世界位置)渲染到G-Buffer中,然后用一个全屏或基于Tile的计算着色器统一处理光照,最后再将光照结果应用回粒子。
  • 阴影 (Shadowing)
    • 接收阴影:粒子可以简单地在顶点或像素处采样场景的阴影贴图
    • 投射阴影:由于粒子不是实体,不能直接渲染到阴影贴图中。常用方法是从光源视角,将粒子“飞溅”(splat)到一个透光率图 (Transmittance Map) 中,该图记录了光线穿过粒子云后剩余的能量。最终阴影是场景阴影和这个透光率图的结合。
    • 自阴影:粒子云内部的粒子互相遮挡。这是最难的部分,需要傅里叶不透明度映射 (Fourier Opacity Mapping, FOM)体积阴影贴图 (Volumetric Shadow Maps) 等高级技术来实现。

13.8.2 粒子模拟 (Particle Simulation)

控制粒子如何运动。

  • 核心趋势:现代粒子系统几乎完全在 GPU 上进行模拟,以释放CPU的压力。
  • 实现技术
    • 早期技术流式输出 (Stream Output),顶点着色器计算出粒子新状态,并通过这个特殊阶段写回到另一个顶点缓冲区中。
    • 现代主流计算着色器 (Compute Shaders)。利用其通用的计算能力和对缓冲区(UAV)的读写自由度,可以实现极其复杂和高效的粒子模拟,包括碰撞检测、物理交互等。
  • 学习资源:这是一个巨大的领域,推荐查阅游戏开发大会(GDC)上关于《命运》、《声名狼藉》等游戏中特效实现的演讲,以及 Bridson 的流体模拟专著。

13.9 点渲染 (Point Rendering)

当数据来源不是传统的多边形网格,而是海量的三维采样点时(例如激光雷达扫描),直接渲染这些点就成了一种高效的选择。

  • 核心观点:将物体的表面表示为海量的、不相连的三维点的集合(点云),并直接对这些点进行渲染。渲染时,每个点会被绘制成一个有一定大小和形状的图元,称为 splat,以此来填充点与点之间的缝隙,形成连续的表面。
  • 数据来源
    • 激光雷达 (LIDAR):自动驾驶汽车、地形测绘。
    • RGB-D相机:微软Kinect、iPhone TrueDepth相机。
    • 摄影测量 (Photogrammetry):通过多张2D照片重建3D点云。
  • 关键术语
    • 点云 (Point Cloud):描述物体外部表面的三维顶点集合。
    • Splat:用于渲染单个点的小图元,可以是一个方块、一个圆形,或带有高斯模糊的圆片。本质上,它和粒子系统中的广告牌是类似的概念。
    • 面元 (Surfel / Surface Element):一个增强版的“点”,除了位置信息外,还包含表面法线、颜色、半径等属性,能提供更高质量的渲染效果。

点云渲染的核心挑战与解决方案

点云数据量极其庞大(可达数千亿个点),无法全部载入内存进行渲染。

  • 核心挑战数据管理空洞填充。如何在有限的资源下高效地组织和筛选需要渲染的点,并保证渲染出的表面没有明显的空洞。
  • 解决方案:层次化结构 (Hierarchical Structures)
    • QSplat:早期的经典系统,使用包围球层次结构来组织点云。渲染时可以根据性能预算,在树的任意层级停止遍历,将该层级的包围球直接渲染成一个大的splat,实现了高效的渐进式渲染。
    • 分层点云 (Layered Point Cloud):更现代、更GPU友好的方法。它将点云分层,每一层都是对整个模型的稀疏采样。渲染时,从根节点(最稀疏的一层)开始绘制,然后根据视点远近,增量式地加载和绘制更深层次、更密集的子节点数据来填充细节。

无光照信息点云的着色

如果点云数据只有位置和颜色,没有法线信息,如何让它看起来有立体感?

  • 核心观点:利用屏幕空间技术,在渲染后期处理中计算光照效果。
  • 常用技术
    1. 屏幕空间环境光遮蔽 (SSAO):通过分析每个像素周围邻域的深度值,来模拟缝隙和角落的遮蔽效果,增加立体感。
    2. 眼穹光照 (Eye-Dome Lighting, EDL):SSAO的变种和增强。它不仅考虑深度,还计算深度差,能更有效地勾勒出物体的轮廓和边缘,效果比SSAO更清晰锐利。

13.10 体素 (Voxels)

如果说像素(Pixel)是2D图像元素,那么体素 (Voxel) 就是 3D体积元素 (Volume Element)

  • 核心观点体素是将三维空间划分成规则、均匀的网格后,每一个小立方体单元。与点云不同,体素的位置是隐式的(由其在网格中的索引决定),它天然地定义了邻域关系,非常适合表示物体的内部和体积数据。
  • 存储内容:体素可以存储各种信息,如:
    • 布尔值:表示该处是“实体”还是“空气”。
    • 密度/不透明度:用于医疗影像(CT扫描)、烟雾模拟。
    • 颜色和法线:用于渲染。
    • 符号距离场 (Signed Distance Field, SDF):存储到最近表面的距离,是渲染平滑曲面的利器。

13.10.1 & 13.10.2 体素的应用与存储

  • 应用领域
    • 游戏:《我的世界》就是最著名的基于体素的游戏。
    • 模拟:流体、侵蚀、云层形成等物理模拟。
    • 建模:可以进行类似“雕刻”的操作,布尔运算(并集、差集)变得非常简单和鲁棒。
    • 电影特效:OpenVDB是业界标准,用于模拟爆炸、烟雾等。
  • 存储挑战:数据量随分辨率呈立方级增长 (),一个1024x1024x1024的网格就需要海量存储。
  • 解决方案稀疏体素八叉树 (Sparse Voxel Octree, SVO)
    • 核心思想:利用数据的空间一致性。如果一个2x2x2区域内的8个体素值都相同(例如都是空的),则在八叉树中就可以只用它们的父节点来表示,从而丢弃这8个冗余的子节点。
    • 优势:极大地压缩了数据量,并且天然地提供了一种三维的 Mipmap (LOD) 结构。

13.10.3 体素的生成 (Voxelization)

将其他几何表示(如多边形网格)转换为体素网格的过程。

  • 核心观点体素化是在GPU上将三角形“绘制”到三维体素网格中的过程。
  • 现代方法:利用计算着色器 (Compute Shader)保守光栅化 (Conservative Rasterization) 等现代GPU特性,可以直接、高效地构建出稀疏体素八叉树(SVO),并计算出每个体素的平均颜色、法线等信息。

13.10.4 体素的渲染

如何将存储在三维网格中的数据可视化。

  1. 光线投射 (Ray Casting)

    • 从摄像机为每个像素发射一条光线,沿着光线步进,检测与体素网格的交点。非常适合在GPU上并行处理,可以直接渲染出高质量的图像。
  2. 表面提取 / 多边形化 (Surface Extraction / Polygonization)

    • 将体素数据转换回传统的多边形网格,然后用标准的光栅化管线渲染。
    • 移动立方体 (Marching Cubes) 是最经典的算法。它检查每个2x2x2的体素立方体,根据8个顶点的“内/外”状态,从一个预计算的查找表中获取应该在此立方体内生成的三角形配置,最终拼接成一个平滑的表面。
  3. 高级技术:锥形追踪 (Cone Tracing)

    • 利用SVO的 Mipmap 特性,将单条光线扩展为一个圆锥体
    • 当圆锥在场景中传播时,其半径会变大,此时就可以在SVO的更高层级(更低分辨率) 进行采样。
    • 优势:这是一种高效的区域采样方法,可以非常快速地计算出软阴影、环境光遮蔽、景深、间接光照等需要对周围环境进行积分的效果。这是体素在全局光照领域大放异彩的关键技术之一。