V-Ray Scene を使ってアプリケーション間でデータをやり取りする方法 (V-Ray 3.5 以降)

3Dアプリケーション間でシーンを移動するのは容易ではありません。FBXフォーマットはアプリケーション間でデータをやり取りする良いソリューションの1つですが、変換できるのは多くの3Dアプリケーションが持つ極基本的なデータだけという制限があります。もちろんの事ながら FBX では V-Rayのライトやマテリアルの情報は無視されてしまいます。V-Rayでは 3.5 から新しく「V-RaySceneオブジェクト」を使ってこの問題を解決する手段をテストしています。

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 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では背景を含めたライティングを自在に変更可能です。


V-Ray for Mayaでのレンダリング (vrsceneを出力)


V-Ray for 3dsMaxで vrsceneを取り込み、ライティングを変更してレンダリング

素材集を活用する

例えば 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で読み込めばライティングセットアップを共有する事ができます。

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でのvrsceneの書き出し方法は3dsMaxと少し異なります。最初にレンダリング設定を開き、共通タブ内の Translator セクションを開きます。“Export to a .vrscene file”のチェックを有効にするとvrsceneの書き出しオプションが表示されます。なお書き出しは「レンダリングの実行」時に行われます。レンダリングを行わず vrsceneだけ書き出したい場合は “Render” のチェックを外してください。(MELスクリプトから実行する場合は vrend コマンドを実行します)

3dsMaxでは V-Rayオブジェクトから VRayScene オブジェクトを作成し vrscene を読み込みます。ノードは自由に配置する事ができますが、他のアプリケーションと完全に位置を一致させたい場合は 0,0,0 に配置してください。

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;
}


Mayaから3dsMaxにvrsceneを読み込みClayシェーダーに置き換えてレンダリング

オーバーライド・スニペットの例

// マテリアルの上書き例
//

// 新しくシェーダーマテリアルを作成
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 ファイルはテキストフォーマットなのでスタジオで十分に解析する事ができるでしょう。プロダクションで役立つ事を期待しています。