3ds Max 8 の MAXScript 言語に関する改良点

以下では、3ds Max 8 での MAXScript 言語に対する内部変更と「微調整」について説明しています。ここで紹介する変更では、「新機能」のトピック以外の新しいオブジェクト、クラス、メソッド、インタフェースは導入されていませんが、MAXScript の内部の動作が変更されています。これらの変更では通常、パフォーマンスの向上またはプログラミングの単純化が図られています。

MAXScript デバッガ

MAXScript デバッガ

MAXScript デバッガの使用

インタフェース: MXSDebugger

MAXScript デバッガでは、3ds Max のメイン スレッドを中断したり、3ds Max スレッドが動作していない間にグローバル変数とローカル変数の値の調査と変更を行ったり、コマンド ラインから MAXScript コマンドを実行したり、MAXScript コード内からメソッドを呼び出して実行を中断することができます。デバッガでは、中断したコードの実行の停止や継続を行うこともできます。

MAXScript のクラッシュからの回復

クラッシュ時の MaxScript ファイルの保存

シーン ファイルの保存を試みた後、クラッシュ ハンドラによって MAXScript は変更済みの開いたスクリプト ウィンドウの保存を試みることができるようになりました。

コントローラの改善点

これまでは、コントローラをトラックに割り当てると、新しいコントローラがトラックの値を使用していました。新しいコントローラ クラスを既存トラックに割り当てる場合、これは正常に動作しますが、すでに値がある既存コントローラをインスタンス化する場合は、予想外の結果となっていました。スクリプト コントローラをトラックに割り当てる場合、割り当て前のスクリプト文字列セットは、トラックの現在の値で常に上書きされていました。

3ds Max 8 ではこれが修正されました。コントローラが「新しくない」場合、フラグが内部的に設定され、インスタンス化されるコントローラの既存データが、フレーム 0 のトラックの値の代わりに使用されます。

スクリプト コントローラ

スクリプト コントローラにおいてはトラックの現行値でスクリプト文字列が置き換えられましたが、前の段落で説明したコントローラの変更により、これは修正されました。スクリプト コントローラか式コントローラの設定を変更した場合、コントローラは「新しくない」とマークされ、既存のスクリプトや式が、ターゲット トラックの値の代わりに使用されます。

式コントローラとスクリプト コントローラにおけるノードの簡潔なリファレンス

ノードを示す式コントローラの変数は、新しい nodeTransformMonitor クラスを使用してノードの参照を維持するようになりました。これにより、ノード変数を含む式コントローラを使用しているシーンの速度が上がります。

copyPasteKeys 関数

選択したキーのコピーと貼り付けを行う新しいメソッドが MAXScript に追加されました。

RCMenu において修正された .Checked プロパティと .Enabled プロパティ

RCMenu において修正された .Checked プロパティと .Enabled プロパティ

ダイアログに使用される RCMenu のメニュー項目のプロパティ .enabled および .checked が変更された場合に、メニュー項目が正しく更新されます。

ロールアウト値における読み取り専用の .owner プロパティ

ユーティリティおよびロールアウトのプロパティ、メソッド、およびイベント ハンドラ

読み取り専用の .owner プロパティがロールアウト値に追加されました。スクリプト プラグインか CA によってロールアウトが表示されている場合、このプロパティにはスクリプト プラグインか CA のインスタンスが含まれます。ロールアウト イベント ハンドラでデバッガのブレークが発生したとき、スクリプト プラグインか CA のインスタンスの変数に簡単にアクセスできるようにするため、このプロパティが追加されました。この場合、イベント ハンドラの所有者はロールアウトなので、getVar owner.owner を使用してスクリプト プラグインか CA のインスタンスにアクセスできます。

スクリプト プラグインの読み取り専用ローカル変数

スクリプト プラグインにおいて事前定義されている次のローカル変数は、読み取り専用になりました。

すべてのプラグイン タイプ: this、loading 。version は以前から読み取り専用でした。

SimpleMod: extent、min、max、center

SimpleManipulator: target、node

「::」を使用してグローバルとしてグローバル変数を指定

「::」を使用してグローバルとしてグローバル変数を指定

名前の前に「::」を付けることで、グローバル変数名を指定できるようになりました。このような名前はグローバル変数プールのみで検索され、現存しない場合に作成されます。

マージにおける新しい永続グローバル変数の動作

永続グローバル変数

ファイル内でマージか外部参照を行い (シーンやオブジェクトの外部参照は、マージの特別なケース)、永続グローバル変数を読み込むとき、シーン ファイルから読み込んだ変数が永続グローバル変数としてすでに存在する場合、永続グローバル変数の値は上書きされません

指定された I/O クラスを使用した読み込み/書き出し

ImportFile() および ExportFile()

新しく[ using:<maxclass> ]オプション キーワード引数 ImportFile() 関数と ExportFile() 関数に追加されました。

この引数は、呼び出される正確なインポータ/エクスポータの max クラスを渡すために使用できます。したがって、同一の拡張子が複数のファイルにサポートされていても競合が防止されます。

ファイルの保存 - 抑制モードと戻り値

3ds Max ファイルのロードと保存

新しく[ quiet:<bool> ]オプション キーワード引数 SaveMaxFile() 関数と SaveNodes() 関数に追加されました。このメソッドは、OK を返す代わりに、正常に終了した場合に true、エラーが発生した場合 (ターゲット ファイルが存在して書き込み保護されている場合など) に false を返します。

ビットマップ値

新しく[ quiet:<bool> ]オプション キーワード引数がビットマップ値の Save()メソッドに追加されました。このメソッドは、OK を返す代わりに、正常に終了した場合に true、エラーが発生した場合 (ターゲット ファイルが存在して書き込み保護されている場合など) に false を返します。

マテリアル エディタ

新しく[ quiet:<bool> ]オプション キーワード引数fileSaveMatLib() メソッドに追加されました。対応する SDK メソッドが正常終了かエラーの有効な結果を返さないので、OK が返されます。

新しい initialDir: getSavePath() へのキーワード引数

ファイルを開くおよび保存する標準のダイアログ ボックス

新しく[ initialDir:<pathname> ]オプション キーワード引数 getSavePath() メソッドに追加されました。これを指定すると、指定したパスでダイアログ ボックスが開きます。

gw.SnapPoint() 用のカスタム SnapPlane

Viewport gw.snapPoint メソッド

新しいオプション キーワード引数が既存の gw.snapPoint メソッドに追加されました。ユーザがこの引数を使用することにより、XY 平面をマップする snapPlane matrix3 値をカスタム スナッピング平面に与えることができます。

スクリプト化されたレンダリング効果の 32 ビット浮動小数点のサポート

matrix3 値をカスタム スナッピング平面に与えることができます。Effect8::SupportsBitmap() が実装され、すべてのケースで true を返します。

スクリプト化されたレンダリング効果は、適切な GetPixel() メソッドのみでビットマップにアクセスし、スクリプトでカラーを意図的にクリッピングするかカラーを整数に変換しない限り、クリッピングなしで高度なダイナミック範囲イメージが自動的にサポートされるので、すべてのタイプのビットマップと互換性があるとみなされます。

スクリプト マテリアルの mental ray のサポート

デレゲート マテリアルがサポートされている限り、スクリプト マテリアルは mental ray によってサポートされるようになりました。デレゲート マテリアルは、レンダリングに使用される実際のマテリアルとして mental ray によって正しく解釈されます。スクリプト マテリアルの[mental ray コネクション](mental ray Connection)ロールアウトの使用と初期化も正しく行われます。

Undo/Redo コールバックの NotificationParams

コールバック: システムを元に戻す場合の通知

#sceneUndo および #sceneRedo コールバックは、 callbacks.notificationparams() の元に戻す/やり直し名前エントリを返すようになりました。

スクFリプト例:

callbacks.removeScripts id:#test
callbacks.addScript #sceneRedo "format \"Redo: %\\n\" (callbacks.notificationParam())" id:#test
callbacks.addScript #sceneUndo "format \"Undo: %\\n\" (callbacks.notificationParam())" id:#test

調査インタフェース プロパティ

showProperties、getPropNames、および hasProperty メソッドに、FPS インタフェース プロパティが含まれるようになりました。

例:

CameraMap はパラメータ ブロックでプロパティを公開しませんが、次の 2 つのプロパティを FPS インタフェースで公開します。

c=CameraMap()
--> CameraMap:Camera Map Modifier
showinterfaces c
--> Interface: interface
--> Properties:
--> .cameraNode : node : Read|Write
--> .channel : integer : Read|Write
--> Methods:
--> Actions:
--> OK
getpropnames c -- on instance
--> #(#cameraNode, #channel) -- previously returned #()
showproperties c -- on instance
--> .cameraNode : node -- previously not shown
--> .channel : integer -- previously not shown
--> FALSE
hasproperty c #channel -- on instance
--> true-- previously returned false
getpropnames CameraMap -- on class
--> #()
showclass "cameraMap.*"
--> CameraMap : modifier {21ce6ea4,7ed434db}
--> OK

MAXScript エディタの改善点

[エディタ](Editor)メニューに新しく[編集](Edit) > [すべてクリア](Clear All)コマンドが追加されました。このオプションは、これまでリスナーのみで使用可能でした。実行すると、エディタの内容がクリアされます。

大きいスクリプトのカラーコーディング30% 以上速くなりました。カラーコーディング中は待機カーソルが表示されます。

抑制モード、DefaultAction、抑制コンテキスト

defaultAction コンテキスト

既定アクションを指定する新しいコンテキストが追加されました。

quiet コンテキスト

現在の抑制モードを指定する新しいコンテキストが追加されました。

抑制モード

render、loadMaxFile、fetchMaxFile、mergeMaxFile 、および getMAXFileObjectNames の既定値のアクション引数として、オプション #default が追加されました。 #default を指定すると、現在の defaultAction コンテキストの状態が使用されます。

render、loadMaxFile、fetchMaxFile、mergeMaxFile 、および getMAXFileObjectNames に既定値のアクション引数を指定しない場合、現在の defaultAction コンテキストの状態が既定値になります。

MAXScript render、loadMaxFile、fetchMaxFile、mergeMaxFile、getMAXFileObjectNames メソッドの「quiet」キーワード引数で既定値が修正されました。これまでの既定値は FALSE でした。現在の既定値は、現在の抑制モードです。

MXS mergeMAXFile メソッドに、missingExtFilesAction:、missingExtFilesList:、missingXRefsAction:、missingXRefsList: というキーワード引数が追加されました。

レンダラーのコントロール

新しいキーワード引数 unsupportedRenderEffectAction : および unsupportedRenderEffectList : が MAXScript render メソッドに追加されました。

ファイル リンクと抑制モード

ファイル リンクのダイアログ ボックスでは、抑制モードを尊重するようになりました。ファイル リンクのすべてのダイアログ ボックス(アタッチ、再ロード、デタッチ、またはバインドの間に現れるダイアログ ボックス)では、この設定を尊重するようになりました。

readValue メソッドの強化機能

StringStream に関連する メソッド

新しいキーワード パラメータ ignoreStringEscapes: readValue メソッドに追加されました。

filterString splitEmptyTokens パラメータ

FilterString

新しいキーワード パラメータ splitEmptyTokens: が filterString メソッドに追加されました。 splitEmptyTokens false の場合、または指定されない場合は、連続トークンが 1 つのトークンとして処理され、文字列の先頭か末尾のトークンが無視されます。 splitEmptyTokens true にすると、見つかったそれぞれのトークンが出力の文字列要素となり、上で無視された場合の文字列要素は空の文字列になります。

OLE の改善点

SafeArrayWrapper クラス

新しい SafeArrayWrapper クラスのインスタンスがユーザによって作成可能になり、SAFEARRAY 値を返す OLE メソッドによって返されます。

これまでのリリースでは、MAXScript 文字列と OLE 文字列の変換ルーチンでスタック メモリが使用されていました。特定のメソッドでは、文字列サイズの 2 倍の割り当てがスタックで試されていました。非常に長い文字列の場合は、スタック オーバーフローが発生していました。3ds Max 8 では、MAXScript でより適切な変換ルーチンが使用され、実際に必要なときに限りスタック メモリが使用されるためスタック メモリ要件が小さくなりました。

ガベージ コレクションのステータス表示

options.showGCStatus

新しいグローバル変数 options.showGCStatus が追加されました。 true に設定すると、MAXScript のガベージ コレクション中にステータス バーにメッセージ「MXS GC」が表示されます。 false に設定すると、メッセージは表示されません。設定は、3dsmax.ini ファイルの[MAXScript]セクションに保存されます。

UI の高速化

以前のリリースでは、MAXScript を使用して N 個のオブジェクトを削除すると MacroScript isEnabled ハンドラが N 回呼び出される問題がありました。この問題は解決されました。これは修正されました。オブジェクトの削除中はシーンの再描画が無効になり、シーンの再描画が再び有効になってから MacroScript ハンドラが 1 回だけ呼び出されます。

SelectByName showHidden: オプションの動作

名前によるシーン ノードの選択

これまでのリリースでは、記述されていた showHidden オプション キーワードが破壊されていました。現在は予想どおりに動作するようになりました。

スライダの controller: 作成パラメータ

Slider

これまでのリリースでは、スピナー コントロールのみを controller: 作成パラメータによってコントローラにリンクできました。現在ではスライダでも同じことを実行できます。

新しいスピナー変更ハンドラ引数

編集ボックス

新しいオプション引数が、 changed、entered および buttonUp 変更ハンドラに追加され、手動で元に戻す処理が改善されました。

ボタン コントロール イメージの削除

Button または Checkbutton のいずれかで .images プロパティの値を undefined に設定すると、コントロールがイメージではなくキャプションで表示されるように設定されます。

ボタンと ImgTag における新しいマウス ボタン イベント ハンドラ

新しい rightclick イベントが、buttoncheckButtonmapButtonmaterialButtonpickButton、および imgTag に追加されました。

ダイアログ ボックスで検出されるイベントと同様の複数の新しいイベント( lbuttondown、lbuttonup、lbuttondblclk、mbuttondown、mbuttonup、mbuttondblclk、rbuttondown、rbuttonup、rbuttondblclk など)が、imgTag に追加されました。

スクリプト カメラ、ライト、ダミー、ライトのカスタム表示メッシュの新しい useWireColor ハンドラ

スクリプト Camera

スクリプト Light プラグイン

スクリプト ヘルパー プラグイン

スクリプト カメラ、スクリプト ライト、スクリプト ヘルパーでこのイベント ハンドラを使用することができ、開発者は、ビューポートでオブジェクトを描画するときにノードのワイヤ カラーを使用するか、オブジェクト タイプ (ヘルパーにはダミー オブジェクト、ライトにはライト オブジェクト、カメラにはカメラ オブジェクト) の UI カラーを使用するかを指定できます。このハンドラが true を返す場合は、ノードのワイヤ カラーが使用されます。 false を返す場合は、オブジェクト タイプの UI カラーが使用されます。イベント ハンドラを指定しない場合は、ワイヤ カラーが使用されます。 getDisplayMesh ハンドラを指定した場合に限って、このハンドラを使用できます。

このハンドラはオプションです。

スクリプト Light プラグイン

以前はスクリプト カメラおよびヘルパーで使用できた getDisplayMesh イベント ハンドラが、スクリプト ライト プラグインでも使用可能になりました。

リスナーのオンとオフの切り替え

既定の[F11]キーを使用して、[MAXScript リスナー](MAXScript Listener)のオンとオフを切り替えることができるようになりました。これまではショートカットを使用して開いていましたが、閉じることはできませんでした。

関連事項