3ds Max Batch を使用する

このトピックでは、3ds Max 2018.4 Update 以降に含まれる 3ds Max Batch の使用方法について説明します。3ds Max 2018.2 Update および 2018.3 Update に含まれる 3ds Max Batch の使用方法については、「従来の 3ds Max Batch を使用する」を参照してください。

3ds Max Batch の使用を開始するには、次の手順を実行します。
  1. [コマンド プロンプト](Command Prompt)ウィンドウを開きます。
  2. ディレクトリを 3ds Max のインストール場所に変更します。既定は「C:¥Program Files¥Autodesk¥3ds Max <バージョン番号>」です。
  3. 次を入力します。

    3dsmaxbatch.exe <script_file> [options]

    この構文の <script_file> は、MAXScript または Python スクリプトの名前を示す必須のパラメータです。3ds Max Batch はこのスクリプト タイプを自動的に検出します。

  4. 3ds Max Batch により、指定した 3ds Max シーン ファイルが起動およびロードされます(シーン ファイルが指定されている場合。このパラメータはオプションです)。script_file を実行し、追加の入力が指定されていれば、それを実行します。その後、終了します。

3ds Max Batch のオプション

3dsmaxbatch.exe には、次の 1 つまたは複数のオプションを渡すことができます。

-help
すべてのオプションを表示。
-v arg

システム ログの詳細レベル。有効な引数は次のとおりです。

  • 0 - 重大なエラー
  • 1 - エラー
  • 2 - 警告
  • 3 - 処理情報メッセージ
  • 4 - すべての情報メッセージ
  • 5 - デバッグ レベルのメッセージ

既定は 2 です。

注: このパラメータは、3ds Max Batch で生成されたメッセージにのみ影響します。3ds Max 自体には影響しません。たとえば、5 に設定した場合、3ds Max で生成されたすべてのメッセージが表示されるわけではありません。詳細については、以下のセクションを参照してください。
-dateFormat arg

コンソール ログの日付形式文字列。たとえば、「yyyy-MM-dd」または「ddd, MM/dd/yyyy」

日付と時刻の文字列形式については、「https://docs.microsoft.com/ja-JP/dotnet/standard/base-types/standard-date-and-time-format-strings」を参照してください。

-timeFormat arg

コンソール ログの時間形式文字列。たとえば、「hh:mm:ss」または「ss : mm」

日付と時刻の文字列形式については、「https://docs.microsoft.com/ja-JP/dotnet/standard/base-types/standard-date-and-time-format-strings」を参照してください。

-i arg

3ds Max 設定ファイル(.ini)。既定値はユーザごとの既定の設定ファイル(3dsmax.ini)です。

-p arg

3ds Max プラグイン設定ファイル(.ini)。既定値はユーザごとの既定のプラグイン設定ファイル(Plugin.UserSettings.ini)です。

詳細については 『3ds Max 開発者用ガイド』 の「Plugin.ini」のトピックを参照してください。

-listenerlog arg

リスナーからの出力をキャプチャする 3ds Max リスナー ログ ファイル。既定ではリスナー ログは作成されません。

詳細については、 『MAXScript ガイド』 の「文字列リテラル」のトピックを参照してください。

-log arg

3ds Max システム ログ ファイル。スクリプト エラーと例外はこのファイルに記録されます。既定値はユーザごとのシステム ログ ファイル(Max.log)です。

-dm arg

ダイアログ モニタの状態。「on」にすると、ダイアログ モニタはプラグインからのダイアログを監視し、ダイアログを閉じます。有効な選択肢: 「on|off」、「yes|no」、「1|0」および「true|false」。

既定は オフ(off)です。

ダイアログ モニタの詳細については、『MAXScript ガイド』の「Interface: DialogMonitorOPS」のトピックを参照してください。

-mxsString arg

MAXScript 文字列パラメータ オプション(arg = <key>:<value>)。

<value> には、<key> を辞書のキーとして使用する maxOps.mxsCmdLineArgs 辞書を介して、<script_file> の MAXScript 文字列としてアクセスできます。

文字列は MAXScript の文字列にする必要があります。すなわち、文字列を引用符で囲み、文字列内の引用符やその他の特殊文字はエスケープする必要があります。文字列の先頭に「@」を付けて、verbatim 文字列であることを示すことができます。詳細については、 『MAXScript ガイド』 の「文字列リテラル」のトピックを参照してください。

複数回指定できます。

-mxsValue arg

MAXScript 値パラメータ オプション(arg = <key>:<value>)。

<value> には、<key> を辞書のキーとして使用する maxOps.mxsCmdLineArgs 辞書を介して、<script_file> の MAXScript 値としてアクセスできます。

<value> パラメータの値は引用符で囲む必要があります。

複数回指定できます。

-sceneFile arg

<script_file> が実行される前にロードされる入力された 3ds Max シーン ファイル。

引数として渡されたパスは、完全に修飾されている場合を除き、現在のディレクトリに対する相対パスとなります。

3ds Max Batch スクリプトに情報を渡す

2 つのコマンドライン オプション(-mxsString および -mxsValue)によって、実行された MAXScript ファイルに情報を渡すことができます。これらのオプションはそれぞれ文字列と値を渡します。この値には、maxOps.mxsCmdLineArgs 辞書の MAXScript 内でキー/値のデータ ペアとしてアクセスできます。

たとえば、次のコマンドライン呼び出しがあるとします。

<3dsmaxpath>3dsmaxbatch demo_mxscmdline.ms -mxsString string1:"Hello"  -mxsValue value1:"[3,12,22]" -mxsValue value2:"Point3 3 8 2.3" -listenerLog "test.log"

および demo_mxscmdline.ms スクリプト:

opts = maxOps.mxsCmdLineArgs

for k in opts.keys do (
	format "% == % class: %\n" k opts[k] (classOf opts[k])
)

リスナー ログ test.log には、次の出力が含まれます:

#string1 == Hello class: String
#value2 == [3,8,2.3] class: Point3
#value1 == [3,12,22] class: Point3

Python スクリプトは、pymxs.runtime オブジェクトを介してこれらの値にアクセスすることもできます。

Python 記述された同じスクリプトは、次のようになります。

# demo using pymxs
from pymxs import runtime as rt

opts = rt.maxops.mxsCmdLineArgs

for k in opts.keys:
    print "{} == {} class: {}\n".format(k, opts[k], rt.classof(opts[k]))

# you can also get dict values using runtime.name, for example:
# value1 = opts[rt.name('value1')]
# or using runtime.execute to run MAXScript code
# value1=rt.execute("GetDictValue maxops.mxsCmdLineArgs #value1")

3ds Max Batch ジョブに関する情報を取得する

バッチ処理スクリプトのエラーを見つけて修正するには、最初にスクリプトを 3ds Max で実行します。スクリプトが正常に動作すれば、3ds Max Batch で実行できます。 スクリプトの実行時に有用な情報を提供する 2 つのメイン ログがあります。
  • MAXScript リスナー ログは、コマンドとすべての出力された結果をテキスト ファイルに取り込みます。既定では、3dsmaxbatch はリスナー ログを作成しませんが、-listenerlog オプションを指定することでリスナー ログを指定できます。
  • 3ds Max セッション ログは、既定でセッションを %LOCALAPPDATA%3dsMax¥<バージョン番号>-64bit¥<言語>¥network¥Max.log に取り込みます。-log コマンド ライン オプションを使用してファイル パスを変更できます。 MAXScript および Python スクリプト エラーはこのファイルに記録されます。
注: 情報の取得およびデバッグの目的でスクリプト実行の出力を活用できるよう、リスナー ログを常にオンにしておくことを推奨します。

MAXScript を使用してログ ファイルにメッセージを追加することもできます。MAXScript で logsystem.logEntry <string> broadcast:true 関数を使用して、スクリプトの進行状況を記録します。broadcast:true パラメータは、3ds Max がこのログ メッセージを 3ds Max Batch にブロードキャストする必要があることを示します。

3ds Max シーン ファイルを引数として 3ds Max Batch にロードするか(-sceneFile)、loadMaxFile() を使用してスクリプト内でロードすることができます。選択する方法は、見つからないプラグインや外部参照へのリアクション方法によって決まります。 loadMaxFile() メソッドには、見つからないプラグイン、外部参照などを処理するための引数が用意されているため、スクリプトのリアクションを適切に行うことができます( 『MAXScript ガイド』). -sceneFile を使用してファイルをロードすると、見つからないプラグインや外部参照に関する情報がコンソールに出力されるため、3ds Max Batch の呼び出し元の自動化スクリプトでこの情報を処理できるようになります。

終了コード

自動化ツールで 3ds Max Batch および 3ds Max からの終了コードを調べて、ジョブが正常に実行されたかどうかを判別し、ジョブが正常に実行されなかった場合は、問題の原因を特定することができます。ジョブが正常に実行された場合、3ds Max Batch は終了コード 0 で終了します。3ds Max Batch は、渡されたパラメータや 3ds Max との通信にエラーがあった場合、次に示す終了コードを報告します。

3ds Max がエラーを記録した場合、3ds Max Batch はゼロ以外の終了コードを報告します。

また、3ds Max の終了コードが成功(0)でない場合は、終了コードも報告します。

MAXScript でユーザ定義の終了コードを使用して、3ds Max を終了することもできます。これを行うには、exicode 引数を使用して quitMax を呼び出します。 たとえば、次の MAXScript があるとします:

quitMAX quiet:true exitCode:-314159

この呼び出しを行うと、コンソールに終了コード -314159 が出力されます。

6/12/2018 15:46:05 PM; Specified option script: testscript.ms
6/12/2018 15:46:05 PM; Defaulted option dm: 0
6/12/2018 15:46:05 PM; Defaulted option li: 0
6/12/2018 15:46:05 PM; 3ds Max Install Location: C:\Program Files\Autodesk\3ds Max 2019\
6/12/2018 15:46:05 PM; 3ds Max Executable: 3dsmax.exe
6/12/2018 15:46:05 PM; Secure Mode: 'OFF'
6/12/2018 15:46:05 PM; Dialog Monitor: Off
6/12/2018 15:46:05 PM; Script command: " -mxs "(filein @\"C:\Program Files\Autodesk\3ds Max 2019\testscript.ms\")""
6/12/2018 15:46:06 PM; Product version: 3ds Max 2019.2 Update (21.2.0.2095)
6/12/2018 15:46:06 PM; Data collection and use is 'OFF'.
6/12/2018 15:46:30 PM; 3ds Max Exit Code = -314159
注: コンソールに出力する終了コードの詳細レベルは「debug」(5)に設定する必要があります。たとえば、次のように使用されます。
C:\Program Files\Autodesk\3ds Max 2019>3dsmaxbatch.exe testscript.ms -v 5