今年(2022年)の梅雨明けは、やたらと早かったので雨の季節は終わってしまいましたが、今回モデリングしたのは「雨降り」です。
「雨の季節は終わった」と言っても、7月に入って「梅雨の戻り」?みたいなことになって良く雨が降っていますね。「梅雨明け宣言」、早すぎたんじゃないの??まあ、最近の宣言は、「梅雨明けしたと見られる」ってな具合で、あいまいになっています。後から振り返ってみて、実際に梅雨明けした日付を修正するらしいです。
ともあれ、今回のテーマは「雨降り」です。水たまりに雨が降って、波紋が広がる様子をモデリングします。
まず、水面に雨が落ちた時に広がる波紋を思い浮かべて、特徴を書き出してみました。
これを、「それらしく見える」様に、単純化しながらモデリングして行きます。
下図は雨滴が水面に衝突してしばらくたった後の、波紋の広がる様子(二次元モデル)を示しています。画面中央が雨滴の衝突した場所(波源)です。
緑点線が波紋の減衰率H、赤点線が衝突のエネルギEを示しています。青線が、その結果発生した波紋です。
静止画だとわかり難いので、動画にしておきました。
この二次元モデルを使って、三次元のレイトレーシングに適用して行きます。
波紋の表現に使うのは、凹凸マッピングです。
都合によって時計回りに90°回転した図ですが、下図が凹凸マッピングに使うマッピングデータです。
輝度値が凹凸の高さに相当していて、ベタ緑(右側一帯)の部分が凹凸の中央、つまり平らな部分です。左端の方にある縦縞部分が正弦波で表現した波紋の起こっている部分となります。上図では、左端が波紋の中心、波源なので、丁度、波紋が発生して、少し時間が経った後のマッピングデータです。
この後、さらに時間が進むと縦縞の部分がどんどん右側にシフトして行って、それにつれて振幅が減衰して行くので、縦縞が薄くなって消えて行きます。
こういうマッピングデータを一枚一枚グラフィックデータとして用意するのではなく、毎回データファイルの記述によって作図(描画)しています。
上図の様な二次元の波紋データを作っておいて、これを円盤状(mdskサブコマンド)にマッピングして使うと、波紋が完成します。
bump ripl0=
{
nmap ripl0,1;
mdsk rlpm0.x,rlpm0.y,0, 0,0,1, 0,1,0, 1,WVR;
mreg 0,0, 0,0.98, 0,0;
};
普通に平面状(mdskの代わりにmplaサブコマンド)にマッピングすると、進行(平行)波を表現することもできます。
また、複数の雨滴によって複数の波紋が立つ様子は、多重マッピングを使って表現しました。多重マッピングについては、こちら(「WAVファイルのミキシング」)に解説があります。
今回は、最大16個の波紋を多重化してみました。
詳細は、最後にリンクする完成版データで確認して見てください。
水面に映り込んだ物体が、波紋によって歪む様子を表現するため、前回モデリングした丸福金貨を被写体として使いました。
水面に映り込みさえすれば何でも良かったので、前回データの使い回しです(1^o^)/。
完成したデータをリンクしておきます。
1) | Xi-TRACEデータ | rain_drop.xitr |
2) | 凹凸マッピングデータ | huku_gold_faceb.xpic |
huku_gold_backb.xpic | ||
3) | 色マッピングデータ | huku_gold_facec.xpic |
huku_gold_backc.xpic |
1)でレイトレーシングを実行します。2)3)は1)から読み込んで使っているマッピングデータ(丸福金貨用)です。1)と同じディレクトリに置いてください。
完成した動画を以下にリンクしておきます。
「しとしと」と雨が降り続いているような雰囲気で、良い感じです。途中で動画をループできるようなデータの作り方をしてあるので、実はループしてます。周期は5秒ほどですので、長く見ていると、「あれ?同じパターンが繰り返してる?」と、気が付く事でしょう。