雪花在舞台周圍一塊固定的體積裡落下,堆在它們撞上的第一個表面上——虛擬形象、道具,以及腳下那層隱含的地面——停留一會兒,融化消失,再回到頂上重新落一次
整個循環跑在 GPU 上。數量拉到一萬片,付出的也只是一次計算調度,而不是一萬個 JavaScript 物件
控制項
| 控制項 | 範圍 | 預設值 | 作用 |
|---|---|---|---|
| 數量 | 100 – 10000 | 2000 | 同時存在的雪花數 |
| 速度 | 0 – ×3 | ×1 | 下落與飄移的時鐘倍率。0 會暫停雪花動畫 |
| 風力 | −3 – 3 m/s | 0 m/s | 沿舞台 x 軸的橫向恆定漂移 |
| 飄擺 | 0 – 3 | 1 | 下落途中左右游移的幅度 |
| 雪花大小 | 0.4 – 3 | 1 | 雪花尺寸倍率 |
| 融化時間 | 0.5 – 30 秒 | 6 秒 | 一片落定的雪花從停下到化盡經過多久 |
| 不透明度 | 0.1 – 1 | 1 | 雪花的不透明度 |
每片雪花的運動參數會隨機變化:下落速度、大小和飄擺相位各不相同,所以慢悠悠打轉的和直直扎下來的會混在一起,而不是整齊劃一地平移
大小並不是均勻分布的,而是分成兩層:絕大多數是細小的遠景雪粒,另有約一成是明顯大得多的近景雪花。這份深度感來自 VTube Studio 的雪,也是雪花大小推高時畫面不會變成一堆同樣大小的圓點的原因——它縮放的是這兩層,而不是把它們抹平
場景內算繪
雪以幾何體的形式在 3D 場景中算繪,因此具有以下特點:
- 燈光 會照到它,所以雪會帶上場景的色調,而不是永遠的純白
- 景深 會按它到相機的實際距離虛化它
- 整條 後製處理 照常作用於它,因為它在這些環節跑之前就已經畫進畫面裡了
- 它擋在虛擬形象前面還是後面,取決於它當時飄在哪裡
它的材質帶一點自發光,所以哪怕場景裡一盞燈都沒有,雪照樣看得見
落下、堆積、融化
雪落在一張自上而下的高度圖上,這張圖每隔一影格刷新一次,看到的是舞台上的一切——虛擬形象、道具,以及 y = 0 那層隱含的地面。雪花穿過它自己那一層和天空盒,所以雪不會落在雪上,也不會誤把背景當成地面
碰到表面的那一刻雪花停住,開始計時。融化時間走完之前的最後一小段,它會縮小著消失,然後回到頂上重新開始。所以這不是一場會越積越厚的雪——它是一個穩定的循環,畫面裡的雪量由數量說了算
開啟時雪已經鋪滿了整個高度,而不是從頂上開始往下掉,所以按下開關的第一影格看到的就是一場下到一半的雪
虛擬形象走動或換姿勢時,高度圖跟著更新,已經落定的雪花不會跟著走——它們停在原來的位置,等著融化。想讓積雪跟上一次大動作,把融化時間調短
風與飄擺
風力是恆定的橫向漂移,以公尺每秒計;飄擺是每片雪花自己的左右游移。兩者會繞著體積循環,所以再大的風也不會把雪吹光
風力為 0 加上一點飄擺,是安靜的落雪。把風力推到兩邊的極值,雪就橫著掃過舞台——配上短一點的融化時間,可形成暴風雪效果
開銷
雪不佔用後製鏈,所以開著它並不會像其他特效那樣多出一遍全螢幕渲染。它的開銷在別處:每影格一次計算調度,外加每隔一影格一次高度圖渲染——這張圖和 雨 共用,所以兩個一起開並不會把這份開銷翻倍
數量是影響效能的主要設定。緩衝區按上限一次性配置,所以調整數量無需重新配置緩衝區——但同時模擬的粒子越多,計算耗時就越長
開關時雪會在約 0.4 秒內淡入淡出,而不是憑空出現或消失
雪需要 GPU 計算,因此只在 3D 舞台上出現。在回退到 WebGL 的機器上,這套計算圖可能被拒絕——此時雪會自行關閉,並在主控台留下一行說明,避免影響其他舞台內容
最後更新於 2026年9月19日