中EN
概念页

粒子系统

Particle Systems

粒子系统是一组按某种算法运动的小物体,用于火、烟、爆炸、水流、星系等,同时负责动画(生成、移动、变化、删除)和渲染。粒子通常渲染成公告板;难点在半透明排序、光照(逐顶点、逐像素低分辨率光照图块)以及接收/投射/自阴影(透射率溅射、傅里叶不透明度贴图、消光体积)(RTR4 13.8 节)。

表示与渲染

  • 粒子可以是单个像素、从上一位置到当前位置的线段,但多为公告板;圆形粒子不需要上向量,只要位置。公告板可由几何着色器生成,但实践中用顶点着色器生成精灵可能更快。除颜色纹理外还可加法线贴图;轴向公告板可画更粗的线(如雨)。
  • Ericson 的效率建议:
建议原因
用厚实的镂空纹理做烟不半透明就不需排序和混合
需要半透明时用加法或减法混合不需排序
少量动画粒子代替大量静态粒子质量相近、性能更好
动态限制渲染的粒子数上限保持帧率
不同粒子系统共用着色器避免状态切换
所有粒子图像放进纹理图集或数组避免切换纹理
烟等平滑粒子画到低分辨率缓冲再合并,或在 MSAA resolve 之后画省像素开销

Tatarchuk 等把烟画到 1/16 大小的缓冲,并用方差深度图帮助计算粒子效果的累积分布函数。

  • 排序:粒子多时全排序昂贵。美术指定渲染顺序来正确分层不同效果;小或低对比度粒子可不排序;有时可大致按顺序发射;粒子较透明时可用无需排序的加权混合 OIT;Köhler 把粒子渲染到存于纹理数组的 9 层深缓冲,再用计算着色器排序。

粒子着色

  • 火花等发光体不需着色,常用加性混合。Green:流体渲染成球形粒子写入深度图,模糊深度、由深度求法线,再与场景合并。
  • 灰尘、烟等小粒子可逐图元或逐顶点着色,但会让表面分明的粒子显得扁平;法线贴图更准但多了纹理访问;圆粒子在四角用四个发散法线可能就够。也有用辐射度法线贴图、球谐或更复杂散射模型的;大粒子可细分并在域着色器中逐顶点累积光照。
  • 逐顶点快但大粒子质量低(相距远的顶点会漏掉小光源)。低分辨率逐像素光照:每个可见粒子在光照贴图纹理中分配一个图块(按屏幕投影面积 1×1 到 32×32),先把每像素世界位置写入辅助纹理,再用计算着色器借助光源加速结构(第 20 章)采样光源,结果以颜色或球谐写入图块;最终渲染时把图块映射到粒子四边形上逐像素采样。也可每个发射器一个图块,深的光照贴图让大量粒子的效果更有体积感。
  • 粒子大多面向观察者且扁平,以上所有光照模型在视点绕发射器旋转时都会出现可见的闪烁。

粒子阴影

  • 接收:小粒子常只在顶点处测试阴影贴图。
  • 投射到场景:粒子是散点,无法在阴影贴图中光线步进,但可以溅射:把每个粒子的透射率 Tr=1−αT_r=1-\alpha 乘入一张初值为 1 的纹理(单通道灰度或三通道彩色),按阴影级联组织,与不透明阴影级联的可见性相乘,即一层透明阴影。缺点:粒子会错误地把阴影投到位于粒子和太阳之间的不透明物体上,通常靠关卡设计避免。
  • 自阴影:傅里叶不透明度贴图 (FOM)——从光源视角渲染粒子,把贡献累加为透射函数的傅里叶系数;渲染粒子时由系数重建透射率。适合平滑透射函数,系数有限时透射率剧变处会振铃,产生错误的亮/暗区。替代方案:自适应体积阴影贴图(类似深度阴影贴图)、GPU 优化的粒子阴影贴图(类似不透明度阴影贴图,但只适用于面向相机的粒子,不适用于条带或运动拉伸粒子)、透射函数贴图(类似 FOM)。
  • 消光体积:把粒子体素化到存消光系数 σt\sigma_t 的体积中(像 clipmap 一样放在相机周围),与参与介质统一;从这些体积生成存每体素 TrT_r 的深度阴影贴图,粒子与参与介质即可互相投影并自阴影。质量受体素尺寸限制,实时下体素较大,阴影粗糙但柔和。

模拟

GPU 可生成精灵动画路径甚至做碰撞检测。流输出可控制粒子出生和死亡(结果存入顶点缓冲每帧在 GPU 上更新);有 UAV 时粒子系统可完全基于 GPU。书中列出的实践参考:《命运 2》粒子系统、按 Bridson 流体书实现流体、虚幻 4 粒子控制、《声名狼藉:次子》的特效设计、高效生成和渲染雨、基于计算着色器含碰撞检测/透明排序/瓦片渲染的系统、《野蛮传奇》的粒子与图像效果等。

GEA 的视角:粒子效果的特征(卷 II 11.6.4–11.6.5)

  • 定位:图形管线主要负责实体物体;在它之上通常叠加一批专门的渲染系统,负责粒子、贴花、毛发、雨雪、水等效果,再加暗角、运动模糊、景深等全屏后处理,最后在屏幕空间叠加菜单和 HUD(卷 II 11.6.4)。GEA 把这些归为"基于卡片的效果"等专门系统。
  • 粒子渲染系统负责烟、火花、火焰等无定形物体。GEA 列出粒子效果区别于普通几何的特征(卷 II 11.6.5):
    1. 由大量很简单的几何组成,最常见的是两个三角形组成的四边形卡片;
    2. 几何通常面向相机(公告板),引擎要保证每个四边形的法线始终指向相机焦点(见 公告板);
    3. 材质几乎总是半透明,因此有大多数不透明物体没有的严格渲染顺序约束(见 透明渲染与 Alpha 混合);
    4. 动画方式丰富:位置、朝向、大小、纹理坐标和许多着色器参数逐帧变化,由手工动画曲线或程序方法驱动;
    5. 持续生成和销毁:发射器按指定速率生成粒子,粒子碰到预设的死亡平面、超过寿命或满足其他条件时被销毁。
  • 粒子理论上可以用普通三角网格加合适的着色器渲染,但因为上述特性,正式产品引擎总是用专门的粒子动画和渲染系统实现。从点数据生成粒子四边形是几何着色器的典型用途之一(见 曲面细分与几何着色器)。

GPU Gems 的视角:离屏低分辨率粒子(GPU Gems 3 第 23 章)

来源:Iain Cantlay《High-Speed, Off-Screen Particles》;摘录 Chapter 23. High-Speed, Off-Screen Particles — Iain Cantlay。针对烟/雾/爆炸等低频特效的填充率爆炸。

粒子画到主缓冲若干分之一的离屏目标;深度先降采样再做测试。点采样深度会在前景物体周围出光晕;改取邻域最大深度人为收缩剪影,粒子侵入固体一点但观感更好(纯经验 hack)。有深度后软粒子(按相交距离淡出 α)几乎免费。Alpha:RGB 常规混合,α 通道累乘 (1−αi)(1-\alpha_i),合成时用 SeparateAlphaBlend。混合分辨率:Sobel 找离屏图硬边 → 模板遮罩 → 仅边缘区用全分辨率重画粒子。高频碎片(飞石)不适合。极端过度绘制下 4×4 混合分辨率可近乎翻倍帧率。

  1. realtime_rendering_4ed.pdf 第 13 章 Beyond Polygons
  2. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  3. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 11 章 11.6.4–11.6.5 节
  4. Chapter 23. High-Speed, Off-Screen Particles — Iain Cantlay
  5. developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-23-high-speed-screen-particles

相关页面

图形学公告板Billboarding公告板是根据视线方向调整朝向的带纹理矩形。配合 alpha 纹理和动画,它能表现草、烟、火、雾、爆炸、能量护盾、尾迹、云等没有光滑实体表面的现象。各类公告板的区别只在于固定哪个向量(法线或上方向);软粒子、球形公告板解决与实体相交和穿过近平面的问题,轴向公告板用于树木、激光等柱对称物体(RTR4 13.6–13.6.3 节)。图形学透明渲染与 Alpha 混合Transparency & Alpha Blending本页讲最简单的"视角相关"透明:半透明物体只衰减其后方物体的颜色。z-buffer 每像素只存一个表面,所以透明物体通常要从后往前用 over 运算符混合;顺序无关透明 (OIT) 方法用多遍渲染、逐像素链表或近似公式避免排序,各有内存、性能或准确性代价。预乘 alpha 让过滤、混合和合成更正确高效。图形学滤波阴影贴图Filtered Shadow Maps普通阴影贴图的深度不能直接过滤。滤波阴影贴图存的是深度的某种统计量(矩、指数),可以像普通纹理一样模糊、做 mipmap、用求和面积表,只取一个样本就能得到平滑的半影。代表方法有方差阴影贴图 (VSM)、卷积阴影贴图、指数阴影贴图 (ESM/EVSM) 和矩阴影贴图;共同难点是漏光。图形学级联阴影贴图Cascaded Shadow Maps级联阴影贴图 (CSM) 把视锥沿视线方向切成几段,每段用一张紧贴它的阴影贴图,使近处获得更多阴影纹素。它实现简单、能覆盖巨大场景、没有严重的最坏情况,因此被大量应用。关键问题是深度如何划分、近平面放在哪里、怎样避免抖动和级联边界的质量突变,以及如何降低多张贴图的开销。图形学球面函数基Spherical Basis Functions要让环境光照超越常数项,需要表示"每个入射方向的辐亮度"这样的球面函数。把函数转成某种表示叫投影,从表示求值叫重建。本页对比表格形式、环境立方体、球面高斯、球谐函数,以及专门为半球设计的 AHD、Half-Life 2 基和 H-basis。图形学计算着色器Compute Shader计算着色器是 DirectX 11 引入的一种 GPU 计算方式:它不固定在图形管线的某个位置,但由图形 API 调用,和其他着色器共用统一着色器核心。它暴露了线程组和组内共享内存,最大的优势是能直接处理 GPU 上生成的数据,不用来回传给 CPU。图形学曲面细分与几何着色器Tessellation & Geometry Shader曲面细分、几何着色器和流输出是顶点着色器之后的三个可选阶段。曲面细分把曲面描述按需生成合适数量的三角形;几何着色器能把图元变成别的图元,但效率不好、实际用得少;流输出把处理后的顶点写回内存以便复用。图形学参与介质与体积散射Participating Media & Volumetric Scattering参与介质是充满粒子、通过吸收和散射参与光传输的体积,如空气、水、雾、烟、云;皮肤、蜡等致密材质也有强烈散射——"一切都是散射"。实时渲染主要考虑单次散射:沿视线积分透射率衰减后的内散射光,内散射由相位函数和对光源的可见性(不透明阴影 × 体积阴影)决定。通用实时方案把介质材质和散射结果体素化到相机视锥体素 (froxel) 中逐片累积(RTR4 14.1、14.3、14.8 节)。图形学天空与云渲染Sky & Cloud Rendering天空颜色和空气透视来自空气分子的瑞利散射,太阳周围的光晕来自近地大颗粒的米氏散射。实时方案有解析拟合模型和基于预计算透射率/散射查找表的物理模型;云则从全景贴图、粒子发展到用程序化噪声构建、光线步进的参与介质层,并以倍频程近似多次散射(RTR4 14.4 节)。图形学点云渲染Point Cloud Rendering点渲染用大量互不连接的三维点表示表面,每个点画成有半径的"溅射斑" (splat)。随着激光扫描、LIDAR、深度相机和摄影测量普及,点云数据可达数千亿点,因此几乎所有系统都用层次结构按预算加载和显示,并用不透明溅射、屏幕空间 AO 或眼罩光照 (EDL) 给无法线的点着色(RTR4 13.9 节)。游戏开发 · UE5Niagara 粒子系统Niagara VFX SystemNiagara 是 UE5 的 VFX 系统,由系统 (System) → 发射器 (Emitter) → 模块 (Module) 的栈式结构组成:发射器按 Emitter Spawn/Update、Particle Spawn/Update、Event、Render 分组,模块是自上而下执行、基于 HLSL 的「读-算-写」单元。继承、动态输入、事件和数据接口 (Data Interface) 提供复用与外部数据访问;发射器可选 CPU 或 GPU 计算着色器模拟。官方 5.8 文档未找到 CPU/GPU 对比页,相关取舍按通识标注。游戏美术Zelda 高草中的 Bling OffsetZelda Bling OffsetGAT 68(《旷野之息》):可拾取物上的闪亮特效在高草中仍可见——不改物体,按周围草高上移特效;并用朝相机的 Pivot/Camera Offset 减少粒子与物体表面穿插。简单、可读性优先。游戏美术AC Black Flag 水深遮罩Black Flag WaterplaneGAT 64:水面平面切开船体是常见伪影。大船靠「看不见船腹」与位移遮罩推水;小船用只写深度的隐形盖板(Depth Mask),让后续水面深度测试失败,船舱保持干燥。

被这些页面引用1 篇

输入关键词开始搜索

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