00:00 / 00:00

Persona

雪花在舞台周圍一塊固定的體積裡落下,堆在它們撞上的第一個表面上——虛擬形象、道具,以及腳下那層隱含的地面——停留一會兒,融化消失,再回到頂上重新落一次

整個循環跑在 GPU 上。數量拉到一萬片,付出的也只是一次計算調度,而不是一萬個 JavaScript 物件

控制項

控制項範圍預設值作用
數量100 – 100002000同時存在的雪花數
速度0 – ×3×1下落與飄移的時鐘倍率。0 會暫停雪花動畫
風力−3 – 3 m/s0 m/s沿舞台 x 軸的橫向恆定漂移
飄擺0 – 31下落途中左右游移的幅度
雪花大小0.4 – 31雪花尺寸倍率
融化時間0.5 – 30 秒6 秒一片落定的雪花從停下到化盡經過多久
不透明度0.1 – 11雪花的不透明度

每片雪花的運動參數會隨機變化:下落速度、大小和飄擺相位各不相同,所以慢悠悠打轉的和直直扎下來的會混在一起,而不是整齊劃一地平移

大小並不是均勻分布的,而是分成兩層:絕大多數是細小的遠景雪粒,另有約一成是明顯大得多的近景雪花。這份深度感來自 VTube Studio 的雪,也是雪花大小推高時畫面不會變成一堆同樣大小的圓點的原因——它縮放的是這兩層,而不是把它們抹平

場景內算繪

雪以幾何體的形式在 3D 場景中算繪,因此具有以下特點:

  • 燈光 會照到它,所以雪會帶上場景的色調,而不是永遠的純白
  • 景深 會按它到相機的實際距離虛化它
  • 整條 後製處理 照常作用於它,因為它在這些環節跑之前就已經畫進畫面裡了
  • 它擋在虛擬形象前面還是後面,取決於它當時飄在哪裡

它的材質帶一點自發光,所以哪怕場景裡一盞燈都沒有,雪照樣看得見

落下、堆積、融化

雪落在一張自上而下的高度圖上,這張圖每隔一影格刷新一次,看到的是舞台上的一切——虛擬形象、道具,以及 y = 0 那層隱含的地面。雪花穿過它自己那一層和天空盒,所以雪不會落在雪上,也不會誤把背景當成地面

碰到表面的那一刻雪花停住,開始計時。融化時間走完之前的最後一小段,它會縮小著消失,然後回到頂上重新開始。所以這不是一場會越積越厚的雪——它是一個穩定的循環,畫面裡的雪量由數量說了算

開啟時雪已經鋪滿了整個高度,而不是從頂上開始往下掉,所以按下開關的第一影格看到的就是一場下到一半的雪

風與飄擺

風力是恆定的橫向漂移,以公尺每秒計;飄擺是每片雪花自己的左右游移。兩者會繞著體積循環,所以再大的風也不會把雪吹光

風力為 0 加上一點飄擺,是安靜的落雪。把風力推到兩邊的極值,雪就橫著掃過舞台——配上短一點的融化時間,可形成暴風雪效果

開銷

雪不佔用後製鏈,所以開著它並不會像其他特效那樣多出一遍全螢幕渲染。它的開銷在別處:每影格一次計算調度,外加每隔一影格一次高度圖渲染——這張圖和 共用,所以兩個一起開並不會把這份開銷翻倍

數量是影響效能的主要設定。緩衝區按上限一次性配置,所以調整數量無需重新配置緩衝區——但同時模擬的粒子越多,計算耗時就越長

開關時雪會在約 0.4 秒內淡入淡出,而不是憑空出現或消失

最後更新於 2026年9月19日

Tech otakus destroy the world