チュートリアル / GEMBAコンバート道
第7回:シーンメイク編
- 3ds Max
- コラム
- スクリプト・API
- チュートリアル
- データ
- 上級者
- 中級者
- 映画・TV
こんにちは、GEMBAの水橋です。
第7回目のGEMBAコンバート道、これで最終回となりました。
最後は、これまでのコンバートを入れ込んだシーンメイク編です。
GEMBAにおけるシーンメイクとは
GEMBAでは、アニメーションやシミュレーション・ライティングを入れ込み、レンダリングする事をシーンメイクと呼んだりしています。
アニメーションやモデリング・マテリアル、シミュレーション、エフェクト、ライティングが別々の部署で同時に進行し、シーンメイクで全てのデータが集結する工程です。
今までのコラムでコンバートしてきたものをシーンメイクしてみましょう。
という事です。
レンダリングをする作業自体は単純なのですが、分業制ではデータの受け渡し(シーンデータの整理整頓)やライティングをストレスなく進めなくてはいけません。
後段になるレンダリング作業は、シワ寄せを受けやすくレンダリング時間とも勝負しなくてはなりません。コンポジットへの素材を渡すスピードやクオリティと要求は高くなる昨今、
シーンメイクは円滑に、確実に進めなくてはなりません。
図のようなかんじで、チームごとにシーンメイクが関係してきます
分業した各作業のデータを束ねてレンダリングするのが主な目的です。
なので、各チームがルールに基づいてデータを共有し、誰でもシーンを構築できるようにしておきます。
AssetとShotの関係性
では、どのようにして、より効率よく・ヒューマンエラーを減らし・クオリティを保っていったらよいのでしょうか。
AssetとShotの関係性を整理してみましょう。
● AssetはShotのデータ(モーションやキャッシュ)を全て流し込めるようにする
● Shotのデータは一定のルールで配置する
この2点を守って作業をすると、
● AssetはShotのデータができるまで更新できる
● Shotのデータが更新されればすぐに反映できる
● 誰でもできるようなルーチン化
● 問題(エラー)の切り分けがしやすい
というようなメリットがあります。
分業制において、具体例をあげると、
● モーションが更新されても再読み込みすればシーンを更新できる
● モーション作業中でも、マテリアルやモデルの調整が行える
● クロスシミュレーションが終わる前にライティングの作業を進められる
● スキルを要求しないので簡単なノルマとして考えることができる
など色々あります。
ScriptでShotを構築
前述のAssetとShotに配置したデータからシーンメイクをします。
もちろん手動でもできるのですが、Scriptを使用する事で効率的にシーンメイクする事が可能です。
単純な作業はなるべく自動にするのが吉なのですが、ケアレスミスをなくしたり、最新のデータとの差分を調べたりできたりもするので、是非、自動化をおすすめします。
個人的には、まっさらな状態からシーンを再構築できるので、常にクリーンなシーンの状態を保てるのが最大のメリットだと思っています。
順を追って解説すると、
● MotionBuilderから書き出したFBXを収集
● Assetの合成
● モーションやカメラのアニメーション(FBX)の読み込み
● シミュレーションなど(xml、pc2、abcなど)キャッシュデータの読み込み
● ライティングの合成
● レンダリングの設定
図で説明するとこんな感じです。
簡単にですが、Scriptを書いてシーンメイクしてみましょう。
1. データの収集
local shotPath = @”¥¥shot-server¥project¥shot¥c001¥” local fbxFiles = getfiles (shotPath + “FBX¥¥*.fbx”) local cacheFiles = getfiles (shotPath + “Cache¥¥*.pc2”) local assetPath = @”¥¥asset-server¥project¥asset¥” local assetFiles = getfiles (assetPath + “*.max”)
shotのフォルダにあるファイルをそれぞれ取得して、変数に配列として格納しています。
FBXとキャッシュファイル、アセットのmaxシーンを検索しています。
2. アニメーション範囲・レンダリングサイズの設定
FrameRate = 30 AnimationRange = interval 5 120 RenderWidth = 1280 RenderHeight = 720 rendTimeType = 2
FPSとアニメーション範囲、レンダリングサイズを設定しています。
最後のrendTimeTypeは連番を書き出す際に、アニメーション範囲でレンダリングするようにしています。
3. Assetの合成
for file in assetFiles do ( mergeMAXFile file #noRedraw quiet:true )
3ds Maxのシーンを順番に合成しています。quietを設定することで、ユーザーに確認するダイアログなど、処理が途中で中断するのを回避します。
4. FBXの読み込み
for fbx in fbxFiles do ( FbxImporterSetParam “Animation” true FbxImporterSetParam “mode” #merge importFile fbx #noPrompt using:FBXIMP )
FBXの読み込みです。ファイルメニューの読み込みを行うものはインポート用のプラグインが使用されています。importFileで実行する前に、プラグインの設定を行います。
今回の場合は、FBXの読み込みモードを合成(merge)でアニメーションをオンにしています。ただ、3ds Maxのバージョンやプラグインのバージョンによってプロパティや挙動が異なったりするので、動作確認するようにしましょう。
5. Cacheの読み込み
for file in cacheFiles do ( local obj_name = getfilenamefile file local obj = getNodeByName obj_name if obj != undefined then ( local mod = Point_Cache () addmodifier obj mod mod.filename = file ) )
キャッシュファイルのファイル名からオブジェクトを見つけて、ポイントキャッシュモディファイヤを作成しています。
その後、モディファイヤのファイルにキャッシュファイルを適用しています。
(キャッシュのファイル名とシーン内のオブジェクト名が同一になっていることが前提です)
6. レンダリング設定の読み込み
renderpresets.LoadAll 0 RPSfile
レンダリング用の設定を、予め作成しておいたRPSファイルから読み込んでいます。
Shotシーンの完成
以上のScriptを実行すると、レンダリングできるシーンが出来上がっているはずです。
このように一度Scriptでできるようになっていれば、何度も再構築ができるようになります。例え、モデルが変更されても大丈夫ですし、スキンのウェイトを変更しても、アニメーションが変わっても平気。ちょっと設定を変えて、マスクを出したりすることもできます。
他にはレンダリング出力先を自動で設定したり、Backburnerにジョブをサブミットしたり、他ソフトと連携すればコンポジットまで一気にいけるかもしれません。
例えばこれ。
以前、プロジェクトで使用したツールです。
ファイルサーバー上のAssetやShotが表示され、任意のものを登録していくと、レンダリングまで自動で行うことができます。
このツールはPythonを使用していますが、Pythonで生成させたmaxscriptを3ds Maxで実行させています。
ポチポチするだけで、レンダリングが終わるのを待つのみになります。
おまけ
そして、最終回のムービーはこちら!
モーション、クロスシミュレーションなどシーンメイクしてみたものです。
スクリプト
今回のスクリプトはシーンメイク時に良く使うであろうスクリプトをまとめたファンクション集です。
まとめ
今まで色々なコンバート紹介してきましたが、いかがだったでしょうか。
ケーススタディ的なものから概念的なものまでありました。
みなさん(とくに3ds Maxユーザー)に経験値をいかしたお話ができればな、と思い始めた連載でした。
お仕事されてる方も、学生の方も、誰がどうやったらいいのか、どこかで困ったら本コラムを思い出していただけると幸いです。 (もしかしたら何か見つかるかもしれません!)
さあ、
どんなプロジェクトでも
どんなワークフローでも
コンバートしちゃいましょう!
いままでお付き合いくださり、ありがとうございました。