TR PropertySpreadSheet テスト版リリース

投稿者: | 2018/10/29

TR PropertySpreadSheetは、選択オブジェクトが持つ全てのプロパティ(パラメータ)を、セル形式で直接編集できるスクリプトです。
使い方によっては、非常に強力なツールになります。

現在選択しているノードのベースオブジェクトノード固有プロパティの他、関連するモディファイヤコントローラーマテリアルテクスチャを自動的に検索し、それら全ての値を編集可能にします。

スクリーンショット

仕様

オブジェクトの分類

オブジェクトを選択してウィンドウを開くか、左上の「Update」ボタンを押す事でスプレッドシートが更新されます。
オブジェクトは種類毎にグループ化されます。

大分類として、

  • ベースオブジェクト
  • コントローラー
  • モディファイヤ
  • マテリアル
  • テクスチャ
  • ノード

の6種類に分類され、更にオブジェクトの具体的な種類ごとにグループ化されます。

グループ化されたオブジェクトのプロパティは、一度に設定する事ができます。
例えば、ポイントヘルパーを複数選択しておき、それらのサイズを一括で変更するような使い方ができます。

値の更新

ブール値(ON/OFFの2値のみを指定出来るデータ)はチェックボックスで表示されますが、その他のデータは全て文字列としてセルに表示されます。
これらの値を変更すると、文字列は一旦MaxScriptのコードとして解釈され、その結果をプロパティに設定します。

この時、コードの解釈に失敗したり、値の変更を受け付けなかった場合はセルの値は元に戻ります。

MaxScriptと聞くと難しそうな印象がありますが、一般的な数値型(例えば少数や整数など)は、普通に数値を入力すればそのまま数値が設定されるので、高度な使い方をしなければ特に意識しなくても大丈夫です。

Tips

簡単な数値ではない、特殊なデータの設定方法に関するTipsです。
主にMaxScriptの表記法に関する解説になります。

座標やスケールの設定

座標やスケールは、3つの値を束ねた「ベクトル」と呼ばれるデータを持っています。
ベクトルの表記は [ ]で3つの数値を囲み、それぞれの数値を , (カンマ)で区切って指定します。

例: [20, 0, 100]

上の例では、Xが20、Yが0、Zが100となります。

ただし、「位置/回転/スケール」コントローラのように、子にPosition_XYZコントローラを持っている場合はそちらで設定しても同じ事になります。

回転の設定

回転値はAulerAnglesというデータ型に変換して表示されます。
本来はQuatというデータ型なのですが、非常に分かりづらいのでAulerAngles型に変換しています。
指定は以下のようになります。

(AulerAngles 0 30 0)

上の場合はX、Z回転が0度、Y回転が30度に指定されます。

各値はベクトルと違いスペースで区切ります。半角カッコはあっても無くてもいいです。
回転に関しても、子Euler_XYZコントローラがある場合はそちらで設定しても同じです。

ノードの設定

Sphere001のようなオブジェクトを指定したい場合、以下のように $ (ドル) マークを付けて指定します。

$Sphere001
$Teapot012

ただし、名前にスペースが含まれる場合は、’ (シングルクォート) で囲む必要があります。

$’UpperArm L’
$’obj leg L 001′

ランダムな値

MaxScriptのrandom関数を使って、ランダムな値を設定する事が出来ます。
例えば、数値の場合は以下のようにします。

random 0 20
上の例では0~20のランダムな整数が設定されます。

少数で指定したい場合は、値を少数で指定する必要があります。
randome 0.0 20.0
上の例では、0~20の間の少数が設定されます。

ベクトルをランダム化する事も出来ます。
random [0, 0, 0] [20, 20, 20] ベクトルの各値は常に少数として設定されます。

配列の値

プロパティによっては、1つのプロパティに複数のデータを列挙して設定出来る場合があります。
その場合、以下のようにデータを #( ) で囲み、各データは , (カンマ) で区切って指定します。

#(1, 2, 2, 0, 4, 5)
#($obj001, $obj002, $obj003)

それぞれの値は、単一のデータを指定する時と同じ記法を使う事ができます。

値の削除

プロパティの値を削除したい場合、undefinedという特殊なデータを指定する事で、そのプロパティの値を削除する事が出来ます。
ただし、undefinedを指定出来ないデータ型もあります。

例えば何かしらのプロパティに$Sphere001オブジェクトが設定されていたとします。この時、そのプロパティに「undefined」を指定する事によって、$Sphere001の設定を削除する事が出来ます。
逆に、数値型などはundefined指定ができません。

値のコピー

現状では値のコピー機能は付いていません。
どうしてもコピーしたい場合、セル上で元のオブジェクトのプロパティ名を直接指定する事で、そのプロパティの値をインスタンスコピーする事が出来ます。
例えばヘルパー($point001)のサイズを別のヘルパー($point002)からコピーしたい場合、$point001のsizeプロパティに以下のように指定します。

$point002.size

これで$point002のsizeプロパティの値が$point001のsizeに設定されます。

ダウンロード

インストール

ダウンロードしたZIPファイルを解凍し、中に入っているMZPファイルをMaxのビューポートにドラッグ&ドロップしてください。
自動的にインストールが行われ、以下のマクロが追加されます。

Category: TrTools
Macro: TR_PropertySpreadSheet

ツールバーに登録する等して実行してください。

ログ

Version Date
0.10 Test 2018/10/29 ファーストリリース。
0.15 Test 2018/11/05 [Fix] 2018以降でMentalRayタブが表示されないよう修正。
[Fix] プロパティに異なるデータ型を設定した時にエラーが出る問題を修正。
[Fix] 一部データ型の一括設定に失敗する問題を修正。
[Change] Nodeカテゴリにノード一般プロパティ関係を追加。その他タブを整理。

TR PropertySpreadSheet テスト版リリース」への2件のフィードバック

  1. imaoki

    テスト版とのことですがリストの作成も高速で十分に実用的だと思いました。
    複数の値を一括変更できる機能が違和感なくまとまっていていいですね。

    Max2018で試したところ以下のようなエラーが出たのでご報告させていただきます。

    [エラー1]
    — Error occurred in anonymous codeblock; filename: \TR_PropertySpreadSheet.mse; position: 7409; line: 278
    — MAXScript dotNet event handler Exception:
    — Unknown property: “mr_displacementUseGlobalSettings” in $Sphere001
    [操作内容]
    Sphereを選択してUpdateを押し、Nodeタブ > MentalRayタブを順に選択。
    [備考]
    2018からmental rayが搭載されなくなりましたのでそのせいかと思います。

    [エラー2]
    — Error occurred in anonymous codeblock; filename: \TR_PropertySpreadSheet.mse; position: 8373; line: 318
    — MAXScript dotNet event handler Exception:
    — Unable to convert: 0 to type: Point3
    [操作]
    Controllerタブ > prsタブで横方向に複数のセルを選択して値を変更。
    [備考]
    異なる型の値を入力したためです。ベクトルを入力するとQuaternionで引っかかります。

    それでは今後のブラッシュアップに期待しております。

    返信
    1. 管理人 投稿作成者

      コメント有難うございます。
      早速使ってもらえたばかりかバグ報告まで・・・とても助かります。
      バグの方は早めに修正版を出したいと思います。

      返信

コメントを残す

メールアドレスが公開されることはありません。