MAXtoA プラグインは、3ds Max に Arnold シェーダを統合します。この統合により、すべてのビルトイン シェーダおよびサードパーティ シェーダを 3ds Max に統合し、シーンのレンダリング中に使用することができます。
Arnold のビルトイン プラグインおよびシェーダは、MAXtoA によって自動的にロードされます。サードパーティ シェーダをロードするには、MAXtoA ディレクトリまたはプラグイン パスのディレクトリ(Render ダイアログで設定)にシェーダを配置する必要があります。ただし、この統合を可能にするには、MAXtoA プラグインが存在する必要があります。
MAXtoA は Arnold シェーダ ノードをマッピングします。また、一致する 3ds Max マテリアルとテクスチャを作成するために、これらの整合性を維持し、ユーザ インタフェースを構築して、3ds Max ユーザが Arnold シェーダを操作できるようにします。
このユーザ インタフェースの統合は自動的に実行されるため、シェーダ開発者は何もする必要がありません。Arnold が ActiveShade またはプロダクション レンダラーとして設定されると、Arnold シェーダは 3ds Max に自動的にロードされ、マテリアル エディタに表示されます。
マテリアル エディタ内の Arnold シェーダ
これ以降、シェーダを作成するには、他の 3ds Max マテリアルまたはマップと同様に、マテリアル エディタの 3 つのビューでシェーダを選択して、キャンバス上でノードをドラッグ アンド ドロップするか、名前をダブル クリックします。
シェーダはマップ/マテリアル ブラウザの Arnold カテゴリに配置されます。これらのシェーダは、メタデータに従って分類されます(詳細については、以下を参照)。
シェーダに該当するカテゴリがない場合は、ロード元の DLL の名前で分類されます。OSL シェーダの場合は「OSL」カテゴリに、ビルトインの Arnold コアの場合は「Built-in」カテゴリに分類されます。
シェーダ開発者が定義したシェーダのアトリビュートが表示されます。シェーダ(3ds Max の用語で言えば、マテリアルまたはマップ)をダブル クリックすると、作成するシェーダのユーザ インタフェースがトリガーされて、マテリアル エディタの右側ペインに表示されます。
シェーダ開発者は、必要に応じて、シェーダのユーザ インタフェースをカスタマイズできます。次の 2 つの方法があります。
メタデータを使用すると、コントロールの名前変更、グループ化、再並べ替えを実行できますが、レイアウトは影響を受けません。一方、ui ファイルを使用すると、シェーダのカスタム ユーザ インタフェースをかなり複雑に設計することができます。
MAXtoA はシェーダ開発者に、任意のシェーダのユーザ インタフェースを作成する自動実行メカニズムを提供します。開発者は、シェーダを 3ds Max で使用可能にする以外、何もする必要はありません。
ドキュメントで使用するために、サポート ファイルを含む単純なシェーダが用意されています。kick ユーティリティを使用すると、シェーダのアトリビュートを一覧表示できます。コマンド「Kick –info simple」を実行すると、次の出力が生成されます。
Type Name Default
------------ -------------------------------- --------------------------------
INT integer -3
UINT unsigned_int 4
FLOAT float 1.92
BOOL boolean false
RGB color 0.7, 0.7, 0.7
RGBA acolor 1, 0, 0, 1
POINT point 1, 2, 3
POINT2 point2 5, 6
ENUM elements space
カスタム UI が定義されていない場合、生成される UI はこのようになります。 ご覧のとおり、パラメータ名がラベルとして使用され、リンク可能な各パラメータは入力の選択に使用されるボタンになります。
パラメータ マッピングと接続を有効/無効にするためのコントロールのみを含む、2 番目のロールアップが作成されます。
生成されたユーザ インタフェースは整理されていて、そのまま使用できます。パラメータ名は「美しく整えられる」ことに注意してください。アンダースコアを含むパラメータ名はスペースで区切られ、各単語の先頭文字が大文字になります。したがって、
unsigned_int は Unsigned Int のようになります。
カスタム ユーザ インタフェースを構築できるようにするには、Arnold と 3ds Max 間のパラメータの一致について理解し、使用するコントロールのタイプを把握する必要があります。
パラメータがリンク可能かどうかに応じて、すべての Arnold シェーダに対して、3ds Max パラメータ(1 個または 3 個)を生成します。
次の図からわかるとおり、パラメータ unsigned_int には、パラメータ ロールアップ内に 2 つのコントロールがあります(番号、およびマップを格納するスロット)。 3 番目のコントロール(マップを有効にする)は、Maps ロールアウトに含まれています。
したがって、unsigned_int という名前の「単純」なシェーダ パラメータの場合、MAXtoA は unsigned_int、unsigned_int.shader、および unsigned_int.connected のパラメータを生成します。パラメータ名は大文字と小文字が区別されます。
MAXtoA は UI を生成するときに、2 つのロールアップ(Parameters および Maps)を作成し、グリッド レイアウト内にさまざまなコントロールを配置します。
この場合、パラメータ タイプとコントロール タイプの関連付けは自動的に行われます。
シェーダ UI をカスタマイズするには、第 1 段階としてメタデータ ファイルを使用します。 このファイルには、シェーダ DLL と同じ基本名が付いている必要があります。したがって、例では、sampleShader.DLL ファイルと sampleShader.mtd ファイルを使用します。
実行できる、最もわかりやすい最初のカスタマイズは、パラメータにわかりやすい名前を付けることです。 そのためには、シェーダのすべてのアトリビュートに数行を追加します。次に、わかりやすい名前を付けたシェーダ UI を示します。
ユーザはアトリビュート パラメータを使用して、数値範囲のコントロールや、ツールチップの追加などを実行できます。
[node simple]
…
[attr unsigned_int]
max.label STRING "Unsigned Integer"
desc STRING "This is the UNSIGNED INTEGER tooltip"
min INT 0
max INT 6
シェーダ UI をカスタマイズするもう 1 つの方法は、パラメータを並べ替えることです。これは、「ノード」レベルで行う必要があります。
[node simple]
max.order STRING "boolean integer unsigned_int color acolor string"
リスト内にないパラメータは、末尾に追加されます。 存在しないパラメータの名前は、無視されます。
多数のパラメータを含むシェーダには、フォルダ パラメータを使用してグループ化するよう指定することができます。
[node simple]
max.parm.folder.folder1 STRING "Rollup1;2;Rollup2;3"
フォルダ情報を指定する場合、指定したパラメータの数のみが表示されます。安全性を高めて、残りのパラメータを選択する 3 番目のロールアップを追加します。
カスタム UI は、シェーダ パラメータを操作する際に使用できる UI をシェーダ設計者が完全に設計するためのメカニズムです。
UI ファイルは、自由にダウンロード可能な Qt Designer を使用して編集できます。ファイル形式についてはこちら(http://doc.qt.io/qt-4.8/designer-ui-file-format.html)を参照してください。
MAXtoA は、シェーダ DLL を調べるときに記載されていた内容に従い、Qt ウィジェットの名前を使用して UI コントロールを MAXtoA パラメータにマップします。UI ファイルの場所は、ロードされているプラグインの場所に対して相対的に指定されます。
そのため、すべてのシェーダに対して、UI ファイルを保存するサブ ディレクトリを作成できます。メタデータを指定することで、MAXtoA は UI ファイルを検索およびロードし、これらを使用してカスタム ユーザ インタフェースを構築することができます。UI ファイルの場所は次のとおりです。
<shader-location>/MAXtoA_ui/<Shader-Name>/<ui-files>
たとえば、standard_surface シェーダ UI のファイルは、次の場所に格納されています。
<MAXtoA dir>/MAXtoA_ui/standard_surface
現在のディストリビューションでは、MAXtoA_ui/standard_surface ディレクトリ内に basic.ui、coating.ui、emission.ui、special.ui、specular.ui、sss.ui、および transparent.ui の 7 つの UI ファイルがあります。メタデータ ファイルを使用すると、standard_surface シェーダの UI で実行する内容を記述できます。次のようになります。
この操作を実行するために、開発者は、どのコントロールを使用して、どのタイプのパラメータを編集できるのかを把握しておく必要があります。max.parm.folder.folder1 およびカスタム UI は互換性がないことに注意してください。.ui ファイルで、パラメータ タイプをコントロール タイプに正しく関連付ける必要があります。次に、Arnolds パラメータのタイプと、使用するのに最適なコントロールのリストを示します。
Arnold | コントロール |
---|---|
INT、UNIT、BYTE | MaxSDK::QMaxSpinBox |
BOOLEAN | QCheckbox |
ENUM | QComboBox |
FLOAT | MaxSDK::QMaxDoubleSpinBox 単位が必要な場合は、MaxSDK::QMaxWorldSpinBox を使用します |
ビットマップ | QPushButton |
Shader | QPushButton |
文字列 | QEditField |
POINT、VECTOR | MaxSDK::QMaxPoint2Spinner |
POINT2 | MaxSDK::QMaxPoint2Spinner |
POINT3 | MaxSDK::QMaxPoint3Spinner |
行列 | MaxSDK::QMaxMatrix3Spinner |
RGB、RGBA | MaxSDK::QMaxColorSwatch |
3ds Max コントロールはさまざまな方法で作成できますが、最も簡単なのは(手作業で UI ファイルを編集する以外)、Qt Designer を使用して、次の手順に従うことです。
一般に、カスタム UI の構築は簡単ですが、従う必要があるルールがいくつかあります。
上記のとおり、MAXtoA はすべての Arnold パラメータに対して、1 個または 3 個のパラメータを生成します。生成されるパラメータの個数は、パラメータが接続可能かどうかによって決まります。「.connected」および「.shader」パラメータが Maps ロールアウトに自動的に追加されます。
ただし、これらを UI のメイン ページにも表示する必要がある場合は(小さなマップ ボタンなど)、適切なコントロールを使用して、ウィジェットにパラメータ名を付けることによって、これらのパラメータをカスタム UI に追加できます。
したがって、unsigned_int.connected の場合は、チェックボックス コントロールを作成し、適切に名前を付ける必要があります。 残念ながら、Qt Designer では、ピリオド「.」文字をウィジェット名として使用できません。 この問題を解決するために、MAXtoA はパラメータ名を unsigned_int__dot__connected として認識し、プログラムで「dot」を「.」に自動的に置き換えます。
カスタム UI ラベルでツールチップを機能させるには、ラベル ウィジェットに、_label の後にパラメータ名が続く名前を付ける必要があります。 たとえば、パラメータ count の場合、ラベル ウィジェットには count_label という名前を付ける必要があります。
メタデータ ファイルは Arnold のメタデータ仕様に従います。「メタデータ ファイル」を参照してください。
注: ドキュメントに記載されているとおり、慣例的に、Maya 固有のメタデータには、「maya.」で始まるメタデータ名を使用し、XSI 固有のメタデータには、「xsi.」を使用しています。個別のドキュメントにパブリッシュされる標準のメタデータ要素には、他にいくつかの規則があります。
MAXtoA は複数のメタデータ トークンをサポートします。ノード セクションの場合[node shader-name]
max.hidden | bool | シェーダは 3ds Max に表示されません |
max.help_url | string | ヘルプ リンク |
max.category | string | カテゴリ |
max.label | string | ラベル |
max.parm.folder.folder[0..9] | string | 自動 UI メカニズムの場合 ロールアップ名およびパラメータの数を記述します 例: max.parm.folder.folder1 STRING "Diffuse;6;Specular;9" |
max.order[0..9] | string | 自動 UI メカニズムの場合 パラメータの順序を記述します。 パラメータ リストを拡張するには、max.order[1…9] を使用します。 |
ノードの例:
# comment
[node standard]
max.category STRING "Shading"
max.parm.folder.folder1 STRING “Diffuse;8;Specular;10"
max.order STRING "folder1 Kd_color Kd direct_diffuse "
max.order2 STRING "Ks_color Ks direct_specular indirect_specular"
アトリビュート セクションの場合[Attr attribute-name]
max.type | string | |
max.label | string | ユーザ パラメータ名 |
max.disable_when | string | コントロールを無効にする場合(説明が必要) |
min | int | 範囲最小 |
max | int | 範囲最大 |
desc | string | 説明(ツールチップ) |
linkable | bool | パラメータをシェーダ出力に接続できるかどうかを定義 |
カスタム ユーザ インタフェースの場合に使用できるその他のアトリビュート
ノート アトリビュート
max.rollup | string | ロールアップ カスタム UI ファイル名を記述します 例: max.rollup STRING "diffuse;specular" この場合、MAXtoA_ui/ |
例:
max.rollup STRING "diffuse;specular;reflection;refraction;sss;emission;aov"
[Attr rollup-<ui-name>]
max.label | string | ロールアップ ユーザのタイトル |
例:
[attr rollup-diffuse]
max.label STRING "Diffuse"