VR 研究記

3D技術の経験を活かして、VRに挑戦するおっさんの奮闘記

【Shaderプログラミング】雪を降らせる手法について Part.1

Shaderで雪を降らせよう

暖かい春の季節がやってまいりました。 今回は、Shaderプログラミングで雪を降らせるコードを(昨年に)書いてみたので紹介します。

Shader プログラミングの基礎はこちら。

subru-vr-research.hateblo.jp

雪を積もらせるには、何が必要か分かりますか? 物理的になぜ積もるのかを考えてみましょう。

飛んでくる物質の向き(雪の場合は、風力)と逆方向に働く力(反作用)の点に物質は積もります。 飛んでくる物質(雪の場合は、風力)のベクトルと3Dメッシュの頂点に格納されているベクトルの内績が0に 近いほど積もると言えます。

※なぜ、言えるかの詳細は次回にします。
※※厳密には、重力や雪の重さ、雪が乗る物質の摩擦力などの配慮が必要です。

では、まず無風で雪が降っている状況を想定して書いてみましょう。

無風な状況での雪とオブジェクトの面の関係の考察

無風でのイメージは、以下の図の通りです。 f:id:subrutm:20170212021550p:plain

現実的には、①だと比較的少量だけど積もるだろう、②だと結構積もる。 ③だと積もらずに落ちるだろうという予測は誰でもできるでしょう。

風がる場合は、どうでしょうか?

風がある状況での雪とオブジェクトの面の関係の考察

風がある状況でのイメージは、以下の図の通りです。 f:id:subrutm:20170318165939p:plain

結構な強風をイメージしたベクトルになってますが、物質の面 全般に白くなると考えられます。

つまり、【(正規化した)内積を計算して、0に近いところを白く塗れば雪っぽく見えるだろう】と考えるのがスタート地点です。
※面または点のベクトルと表現したのは、点の集合が面であるからです。
※※正規化の説明は、数学の分野なので次回に説明します。 (早く知りたい方は、ググッてくだせぇ!)

ここまでの、発想の転換は良いでしょうか? まずは、物理現象からイメージして図にしてみて、公式で言えば何が使えるか 考えるor調べるところから入ることが大事です。

では、Let’s try it!

次回は、数学と図解で数式を表現するところに移ります。