【Shaderプログラミング】雪を降らせる手法について Part.1
Shaderで雪を降らせよう
暖かい春の季節がやってまいりました。 今回は、Shaderプログラミングで雪を降らせるコードを(昨年に)書いてみたので紹介します。
Shader プログラミングの基礎はこちら。
雪を積もらせるには、何が必要か分かりますか? 物理的になぜ積もるのかを考えてみましょう。
飛んでくる物質の向き(雪の場合は、風力)と逆方向に働く力(反作用)の点に物質は積もります。 飛んでくる物質(雪の場合は、風力)のベクトルと3Dメッシュの頂点に格納されているベクトルの内績が0に 近いほど積もると言えます。
※なぜ、言えるかの詳細は次回にします。
※※厳密には、重力や雪の重さ、雪が乗る物質の摩擦力などの配慮が必要です。
では、まず無風で雪が降っている状況を想定して書いてみましょう。
無風な状況での雪とオブジェクトの面の関係の考察
無風でのイメージは、以下の図の通りです。
現実的には、①だと比較的少量だけど積もるだろう、②だと結構積もる。 ③だと積もらずに落ちるだろうという予測は誰でもできるでしょう。
風がる場合は、どうでしょうか?
風がある状況での雪とオブジェクトの面の関係の考察
風がある状況でのイメージは、以下の図の通りです。
結構な強風をイメージしたベクトルになってますが、物質の面 全般に白くなると考えられます。
つまり、【(正規化した)内積を計算して、0に近いところを白く塗れば雪っぽく見えるだろう】と考えるのがスタート地点です。
※面または点のベクトルと表現したのは、点の集合が面であるからです。
※※正規化の説明は、数学の分野なので次回に説明します。 (早く知りたい方は、ググッてくだせぇ!)
ここまでの、発想の転換は良いでしょうか? まずは、物理現象からイメージして図にしてみて、公式で言えば何が使えるか 考えるor調べるところから入ることが大事です。
では、Let’s try it!
次回は、数学と図解で数式を表現するところに移ります。