地雷アセットを回避!レンダリング前におさえておきたい基礎知識!
2013/8/12
皆さんどうもこんにちは。今年の1月からTDチームに仲間入りした塚本と申します。
暑い日が続いており、学生時代の「夏休み」という響きがやけに輝かしく思える昨今ですが、
皆さんは今年の夏はいかがお過ごしでしょうか?
夏といえば、BBQ!花火!海!と楽しいイベントが沢山ありますが、
暑くなり薄着になってくると気になってくるのがやはり Body (カラダ) ですね。
私も先日誕生日を迎えまして、またひとつオヤジへの階段を登ってしまったわけですが、
今回はそんなたるんだカラダを引き締める “ダイエット” にちなみまして、
たるんだシーンを引き締める “レンダリングコスト” のダイエットのお話をしたいと思います!
まずはじめに、LookDev作業とは?
近年、よく耳にするようになった言葉なのでご存知の方も多いと思いますが、
知らない方の為に、一応説明しておきます。
LookDev とは、Look Development の略称で、
要するにキャラクターなどのCGモデルの “見た目” を作成する作業のことです。
しかし、我々CG屋がCGモデルの見た目を作成する場合、Shading, Lighting, Rendering という工程を踏みます。
実はこの工程を踏むことがとても楽しい作業でもあり厄介な作業でもあるのです!
我々CG屋は、誰か1人が作成したアセットを大勢で共有して仕事を進めることがほとんどです。
そこでそのアセットのひとつに何らかの “レンダリングトラブル” が含まれていたらどうなるでしょうか?
そうです、〆切前なのにレンダリングが回らない!なんていう地獄が待っています。
そこまではいかないにしても、ライティング作業を行なう人がシーンアセンブルした時に激重のシーンが出来上がってしまい、
ライティング作業の効率が落ちてしまったりします。
そこで、アセットのLookDev作業を行なう人は、ただ単にShading作業をこなすだけではなく、
アセットの最適化を行なうことが、特に大規模なプロジェクトになるにつれ重要になってくるのです。
Point! LookDev作業とは!
- カッコいい見た目に仕上げること!
- 問題のないキレイなアセットを作成すること!
※実際には “LookDev” は非常に多岐に渡る意味合いで使われることがあるようです。
ここではアセットの最適化に話の焦点を置きたいので、2番の意味合いで話を進めていきたいと思います。
じゃあ何をすればいいの?
きちんとしたLookDev作業を行なうことでアセットのレンダリングコストとトラブルが減り、
ショットのライティング作業に入る人がとても幸せになることがわかりました。
しかし、具体的には何をすればいいのか?
まずは最も基本的なことなのですが、レンダリングしているシーンがどういう状態にあるのか、
レンダリングの基礎知識を踏まえながら視覚的に確認していくことを覚えましょう!
– Output Window でレンダリングの状態を確認 –
Output Window とは Maya を起動した時に一緒に開かれるコレのことです↓
知っている方は当然のように知っているのですが、意外と何の為にあるのか知られていないのがこの Output Window!
実はこの謎のウィンドウにレンダリングの状態や進捗、エラーなど様々な情報を表示させることができるのです。
では、早速レンダリングの情報を出力させてみましょう。
(mental ray でも V-Ray でも出力されますが、今回は mental ray を使用して話を進めていきます)
まずは Maya の Rendering メニューから [Render] > [Render Current Frame] のオプションボックスをクリックして下さい。
以下のようなウィンドウが開かれたら、[Verbosity Level] を “Progress Messages” に変更します。
これで準備は完了です。
あとはいつも通りレンダリングすれば Output Window に様々な情報が出力されるはずです。
では早速レンダリングしてみましょう!
さて、どうでしょう。 Output Window にズラズラズラーっと文字が出力されましたでしょうか?
大量の文字ばかりで一見眺めるのも嫌になりますが、いくつか見るポイントをおさえれば意外と大したことはありません。
では順を追って見ていきましょう!
– レイの数を確認してみよう –
まず、mental ray や V-Ray, Arnold などのレイトレーサーでは “レイの数” がレンダリング時間に大きく影響してきます。
そのため、“レイの数” を少しでも効率的に減らすことができれば、レンダリング時間を短くすることができるわけです。
そして、このレイの数も Output Window で確認することができます。
レンダリングにおいて、最も基本となるレイが “Eye Ray” で、日本語では “視線レイ” とか言ったりします。
上図の結果の場合、視線レイは1141875本あることになります。
そのうちの1本の視線レイを図解するとこんな感じになります↓
視線レイは当然イメージの解像度やサンプリングのクオリティによって大きく増減します。
ここでは分かりやすく Fixed Sampling で説明しますが、
もしサンプリングレベルが0であった場合、視線レイはピクセル毎に1本になります。
サンプリングレベルが1であった場合、視線レイはピクセル毎に4本になります。
つまり、2の時に16本、3の時に64本になるわけです。
そしてこの各視線レイ毎に “Reflection Ray” や “Refraction Ray” などが派生することになります。
Reflection Ray を図解すると以下のようになります↓
この図では最初の球から飛ばした Reflection Ray がピンク色の球に当たり、
さらにピンク色の球が Reflection Ray を飛ばしています。
この、何回まで Reflection Ray を飛ばすことを許容するか という設定を、
“Reflection Depth” や “Reflection Level” と言ったりします。
(Refraction の場合も考え方は同じです。)
mental ray の設定では、[Render Settings] > [Quality] > [Raytracing] から設定することができます。
また、mia_material_x や VrayMtl などではシェーダーレベルでレイデプスを設定することも可能です。
実際には反射の反射の反射の・・・なんてそんなに正確な反射を求められることはあまりないため、
あまり目立たないような部分の Reflection などはシェーダーレベルで低めのデプスに設定しておくとよいでしょう。
又、Reflection や Refraction には “Glossy Sample” と呼ばれるものもあり、
これもレイの数を増やす大きな要因の一つになっています。
Glossy Reflection を先ほどの図で説明すると以下のような感じになります↓
こんな単純な図でも、1つの視線レイから派生したレイの数が大変なことになってきたことが分かりますね。笑
ちなみに Glossy Sample の数は mia_material_x だと以下で各マテリアル毎に設定できます。
はじめの Output Window の図でも分かるように、
実際のレンダリングでは、何十万本、何百万本、時にはものすごい数のレイを飛ばして計算を行なうことになります。
様々なタイプのレイがさらに派生したレイを飛ばしていくことになるので
いかにレイの数をおさえておくことが重要か、ということがお分かりいただけたかと思います。
今回説明したレイタイプ以外にもいろんなレイが存在しますが、
全部説明すると長くなってしまうので今回はこのあたりで。
興味がある方は他のレイタイプについても是非調べてみてください。
さて、次はファイルテクスチャの読み込みについて話をしたいと思います。
– ファイルテクスチャを確認しよう –
Output Window では “どのファイルテクスチャ” が “いつどのタイミングで” 読み込まれているかも確認することができます。
以下がその出力例です↓
レンダリングの際にファイルテクスチャが読み出される時、
上図のように opening texture <テクスチャのパス>, for reading と出力されますが、
もしこの行でずっと Output Window の出力が止まっているようであれば、
それはテクスチャの読み込みに時間がかかっているということになります。
なぜそのテクスチャが読み込まれるのに時間がかかっているのか把握するために、
テクスチャ名にテクスチャのサイズや情報を書いておくことをオススメします。
当然サイズの大きいものや情報の多いものは重くなってしまいますからね。
又、ここで重要となってくるのが “余計なファイルテクスチャが読み込まれていないかチェックすること” です。
作業前半では余計なファイルテクスチャがあるということは少ないと思いますが、
シェーディング作業のトライアンドエラーをやっているうちに、
実際にはあまり必要のないファイルテクスチャが読まれてしまっているということも稀に起こり得ます。
しかも、そのファイルテクスチャのイメージサイズが大きかったりしたら・・・。
というわけで、無駄なファイルテクスチャが含まれていないかもしっかりと確認しましょう!
又、それほど大きなモデルでないものや、
例えモデルが大きくとも画面占有率が低く小さくしか映っていないような場合にも、
無駄に大きなファイルテクスチャが使用されていないか 確認してみましょう。
レンダリングにおいて、レイがモデルに一回でもヒットした場合、
そのモデルに貼られている全ての必要なファイルテクスチャが読み込まれてしまいます。
その為、小さくしか映ってないものなのに4Kのファイルテクスチャが貼られていたりした場合でも、
4Kのファイルテクスチャを毎回読み込んでしまうことになってしまいます。
カメラからの距離などでテクスチャ等のLODを切り替えるシェーダーやツールがあると便利かもしれませんね!
レンダリングが重い重い言っている場合の原因の何割かは意外とこのファイルテクスチャの読み込みが原因だったりしますので、
皆さんも「レンダリングが遅いなー?」と感じたら、是非ファイルテクスチャを確認してみてください!
最後に
いかがでしたでしょうか?今回はとても基礎的な内容だったため知っている方にはつまらなかったかもしれませんが、
少しでも参考になった!と思ってくれた方がいらっしゃいましたら幸いです。
アセットの最適化をおこたり、地雷アセットを誰か1人でも作ってしまうと、
後々のそのプロジェクトが大変なことになってしまいかねません。
極端にレンダリングが重いアセットやトラブルを持ったアセットを事前に回避することで、
見違えるほどに制作の後半戦が楽になります。
今回紹介したこと以外にも重要なことはまだまだたくさんありますので、
是非今後はアセットのクリーンナップや最適化をしっかりと行ない、
楽しいレンダリングライフが送れるように取り組んでみてください。
それではまた!
*DF talkには他にもレンダリングやシェーディングに関する記事がありますので良かったら参考にしてみてください*
・役に立たないCGにまつわるどうでもいい話3
・役に立たないどうでもいい話-RenderLayer Overrideの話
・RampShaderで簡単なトゥーンシェーディング
・MayaでsiToon!
※免責事項※
本記事内で公開している全ての手法の有用性、安全性について、当方は一切の保証を与えるものではありません。
これらの手法を実施したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください
コメント
コメントフォーム