綺麗な3次元画像をレンダリングしてみる

高校時代にレイトレーシングを実装してみたことがあるくらいには3次元画像に興味があるので、久々に綺麗な3次元画像をレンダリングしてみました。無料で手に入るレンダラー「Yafaray」の存在を知ってから、いつか試そうと思っていたのでテンションはやや高めです。


※ なお、下記の手順はUbuntu10.04で動作を確認したものです。

■ まずは無料レンダラー「Yafaray」をインストール

こちらのサイトからUbuntu用のファイルを選択し、ダウンロード&インストール。ダウンロードした .deb ファイルをダブルクリックするだけでOKです。
http://www.yafaray.org/download
(ちなみに今回インストールしたのはUbuntu 32bit用の YafaRay 0.1.1 - Python2.6 です。)


インストールが正常に完了すれば

yafaray-xml

というコマンドを叩いて下記のような出力が得られるかと思います。

Starting YafaRay XML loader...
ERROR: No input file given.
USAGE: yafaray-xml [OPTION]... FILE
OPTIONS:
	-h: display this help
	-f FORMAT: 'exr' outputs EXR format instead of TGA
	-p PATH: use alternative path for loading plugins
	-o PATH: path for the output file
	-d LEVEL: set debug verbosity level
	-v: display the version

■ 続いてレンダリングしてみるサンプルのファイルをダウンロード

これは何でも良いのですが、とりあえず手っ取り早く下記のファイルをダウンロードします。
http://www.yafaray.org/phpBB3/download/file.php?id=2502

unzip yafarayRender.zip

レンダリングしてみる

さて、以下のコマンドでレンダリングしてみます。ついでにレンダリング時間も計測してみます。

time yafaray-xml yafarayRender.xml

すると、

Starting YafaRay XML loader...
YafaRay 0.1.1
Loading plugins ...
Registered integrator type 'bidirectional'
Registered shader node type 'texture_mapper'
...(略)...
Registered material type 'coated_glossy'
Registered volumeregion type 'NoiseVolume'
added Material 'defaultMat' (shinydiffusemat)!
added Material 'Yellow.001' (shinydiffusemat)!
added Material 'Red.002' (shinydiffusemat)!
added Material 'Green.002' (shinydiffusemat)!
added Material 'Blue.002' (shinydiffusemat)!
added Material 'white' (shinydiffusemat)!
added Material 'Glass' (glass)!
added Material 'Yellow' (shinydiffusemat)!
added Material 'Lamp.001' (light_mat)!
added Light 'Lamp.001' (arealight)!
added camera 'cam' (perspective)!
added Background 'world_background' (constant)!
added Integrator 'default'!
added Integrator 'volintegr'!
setting up scene...done!
scene mode:0
starting build of kd-tree (2046 prims, cr:0.8 eb:0.33)
getting triangle bounds...done!
starting recursive build...

=== kd-tree stats (0.04s) ===
used/allocated kd-tree nodes: 8187/8192 (99.939%)
primitives in tree: 2046
interior nodes: 4093 / leaf nodes: 4094 (empty: 1783 = 43.5515%)
leaf prims: 5487 (2.68182x prims in tree, leaf size:1)
   => 2.3743 prims per non-empty leaf
leaves due to depth limit/bad splits: 1294/880
clipped triangles: 28279 (0 bad clips, 31 null clips)
scene_t::update(): new scene bound is 
	(-1.10149, -4.09638, -0.1022), (1.10291, 1.10612, 2.1022)
energy: 3.92699 (dirac: 0)
photon col:[3.92699 3.92699 3.92699] lnpdf: 1
shot 200000 photons, 597176 hits, 581771 of them on diffuse srf.
stored caustic photons: 2411
stored diffuse photons: 579360
building photon kd-trees...
starting recusive tree build (n=2411):
starting recusive tree build (n=579360):
done!
starting recusive tree build (n=72432):
[################################################################] (done)
1.16581sec
building radiance tree...
starting recusive tree build (n=3289):
done!
rendering 2 passes, min 4 samples, 2 per additional pass (max 6 total)
[################################################################] (done)
Saving Targa file as "yafaray.tga": OK
imageFilm_t::nextPass: resampling 3689 pixels!
[################################################################] (done)
overall rendertime: 111.816s
flushing imageFilm buffer
Saving Targa file as "yafaray.tga": OK
** imageFilter stats: unlocked adds: 408028 locked adds: 164750
yafaray-xml yafarayRender.xml  116.60s user 0.12s system 98% cpu 1:58.13 total

どうやら1分58秒程でレンダリングが完了したようです。出力された画像は yafaray.tga というファイルなのですが、これをpngに変換したものがこちらになります。

ちなみに、私が使用しているマシンはコアが4つあるので、マルチスレッドで計算すると高速化できます。上記 yafarayRender.xml の下記の部分を編集してみます。

<?xml version="1.0"?>
<scene type="triangle">
...
<render>
  ...
  <threads ival="4"/>    <!-- ここを "1" から "4" に変更 -->
  ...
</render>
</scene>

そして再び実行すると…

yafaray-xml yafarayRender.xml  118.06s user 0.23s system 345% cpu 34.267

と、34秒程度でレンダリングすることができました。およそ3.5倍の高速化です。こんなに短い時間でフォトンマッピングがレンダリングできるとは、いやはや時代の進歩は目覚しいものです。私が最初に3DCGに興味を持った頃はフォトンマッピングはおろか、ラジオシティすら存在していませんでしたし、貧相なモデルをレイトレーシングレンダリングしても2時間とかかかっていましたし…(いつの話だ)。


下記のサイトでXMLの仕様を把握してから、いずれもっとアグレッシブな画像生成にチャレンジしてみます。
http://www.yafaray.org/development/documentation/XMLspecs
http://www.yafaray.org/development/documentation/XMLparameters
色々と作ってみたい画像はあるのですが、かといってBlenderがサクサク動くようなマシンも手元に無いし、そんな人にはYafarayは絶好のおもちゃですね。

Realistic Image Synthesis Using Photon Mapping

Realistic Image Synthesis Using Photon Mapping