00:00 / 00:00

Persona

雪片はステージの周囲にある固定された体積の中を落ち、最初にぶつかった面——アバター、小物、そして足元にある暗黙の床——に積もり、しばらく留まってから融けて消え、また上から降り直します

このループはまるごとGPUで回ります。1万片まで増やしても、1回のコンピュートディスパッチで更新でき、雪片ごとに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雪片の不透明度

雪片ごとに運動パラメータをランダムに設定しています。落下速度、大きさ、横揺れの位相がすべて異なるので、ゆっくり漂うものと素早く落ちるものが混ざり、全体が一枚の板のように平行移動することはありません

大きさは一様ではなく2層に分かれています。大半は細かく遠い粒で、10分の1ほどがずっと大きな手前の雪片です。この奥行き感はVTube Studioの雪から来ていて、雪片サイズを上げても画面が同じ大きさの点の集まりにならないのはこのためです——2つの層をまとめて潰すのではなく、それぞれをスケールします

シーン内での描画

雪は3Dシーン内のジオメトリとして描画されるため、次のような特徴があります:

  • ライトが届くので、雪は真っ白のままではなくシーンの色を帯びます
  • 被写界深度はカメラからの実際の距離でぼかします
  • ポストプロセスはそのまま雪にも効きます。これらの段が走る前に、雪はすでに画の中にいるからです
  • アバターの手前を通るか奥を通るかは、そのときどこを漂っているか次第です

マテリアルはわずかに発光するので、ライトが1つもないシーンでも雪は見えます

落ちる・積もる・融ける

雪片は1フレームおきに更新される真上からのハイトマップの上に着地します。このマップはステージ上のすべて——アバター、小物、そしてy = 0の暗黙の床——を見ています。雪片自身とスカイボックスは除外されるので、雪が雪の上に積もることも、背景を地面と取り違えることもありません

面を越えた瞬間に雪片は止まり、タイマーが動き始めます。融解時間の最後のひと区切りで縮みながら消え、上に戻ってまた始まります。つまりこれは配信中に積み上がっていく雪ではなく、安定したループです。画面上の雪の量を決めるのは数量です

有効にすると、上から降らせ始めるのではなく高さ方向いっぱいに雪片が撒かれるので、スイッチを入れた最初のフレームからすでに降っている途中の雪が見えます

風と横揺れ

はメートル毎秒で表す一定の横流れ、横揺れは雪片それぞれの自前の揺らぎです。どちらも体積を回り込むので、どれだけ風を強くしても中が空になることはありません

風0にわずかな横揺れを添えれば、静かな降雪になります。風をどちらかの端まで振り切れば雪はステージを横切って走ります——融解時間を短めに合わせれば、吹雪を表現できます

コスト

雪はポストチェーンに加わらないので、他のエフェクトのようにフルスクリーンのパスが増えることはありません。コストは別のところにあります。毎フレームのコンピュートディスパッチ1回と、1フレームおきのハイトマップ描画です——ハイトマップはと共有なので、両方を同時に有効にしてもその分が倍にはなりません

処理負荷を大きく左右するのは数量です。バッファは上限ぶんを一度だけ確保するので動かしても再構築は起きませんが、同時に計算する雪片が多いほど処理時間が増えます

切り替え時、雪は0.4秒ほどかけてフェードイン・フェードアウトします。いきなり現れたり消えたりはしません

最終更新日:2026年9月19日

Tech otakus destroy the world