Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

58 Commits

Folders and files

Repository files navigation

aioli-max-scripts

Custom tools the /ai.oli collective builds for itself and runs inside 3ds Max, on the productions where we use it. Kept in one place so they stay usable, updatable and shareable.

Five tools so far. Each lives in its own folder with its own README.

Tool What it does
clonelayers Clones a selection and rebuilds the whole layer / sub-layer tree of the sources, with a prefix, a suffix or an auto-incremented number.
ratiomask Viewport matte that previews any crop ratio (16:9, 9:16, 4:5…) without ever touching the render settings. Render 1:1, crop later.
sunpos Places a sun at the real sun's position for a location, date and time, taking the scene's north rotation into account. NOAA maths, no time zone guessing.
phys2vray (in test) Replaces the Physical Materials on the selection (Blender FBX imports, typically) with VRayMtl, every texture map plugged back into the right slot as a VRayBitmap, with one UVW randomizer per material. And the other way round: VRayMtl → Physical for an FBX / glTF export that Blender opens with its textures, or a .vrscene that keeps the V-Ray materials for V-Ray for Blender.
fbx2vray (in test) Imports an FBX with its exact V-Ray materials and lights, rebuilt from the _vray.json our Blender exporter writes next to it (format) — or applies that file to an FBX already in the scene. No _vray.json: the FBX alone, and phys2vray to convert it.

clonelayers, ratiomask and phys2vray are pure MaxScript, single file, no dependency. sunpos and fbx2vray are Python and ship as a folder — they run on what 3ds Max already has (pymxs, the Python standard library, and PySide for sunpos's panel), so they need no install either.


Install

git clone https://github.com/aiolicollective/aioli-max-scripts.git

Anywhere you like — a tools folder, a synced drive, wherever. Nothing gets copied into 3ds Max, and nothing is written outside Max's own preferences.

Then, once per tool: drag its .ms into a 3ds Max window (or Scripting > Run Script…). The panel opens, and a macro is registered under the aiolicollective category.

Tool File to drag in
clonelayers clonelayers/aioli-clonelayers.ms
ratiomask ratiomask/aioli-ratiomask.ms
sunpos sunpos/aioli-sunpos.ms
phys2vray phys2vray/aioli-phys2vray.ms
fbx2vray fbx2vray/aioli-fbx2vray.ms

None of them needs anything installed in order to be used in 3ds Max. sunpos ships an optional setup.bat, but that is for running the calculation outside Max — on the command line, or to feed another 3D application. It also unlocks the auto time zone mode inside the panel; everything else there, daylight saving included, works straight from the drag & drop. See sunpos/README.md.

To update later: git pull in the clone. That is all — the buttons keep pointing at the same files and pick the new version up on the next click.


Toolbar buttons

Customize > Customize User Interface… > Toolbars tab > Category aiolicollective > drag the action onto a toolbar. The same actions are available in the Menus, Quads and Keyboard tabs.

Category Action Macro
aiolicollective clonelayers aioli_clonelayers
aiolicollective ratiomask aioli_ratiomask
aiolicollective sunpos aioli_sunpos
aiolicollective phys2vray aioli_phys2vray
aiolicollective fbx2vray aioli_fbx2vray

All of them behave the same way, on purpose:

  • The button survives a restart of 3ds Max. Max writes the macro into its own usermacros folder and re-reads it on startup.
  • The button follows git pull. Each macro is a thin launcher holding the path to its file in the clone, baked in when you drag the .ms in. It never carries a copy of the code, so a pull is enough.
  • Move the clone and the button breaks — the baked path no longer resolves. You get an explicit message saying so; drag the .ms in once more and it is fixed.

Uninstalling a button means deleting the matching .mcr in %LOCALAPPDATA%\Autodesk\3dsMax\<version> - 64bit\ENU\usermacros\.


Compatibility

Written for 3ds Max 2026, tested there.

clonelayers only uses stable, non-deprecated API (layermanager, maxOps.cloneNodes, native rollout UI) and should run on 2016 and up. ratiomask needs a Nitrous viewport. sunpos uses the pymxs and PySide6 that come with 3ds Max 2026, falling back to PySide2 on older versions — nothing to install, and Autodesk's Python is never modified.

None of these tools touch render settings. clonelayers, ratiomask and sunpos are renderer-agnostic — sunpos moves whichever sun you point it at, V-Ray Sun, Corona Sun, native target light or free directional. phys2vray is the V-Ray one by nature: it needs V-Ray 5+ loaded, and runs on 3ds Max 2017+ (Physical Material). fbx2vray needs V-Ray 5+ too, and the Python 3 of 3ds Max 2022+.


Status

The first three are installed on the collective's machines: dragged in, buttons in place, working. clonelayers and sunpos are at v1.0, ratiomask at v1.3 — see its changelog.

phys2vray is at v1.8, in test: written without a 3ds Max at hand, now being tried on real Blender imports and corrected as we go. Its NOTES.md lists what is still unverified.

fbx2vray is at v1.0, in test: its material and light rebuild has served our asset library since October 2026; the panel and the work on an FBX already in the scene are new — see fbx2vray/NOTES.md.

sunpos has 47 automated tests covering the maths and the CLI, but its pymxs layer has not been exercised end to end in Max yet — see sunpos/NOTES.md for the exact list of what is still to be checked.

Issues and pull requests welcome.


Contributing

Each tool folder is self-contained; adding one more means adding a folder and a row in the tables above.

Conventions we hold to:

  • The repo is in English, docs and code alike. Public repo, shared tools.
  • One macro category, aiolicollective, for every tool. Action named after the tool, macro named aioli_<tool>, file named aioli-<tool>.ms — so a tool is recognisable wherever you meet it.
  • The macro is a launcher, never a copy of the code. Bake the path in with getSourceFileName() at registration time, the way they all do. That is what keeps git pull meaningful.
  • Nothing gets installed to use a tool. Optional extras may ask for a setup step, but the drag & drop path must always work on what 3ds Max already ships.
  • No write to render settings, no write to the source scene beyond what the tool is explicitly for. Everything wrapped in a single undo.
  • Design decisions and traps already hit go in the tool's NOTES.md — that file is what stops the next person (or the next AI) from undoing a fix on purpose.

Written by the /ai.oli collective, with AI assistance. We say what is generated and by whom.

MIT licence — see LICENSE.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages