++scenes;

CGメイキング,Terragen 4の使い方,その他お知らせ

(Terragen 4) CropとGI cacheを使って重いレンダリングの精神的負担を軽くする

本記事の対象Terragen 4バージョン:Free / Creative / Professional (Educational含む)

こんにちは。

ここ数年,TG4(前はTG3)で16384x8192とかそういう解像度のレンダリングを100時間くらいかけてやることが多いのですが,長時間レンダリングになると怖いのがやはりレンダリング途中のクラッシュです。単にエラーで落ちることもあれば、メモリが足りなくなって落ちることもあります。以前90%以上完了していたレンダリングが落ちたこともありました。死にたい。
レンダリング課金勢にとっては,クラッシュした分はRどころか何も引けなかったに等しいです。ドブってレベルじゃない。

そういう無駄な課金を防ぐためにはシーンを分割してレンダリングするのが一つの方法です。分割することで,失敗した時の精神的・金銭的ダメージを抑えられます。

以下は私がスカイドームテクスチャを作成する際に常にやっていることですが,スカイドームでなくても通常のシーンレンダリングでも使える方法です。なお,文中のキャプチャはMac OS X版で撮っていますが,やり方はWindows版でも同じです。

Crop rendering

分割するということで,まずはCropの使い方から。

TG4には(たぶん他のソフトウェアと同様に),カメラ内の指定した領域だけレンダリングしてくれる機能があります。設定はRenderのCropタブで行います。 "Do crop region"にチェックを入れ,下の4つのフィールドに数字を入れることで,レンダリングする領域を指定することができます。
シーンの左端、下端が0、右端,上端が1になります。 Crop_ex1

Cropを有効にすると,プレビュー上ではその領域が赤枠で表示されます。 Crop_ex2

これでレンダリングするとこんな感じに。
Crop_ex3

この機能はシーンの一部だけレンダリングして様子を見たいような時も使えるので,覚えておくと便利です。

今回はシーンを横に5分割してやります。つまり,[left, right]がそれぞれ[0, 0.2], [0.2, 0.4], [0.4, 0.6], [0.6, 0.8], [0.8, 1]となるようにします。それぞれレンダリングしてやれば,5枚の分割レンダリング画像が出来上がります。

アニメーションレンダリング機能と組み合わせて,一気にレンダリングすることもできます。アニメーション機能については詳しくは触れませんが,Crop領域を指定してやった後でAnimation keyをセットします。 1フレーム目は[0, 0.2], 2フレーム目は[0.2, 0.4]といった感じで,5フレーム使って各領域をレンダリングしてやるような感じです。 f:id:aokcub:20180216234435g:plain

各フレームの設定が終わったら,"Sequence/output"タブに移動します。"sequence first"を1,"sequence last"を5にして,"Render Sequence"を押してアニメーションレンダリングを始めます。"Output image filename"は任意の名前で良いですが,"%04d"は残しておいてください。ここにフレーム番号が入ります。 sequence

Command lineでレンダリングする場合は-fオプションを入れます。

Windows
 "%TERRAGEN_PATH%/tgdcli" -p hogehoge.tgd -r -f 1-5

OS X
./'Terragen 4' -p hogehoge.tgd -r -rendernode full -f 1-5

Linux
./terragen -p hogehoge.tgd -r -f 1-5

レンダリングが終わると

このように5枚の画像が出来上がります。(ファイル名は一例です)
nocache

あとはこの5枚の画像を合成するだけ...のはずなんですが,多くの場合ここで悲惨な結果になります。

nocache_result
このように,分割した画像間で明るさに差が出てしまいます。これは,分割してレンダリングしたことで,それぞれのレンダリング時に行われるライティングの計算にミスマッチが出ることによります。

すでにTG4でレンダリングをしたことがある方なら,レンダリングし始めると黒い画面にポツポツと点が現れ,それが全体に広がると,今度は精細な画像が現れ始めるのを見たことがあると思います。最初のポツポツが出ている時,TG4はシーン内の明るさを計算しています(この段階をprepassと呼んでいます)。その後,prepassの結果を使ってシーンを仕上げて行きます(final passと呼んでいます)。

prepassはレンダリングする領域に対して行われるため,分割すると領域ごとにどうしても誤差が出てしまいます。

GI cacheの書き出し

これを防ぐために,GI cacheというものを使います。これは,prepassでの計算結果をキャッシュファイルとして保存することができる機能です。

GI cacheを使うためには,まず"Do crop region"のチェックを外し,シーン全体をレンダリング対象にします。

次に,Renderの"GI setting"をクリックし,開いたダイアログの真ん中あたりにある"Write to GI cache file"をチェックします。ファイル名はなんでもいいですが,ここでは"gicache_%04d.gic"にします。
gisetting

終わったらレンダリングします。"Write to GI cache file"を選択している場合は,prepassまででレンダリングが終了します。
cache_export_render

同時に,拡張子gicのファイルが出力されます。これで,シーン全体に対して計算を行った結果が保存されました。
gicache_file

GI cacheの読み込み

次に,保存したキャッシュファイルを読み込んで,シーンをレンダリングします。

もう一度"GI setting"を開いて,今度は"Read GI cache file(s)"をチェックします。そして,先ほど保存されたキャッシュファイルを指定します。そして,"Blend mode"を"One file (exact filename)"にします。
gisetting_read
今回は一つのキャッシュファイルを使いますが,複数のファイルを読み込むこともできます。その時にどのようにファイルを使っていくかを指定するのが"Blend mode"です。いつか仮に(本格的な)アニメーションレンダリングの解説を書くことになったら触れるのでしょうが,今は放っておきます。

読み込むキャッシュファイルを指定したら,もう一度分割レンダリングの設定をして,レンダリングを始めます。
prepassはもう完了しているため,Final passから始まると思います。これで,全てのフレームで同じprepass結果を使用してレンダリングをすることができるため,明るさのミスマッチが生じなくなります。

レンダリングした画像をまとめるとこの通り。 gicache_result

課金額を減らして効率的にSSRを手に入れましょう。以上。

補足

この設定を毎回やるのは面倒です。
なので自分はRenderを二つ用意して,キャッシュ書き出し用とキャッシュ読み込み・レンダリング用にしています。この設定をしたものをテンプレとして保存して使っています。 f:id:aokcub:20180216232510j:plainf:id:aokcub:20180216233417j:plain

Command lineでは-rendernodeオプションにより使うRenderを指定できます。

Windows
 "%TERRAGEN_PATH%/tgdcli" -p hogehoge.tgd -r -rendernode cache -f 1
 "%TERRAGEN_PATH%/tgdcli" -p hogehoge.tgd -r -rendernode full -f 1-5

OS X
./'Terragen 4' -p hogehoge.tgd -r -rendernode cache -f 1
./'Terragen 4' -p hogehoge.tgd -r -rendernode full -f 1-5

Linux
./terragen -p hogehoge.tgd -r -rendernode cache -f 1
./terragen -p hogehoge.tgd -r -rendernode full -f 1-5

補足2

解像度が高い場合,キャッシュファイルのサイズが数GBに及ぶことがあります。ストレージの空きにはご注意ください。

Reference

Terragen 4 Global Illumination - Planetside Software Wiki

Rendering Methods - Planetside Software Wiki

Render - Crop Region Tab - Planetside Software Wiki

Command Line Reference - Planetside Software Wiki

宣伝

高解像度全天球テクスチャです。
++skies; - Photo-Realistic Panoramic Sky Textures

去年CG集つくりました。よろしければ買ってください。
【風景CGイラスト集】今日も空を見ている - aokcub::Booth - BOOTH(同人誌通販・ダウンロード)

ポストカードもあります。
風景CGポストカード - aokcub::Booth - BOOTH(同人誌通販・ダウンロード)

その他缶バッジなどもあります。
aokcub::Booth - BOOTH(同人誌通販・ダウンロード)

2018-02-17 2:20 補足2加筆,対象バージョン追加,本文中のCreative/Professional向けの区分削除,その他微修正
2018-02-17 2:49 2レンダーノード設定時のコマンドライン実行方法追加
2018-02-17 2:54 OS Xコマンドラインコマンド追記