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"
)
)