POV-Rayで遊ぼう
1 はじめに
POV-Ray(Persistence of Vision Raytracer)はマルチプラットフォーム(Win/Mac/UNIX/Linux/etc)な フリーのレイトレーシングソフトウェアです。 球や直方体といった原始的な 形状(プリミティブ)を組み合わせてモデリングを行います。 形状やカメラ位置をテキストファイルに書くため、テキストエディタさえあれば、画像を生成する 事ができます。 ただ、レイトレース作品の傾向とも言える「不思議空間」は非常に簡単な記述で表現できます が、3D美少女を作るのはかなり至難の業だと思われます....あぁっ、お客さんっ!行かない でっっ!!
2 始め方
以下の公式サイトから、
ダウンロードページに進みWindowsの場合はインストーラをダウンロードし、 インストールします(プラットフォームによってインストール方法は異なります)。
POV-Rayの詳しい使い方はWebサイトや巷の書籍に譲ります(ってぉい) 今は参考になるWebサイトや書籍が出版されている様ですので困った時でも安心です。 私は「POV-Rayではじめるレイトレーシング改訂二版(小室日出樹 著)」を参考書に していました(注記:初版1999年6月1日なので、2014年10月時点で15年以上前の本です)。
以下はX68k用にコンパイルした実行ファイルです。 2014年10月現在、これを使って何か用事になる事をすることは無いでしょう(^^;
3 補助ツール
POV-Ray本体だけで3DCGを描く(レンダリングする)事はできますが、 他のツールと組み合わせる事で、複雑なものを簡単に描く事ができる 「かも(ここ重要)」知れません。
フリーのポリゴンモデラです。POV-Rayへのエクスポートがサポートされています。 本当はテキストエディタだけでPOV-Rayのシーンファイルを書くのが カッコイイのですが、複雑な形状はポリゴンモデラに頼るのが良いでしょう。
過去にTANEが作ったX68k用実行ファイルや小物ツールです。 2014年10月現在、これを使って何か用事になる事をすることは無いでしょう(^^;;
4 作例
ポリゴンを使った作例なので、POV-Rayらしさという意味ではいまいちな例ですが こんな感じのが描けます。ポリゴンモデルはDoGA-CGAシステムのモデラである MODEL.Xを使用して作成しました(2000年当時)。
2014年現在のマシンだと、いずれも数秒でレンダリングできると思います(^^;
以下はPOV-Rayのプリミティブを組み合わせてテキストエディタで作成した作例です。
- へっぽこバナーオリジナル (2000.06.18)
- へっぽこバナーReloadedオリジナル (2006.10.21)
- へっぽこバナーRevolutionsオリジナル (2014.09.06)
- メタルクロスバー(on PentiumIII@550MHz) 18h52m56s (2000.10.16)
- グラスクロスバー(on PentiumIII@550MHz) 約11d16h (2000.10.28)
- さいころ(on PentiumIII@550MHz) 1h29m05s (2000.10.29)
以下はPOV-Rayのプリミティブとポリゴンモデラによるモデルを組み合わせて作成した作例です。
5 アニメーション
POV-Ray3.xにはアニメーションフレームを自動レンダリングする機能が あります。これを使用してアニメーションを作画してみました (サイズが大きくなり過ぎる為、画質やサイズをかなり絞ってあります)。
Javaアップレットで作成していましたが Java11で廃止となったので JavaScriptで動くように書き換えてみました。Microsoft Edge, Chrome, Firefoxで動作する事を 確認しています。IE11ではダメでした。
アニメーションにはscale,translate,rotateの引数式に 「clock」というキーワードを使用します。 「clock=(現在のフレーム番号 - 1)/全フレーム数」という式 になっている様で、例えは rotate <360*clock,0,0> と指定 して、全フレームを64フレームとすると、X軸を 1フレーム目は 360*((1-1)/64)=0度,5フレーム目だと 360*((5-1)/64)=22.5度 .... という感じになる様です。
レンダリングオプションは以下の様に+KFFでフレーム数を指定 します。この時、回転などの動作を行った場合、+KFFだけだと 最初のフレームと最後のフレームは同じレンダリング結果に なってしまう場合があります。+KCを付けると、最初と最後が 同じにならない様に制御されます。
+Q9 +FN +KFF64 +KC +W80 +H60 +A
全てのレンダリングが完了すると、torus??.pngというファイル群が出来あがり ます。'??'はフレーム番号が自動的に付けられます。 ちゃんとした動画ファイルを生成するツールがあれば、それを使用して動画 ファイルにまとめれば良いと思います。
6 動画ファイルの作り方
6.1 ローテクな方法
2003年当時、ソフトを買えない貧乏な私はへっぽこアップレットを作成してアニメーション させてみました(2019年に JavaScriptに書き換えました)。
- Animation.js : アニメーションJavaScriptのソース
- save.pl : フレームタイリングしてセーブする Laymanスクリプトを生成するperlスクリプト
各フレームを並べた画像ファイルを作成し、 表示位置をずらす事で表示画像を切り替えている様に見せています。
実際の使い方は、Cygwinコンソール上などで
ls torus??.png | ./save.pl -X 8 -Y 8 -W 80 -H 60 -o torus.jpg > save.lsh layman save.lsh
という感じで使用します。これで生成したファイルを以下の様に
<script type="text/javascript" src="Animation.js"> </script> <script type="text/javascript"> var anim=new Animation("torus","./torus.jpg",80,60) ; anim.start() ; </script> <canvas id="torus" width="80" height="60" style="background-color:blue;"></canvas>
HTMLファイルに仕込む事でブラウザで表示されます。 ただし、動画専用フォーマットと違い、圧縮率があまり良くなかったり、 一度に使用するメモリ量が多過ぎるなどの欠点があります。
もう参考にする事は無いと思いますが、Javaアップレット版は以下のような感じでした。
- Animation.java : アニメーションアップレットのソース
HTMLファイルには以下で仕込んでました。
<applet code="Animation.class" width=80 height=60> <param name = "fname" value = "torus.jpg"> <param name = "width" value = "80"> <param name = "height" value = "60"> <param name = "wait" value = "60"> </applet>
6.2 割とモダンな方法
2014年現在、MPEG-4 AVC/H.264 などのように高品質で圧縮率の高い動画ファイルを 生成するフリーソフトウェアが公開されています。以下はコマンドラインツール なので、少々敷居が高いかも知れませんが良い感じに動画ファイルを 作る事ができます。
詳しい使い方は各ツールの説明書を読んでいただくとして、例えば、
png2yuv.exe -I p -f 24 -j torus%02d.png -b 1 | ffmpeg.exe -i - -f mp4 -vcodec libx264 -qscale 0 output.mp4
てな感じでtorus??.pngファイル群から output.mp4にMPEG4ファイルを生成する事ができました。
(注記:png2yuvを使用せず、ffmpeg に元画像群を指定することもできるようですが、そうするとうまく 再生できない動画ファイルが出来上がりました。)
試しに作った動画が以下。1024x768のサイズで720枚レンダリングするのに90時間ほど要しました。
7 終わりに
初めてPOV-Rayを知った時から2014年10月時点で15年ほど経ちますが、 オープンソースのフリーソフトウェアで、これだけ高品質な3DCGをレンダリングできる ものはありませんでした。そして現在も (2019年11月現在、少々停滞気味なようではありますが) GitHub でメンテナンスが続けられています。
ソフト自体はダウンロード&インストールするだけで気軽に利用できますが、 使いこなすのはそれなりに大変かも知れません(数学が好きでない人は恐らく「うっ」 となるでしょう)。でも、3DCGがどのような原理で描かれるかを勉強するのには 丁度良いんじゃないかと思います。とにかく素敵なソフトです。