あまり役に立たないCGにまつわるどうでもいい話
2010/12/2
弊社で主にMaya関連のパイプラインや自動化のスクリプトを書きながらたまにC++でPluginもかきつつ、
レンダリングに関するトラブルと戦いながら日々励んでいる開発室のJです。
あまり難しい話や専門的な話は私自身もあまり詳しくないので
CGにまつわるどうでもいい話をしたいと思います。
皆さんが主に使っているレンダラーはなんでしょう?
弊社のレンダリングは、ほとんど「MentalRay」で行っています。
(公開を目前としているガンツは初の試みとして、主に「VRay」を使用しています)
そこで、今まで関わってきたプロジェクトでMayaの「MentalRay」関連で対応してきた
内容を話したいと思います。ちょびっとでも皆さんのお役に立てればうれしいです。
尚、プロジェクトの守秘義務もありますので、言及できる内容が制限されることが
ありますのでご了承ください。
皆さんもよくご存知かと思いますが、32ビットWindowsXPで使用できるメモリはなんと「2G」だけ!です。
4Gをつんでも8Gをつんでもです。勿論、OS的には認識しますが、使用はできません。
最大で使用可能なのは3Gです。これは32ビットOSの限界ともいえます。
それでまずはMayaのMentalRayレンダリングで苦労してきたメモリのことを話したいと思います。
- 第一次メモリ戦争(Maya7.0)「エクスマキナ」(以下エクス)は多くの人がXSIでやっていると
認識していると思いますが、実は多くの背景はMayaで制作してレンダリングされています。
かなりのボリュームということもあってテストレンダリングでもメモリの心配がありました。
皆さんもご存知だと思いますが、
Mantalrayが実際に絵を塗るプロセスに入ってからの使用可能メモリ =
OS認識分(当時2G)-(OSのメモリ使用分 + アプリの使用分 + シーンデータをロードした消費分 + レンダラー消費分(シェーダー、テクスチャー等))
でシーンの大きさにもよりますが最大で使用可能なメモリは1.2Gぐらいでした。
そこでシニアデザイナから依頼があったのがFinal Gather Map(以下FGMap)を事前に作っておき、
レンダー時にそれを使用することでメモリの消費を減らす上に、レンダー時間も稼ぎたいとの依頼がありました。
当時はまだMayaのレンダリングにはFGMapモードもなく、使用方法に関する情報や
正しい設定に関する情報もあまりなかったので色々と海外のサイトを調べながら依頼通りの
スクリプトを作り、対応することが出来ました。
それで無事レンダリングが出来たらよかったものの、やはりメモリが足りないシーンは
シーンデータを削りながらレンダリングをしないといけないカットが幾つかあったと聞いています。
でも、多くのデザイナ達が苦労しながら頑張ったおかげでレンダリングも終わり、
世の中に「エクスマキナ」を送り出すことが出来ました。
このときはまだ次にくる試練をしるよしもなくただただ無事終わったことに安堵していました。 - 第二次メモリ戦争(Maya8.5)しばらくはメモリに関する問題は忘れ、平穏な日々をすごしてましたが、次なる強敵、
皆さんも良くご存知の「バイオハザード D Generation」(以下バイオ)が
暗闇から魔の手を差し伸べてきていました。
以前より、良くなった作業環境で常にQuality Upに貪欲な弊社のデザイナ達によって
作られた莫大なシーンデータと、Mayaのバージョンアップとともに増えたシェーダーによるメモリの使用の増加などが次第に32ビットOSメモリの限界をじわじわとせめて来ていました。
前の経験でシーン作りは賢くなっていましたが、やはりメモリを4Gつんでいても
2Gしか使えない状況を何とかしないといけなかったのでした。
当時、様々な自動作業用のスクリプト(たこすけ、いかやろう)を書いている傍ら、
何か方法がないものなのかとMayaのHELPやWindowsのメモリに関する情報ページを
色々と調べてるうちに見つけたのがなんとも魅力的なWindows起動時の「3G Switch」!
ただ、そのSwitchは「使ったら何も保障しませんよ」という厄介なコメント付き。
それで使用を拒んでいましたが、本格的なレンダリングが始まり、
使用可能なメモリを増やさないとQualityを落とすしかないとのデザイナ達の
「背水の陣」に負け、禁断のSwitchを有効にしました。
このSwitchのおかげで使用可能メモリは1G増えることになりましたが、その反動として
常に「Windowsの仮想メモリのリソースが不足しています」と付き合うことになりました。
でもこのSwitchのおかけで多くのカットがレンダリングは可能になったので
何とか「バイオ」もQualityを落とすことなく世の中に送りだすことが出来ました。 - 第3次メモリ戦争(Maya2009)しばらくしていよいよMentalRayのレンダリングにもなれたかなと思った矢先、
ある映像を制作しているチームからメモリ不足でレンダリングできないシーンがある
との連絡が来ました。
色々とシーンを調べてみると32ビットOSメモリの中ではQualityを落とすしかなく
どうしようもない状況でした。
それはMaya2009になってから以前に比べてMentalRayがレンダリングで要求するメモリが
増えてきたのもある上に、Primary RendererのScanlineの限界でもありました。
デザイナからはQualityを落としたくないとのことで色々と設定を変えてみるうちに
もっとも有効な手段はPrimary RendererをRaytracingにすることでした。
実はそれまではScanlineがRaytracingよりレンダリングのメモリ消費が低いと
思っていましたが、意外なことにRaytracingではメモリ管理効率がいいことが分かったのです。
問題のシーンではScanlineだとFinal Gatherの計算後メモリの開放があまりなく、
ブロックのレンダリングでもメモリの開放があまりなかったのでメモリ不足でレンダリングに
失敗していました。
Raytracingに変えた途端、Final Gatherの計算後とブロックレンダリング後
適切にメモリ開放を行い、200~300Mほどの消費メモリが浮き、レンダリング可能になりました。
ただ、レンダリング手法の違いで起きる大きな問題がありました。
Scanlineの場合はカメラの前に遮るものがあってもNearClipPlaneを遮るものの後ろに置けば
レンダリング可能ですが、Raytracingの場合はそれができないので遮るものをなくさないと
いけない上、部屋とかのシーンではレンダリング結果に大きな違いが出てくる問題です。
幸い問題のシーンはそのようなカットではないのでRaytracingでレンダリングすることで
乗り切ることができましたが、この件がMaya2010の導入と同時に、64ビットOSへ移行する
引きがねとなりました。
ただ、このことが後にもっとも苦労する原因になるとは、夢にも思ってなかったです。
第4次メモリ戦争は色々と問題が重なりあい、もっとも苦労した時期でもありますし、現在多くのUserが使っているMaya2010も関わっているので次回に詳しく紹介したいと思います。
コメント
コメントフォーム