中EN
概念页

天空盒与固定视点技术

Skyboxes & Fixed-View Techniques

用图像代替三角形时,渲染代价与像素数而不是顶点数成正比。Lengyel 的"渲染谱系"从纯图像方法一直排到三角形和光线追踪。本页汇总谱系中偏图像一端的技术:限制视点移动的固定视点加速、渐进细化与重光照、天空盒、光场渲染以及精灵与分层(RTR4 13.1–13.5 节)。

渲染谱系

渲染没有唯一正确方式,每种方法都是现实的近似。三角形从任何视角都能合理表示物体,相机移动时表示不必改变;但为提速,近处可换高细节模型、远处换简化模型(LOD),更远时还可以换成图像。书中按 Lengyel 的谱系从图像一端走回三角形一端。

固定视点

  • 相机完全不动时很多渲染只需做一次。例:牧场和栅栏只渲染一次,保存颜色和 z-buffer,每帧用它们初始化缓冲后只画移动的马;马在栅栏后时存储的深度会挡住它。此时马不会投影(场景不变),可再求出马的阴影影响区,只重算这一小块。关键点:图像中每个像素何时、如何被设置没有限制。
  • CAD 中模型静止、用户操作时视图不变:存下颜色和深度缓冲,每帧只画 UI 和高亮元素,便于标注、测量。再存物体 ID、法线、纹理坐标,就能实现三维绘画程序(把用户操作转成对纹理的修改)。

渐进细化("金线")

视点和场景静止时,随时间生成越来越好的图像,可突然替换或多帧渐变。例如逐步增加像素内不同位置的样本并显示平均(抗锯齿)、在镜头和像素上分层随机采样做景深、换更高质量的阴影、甚至换成光线/路径追踪再淡入。CAD 和可视化中特别有用。

重光照 (Relighting)

固定视点和静态几何下交互编辑电影级图像的光照:用户选定视图,离线处理得到一组缓冲或更复杂结构。Ragan-Kelley 等把着色样本与最终像素分开,可做运动模糊、透明和抗锯齿,并渐进细化;Pellacini 等加入间接全局光照。它很像延迟着色,区别在于这里是把昂贵渲染摊到多帧,延迟着色则是在一帧内加速。

天空盒

  • 环境贴图表示一块局部空间的入射辐射亮度,除了做反射也可以直接表示周围环境。任何环境贴图形式(全景、立方体贴图)都可以,网格大到包住场景其他物体,称天空盒。
  • 原理是视差:近物移动时相对背景偏移明显,远处且彼此靠近的物体几乎没有视差,远山移动一千米也看起来一样。天空盒网格通常以观察者为中心、随之移动,所以不必很大;星空、远景这类大尺度内容,用户一般不会快到发现大小、形状或视差不变。
  • 常用盒子网格 + 立方体贴图,各面纹素密度较均匀。分辨率需约一个纹素对应一个屏幕像素:

texture resolution=screen resolutiontan⁡(fov/2)\text{texture resolution}=\frac{\text{screen resolution}}{\tan(\mathrm{fov}/2)}

由立方体一个面覆盖 90° 视场推出;视场越小,所需分辨率越高。

  • 其他形状:Gehling 用压扁的穹顶表示天空,最适合模拟头顶飘过的云(云由多张二维噪声纹理组合并动画)。
  • 优化:天空盒永远在所有物体之后,不必写 z-buffer;若最先绘制也不必读深度,网格大小随意。但放在不透明物体之后、透明物体之前绘制更好,已被覆盖的像素可减少天空盒的像素着色调用。

光场渲染

Lumigraph 和光场渲染从一组视点捕捉单个物体,新视点时在存储视图间插值,类似全息(二维视图阵列)。可从任意角度重现真实物体,渲染速率几乎恒定、与表面和光照复杂度无关;但数据量大、问题复杂。近年因能让 VR 显示中眼睛正确调焦而重新受关注,交互渲染中应用仍有限。

精灵与分层

  • 精灵:在屏幕上移动的图像(如鼠标指针),透明像素使其不必是矩形,换帧即动画。更一般的精灵是贴在始终朝向观察者的多边形上的纹理,可缩放扭曲,alpha 提供透明和边缘抗锯齿,并可以有深度。
  • 分层:像二维赛璐珞动画一样把场景看成一叠层,每层有深度,按从后到前的画家算法合成,不需要 z-buffer。缩放只是放大精灵(或用 mipmap);相机前后移动改变前景与背景的相对覆盖,侧移时按深度移动各层。
  • 一组精灵可表示物体的不同视角;屏幕上小时连动画也可存大量视角。小角度变化可扭曲精灵,超出后要重新生成;表面分明的物体小幅旋转就会有新多边形出现、旧的被遮挡。
  • 微软 1990 年代末的 Talisman 硬件架构就基于分层与图像扭曲,虽然消失了,但"用图像表示模型"的思路与 GPU 优势契合,且可与三角形渲染结合(见公告板、替身与深度精灵)。
  1. realtime_rendering_4ed.pdf 第 13 章 Beyond Polygons

相关页面

图形学环境贴图Environment Mapping把球面函数记录在一张或多张图像里、用纹理查找来解码,就是环境贴图。它比其他球面表示占内存多,但解码简单快速,能表达任意高频和任意动态范围。最基本的用法是反射贴图:假设镜面 BRDF,用反射视线向量查表。本页比较经纬度、球面、立方体、双抛物面和八面体等投影。图形学公告板Billboarding公告板是根据视线方向调整朝向的带纹理矩形。配合 alpha 纹理和动画,它能表现草、烟、火、雾、爆炸、能量护盾、尾迹、云等没有光滑实体表面的现象。各类公告板的区别只在于固定哪个向量(法线或上方向);软粒子、球形公告板解决与实体相交和穿过近平面的问题,轴向公告板用于树木、激光等柱对称物体(RTR4 13.6–13.6.3 节)。图形学替身与深度精灵Impostors & Depth Sprites替身 (impostor) 是把复杂物体从当前视点渲染成纹理、贴在视点朝向公告板上的表示,可在多个实例或多帧间复用以摊薄生成成本。公告板云用少量相交的镂空平面近似网格;深度精灵在纹理中加入每像素深度偏移,能与周围几何正确穿插;浮雕纹理、浮雕替身和几何图像进一步模糊了图像与网格的界线(RTR4 13.6.4、13.6.5、13.7 节)。图形学深度缓冲Z-Buffer深度缓冲是几乎所有图形硬件用来解决可见性的算法:为每个像素存一个当前最近图元的深度值,新片元更近才写入颜色和深度。它简单、和图元数量成线性关系、允许大多数图元以任意顺序绘制,但不能直接处理半透明。图形学景深Depth of Field相机在给定设置下只有一段深度范围清晰,范围外的物体越远离越模糊。实时渲染默认是完美对焦的针孔相机,所以"景深"指对近景和远景做模糊。实用算法从单张图像出发,按深度算出每像素的弥散圆半径,分离近景与其余部分分别模糊再合成;"边收集边散布"和对高亮像素单独溅射散景是游戏中的常见做法(RTR4 12.4 节)。图形学抗锯齿Antialiasing渲染本质上是采样,采样频率不足就会混叠(锯齿、闪烁的"萤火虫"、车轮倒转)。屏幕空间抗锯齿在每个像素取多个样本并加权求和:超采样最直接但最贵,MSAA 每像素只着色一次,时间抗锯齿 (TAA) 把样本分散到多帧,形态学方法 (FXAA/SMAA) 作为后处理重建边缘。没有一种方法在所有方面最好。图形学天空与云渲染Sky & Cloud Rendering天空颜色和空气透视来自空气分子的瑞利散射,太阳周围的光晕来自近地大颗粒的米氏散射。实时方案有解析拟合模型和基于预计算透射率/散射查找表的物理模型;云则从全景贴图、粒子发展到用程序化噪声构建、光线步进的参与介质层,并以倍频程近似多次散射(RTR4 14.4 节)。图形学VR 渲染注意事项VR Rendering Considerations在单屏上效果良好的渲染技术,放到随头部移动的双目显示上可能失效甚至引起不适。本页汇总 RTR4 第 21.4 节列出的需要修改或避免的技术:HUD 深度、凹凸与视差贴图、公告板与天空盒、色调映射与屏幕空间效果、镜面高光视差、抗锯齿选择、色带、运动模糊与景深,以及混合现实中的光照匹配。核心原则:严格遵循厂商头部模型和投影矩阵,任何会让两眼图像难以融合或与前庭感觉冲突的效果都要谨慎。图形学时间扭曲与异步重投影Timewarp & Asynchronous ReprojectionVR 中即使追踪完美,生成一帧仍需时间;掉帧会造成抖动 (judder)。厂商提供基于图像的补偿:只修正头部旋转的二维时间扭曲 (timewarp)、利用深度做三维重投影的位置时间扭曲、外推缺失帧的空间扭曲 (spacewarp),并常以异步方式运行作为掉帧保险。配合晚期朝向扭曲、late latching 和 CPU/GPU 流水线(running start / adaptive queue ahead),在不掉帧的前提下进一步缩短动作到光子的延迟。图形学点云渲染Point Cloud Rendering点渲染用大量互不连接的三维点表示表面,每个点画成有半径的"溅射斑" (splat)。随着激光扫描、LIDAR、深度相机和摄影测量普及,点云数据可达数千亿点,因此几乎所有系统都用层次结构按预算加载和显示,并用不透明溅射、屏幕空间 AO 或眼罩光照 (EDL) 给无法线的点着色(RTR4 13.9 节)。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原