-
Notifications
You must be signed in to change notification settings - Fork 63
feat: add Pencil+ 4 host configuration scripts for 3ds Max 2025 and 2027 #278
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,110 @@ | ||
| <# | ||
| This is an example host configuration script that downloads and installs | ||
| 3ds Max 2025 and Pencil+ 4 for 3ds Max 2025. | ||
|
|
||
| You can configure a Windows Service-Managed Fleet to use this host configuration | ||
| to render your 3ds Max 2025 + Pencil+ jobs via 3dsmaxcmd.exe. | ||
|
|
||
| Pencil+ (NTR) renders watermark-free without consuming a license when 3ds Max | ||
| runs as a render server, which 3dsmaxcmd.exe is. No license server configuration | ||
| is therefore required for the command-line render path. | ||
|
|
||
| Pencil+ installer notes: | ||
| - The Pencil+ 4 for 3ds Max installer is built with Inno Setup. Its silent-install | ||
| switches are /VERYSILENT (no wizard UI), /SUPPRESSMSGBOXES (no blocking dialogs), | ||
| /NORESTART (don't reboot the worker), and /SP- (skip the initial prompt). | ||
| - Do NOT use /S — that is the NSIS silent switch and is ignored by Inno Setup. | ||
| Using it makes the installer show its GUI wizard, which hangs a headless worker | ||
| until the host configuration script times out. | ||
|
|
||
| This script was tested with the 3ds Max 2025.3 installer. | ||
|
|
||
| Requirements: | ||
| - S3 bucket to host the 3ds Max 2025 and Pencil+ installers | ||
| - Your fleet role must have permissions to s3:GetObject all the installer files | ||
| from your S3 bucket. | ||
| #> | ||
|
|
||
| # TODO: Replace the below values with your S3 URIs | ||
| # Guide on how to create the 3ds Max installer zip file: | ||
| # https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/host_configuration_scripts/3dsmax/README.md | ||
| $3DS_MAX_INSTALLER_ZIP_S3_URI="s3://your-bucket-name/path/to/3ds-Max-2025.zip" | ||
| # TODO: Replace with the Pencil+ 4 installer S3 URI | ||
| # Download the NTR edition from PSOFT: https://www.psoft.co.jp/en/download/ | ||
| $PENCILPLUS_INSTALLER_S3_URI="s3://your-bucket-name/path/to/setup_Pencil+_4.2.7_for_3dsMax_ntr.exe" | ||
|
|
||
| # Derive the installer filename from the URI so changes stay in sync. | ||
| $PENCIL_INSTALLER_FILE = Split-Path $PENCILPLUS_INSTALLER_S3_URI -Leaf | ||
|
|
||
| # The Pencil+ installer is built with Inno Setup, whose silent switches are | ||
| # /VERYSILENT (no wizard UI) and /SUPPRESSMSGBOXES (no blocking dialogs). | ||
| # NOTE: '/S' is the NSIS switch and is IGNORED by Inno Setup — using it makes the | ||
| # installer show its GUI wizard and hang a headless worker until the HC times out. | ||
| $PENCIL_SILENT_ARGS = @("/VERYSILENT", "/SUPPRESSMSGBOXES", "/NORESTART", "/SP-") | ||
|
|
||
| Write-Host ' --- Installing 3ds Max 2025 --- ' | ||
| mkdir C:\3dsmax_setup -Force | ||
| aws s3 cp --no-progress "$3DS_MAX_INSTALLER_ZIP_S3_URI" C:\3dsmax_setup\3dsmax.zip | ||
| if ($LASTEXITCODE -ne 0) { throw "Failed to download 3ds Max installer from S3. Check the URI and fleet IAM role." } | ||
|
|
||
| Expand-Archive C:\3dsmax_setup\3dsmax.zip C:\3dsmax_setup\ | ||
|
|
||
| if (-not (Test-Path "C:\3dsmax_setup\Setup.exe")) { | ||
| throw "Setup.exe not found at C:\3dsmax_setup\Setup.exe after extracting the zip. Ensure the zip contains files at the root (not nested in a subfolder)." | ||
| } | ||
| Start-Process "C:\3dsmax_setup\Setup.exe" -ArgumentList '-q' -Wait -PassThru | ||
|
|
||
| Write-Host ' --- Downloading Pencil+ installer --- ' | ||
| aws s3 cp --no-progress "$PENCILPLUS_INSTALLER_S3_URI" C:\3dsmax_setup\ | ||
| if ($LASTEXITCODE -ne 0) { throw "Failed to download Pencil+ installer from S3. Check the URI and fleet IAM role." } | ||
|
|
||
| Write-Host ' --- Installing Pencil+ 4 for 3ds Max 2025 --- ' | ||
| # Inno Setup exit codes: 0 = installed successfully. 5 = "Setup was cancelled", | ||
| # which in /VERYSILENT mode also occurs when the same Pencil+ version is already | ||
| # installed (silent maintenance mode can't prompt, so it aborts) — treat that as | ||
| # already-provisioned, not a failure. The exit code is intentionally not checked | ||
| # here so re-runs / warm workers don't fail host configuration. | ||
| Start-Process "C:\3dsmax_setup\$PENCIL_INSTALLER_FILE" -ArgumentList $PENCIL_SILENT_ARGS -Wait -PassThru | ||
|
|
||
| Write-Host ' --- Configuring environment for 3ds Max 2025 --- ' | ||
| [Environment]::SetEnvironmentVariable('Path', | ||
| 'C:\Program Files\Autodesk\3ds Max 2025;' + | ||
| [Environment]::GetEnvironmentVariable('Path', 'Machine'), | ||
| 'Machine') | ||
|
|
||
| # The command-line render path invokes 3dsmaxcmd.exe (the render server), which | ||
| # is what lets Pencil+ render without a watermark. | ||
| [Environment]::SetEnvironmentVariable('MAXCMD_EXECUTABLE', | ||
| 'C:\Program Files\Autodesk\3ds Max 2025\3dsmaxcmd.exe', | ||
| 'Machine') | ||
| [Environment]::SetEnvironmentVariable('3DSMAX_EXECUTABLE', | ||
| 'C:\Program Files\Autodesk\3ds Max 2025\3dsmaxbatch.exe', | ||
| 'Machine') | ||
| [Environment]::SetEnvironmentVariable('PYTHONPATH', | ||
| 'C:\Program Files\Autodesk\3ds Max 2025\Python;C:\Program Files\Autodesk\3ds Max 2025\Python\Scripts', | ||
| 'Machine') | ||
| [Environment]::SetEnvironmentVariable('Path', | ||
| 'C:\Program Files\Autodesk\3ds Max 2025\Python;C:\Program Files\Autodesk\3ds Max 2025\Python\Scripts;' + | ||
| [Environment]::GetEnvironmentVariable('Path', 'Machine'), | ||
| 'Machine') | ||
|
|
||
| Write-Host ' --- Verifying Pencil+ installation --- ' | ||
| $pluginsDir = "C:\Program Files\Autodesk\3ds Max 2025\plugins" | ||
| $found = Get-ChildItem $pluginsDir -Filter "*Pencil*" -ErrorAction SilentlyContinue | ||
| if ($found) { | ||
| Write-Host "Pencil+ plugin files detected:" | ||
| $found | ForEach-Object { Write-Host " $($_.Name)" } | ||
| } else { | ||
| # Hard-fail host configuration if Pencil+ did not install. Without this the | ||
| # worker would come online missing the plugin, and every render of a scene | ||
| # with a Pencil+ render element would crash with an opaque "unexpected | ||
| # exception has occurred in the network renderer" error. Failing here makes | ||
| # the missing plugin obvious at provision time instead. | ||
| throw "Pencil+ plugin not found in $pluginsDir after install. Check the installer file name and silent-install flags." | ||
| } | ||
|
|
||
| Write-Host ' --- Installing Deadline Cloud for 3ds Max --- ' | ||
| & "C:\Program Files\Autodesk\3ds Max 2025\Python\python.exe" -m ensurepip | ||
| & "C:\Program Files\Autodesk\3ds Max 2025\Python\python.exe" -m pip install deadline-cloud-for-3ds-max | ||
|
|
||
| Exit 0 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,115 @@ | ||
| <# | ||
| This is an example host configuration script that downloads and installs | ||
| 3ds Max 2027 and Pencil+ 4 for 3ds Max 2027. | ||
|
|
||
| You can configure a Windows Service-Managed Fleet to use this host configuration | ||
| to render your 3ds Max 2027 + Pencil+ jobs via 3dsmaxcmd.exe. | ||
|
|
||
| Pencil+ (NTR) renders watermark-free without consuming a license when 3ds Max | ||
| runs as a render server, which 3dsmaxcmd.exe is. No license server configuration | ||
| is therefore required for the command-line render path. | ||
|
|
||
| KNOWN ISSUE: 3ds Max 2027 can abort at startup with "ADP Failed to start" | ||
| (exit code -12) when the launching user is opted out of the Autodesk Analytics | ||
| Program. See the ADP workaround in the shared README before provisioning: | ||
| https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/host_configuration_scripts/3dsmax/README.md#known-issue-autodesk-adp-failed-to-start-3ds-max-2027 | ||
|
|
||
| Pencil+ installer notes: | ||
| - The Pencil+ 4 for 3ds Max installer is built with Inno Setup. Its silent-install | ||
| switches are /VERYSILENT (no wizard UI), /SUPPRESSMSGBOXES (no blocking dialogs), | ||
| /NORESTART (don't reboot the worker), and /SP- (skip the initial prompt). | ||
| - Do NOT use /S — that is the NSIS silent switch and is ignored by Inno Setup. | ||
| Using it makes the installer show its GUI wizard, which hangs a headless worker | ||
| until the host configuration script times out. | ||
|
|
||
| This script was tested with the 3ds Max 2027 installer. | ||
|
|
||
| Requirements: | ||
| - S3 bucket to host the 3ds Max 2027 and Pencil+ installers | ||
| - Your fleet role must have permissions to s3:GetObject all the installer files | ||
| from your S3 bucket. | ||
| #> | ||
|
|
||
| # TODO: Replace the below values with your S3 URIs | ||
| # Guide on how to create the 3ds Max installer zip file: | ||
| # https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/host_configuration_scripts/3dsmax/README.md | ||
| $3DS_MAX_INSTALLER_ZIP_S3_URI="s3://your-bucket-name/path/to/3ds-Max-2027.zip" | ||
| # TODO: Replace with the Pencil+ 4 installer S3 URI | ||
| # Download the NTR edition from PSOFT: https://www.psoft.co.jp/en/download/ | ||
| $PENCILPLUS_INSTALLER_S3_URI="s3://your-bucket-name/path/to/setup_Pencil+_4.2.7_for_3dsMax_ntr.exe" | ||
|
|
||
| # Derive the installer filename from the URI so changes stay in sync. | ||
| $PENCIL_INSTALLER_FILE = Split-Path $PENCILPLUS_INSTALLER_S3_URI -Leaf | ||
|
|
||
| # The Pencil+ installer is built with Inno Setup, whose silent switches are | ||
| # /VERYSILENT (no wizard UI) and /SUPPRESSMSGBOXES (no blocking dialogs). | ||
| # NOTE: '/S' is the NSIS switch and is IGNORED by Inno Setup — using it makes the | ||
| # installer show its GUI wizard and hang a headless worker until the HC times out. | ||
| $PENCIL_SILENT_ARGS = @("/VERYSILENT", "/SUPPRESSMSGBOXES", "/NORESTART", "/SP-") | ||
|
|
||
| Write-Host ' --- Installing 3ds Max 2027 --- ' | ||
| mkdir C:\3dsmax_setup -Force | ||
| aws s3 cp --no-progress "$3DS_MAX_INSTALLER_ZIP_S3_URI" C:\3dsmax_setup\3dsmax.zip | ||
| if ($LASTEXITCODE -ne 0) { throw "Failed to download 3ds Max installer from S3. Check the URI and fleet IAM role." } | ||
|
|
||
| Expand-Archive C:\3dsmax_setup\3dsmax.zip C:\3dsmax_setup\ | ||
|
|
||
| if (-not (Test-Path "C:\3dsmax_setup\Setup.exe")) { | ||
| throw "Setup.exe not found at C:\3dsmax_setup\Setup.exe after extracting the zip. Ensure the zip contains files at the root (not nested in a subfolder)." | ||
| } | ||
| Start-Process "C:\3dsmax_setup\Setup.exe" -ArgumentList '-q' -Wait -PassThru | ||
|
|
||
| Write-Host ' --- Downloading Pencil+ installer --- ' | ||
| aws s3 cp --no-progress "$PENCILPLUS_INSTALLER_S3_URI" C:\3dsmax_setup\ | ||
| if ($LASTEXITCODE -ne 0) { throw "Failed to download Pencil+ installer from S3. Check the URI and fleet IAM role." } | ||
|
|
||
| Write-Host ' --- Installing Pencil+ 4 for 3ds Max 2027 --- ' | ||
| # Inno Setup exit codes: 0 = installed successfully. 5 = "Setup was cancelled", | ||
| # which in /VERYSILENT mode also occurs when the same Pencil+ version is already | ||
| # installed (silent maintenance mode can't prompt, so it aborts) — treat that as | ||
| # already-provisioned, not a failure. The exit code is intentionally not checked | ||
| # here so re-runs / warm workers don't fail host configuration. | ||
| Start-Process "C:\3dsmax_setup\$PENCIL_INSTALLER_FILE" -ArgumentList $PENCIL_SILENT_ARGS -Wait -PassThru | ||
|
|
||
| Write-Host ' --- Configuring environment for 3ds Max 2027 --- ' | ||
| [Environment]::SetEnvironmentVariable('Path', | ||
| 'C:\Program Files\Autodesk\3ds Max 2027;' + | ||
| [Environment]::GetEnvironmentVariable('Path', 'Machine'), | ||
| 'Machine') | ||
|
|
||
| # The command-line render path invokes 3dsmaxcmd.exe (the render server), which | ||
| # is what lets Pencil+ render without a watermark. | ||
| [Environment]::SetEnvironmentVariable('MAXCMD_EXECUTABLE', | ||
| 'C:\Program Files\Autodesk\3ds Max 2027\3dsmaxcmd.exe', | ||
| 'Machine') | ||
| [Environment]::SetEnvironmentVariable('3DSMAX_EXECUTABLE', | ||
| 'C:\Program Files\Autodesk\3ds Max 2027\3dsmaxbatch.exe', | ||
| 'Machine') | ||
| [Environment]::SetEnvironmentVariable('PYTHONPATH', | ||
| 'C:\Program Files\Autodesk\3ds Max 2027\Python;C:\Program Files\Autodesk\3ds Max 2027\Python\Scripts', | ||
| 'Machine') | ||
| [Environment]::SetEnvironmentVariable('Path', | ||
| 'C:\Program Files\Autodesk\3ds Max 2027\Python;C:\Program Files\Autodesk\3ds Max 2027\Python\Scripts;' + | ||
| [Environment]::GetEnvironmentVariable('Path', 'Machine'), | ||
| 'Machine') | ||
|
|
||
| Write-Host ' --- Verifying Pencil+ installation --- ' | ||
| $pluginsDir = "C:\Program Files\Autodesk\3ds Max 2027\plugins" | ||
| $found = Get-ChildItem $pluginsDir -Filter "*Pencil*" -ErrorAction SilentlyContinue | ||
| if ($found) { | ||
| Write-Host "Pencil+ plugin files detected:" | ||
| $found | ForEach-Object { Write-Host " $($_.Name)" } | ||
| } else { | ||
| # Hard-fail host configuration if Pencil+ did not install. Without this the | ||
| # worker would come online missing the plugin, and every render of a scene | ||
| # with a Pencil+ render element would crash with an opaque "unexpected | ||
| # exception has occurred in the network renderer" error. Failing here makes | ||
| # the missing plugin obvious at provision time instead. | ||
| throw "Pencil+ plugin not found in $pluginsDir after install. Check the installer file name and silent-install flags." | ||
| } | ||
|
|
||
| Write-Host ' --- Installing Deadline Cloud for 3ds Max --- ' | ||
| & "C:\Program Files\Autodesk\3ds Max 2027\Python\python.exe" -m ensurepip | ||
| & "C:\Program Files\Autodesk\3ds Max 2027\Python\python.exe" -m pip install deadline-cloud-for-3ds-max | ||
|
|
||
| Exit 0 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,4 @@ | ||
| # 3ds Max host configuration scripts for AWS Deadline Cloud | ||
| # 3ds Max host configuration scripts for AWS Deadline Cloud | ||
|
|
||
| These Windows host configuration scripts install 3ds Max and selected renderers or plugins on AWS Deadline Cloud service-managed fleet workers. 3ds Max requires administrative installation, so host configuration is the recommended delivery boundary. | ||
|
|
||
|
|
@@ -22,6 +22,7 @@ Scripts are grouped by 3ds Max version. Each installs the listed software. Some | |
| | [3dsmax-2025-and-vray.ps1](3dsmax-2025-and-vray.ps1) | 3ds Max 2025 + V-Ray | V-Ray (Chaos) | | ||
| | [3dsmax-2025-vray-and-aec-plugins.ps1](3dsmax-2025-vray-and-aec-plugins.ps1) | 3ds Max 2025 + V-Ray + Forest Pack + RailClone + FloorGenerator + MultiTexture | V-Ray (Chaos); Forest Pack & RailClone (iToo); FloorGenerator; MultiTexture | | ||
| | [3dsmax-2025-vray-and-tyflow.ps1](3dsmax-2025-vray-and-tyflow.ps1) | 3ds Max 2025 + V-Ray + tyFlow | V-Ray (Chaos); tyFlow | | ||
| | [3dsmax-2025-and-pencilplus-4.ps1](3dsmax-2025-and-pencilplus-4.ps1) | 3ds Max 2025 + Pencil+ 4 (NTR, renders watermark-free under 3dsmaxcmd) | Pencil+ 4 (PSOFT) | | ||
|
|
||
| ### 3ds Max 2027 | ||
|
|
||
|
|
@@ -32,6 +33,7 @@ Scripts are grouped by 3ds Max version. Each installs the listed software. Some | |
| | [3dsmax-2027-and-vray.ps1](3dsmax-2027-and-vray.ps1) | 3ds Max 2027 + V-Ray | V-Ray (Chaos) | | ||
| | [3dsmax-2027-and-vray-and-tyflow.ps1](3dsmax-2027-and-vray-and-tyflow.ps1) | 3ds Max 2027 + V-Ray + tyFlow | V-Ray (Chaos); tyFlow | | ||
| | [3dsmax-2027-vray-and-aec-plugins.ps1](3dsmax-2027-vray-and-aec-plugins.ps1) | 3ds Max 2027 + V-Ray + Forest Pack + RailClone + FloorGenerator + MultiTexture | V-Ray (Chaos); Forest Pack & RailClone (iToo); FloorGenerator; MultiTexture | | ||
| | [3dsmax-2027-and-pencilplus-4.ps1](3dsmax-2027-and-pencilplus-4.ps1) | 3ds Max 2027 + Pencil+ 4 (NTR, renders watermark-free under 3dsmaxcmd) | Pencil+ 4 (PSOFT) | | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The new |
||
|
|
||
| The samples cover 3ds Max 2024, 2025, and 2027. The Deadline Cloud submitter also supports 3ds Max 2026. Adapt the nearest script for that installer and verify all product-specific silent-install options. | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change prepends a UTF-8 BOM (U+FEFF) to the start of
README.md. The only diff on this line is the invisible BOM before#, so the file previously had no BOM. A leading BOM in a Markdown file is unintended noise: some tooling (and some Markdown renderers) treat the BOM as part of the heading text, and it can break tooling that expects the file to start with a literal#. Recommend re-savingREADME.mdas UTF-8 without BOM so this line is byte-identical to before. (A BOM on the new.ps1files is fine and even helpful for PowerShell encoding detection — this note is only about the Markdown file.)