经纬志
首页 / Cesium / 使用示例

粒子雨雪

两套粒子系统:雨是快速下落的细长条,雪是缓慢飘落的小圆点。 发射盒跟着相机走,所以无论拖到哪里,画面里都下雨。

CesiumJS 1.121 · 更新 2026-10-27
源码与运行效果
运行效果

发射盒为什么要跟着相机

粒子的位置在世界坐标里,一旦离开镜头范围就看不见了。如果发射区固定在某座城市, 用户拖走之后画面里只剩一片空白。示例在 scene.preUpdate 里 每帧把发射盒的矩阵设成「相机位置沿视线方向偏移 220 米」,粒子始终填满前向视域。

矩阵用的是 eastNorthUpToFixedFrame,发射盒的局部 Z 轴朝上, 与盒子的高度方向一致。

重力的方向

世界坐标里的「下」不是固定的 (0,0,-1),而是指向地心。示例在更新回调里对 粒子的位置向量取单位化,再乘上负的重力加速度,得到逐粒子的重力方向。 跨纬度效果都正确,这是 Cesium 粒子系统里唯一通用的写法。

可调参数

位置改什么效果
emissionRate雨 900 改成 1800雨更密,粒子多时会掉帧
imageSize(2.5, 20) 改成 (6, 40)雨滴更粗更长
minimumSpeed26 改成 8雨变成缓慢落下的水雾
emitterBox700 改成 1600覆盖范围更大,粒子更稀疏
雨的 startColor换成暖色可以当火星、灰烬等效果

粒子看不见。三个原因最常见:lifetime 小于粒子寿命导致系统提前结束、 发射盒尺寸为 0、modelMatrix 没有设置(默认单位矩阵,把粒子放到了地心)。 lifetime 设成 60 秒以上,粒子寿命控制在 1 到 7 秒,画面上才持续有东西。

性能

粒子是纯 GPU 渲染,但每个粒子占一个四边形,雨量开到每秒几千粒时, 中低端显卡的填充率会被吃满。移动端把 emissionRate 控制在 200 以内、 imageSize 保持小尺寸即可。