BlackIceCoffeePhenomenon

溶け出す氷によって味が薄くなると併せ、味覚が苦味に慣れていくことで、加速度的に味覚への刺激が減衰する現象に関するブログです。

VRChatの世界で雪を降らせたい-unity編-

いろんなワールドで見かける雪のパーティクルを自分で放ちたい!
次のイベントはクリスマスだし!
どこでも誰とでも好きな時に雪が降っていたら素敵でしょう
なので今回は雪を降らせるパーティクルを実装します

f:id:yananann:20181106213833p:plain

 

今回の雪パーティクルで実現したい事

・重力によってふんわり落ちること
・シャワーみたいな規則性をなるべく見せない事
・天井の有無に関わらず降らせる事(一番実現したい)
・雪が降り積もる感じを出したい

 

手っ取り早くパラメーターだけ見たいんじゃ!って人は下を読み飛ばしてね

 

・重力によってふんわり落ちること
・シャワーみたいな規則性をなるべく見せない事


重力や規則性の問題をどうにかするには
「Gravity Multiplier」で重力をかける事ができます。
ただ「Gravity Multiplier」は消滅するまで加速するので
降り始めと降り終わりだと、降り終わりが爆速になってしまいます。

そのため「Limit Velocity over Lifetime」
つまり「最高速度制限」で速度を制限します。

 

 

・雪が降り積もる感じを出したい

地面に落ちた感じを出したいときはCollision(衝突)の設定で
貫通せずに干渉することができます。
干渉した際に、跳ね返る|跳ね返らないの設定をします。

 

・天井の有無に関わらず降らせる事(一番実現したい)

雪は頭上から降るものなので頭の遥か上に
発生源を置けばそれっぽくできます。

f:id:yananann:20181106213845p:plain
シャワー方式。より高い所から降らせれば違和感なくなるかも

しかし天井の低い所では、天井の上に発生源があると
天井に積もるので降らなくなってしまいます。
なので発生源を自分から出すようにする必要があります。

f:id:yananann:20181106213905p:plain
噴水方式。 これなら天井にあたっても跳ね返って降ります。
ただし勢いよく上に飛ばさないと、降ってきません。

 

パーティクルの飛ばし方についてはこちらの記事を見てください。
この日記では飛ばすパーティクルのパラメーターのみ記載してます。

yananann.hatenadiary.jp

 

んでパラメーター。

StartDelay:アクションしてから1秒後に発生させます。誤射防止
StartLifetime:パーティクルの寿命は発生から消滅まで17秒
StartSpeed:発生時、上に打ちあがる速度が6
StartSize:パーティクルの大きさ。大きいと風情がないので0.05
GravityModifier:重力のかかり具合。0.03でふんわり落とす
SimulationSpace:パーティクルの挙動をワールドに依存させる

f:id:yananann:20181106214151p:plain
Emission
 Rate over Time:秒間発射数。50発。多いほど豪華で高負荷
Shape
 Shape:Cone(円錐状)に発射します
 Radius:円錐の直系。大きいほど広範囲。今回は50です

 

 

LimitVelocoty over Lifetime
 Speed:速度が出すぎた時にこの速度まで落とす。今回は0.2
 Dampen:どれくらい急に速度を落とすか。今回は0.05


Size over Lifetime(今回初!)
 パーティクルの発生から消滅までの間で大きさを変えることができる。
 打ち上げてる時の氷晶を見せたくないので上に飛ばす間だけ小さくします。
 落ち始めた頃くらいに大きくする設定にします。
 Size:「/ ̄」みたいな形にする

Rotation over Lifetime(今回初、だっけ?)
 パーティクルが回転してくれます。氷晶がゆっくり回ると雰囲気あるかも?
 AngularVelocity:適当に。

f:id:yananann:20181106214201p:plain
Collision(今回初)
 衝突判定です。飛んだパーティクルがオブジェクトに衝突したときの挙動が設定できます。
 スーパーボールのように跳ね返したり、ぴったりつけたり。
一番上:Worldにします。ガンガン判定します。重いです。
 Dampen:衝突時に失う力量です。0だと跳ね返り1だと止まります。
 Bounce:衝突時に跳ね返る力量です。0に近いほど弱いです。
今回の設定では衝突時にほぼ力を失うので、ほんの少しだけ跳ね返ります。何回も触って調整するといいかも

ここからはパーティクルにテクスチャーを適用します。
やりかたはこちらの記事をみてください

VRChatでお菓子のパーティクルをぶっ放す。 - BlackIceCoffeePhenomenon

TextureSheetAnimation
 Tiles:今回は縦に22種類の氷晶を用意したので22にしました
 Animation:縦画像なのでSingleRowです
Renderer
 Material:設定したマテリアルを用意します。

 

最後に(パラメーター設定の格闘ポイント)

・どれくらい広範囲にするか(StartSpeedとShadeのRadiusで調整)
 早いほど遠くへ、Radius大きいほど広範囲で。
 広すぎると発射量を増やさないと雰囲気がでないので難しい

 

・打ち上げてる状態をいかに隠すか(StartSpeedとSize over Lifetime)
 Size over Lifetimeで発生直後をとにかく小さくする。
 打ちあがり重力がかかり降り始めるころに少しずつ大きくする
 遠くの雪ほど小さく見えるように錯覚させる(かなり難題)


あと地味にLimitVelocoty over Lifetimeの設定が難しいです。
Speedは最終的に雪の降る速度にします。秒速5センチメートルとか。
Dampenの数字を上げすぎると打ちあがりません。
かと言って小さすぎると、いつまでも重力に負けなくなります。
激しく広範囲、かつ高高度になるので味付けは慎重に。