使用 3ds Max Batch

本主题涵盖了如何使用 3ds Max 2018.4 Update 及更高版本中包含的 3ds Max Batch。要使用 3ds Max 2018.2 和 2018.3 Update 中包含的 3ds Max Batch,请参见使用 3ds Max Batch 旧版

要开始使用 3ds Max Batch,请执行以下操作:
  1. 打开命令提示窗口。
  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

-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/zh-CN/dotnet/standard/base-types/standard-date-and-time-format-strings

-timeFormat arg

控制台日志的时间格式字符串。例如,“hh:mm:ss”或“ss : mm”

有关日期和时间字符串格式的说明,请参见 https://docs.microsoft.com/zh-CN/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)

请参见“Plugin.ini”主题 (位于 3ds Max 开发人员手册中) 以获取详细信息

-listenerlog arg

用于从侦听器捕获输出的 3ds Max 侦听器日志文件。默认不创建侦听器日志。

请参见“启用侦听器日志”主题 (位于 MAXScript 手册中) 以获取详细信息。

-log arg

3ds Max 系统日志文件。脚本错误和异常记录到此文件中。默认为每个用户的系统日志文件 (max.log)。

-dm arg

对话框监视器状态。启用时,对话框监视器可以从插件监视对话框,还可以将其关闭。有效选项包括:“on|off”、“yes|no”、“1|0”和“true|false”。

默认为 off。

有关对话框监视器的详细信息,请参见 MAXScript 手册中的“界面:DialogMonitorOPS”主题。

-mxsString arg

MAXScript 字符串参数选项,其中 arg = <key>:<value>

可以通过 maxOps.mxsCmdLineArgs 字典并将 <key> 用作字典键,在 <script_file> 中以 MAXScript 字符串形式访问 <value>

该字符串必须是 MAXScript 字符串,这意味着它必须包含在引号中,字符串中的任何引号或其他特殊字符都必须进行转义。字符串可以带有前缀“@”以指示它是逐字字符串。请参见“字符串文字”主题 (位于 MAXScript 手册中) 以获取详细信息。

可以指定多次。

-mxsValue arg

MAXScript 值参数选项,其中 arg = <key>:<value>

可以通过 maxOps.mxsCmdLineArgs 字典并将 <key> 用作字典键,在 <script_file> 中以 MAXScript 值形式访问 <value>

必须将 <value> 参数包含在引号中。

可以指定多次。

-sceneFile arg

在执行 <script_file> 之前,要加载的输入 3ds Max 场景文件。

-python3Warning arg

指定是否启用 Python 3 警告模式,在该模式下,Python 脚本中与 Python 3 不兼容的项目将生成警告。arg 的有效值是 1/0、on/off、yes/no 和 true/false,其中第一个值启用该模式,第二个禁用该模式。该模式默认处于禁用状态。请参见“Python 3 警告模式”主题 (位于 3ds Max Python API 帮助中) 以详细了解该模式。

除非完全限定,否则作为参数传递的路径相对于当前目录。

将信息传递给 3ds Max Batch 脚本

通过两个命令行选项可以将信息传递到执行的 MAXScript 文件:-mxsString-mxsValue,它们分别传递字符串和值。可以通过 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 中运行此脚本。在运行脚本时会生成两个主要日志,用于提供有用信息:
  • MAXScript 侦听器日志将您的命令以及所有打印输出捕捉到文本文件中。默认情况下,3ds Max Batch 不创建侦听器日志,但您可以通过指定 -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 的自动化脚本可以处理此信息。

您的脚本可以使用 maxops.isInNonInteractiveMode() MAXScript 方法,确定它是在具有 UI 的 3ds Max 会话中运行,还是在 3ds Max Batch 中运行。请参见“界面:maxops”主题 (位于 MAXScript 手册中) 以获取详细信息。

退出代码

您的自动化工具可以从 3ds Max Batch 和 3ds Max 检查退出代码,以确定作业是否成功,以及未成功时导致问题的原因。成功时,3ds Max Batch 将退出,退出代码为 0。如果传递给它的参数或者与 3ds Max 的通信存在错误,则 3ds Max Batch 将报告以下退出代码:

3ds Max 记录错误时,3ds Max Batch 将报告一个不为零的退出代码。

此外,如果 3ds Max 未成功,则 3ds Max Batch 也将报告其退出代码(成功时为 0)。

MAXScript 还允许您使用用户定义的退出代码退出 3ds Max。要执行此操作,请使用 exitcode 参数调用 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
注: 必须将详细级别设置为“调试”(5) 以将退出代码输出到控制台上。例如:
C:\Program Files\Autodesk\3ds Max 2019>3dsmaxbatch.exe testscript.ms -v 5