3ds Max 2018 の 新機能 : MAXScript には、Arnold ノードのカスタム UI を使用して「ラッパー」プラグインを簡単に作成する機能があります。この方法はシェーダ以外のプラグイン用です。シェーダ
プラグインには、別の方法が使用されます。
MAXtoA プラグインには、MAXtoA トランスレータが認識できる特殊な名前のパラメータが使用されます。MAXtoA では、プラグインにロジックが含まれているのか、それとも別の既存の 3ds Max クラスをラップするのかに関係なく、プラグインの他のパラメータや内部機能は無視されます。3ds Max はラップされたクラスおよびプラグインのロジックを認識して、UI (プラグイン タイプに応じてビューポート、モディファイヤ スタックなど)に表示します。(MAXtoA を使用する) Arnold は特殊なパラメータにのみ反応し、これらを使用して一部の特定の Arnold ノードをインスタンス化し、パラメータを適切に設定します。
拡張できるプラグイン タイプは、次のとおりです。
MAXtoA は特定の命名規則に従う公開されたパラメータを検索し、これらのパラメータに適切に対応します。MAXtoA が認識するパラメータ名は、次のとおりです。
パラメータはスクリプトに表示されている順番で、上から順に処理されます。使用前に宣言する必要があります。
enum パラメータ
enum タイプの Arnold パラメータは通常、ゼロで始まる整数値で表されます。ただし、MAXScript ドロップダウン コントロールは 1 をベースとします。したがって、MAXtoA はプラグイン UI のドロップダウンをサポートするために、enum タイプのパラメータを 1 をベースとする配列に変換します。次の図に、列挙の定義方法と UI コントロールとの接続方法を示します。
列挙に関するスニペット |
---|
parameters main rollout:params ( . . . arnold_node_mode type:#integer default:2 ui:mode . . . ) rollout params " Parameters" ( . . . dropdownlist mode "Mode" items:#("Blend", "Mix", "Replace", "Add", "Sub") . . . ) |
スクリプト ノードのパラメータ(パラメータ arnold_node_mode)には、ドロップダウンの選択内容に基づいて値 1、2、3、4、または 5 が格納されますが、Arnold に実際に送信される値は 0、1、2、3、または 4 です。
この例では、FreeCamera から取得された新しいカメラ タイプ「Spherical Cam」を Arnold カテゴリ内に作成します(このカメラ タイプは、Arnold spherical_camera ノードをオンにするだけです)。このスクリプトは他のパラメータを設定しません。
例 |
---|
plugin Camera arnold_spherical_camera extends:FreeCamera name:"Spherical Cam" classID:#(135251,542126) category:"Arnold" replaceUI:true ( parameters main rollout:params ( arnold_node type:#string default:"spherical_camera" ) rollout params "Example Parameters" ( ) ) |
この例では、「Sphere」という新しいジオメトリ タイプを Arnold カテゴリ内に作成します。これにより、組み込みの 3ds Max 球が拡張されて、ビューポートに表示されます。ただし、レンダリングするときは、Arnold から数学的に正確な「球」シェイプ ノードが実際に提供されます。
この例に示されているコードの大部分では、マウスを使用してジオメトリを作成し、Arnold オブジェクトを定義するパラメータとの同期を維持することができます。ラップされたオブジェクトをすべて無視してよかったのなら、今よりずっと簡素なコードになっていたはずであり、ロールアウトの UI を直接 Arnold 方式のパラメータを扱うように設定することも可能でした。そうしておけば、updateArnold() 関数も必要なく、わずか数行に収めることができたかもしれません。
例 |
---|
plugin Geometry Arnold_Sphere name:"Sphere" classID:#(0xf00df103, 0xc55744a1) category:"Arnold" extends:Sphere replaceUI:true ( local lastSize, meshObj parameters pblock rollout:params ( arnold_node type:#string default:"sphere" arnold_node_radius type:#float default:1.0 arnold_node_center type:#point3 default:[0.0,0.0,0.0] radius type:#float animatable:true ui:radius default:1.0 ) fn fmax val1 val2 = if val1 > val2 then val1 else val2 fn updateArnold = ( -- Modify the Arnold Sphere arnold_node_radius = delegate.radius ) tool create ( on mousePoint click do case click of ( 1: nodeTM.translation = gridPoint 2: #stop ) on mouseMove click do ( if click == 2 then ( radius = delegate.radius = fmax (abs gridDist.x) (abs gridDist.y) updateArnold() ) ) ) rollout params "Sphere Parameters" ( Spinner radius "Radius:" range:[0, 1e9, 1] on radius changed val do ( delegate.radius = val updateArnold() ) ) ) |
このコードで重要なのは、Arnold 固有のパラメータ宣言です。
arnold_node type:#string default:"sphere" arnold_node_radius type:#float default:1.0 arnold_node_center type:#point3 default:[0.0,0.0,0.0]
これらのパラメータは Arnold に対して、ノード「sphere」を構築し、浮動小数点タイプの「radius」パラメータおよびポイント タイプの「center」パラメータに、これらの変数の値を割り当てるように指示します。
独自に宣言されたユーザ変数が必要な場合(ボリューム ノードなどで必要)、コードは次のようになります。
arnold_node type:#string default:"volume" arnold_node_min type:#point3 default:[-0.5,-0.5,0] arnold_node_max type:#point3 default:[0.5,0.5,1] arnold_node_dso type:#string default:"volume_openvdb" arnold_decl_filename type:#string default:"constant STRING" arnold_node_filename type:#filename default:"smoke.vdb" arnold_decl_bounds_slack type:#string default:"constant FLOAT" arnold_node_bounds_slack type:#float default:0.0
このコードを使用すると、ノードから呼び出されたボリュームが以前と同様にインスタンス化され、min、max、および dso パラメータが設定されます。ただし、残りのパラメータは(ボリュームのプラグインの性質上)ユーザによって定義されるため、文字列パラメータ「filename」、浮動小数点パラメータ「bounds_slack」などを定義する必要があります。
この例は、Arnold Gobo フィルタ モディファイヤ プラグイン(<3dsmax>\Plugins\maxscript\arnoldlight_gobofilter.ms 内)の必要最低限のバージョンです。この例では、UI コントロールを追加して、カラー ピッカーとテクスチャマップ検索を両方ともサポートする方法を示します。ここに示した Arnold ターゲット パラメータは gobo.slidemap です。
例 |
---|
plugin modifier Arnold_Light_Gobo name:~ARNOLD_LIGHT_FILTER_GOBO_NAME~ category:"Arnold" classID:#(0xf00df10d,0x4001a10d) extends:ArnoldLightFilterModifier replaceUI:true version:1 ( parameters main rollout:params ( arnold_node type:#string default:"gobo" arnold_node_slidemap type:#color ui:slidemapcolor default:[255,255,255] arnold_link_slidemap type:#texturemap ui:slidemap ) rollout params ~ARNOLD_LIGHT_FILTER_GOBO_ROLLOUT_NAME~ ( colorpicker slidemapcolor "Color" color:[255,255,255] modal:false mapButton slidemap "Map" ) ) |