日本語版: Maya Domemaster3D Tips and Tricks - zicher3d-org/domemaster-stereo-shader GitHub Wiki
- 新しいMayaプロジェクトでの設定
- 立体視の深度を調整する
- 立体ドーム用リグを使った立体と非立体のレンダリング
- domeAFL向けに最適化されたサーフェースマテリアルの作成
- Mayaの通常マテリアルで線状のゴミを修正する
- メンタルレイの物理的な太陽と空を使う
- [メンタルレイ サブサーフェースとレンズシェーダー](#メンタルレイ サブサーフェースとレンズシェーダー)
- [Maya流体エフェクトとメンタルレイ レンズシェーダー](#Maya流体エフェクトとメンタルレイ レンズシェーダー)
新しくMayaプロジェクトを作成したら、Domemaster3Dで使用される画像ファイルをプロジェクトに追加します。
Domemaster3Dをインストールすると、C:\Program Files\Domemaster3D\sourceimages folder
フォルダ(Windows環境の場合)または/Applications/Domemaster3D/sourceimages
フォルダ(Mac OS X環境の場合)に必要な画像ファイルが置かれます。
domeAFL_FOV_Stereo
のデフォルトの向き修正マップ画像や視差修正マップ画像は下記のファイルです。
- turn_map.png
- separation_map.png
- head_tilt_map.png
これらのテクスチャ画像はFulldome Stereo Rigシェルフツールを使用するとDomemaster3D立体視カメラリグに自動的に接続されます。
turn_map.png
画像は観客の頭上にある天頂付近の立体視効果を調整するために利用されます。このテクスチャ画像ファイルによって、天頂付近に生じる渦巻き状の映像の歪みを解消することができます。
向き修正マップには、観客が真後ろを向いた際に立体視効果が反転してしまうことを防ぐ役割もあります。
このテクスチャ画像はスクリーン座標系に適用され、最終的なドームマスター画像を直接制御します。
separation_map.png
画像はデフォルトの視差修正用テクスチャ画像ファイルで、スクリーン上での立体視効果のかかり具合を制御します。
このテクスチャ画像はスクリーン座標系に適用され、最終的なドームマスター画像を直接制御します。このテクスチャ画像の白い領域には、立体視効果はかかりません。視差修正マップを自作する場合には、白い"非立体視"領域と黒い"立体視"領域の間にボカシをかけて、立体視効果が滑らかに変化するようにします。
head_tilt_map.png
画像はdomeAFL_FOV_Stereo
用の頭の傾きをによる効果を補正するためのサンプルテクスチャ画像です。Fulldome Stereo Rigシェルフツールを使用した場合、デフォルトではこのテクスチャはシェーディングネットワークに接続されません。
デフォルトのシェーディングネットワーク用mia_materialテクスチャ画像は下記のファイルです。
- bumpChecker.iff
- Checker.iff
注意: デフォルトのテクスチャファイル名はDomemaster3DのPythonスクリプトを修正して変更することができます。
Color MaterialまたはColor + Bump Materialシェルフツールを使用すると、Checker.iffテクスチャ画像がドームマスターのmia_materialのDiffuseチャンネルに適用されます。
下図はデフォルトのColor Materialを球体に適用したレンダリング結果です。
Color + Bump Materialシェルフツールを使用すると、bumpChecker.iffテクスチャ画像がバンプマップのシェーディングネットワークに適用されます。このテクスチャ画像はスムーズなグラデーションのために、16bit IFF形式で保存されています。
下図はデフォルトのColor + Bump Materialを球体に適用し、バンプマップの係数を5に設定したレンダリング結果です。
注意: バンプマップの効果を強調したい場合は、mib_passthrough_bump_mapノードを選択して、「アトリビュートエディタ」でバンプ効果の**[係数]**アトリビュートを変更します。
MayaのシーンでDomemaster3Dのデフォルトテクチャ画像へのリンクが外れると、新しいmentalraytextureノードでテクスチャが見つからないと警告が表示されます。
デフォルトテクスチャが見つからないと、シーンのレンダリングにこれらのテクスチャを使用しようとしてメンタルレイの警告が表示されます。
// Warning: (Mayatomr.Shader) : color_mentalrayTexture1: referenced texture file "{TEXS}/sourceimages/separation_map.png" doesn't exist, ignored //
// Error: (Mayatomr.Output) : file error: {TEXS}/sourceimages/separation_map.png //
// Error: (mental ray) : /sourceimages/separation_map.png: can't open file for reading (No such file or directory) //
// Error: (mental ray) : {TEXS}/sourceimages/separation_map.png: registry entry {TEXS} not found //
// Error: (mental ray) : {TEXS}/sourceimages/separation_map.png: registry entry {TEXS} has no value //
// Error: (mental ray) : {TEXS}/sourceimages/separation_map.png: registry entry {TEXS} not found //
// Error: (mental ray) : {TEXS}/sourceimages/separation_map.png: registry entry {TEXS} not found //
エラーを修正するには、Domemaster3DのテクスチャがC:\Program Files\Domemaster3D\sourceimages
フォルダ(Windows環境の場合)、または/Applications/Domemaster3D/sourceimages
フォルダ(Mac OS X環境の場合)にあることを確認します。デフォルトテクスチャをプロジェクトのsourceimages
フォルダにコピーし、Mayaにシーンをリフレッシュさせることでも対応できます。
テクスチャが見つからないとエラーがでた場合、アクティブなシーンを下記のいずれかの方法でリフレッシュします。
新しいMayaのシーンに切り替え([ファイル] > [新規シーン])、再度シーンファイルを開きます。
または
Mayaを終了し、再起動します。
下図はMayaの「アトリビュートエディタ」ウィンドウで表示したdomeAFL_FOV_Stereo
シェーダーのスクリーンショットです。
**[Dome Radius]**の値は、立体視の際に視差がなくなる距離を表しています。これにより、右目と左目のカメラが内向きになす角(コンバージェンスと呼ばれます)が制御されます。この値はカメラからの距離を、シーンで使用されている単位で設定します。初期値は360になっています。
注意:
- オブジェクトをすくりーから観客の方へ飛び出させたい場合は、カメラとの距離を[Dome Rarius]よりも近く設定して下さい。
- カメラから[Dome Rarius]と同程度の距離にあるオブジェクトは、ドームスクリーン上にあるように見えます。
- [Dome Rarius]よりも離れた距離にあるオブジェクトは、ドームスクリーンの向こう側にあるように見えます。
Tip: もし必要であれば、[Dome Rarius]の値にキーフレームを設定し、長いシーンのなかで観客が見やすいよう視差の付け方を制御することもできます。
また、Mayaのレイヤーレンダリングの機能"layer override"を使って、別々の[Dome Rarius]と[Cameras Separation]の値でレンダリングすることもできます。これにより、前景、中景、背景の要素に分けて立体視の効果を調整しながらシーンを構成することができます。
**[Cameras Separation]**の値は、右目と左目のカメラの間の距離を制御します。この値はシーンで使用されている単位で設定します。初期値は6cmになっています。
[Cameras Separation]の単位は、正しい立体視効果を得られるよう自由に調整することができます。一般的に、[Cameras Separation]の値はシーンの大きさによって変わります。
例: 顕微鏡サイズのシーンや室内のシーン、宇宙空間を飛行するようなシーンでは、それぞれ設定が異なってくるでしょう。
Tip: 裏庭から宇宙空間に出て惑星を探索していくようなワンカットをレンダリングするには、この[Cameras Separation]アトリビュートにキーフレームを設定してアニメーションさせることができます。
パースペクティブビューポート内でカメラのアイコンを大きくしたい場合、多くのアーティストがカメラアイコンを選択して、カメラの**[スケール]**アトリビュートを変更してしまいます。
残念ながら、これはDomeAFL_FOV_Stereo
ノードのカメラ間隔の計算にも影響を与えてしまいます。
もしMayaのビューポートでカメラのアイコンを大きくしたい場合、カメラを選択して「アトリビュートエディタ」の[オブジェクト ディスプレイ]欄にある**[ロケータのスケール]**アトリビュートを変更してください。
立体視リグのカメラの大きさを変更したければ、中央、右目、左目のカメラの[ロケータのスケール]アトリビュートを変更する必要があります。
下図は、正しくカメラの[ロケータのスケール]が設定された様子です。これにより、カメラが見やすく選択しやすくなり、立体視効果の計算も正しく行なわれます。
**[Separation Multiplier]**アトリビュートは、独自のテクスチャ画像を使ってドームスクリーン上のどこの部分に立体視効果をかけるかを制御します。
[Separation Multiplier]アトリビュートはランプテクスチャか、メンタルレイのテクスチャ画像ファイルによるシェーディングネットワークのいずれかを利用します。このテクスチャはグレースケールでスクリーン座標系に適用されている必要があります。
[Separation Multiplier]アトリビュートを簡単に使えるように、Domemaster3Dシェルフには2つの"スクリーン座標系"ツールがあります。
Screen Space Rampシェルフツールは、Mayaのランプテクスチャノードを使って編集可能なグラデーションを作成します。これを利用して、ドームスクリーンの前方に立体視効果を簡単につけることができます。
デフォルトでは、ランプノードはrob_lookup_background
ノードに接続されています。このため、この効果はレンダービューで確認することができます。このシェーディングネットワークをDomeAFL_FOV_Stereo
で使うには、ランプノードのグレースケールの出力をDomeAFL_FOV_Stereo
ノードの**[Separation Multiplier]**入力に接続します。
下図は、「ハイパーシェード」に表示された、DomeAFLに接続される前のScreen Space Rampノードです。
下図はランプテクスチャによって立体視効果がドームの前半分に適用されている様子です。この設定によって観客の後ろ側は非立体視になっています。
[選択したカラー]と[選択した位置]アトリビュートは、スクリーン座標系のランプテクスチャ内で指定した位置に色付けをします。デフォルトでは[V ランプ]が使用されています。
Screen Space Textureシェルフツールはメンタルレイのテクスチャシェーディングネットワークを作成します。シェーディングネットワークにはデフォルトでsourceimages/separation_map.png
画像が接続されています。
デフォルトでは、新しいスクリーン座標系テクスチャのシェーディングネットワークはrob_lookup_background
ノードに接続されています。このため、この効果はレンダービューで確認することができます。このシェーディングネットワークをDomeAFL_FOV_Stereo
で使うには、mib_texture_filter_lookup
ノードのグレースケールの出力をDomeAFL_FOV_Stereo
ノードの**[Separation Multiplier]**入力に接続します。
下図はDomeAFLに接続される前の一般的な視差修正マップの様子です。
下図は、「ハイパーシェード」に表示された、DomeAFLに接続される前のスクリーン座標系テクスチャノードです。
立体映像の編集を行なう際には、カメラが広角から通常、あるいはクローズアップに切り替わるときに、立体視効果の変化が目障りにならないよう十分確認してください。
[Dome Radius]を調整して、シーンの立体視に適した値となるようアートディレクションを行なってください。[Dome Radius]のデフォルトの値は出発点に過ぎません。例えば、オブジェクトをスクリーンから飛び出して観客に近づける場合、観客が快適な立体感を得られるように[Dome Radius]と[Dameras Separation]の両方のアトリビュートを変更する必要があるかもしれません。一般的なコツとして、観客の方にスクリーンから30%以上近づけることは避けた方が良いでしょう。オブジェクトが極端にスクリーンから観客の方に飛び出してくると、過度に寄り目になり不快の原因になります。
観客に快適な映像を見せるには、シーンの背景にあるほとんどの要素を[Dome Radius]の距離よりも離れた距離に配置すると良いでしょう。
立体映像のレンダリングを行なう際には、特定のシーンでカメラの間隔が大きくなりすぎないよう気をつける必要があります。
もし小さなものを写したり、オブジェクトを極端にクローズアップしたりする時には、[Cameras Separation]の値を標準的な人間の眼間距離である6cmよりも小さくする必要があります。
また、シーンの中で最も近いオブジェクトに合わせて[Cameras Separation]の値を調整することもよくあります。
もし興味があれば、このような快適な立体視効果のためのパラメータ計算を行なうツールがありますので、インターネット上で探してみてください。
ハイパーステレオとは、カメラ間の距離を人間の眼間距離である約6cmよりも大きくした立体視レンダリングを意味しています。
もしカメラの近くにオブジェクトが無ければ、カメラ間の距離を広げることでハイパーステレオのようなより深い立体視効果を試してみましょう。これは背景が遠いシーン、例えば地平線の山々や、宇宙空間で遠くに惑星や衛星があるようなシーンで便利です。
このハイパーステレオの唯一の欠点は、巨人の目でミニチュアの世界を見下ろしているような見え方になってしまうということです。
Mayaでドーム映像のレンダリングを行なう際、立体ドーム用リグを使って立体ドーム映像と通常の非立体ドーム映像のどちらもレンダリングできることを知っておくと便利です。わざわざdomeAFL_FOV
とdomeAFL_FOV_stereo
を切り替えう必要はありません。
このテクニックの利点は、既存のドーム映像カメラのアニメーションを立体ドーム用に作り直す必要が無いということです。
Domemaster3Dシェルフの立体カメラツールで作成されるデフォルトの立体ドーム用リグは、DomeAFL_FOV_Stereo
シェーダーを使用しています。このシェルフツールは親子付けられた中央、左目および右目のカメラをシーンに追加します。
非立体視のレンダリングを行なう場合には、Mayaの「レンダー設定」ウィンドウで[レンダリング可能なカメラ]に"DomeStereoCamera"を選択します。
立体視用に右目と左目用の映像をレンダリングするには、「レンダー設定」ウィンドウで"DomeStereoCamera (Stereo Pair)"を選択します。
domeAFLシェーダーはほとんどの場合、メンタルレイでうまく動作します。しかしdomeAFLシェーダーを使ったレンダリングで最もよく経験するのが"ぼやけた線状のゴミ"です。
このノイズはデフォルトのファイルテクスチャノードを使ったドーム映像レンダリングの際に、地平線の近くに現れます。これはMayaのファイルテクスチャノードのミップマップテクスチャフィルタリングによるものです。これを回避する最も良い方法は、Mayaのファイルテクスチャノードをメンタルレイのファイルテクスチャノードに切り替えることです。
下図はランバートマテリアルとMayaのファイルテクスチャを貼り付けた惑星のレンダリング結果の一部です。ぼやけた線状のゴミが惑星の左側にあるのがわかります。
下図は同じものをmia_materialとメンタルレイのファイルテクスチャを使ってレンダリングしたものです。ぼやけた線状のゴミが消えて惑星が通常通りに描画されているのがわかります。
メンタルレイのファイルテクスチャノードを接続していくのは退屈な作業なので、Domemaster3Dシェルフに2つの新しいマテリアルのプリセットが追加されています。
Color Materialプリセットはmia_material_x_passes
をシーンに追加し、メンタルレイのファイルテクスチャノードをDiffuseのカラーテクスチャとして使用します。
Color + Bump Materialプリセットはmia_material_x_passes
をシーンに追加し、メンタルレイのファイルテクスチャノードをDiffuseのカラーテクスチャとして使用し、さらにメンタルレイのバンプマップシェーディングネットワークを構築します。
mia_material_x_passes
シェーダーは、mia_materialと少し違う昨日を持っています。
メンタルレイの通常のバンプマップシェーディングネットワークを接続する際には、「アトリビュートエディタ」で[Advanced]欄を開き、**[Bump Mode]**に0を設定します。この設定を変更することで、マテリアルにバンプマップ効果が現れます。
メンタルレイのバンプマップノードの接続は下記のようになります。
mib_texture_vector.outValue -> mib_texture_remap.input
mib_texture_remap.outValue -> mib_passthrough_bump_map.coord
mib_bump_basis2.u -> mib_passthrough_bump_map.u
mib_bump_basis2.v -> mib_passthrough_bump_map.v
mentalrayTexture.message -> mib_passthrough_bump_map.tex
mib_passthrough_bump_map.outvalue -> mia_material_x_passes.bump
注意: mib_passthrough_bump_mapの**[factor]**アトリビュートがバンプの深さを制御します。
もしDomeAFLシェーダーでMayaの通常のテクスチャファイルノードとMayaのサーフェースマテリアルを使う必要がある場合、このぼやけた線状のゴミを修正する別の方法があります。それは、レンダリングの際に2つの異なる視野角を、ひとつはDomeAFLノードに、もうひとつはカメラのアトリビュートに設定するというものです。
これは初めおかしい話に聞こえるかもしれませんが、実際にこれで問題が解決します。
DomeAFLの魚眼レンズシェーダーでレンダリングを行なう場合、レンダリングの視野角はDomeAFLノードのアトリビュートで制御されます。すなわち、カメラ側の視野角のアトリビュートを変更しても、最終的なレンダリング結果には影響しないということです。
例えば、もしDomeAFLノードがドーム映像を180度の視野角でレンダリングするよう設定されており、DomeAFLのパースペクティブカメラがリアルタイムのパースペクティブ表示を4mmの視野角で表示するよう設定されていた場合、メンタルレイでレンダリングした結果にぼけた線状のゴミが現れます。
この図はカメラがリアルタイム用に4mmの視野角設定になっている様子です。
このDomeAFLノードの視野角を180どのままで、カメラの視野角を500mmの視野角に変更した場合、このぼやけた線状のゴミは消え去ります。これは、ズーム値の変更によりメンタルレイのMayaテクスチャファイルノード用のミップマップ計算方法が変わるためです。
このテクニックで唯一の大きな欠点は、リアルタイムビューポートのプレビュー表示が500mmの非常にズームされた状態になってしまうことです。このプレビュー表示を修正するためには、この視野角設定をレンダリング時のみ変更するようプリレンダーMELとポストレンダーMELスクリプトを「レンダー設定」ウィンドウで設定します。
この2つのシンプルなMELスクリプトは、レンダリング時に視野角を変更し、その後元に戻すためのものです。
DomeAFL_FOV_Stereoシェーダーは、上記のぼやけた線状のゴミの修正と、プレビューとレンダリング時のカメラ間隔の切り替えを行なうための、プレおよびポストレンダーMELスクリプトを備えています。
立体ドーム映像カメラのシェルフツールを使用すると、新しいカメラリグがシーンに追加されるとともに、下記のスクリプトが「レンダー設定」ウィンドウに自動的に設定されます。
プリレンダー MEL: source "domeRender.mel"; domemaster3DPreRenderMEL();
ポストレンダー MEL: source "domeRender.mel"; domemaster3DPostRenderMEL();
(これらの設定は「レンダー設定」ウィンドウの[共通]タブにある[レンダーオプション]の欄にあります。)
もしdomeAFL_FOVやdomeAFL_WxHのような非立体視のドーム映像シェーダーを使用する場合、独自のプレおよびポストレンダーMELスクリプトを用意して視野角を調整することで、ぼやけた線状のゴミを消すことができます。もしドーム映像用のカメラがdomeAFL_FOV_Camera1
という名前であれば、「レンダー設定」ウィンドウを開き、[レンダーオプション]欄で下記のように設定します。
プリレンダーMELスクリプト:
setAttr "domeAFL_FOV_CameraShape2.focalLength" 500;
ポストレンダーMELスクリプト:
setAttr "domeAFL_FOV_CameraShape2.focalLength" 4;
このDomAFLのmia_materialと視野角を上書きするテクニックのテストを行なってくれたヘイデンプラネタリウムのJason Fletcherに感謝します。
DomeAFLとdomeAFL_FOV_Stereo
シェーダーは、メンタルレイの物理的な太陽と空システムと一緒に使うことができます。この物理的な太陽と空機能は、写実的な屋外の空や太陽、ファイナルギャザリングによる光と影の表現をアーティストに提供します。
Domemaster3DのdomeAFL_FOV
、domeAFL_WxH
およびドーム用立体視リグツールは、メンタルレイの物理的な太陽と空システムに対応した正しいシェーダーの接続を構築します。
もしDomeAFLシェーダーを手動でカメラに接続する場合、メンタルレイのPhysical Sun & Skyシステムを有効にするには、camera.miLensShader入力への接続をcamera.miLensShaderList入力に切り替えます。
これは、Mayaによるメンタルレイの物理的な太陽と空の[作成]ボタンが元のレンズシェーダーの接続をmia_exposure_simple1
で上書きしてしまうためです。
Domemaster3Dシェルフのカメラツールを使用しない場合、別の方法はDomeAFLシェーダーをcamera.miLensShaderList
入力に接続することです。
まず最初に、メンタルレイの物理的な太陽と空システムをMayaのシーンに追加します。
「レンダー設定」ウィンドウを開きます。
[間接ライティング]タブに切り替えます。
[環境]欄で物理的な太陽と空というラベルを探します。
その横の[作成]ボタンをクリックして、物理的な太陽と空システムをシーンに追加します。
次に、DomeAFLシェーダーをmiLensShaderList入力に接続する必要があります。このために、シーン内のカメラを選択します。
「アトリビュートエディタ」を開き、[mental ray]欄までスクロールします。
[レンズシェーダー]欄を開き、[作成]ボタンをクリックします。
「レンダーノードの作成」ウィンドウでDomeAFL_FOV
、DomeAFL_WxH
またはDomeAFL_FOV_Stereo
のいずれかのレンズシェーダーを選択します。
これでレンズシェーダーがmiLensShaderList入力に接続されました。
下図は、DomeAFL_FOV
が正しく接続され、物理的な太陽と空システムが有効になっている様子です。
Maya / 3DS Max / Softimageのメンタルレイ レンズシェーダーでサブサーフェース シェーディングを正しくレンダリングするには、misss_physical
マテリアルの使用をお勧めします。
その他のmisss_fast_simple
やmisss_fast_skin
のようなメンタルレイのSSSマテリアルはレンズシェーダーが変更する前のカメラの視野角をもとにサブサーフェースシェーディング計算の最適化を行ないます。そのため、オブジェクトの端でサブサーフェースシェーディングの効果が薄れてしまう問題が生じます。
最近のバージョンのMayaでは、「ハイパーシェード」のmental ray > 旧式フォルダにmisss_physical
シェーダーがあります。
Mayaの流体エフェクトのボリューム内にカメラがあると、メンタルレイのレンズシェーダーで暗くぼやけた線状のゴミが発生する場合があります。もしLatLongStereoシェーダーを使っている場合は、LatLongStereoシェーダーの**[Zenith Mode]**チェックボックスを使ってこのゴミを見えにくくすることができます。
[Zenith Mode]の有効/無効で後外を比較するために、Mayaの流体エフェクトの3D流体コンテナをMayaのシーンに追加してみましょう。Mayaを[ダイナミクス]メニューセットに切り替えます。[流体]タブから[3D流体コンテナ]を選択します。
fluid1オブジェクトの[スケール]の値を10に変更します。またfluid1コンテナを6単位Y軸方向に持ち上げ、カメラが流体の中に入るようにします。
サンプルボリュームで流体エフェクトコンテナを満たすため、「アトリビュートエディタ」を開き、[skyFog]プリセットをfluidShape1コンテナに適用します。
続いて、LatLongStereoカメラリグをDomemaster3Dシェルフからシーンに追加します。
まずLatLongStereoCameraカメラリグオブジェクトを「アウトライナ」で選択します。
デフォルトでは[Zenigh Mode]はOFFなので、画像をレンダリングしてみると下図のような線状のゴミが現れます。
「アトリビュートエディタ」でCenter_LatLong_Stereo
のタブをクリックして中央のカメラを選択します。Center_LatLong_Stereo
の設定を下の方にスクロールして、[Zenith Mode]のチェックボックスをONにします。
[Zenith Mode]を有効にすると、メンタルレイはカメラリグがY軸の上方向を向くようにレンダリングするので、レンズシェーダーのゴミは水平軸の中心に1ピクセルの帯となり、ほとんど見えなくなります。
**[Zenith Mode]チェックボックスでカメラが上を向いてしまうため、カメラリグのトランスフォームノードで[回転Y]**を90に設定してデフォルトのLatLongStereoシェーダーで[Zenith Mode]が無効の時の向きに戻します。
以上で、このシーンのLatLongStereoカメラリグと流体エフェクトコンテナは、パースペクティブビューポートで見ると下図のようになります。
もしこれでレンダリングを行なえば、結果はかなり良くなります。レンズシェーダーの線状のゴミはほとんど見えなくなっています。