みこしの活動日記

みこしの日々の活動を記録していきます。

POV-Rayで月見のシーンを描いてみた

POV-Rayという3Dレンダリングソフトがあるのですが、今回POV-Rayを使って月見のシーンを描いてみました。

f:id:quietMikoshi:20190527161209j:plain

POV-Rayでは3Dのオブジェクトを一つ一つプログラムで書いていくという形式になっています。ソースコードを以下に載せて解説していきたいと思います。

それではオブジェクトを一つ一つ見ていきます。

月は球体に月のテクスチャを貼っただけです。以下が貼ったテクスチャです。

星空

星空は http://www.oocities.org/ccolefax/galaxy.html にあるGALAXY.ZIPに梱包されているGALAXY.SFというファイルを拝借して描きました。34行目にあるstar_countという変数の値を変えることで星の数を調整できます。

地面

地面はススキに隠れてほとんど見えていませんが、地面もxz平面に土のテクスチャを貼っただけです。以下がそのテクスチャです

縁側

表面にtextures.incで定義済みの木のテクスチャを貼った超楕円体です。

月見団子とそれを乗せる台

月見団子とその台はunionにして一体にしてあります。これは最終的に位置、大きさ、回転を微調整する際にまとめて調整できるようにするためです。まず月見団子は球体を並べているだけです。規則正しく並べたかったので、while文で一気に描いています。次に台ですが、台は月見団子が接する上部と穴が開いている下部のunionです。上部は皿のような形にしたかったので、超楕円体の中をそれより少しだけ小さな超楕円体でdifferenceでくりぬいたあとに、さらにdifferenceで上部を切断して消しています。下部は超楕円体と2本の円柱とのdifferenceでくりぬいてあります。

ススキ

ススキは茎と穂のunionでできています。

ススキ1本

ススキの茎には根元から上がっていくにつれて緑から黄色になっていくようにグラデーションがついていますが、RGBベクトルを変化させながら球体を直線状に動かしてできています。これをスイープ効果といいます。続いて穂ですが、穂に一番力を入れて作りました!

上がススキの穂の作り方ですが、穂は円弧の集合でできています。左下に茎の先端と書いてありますが、茎と穂の連結部分のことです。茎の先端を中心とした同心円を考えます。黒い実線が実際に描いた穂ですが、円の半径が小さなうちは円弧の中心角を大きめにし、半径が大きくなっていくにしたがって中心角を小さくしていきます。そして何本かできた穂を青い点が茎の先端に来るように全部移動させます。

ススキを1本作ったところで、あとはこれを量産すればススキ畑になります。x,z軸方向にwhileの2重ループを使って長方形の畑を作ります。このままだとススキがすべて同じ方向を向いてしまうので、乱数を発生させるrandという関数を用いてランダムにy軸まわりに回転させています。

光源

光源はカメラから見て月の少しだけ手前の位置に一つとカメラの後ろ側にもう一つ置いてあります。本当は月と同じ座標に光源を置きたかったのですが、そうすると月の球面の内側に光源を置くことになり光が外側に届かなくなってしまうので、月の少し手前に置くということにしました。また、月の光源一つだけだと月見団子の後ろ側などが暗くなりすぎてしまうので、カメラの後ろ側にも暗めの光源を置きました。                           

以上になります。Blenderで3Dモデリングをした経験はありましたが、プログラムを書いてモデリングしたのは初めてでした。いい経験になりました。