V-Ray Scene を使ってアプリケーション間でデータをやり取りする方法 (V-Ray 3.5 以降)
初めに
3Dアプリケーション間でシーンを移動するのは容易ではありません。FBXフォーマットはアプリケーション間でデータをやり取りする良いソリューションの1つですが、変換できるのは多くの3Dアプリケーションが持つ極基本的なデータだけという制限があります。もちろんの事ながら FBX では V-Rayのライトやマテリアルの情報は無視されてしまいます。V-Rayでは 3.5 から新しく「V-RaySceneオブジェクト」を使ってこの問題を解決する手段をテストしています。
V-Ray scene オブジェクトとは?
V-RayはV-Rayのみで扱える独自のファイルフォーマットを持っています。最もよく知られているのはProxyオブジェクト用のV-Rayメッシュファイル(.vrmesh)です。これは巨大なジオメトリデータをオンデマンドでメモリにロードする為のフォーマットです。このフォーマットは非常に巨大で大量のオブジェクトをシーンで扱う場合に威力を発揮します。しかしながらこのフォーマットは単にジオメトリ形状だけを格納します。マテリアル情報は含まれていません。
V-Ray Sceneファイル(.vrscene)はVRMESHファイル程知られていませんが、V-Ray 3.5で大きくアップデートされました。このフォーマットではvrmeshではできない問題を解決します。 vrsceneファイルは元々 V-Rayのスタンドアロンでレンダリングする為のファイルで、レンダリングに必要な全ての情報を格納しているフォーマットです。つまり一旦vrsceneに出力してしまえば 3Dアプリケーションは不要で、v-rayスタンドアロンだけでレンダリングできます。
V-Ray scene を3Dアプリケーションで読み込む?
V-Ray 3.5 より「V-Ray Sceneオブジェクト」が新しく追加され vrsceneデータを読み込む事が可能になりました。ある 3Dアプリケーションから vrscene を出力すれば、レンダリングに必要な殆どの情報を含めて別の3Dアプリケーションに読み込む事ができます。
現在どのようなデータが読み込めるのか?
現在 vrscene 経由で読み込まれるデータは以下です:
- ジオメトリ (UV含む)
- マテリアル(VRayShaders)
- ライト(※)
- Hair
- アニメーション(フレームにベイクされた物)
※全てのアプリケーションがvrsceneからライトを読み込めるとは限りません。3.5現在、mayaではvrsceneからライトを読み込めますが、3dsMaxはvrsceneからライトを読み込む事ができません。
vrsceneでも読み込めないデータは?
VRsceneオブジェクトは 3dsMaxでは1つのオブジェクト、Mayaではシングルノードでシーンに存在します。その為 vrsceneの中の要素を3Dアプリケーション側で取り出して操作する事はできません。
- 個別のシェーダー
- 個別のライト
- カメラ
- 個別のオブジェクト (ジオメトリはvrmeshのように1塊になっています。)
- アプリケーションに特有のVRayプラグインノードに依存する要素は読み込めません。しかしながらVRayStandaloneでレンダリングできる要素は読み込める筈です。
注)オーバライド機能を使って VRaySceneオブジェクトの特定要素を選択して変化させる事は可能です。後ほど詳細を解説します。
どのような時に利用される?
V-Ray Sceneオブジェクトは次のようなケースで有用です。
VFXスタジオ間でのアセット共有
例えばスタジオAとBで同じ映画を作成しているとします。スタジオAではV-Ray Mayaをメインに背景(シーン環境)を作成し、スタジオBでは V-Ray 3dsMaxをメインにキャラクターアニメーションを作成しています。スタジオAはシーンを vrscne ファイルで出力します。スタジオBは受け取ったVRsceneオブジェクトを使って背景を配置します。V-Rayのマテリアル、オブジェクトを含めてそのまま複雑な背景が再現されるでしょう。スタジオBでは背景を含めたライティングを自在に変更可能です。
素材集を活用する
例えば 3dsMax用に販売されているシーンを 3dsMaxで一旦 vrscene に出力します。(そのうちvrscene形式で素材集が発売されるかもしれません)そのまま Mayaでvrsceneを配置すれば質感等そのまま持ち込めます。また、VRscene オブジェクトをMaya内で複製して複数配置する事も可能です。
コンポジットの為に照明セットを共有
V-Ray for Mayaでシーンを作成し、V-Ray for NUKE で houdiniからのVDBだけをレンダリングしてMayaのレンダリングイメージに合成したいと思います。Mayaから書き出した vrscene ファイルを V-Ray for NUKEで読み込めばライティングセットアップを共有する事ができます。
3ds Max から Maya にデータを持ち込む
V-Ray 3dsMax 環境ではクアッドメニューの “.vrscene export” からvrsceneを出力する事ができます。オプションでアニメーションも含めて出力できます。(詳細はV-Ray 3dsMaxドキュメントページを参照ください)
Maya では 作成メニュー » V-Ray » Scene Manager から読み込みます。もしくは V-Rayシェルフのアイコンからもアクセスできます。 ノードは自由に配置する事ができますが、他のアプリケーションと完全に位置を一致させたい場合は 0,0,0 に配置してください。
なお、3dsMaxは Z-up で Mayaは通常 Y-up です。V-Rayはvrscene objectで自動的にUP軸をセットしますが明示的に軸の反転を有効/無効にする事ができます。
Maya から 3ds Max にデータを持ち込む
Mayaでのvrsceneの書き出し方法は3dsMaxと少し異なります。最初にレンダリング設定を開き、共通タブ内の Translator セクションを開きます。“Export to a .vrscene file”のチェックを有効にするとvrsceneの書き出しオプションが表示されます。なお書き出しは「レンダリングの実行」時に行われます。レンダリングを行わず vrsceneだけ書き出したい場合は “Render” のチェックを外してください。(MELスクリプトから実行する場合は vrend コマンドを実行します)
3dsMaxでは V-Rayオブジェクトから VRayScene オブジェクトを作成し vrscene を読み込みます。ノードは自由に配置する事ができますが、他のアプリケーションと完全に位置を一致させたい場合は 0,0,0 に配置してください。
vrscene オブジェクトの内容を変更するには
V-Ray Sceneオブジェクトでは オーバーライド・スニペット(Override Snippet)機機を使って vrscene の内容を変更する事ができます。※ V-Ray Mayaでは ver 3.5 から追加されます。
例えば Override Snippet に以下のような構文を記述します。すると vrscene の内容は全て新しく作成した Clay(ライトグレー)のマテリアルに置き換えられます。
// 新しくライトグレーの clayMtl を作成 BRDFDiffuse clayBrdf { color=Color(0.35,0.35,0.35); } MtlSingleBRDF clayMtl { brdf=clayBrdf; } // 全ノードプラグインのマテリアルをclayMtlに上書き Node <*> { material=clayMtl; }
オーバーライド・スニペットの例
// マテリアルの上書き例 // // 新しくシェーダーマテリアルを作成 BRDFLight shadelessBrdf { color=Color(0.15,0.35,0.35); affect_gi=false; } MtlSingleBRDF shadelessMtl { brdf=shadelessBrdf; } MtlWrapper shadelessMtlAlpha { base_material=shadelessMtl; alpha_contribution=-1; } // 新しく clayMtl を作成 BRDFDiffuse clayBrdf { color=Color(0.35,0.35,0.35); } MtlSingleBRDF clayMtl { brdf=clayBrdf; } // 全てのプラグインノードを上書き Node <*> { material=clayMtl; } // パターンマッチングでの上書き例 // Node <*SphereShape[1-2]*> { material=shadelessMtlAlpha; } Node <*SphereShape5*> { material=shadelessMtlAlpha; } GeomStaticSmoothedMesh <*> { edge_length=8; } GeomDisplacedMesh <*> { edge_length=8; } | // 名前の完全一致による上書き例 // // pSphereShape1@node のトランスフォームを上書きします。 Node pSphereShape1@node { transform=Transform(Matrix(Vector(0.5, 0.0, 0.0), Vector(0.0, 0.5, 0.0), Vector(0.0, 0.0, 0.5)), Vector(0.0, 0.0, 0.0)); } // 新しいテクスチャーイメージに上書き // BitmapBuffer MyBitmap { color_space=2; file=”/Users/car_scene/Textures/carbon01_3.jpg”; gamma=1; } UVWGenMayaPlace2dTexture MyMapping { repeat_u=5; repeat_v=5; uvw_channel=0; } TexBitmap MyBitmapTexture { bitmap=MyBitmap; uvwgen=MyMapping; } // "VRayMtl1@diffuse"プラグインの "color_tex" パラメーターを // "MyBitmapTexture" に上書き BRDFDiffuse VRayMtl1@diffuse { color_tex=MyBitmapTexture; } // マテリアルの上書き IN 3DS MAX // // “test_override” というマテリアルを3dsMaxで作成し // VRayScene objectに割当て // 全てのプラグインノードに3ds maxネイティブマテリアルを割り当て Node <*> { material=test_override; } |
最後に
vray scene はジオメトリ、マテリアル、シェダー、ライティングまで含めてデータを移動できるので、多数のプラットホームにまたがったワークフローでは非常に便利に利用いただけます。 vrscene ファイルはテキストフォーマットなのでスタジオで十分に解析する事ができるでしょう。プロダクションで役立つ事を期待しています。