以下の例で、既存のテクスチャ マップ プラグインの拡張方法を示します。 表示される UI 要素の数を減らし、新しい外見を作るために論理的な方法でそれらの UI 要素のいくつかを一緒にリンクさせることができます。
適切な設定で通常の Cellular 手順マップを使用することによって同じ効果を簡単に得ることができますが、新しいインタフェースによってエンド ユーザの作業が飛躍的に単純になります。
関連トピック:
Scripted_Plugin_Event_Handlers
全体の流れ:
既存の Cellular マップを使用します。
既存の UI を単純化された UI に置き換えます。
パラメータ ブロックを作成して、新しい UI 値を保持します。
ハンドラを作成して、論理的に値をリンクさせます。
2 つのカラーと 3 つのスピナーを持つ、パラメータ ブロックにリンクされた新しいロールアウトを作成します。
MAXScript
plugin textureMap Dalmatian name:"Dalmatian" classID:#(0x7f14579d, 0x5caf6eb8) extends:Cellular replaceUI:true ( parameters main rollout:params ( DColor1 type:#color default:(color 255 255 255) ui:color1 DColor2 type:#color default:(color 0 0 0) ui:color2 Dsize type:#float default:30.0 ui:dot_size Dspread type:#float default:10.0 ui:dot_spread Dsmooth type:#float default:20.0 ui:dot_smooth on DColor1 set val do delegate.divColor1 = delegate.divColor2 = val on DColor2 set val do delegate.cellColor = val on DSize set val do delegate.size = val on DSpread set val do delegate.spread = val/100.0 on DSmooth set val do ( delegate.lowthresh = 1.0-(val/50.0) delegate.midthresh = 1.0-(val/100.0) delegate.highthresh = 1.0 ) )--end params rollout params "Dalmatian Map Parameters" ( colorpicker color1 "Base Color" align:#right fieldwidth:48 colorpicker color2 "Dots Color" align:#right fieldwidth:48 spinner dot_smooth "Smoothing" range:[0,100,20] \ align:#left fieldwidth:40 across:3 spinner dot_spread "Spread" range:[0,100,10] align:#center fieldwidth:40 spinner dot_size "Dot Size" range:[0,100,30] align:#right fieldwidth:40 )--end rollout )--end plugin
plugin textureMap Dalmatian
name:"Dalmatian"
スクリプト プラグインは、コンストラクタの plugin
で始まり、その後にスクリプト プラグインのスーパークラス(textureMap
)、プラグインの新しいクラス名(Dalmatian
)が続きます。さらに、マップ ブラウザ内で表示される name
を指定する必要があります。
classID:#(0x7f14579d, 0x5caf6eb8)
シーンをロードするときにプラグインを識別するために、classID
が 3ds Max によって使用されます。新しい固有の ID を生成するには、リスナー内で GenclassID
() メソッドを使用し、結果をスクリプト内にコピーすることができます。
このプラグインのすべてのバージョンが常に互換性を保つようにするには、この classID
をコピーすることをお勧めします。
extends:Cellular
既存のテクスチャ マップを拡張するので、元のプラグインのクラスを供給する必要があります。この例では Cellular です。
replaceUI:true
(
最後に、UI の置き換えを要求します。Cellular マップの元の UI は表示されません。代わりに、新しいテクスチャをコントロールするのに必要なコントロールのみを含んだ独自の UI ロールアウトを作成できます。
parameters main rollout:params
(
このスクリプト プラグインは、パラメータ ブロックにそのパラメータを格納します。ParamBlock2 形式は 3ds Max 3 で導入されており、プロパティとトラックの簡単な管理、UI での自動アニメーション ブラケットなどができるようになっています。この例では、いくつかのユーザ パラメータ(ドットとバックグラウンドのカラー、ドット サイズなど)を格納できます。
ブロック内のすべてのパラメータには、UI のプラグイン ロールアウトに対応するものがあります。ロールアウト名を提供することで、ParamBlock が内部的な値と UI 要素との間に自動接続を確立できるようにします。
DColor1 type:#color default:(color 255 255 255) ui:color1
このパラメータで、基本(バックグラウンド)カラーをコントロールします。これは #color タイプであり、既定値は白です。このパラメータは、UI スピナーの color1 にリンクされます。後で、ホストの Cellular マップの 2 つの境界線カラーをこの値でコントロールします。
DColor2 type:#color default:(color 0 0 0) ui:color2
このパラメータでドット カラーをコントロールします。これは #color タイプであり、既定値は黒です。このパラメータは、UI スピナーの color2 にリンクされます。後で、ホストの Cellular マップのセル カラーをこの値でコントロールできます。
Dsize type:#float default:30.0 ui:dot_size
このパラメータで、ドットのサイズをコントロールします。タイプは #float (浮動小数点値) であり、既定値は 30.0 です。このパラメータは、UI スピナーの dot_size にリンクされ、ホストの Cellular マップの Size プロパティをコントロールします。
Dspread type:#float default:10.0 ui:dot_spread
このパラメータで、ドットの広がりをコントロールします。タイプは #float (浮動小数点値) であり、既定値は 10.0 です。このパラメータは、UI スピナーの dot_spread にリンクされます。後で、このパラメータを使用してホストの Cellular マップ独自の Spread プロパティをコントロールできます。
Dsmooth type:#float default:20.0 ui:dot_smooth
このパラメータで、ドットの滑らかさをコントロールします。タイプは #float (浮動小数点値) であり、既定値は 20.0 です。このパラメータは、UI スピナーの dot_smooth にリンクされます。後で、ホストの Cellular マップの低、中、高のしきい値をこの値でコントロールできます。
on DColor1 set val do delegate.divColor1 = delegate.divColor2 = val
これは、パラメータ DColor1 の値が変更されるたびに実行される変更ハンドラです(通常は、これにリンクされている UI 要素の値をユーザが変更するためです)。変数の val には、新しい値が含まれます。その値が変更されたら、その値を Cellular マップの divcolor1 および divcolor2 パラメータに代入できます。デレゲートがホスト マップの代わりをします。Cellular マップの利用可能なすべてのパラメータは、次のようにして表示することができます。
showProperties (cellular()) .cellColor (Cell_Color) : RGB color .divColor1 (Division_Color1) : RGB color .divColor2 (Division_Color2) : RGB color .cellMap : texmap .divMap1 (DivisionMap1) : texmap .divMap2 (DivisionMap2) : texmap .map1Enabled (Map1_On) : boolean .map2Enabled (Map2_On) : boolean .map3Enabled (Map3_On) : boolean .variation : float .size : float .spread : float .lowThresh (Low) : float .midThresh (Mid) : float .highThresh (High) : float .type : integer .fractal : boolean .iteration (Iterations) : float .roughness : float .smooth (Bump_smoothing) : float .adaptive : boolean .coords : max object .output : max object
on DColor2 set val do delegate.cellColor = val
これは、パラメータ Dcolor2
x の値が変更されるたびに実行される変更ハンドラです。変数の val
には、新しい値が含まれます。 その値が変更されたら、その値を Cellular マップの .cellColor
パラメータに代入できます。
on DSize set val do delegate.size = val
これは、パラメータ Dsize
x の値が変更されるたびに実行される変更ハンドラです。変数の val
には、新しい値が含まれます。 その値が変更されたら、その値を Cellular マップの .Size
パラメータに代入できます。
on DSpread set val do delegate.spread = val/100.0
これは、パラメータ DSpread
x の値が変更されるたびに実行される変更ハンドラです。変数の val
には、新しい値が含まれます。 値が変更されたら、その値を 100.0 で除算して Cellular マップの .Spread
パラメータに割り当てることができます。このようにすると、UI 内では 100.0 パーセントの Spread 値を持つことができ、一方で、ホストの Cellular マップ内では 0.0 から 1.0 の範囲で値を使用することができます。したがって、エンド ユーザにとっては値の扱いが簡単になります。
on DSmooth set val do
(
delegate.lowthresh = 1.0-(val/50.0)
delegate.midthresh = 1.0-(val/100.0)
delegate.highthresh = 1.0
)
最後に、パラメータ Dsmooth
の変更ハンドラを定義できます。変数の val
には、新しい値が含まれます。 その値が変化したら、その値を異なる比率で低および中しきい値に、1.0 を高しきい値に代入できます。
)--end params
rollout params "Dalmatian Map Parameters"
(
これは、元の Cellular マップの UI に置き換わる新しい UI ロールアウトです。
colorpicker color1 "Base Color" align:#right fieldwidth:48
colorpicker color2 "Dots Color" align:#right fieldwidth:48
これらの 2 つのカラー ピッカーは、ParameterBlock2 内の対応するカラー パラメータにリンクされます。ここで既定のカラーを代入する必要はありません。ParameterBlock2 内に格納されている既定値は、パラメータと UI 要素間の内部的な双方向の接続によって自動的に表示されます。
spinner dot_smooth "Smoothing" range:[0,100,20] \
align:#left fieldwidth:40 across:3
spinner dot_spread "Spread" range:[0,100,10] align:#center fieldwidth:40
spinner dot_size "Dot Size" range:[0,100,30] align:#right fieldwidth:40
これらの 3 つのスピナーも、ParameterBlock2 内の対応する浮動小数点パラメータにリンクされます。ここで既定値を代入する必要はありませんが、この UI に許容される値の範囲を指定する必要があります。ただし、3ds Max 内のほとんどの内部的な値と同様に、ParameterBlock2 パラメータの値の範囲には制限がありません。
across:3 キーワードを使用して、3 つのスピナーが単一の水平な行に置かれるように UI に指示できます。
)--end rollout
)--end plugin
スクリプトを評価します。新しい Dalmatian マップがマテリアル/マップ ブラウザ内に表示されます。このマップは、通常のテクスチャ マップが使用される場所ならどこででも使用できます。既定の外見は、典型的なダルメシアン犬の皮膚に似ています。
戻る