Posted on Leave a comment

From Developing 3ds Max scripts to Blender addons

My First Steps into Blender: Why I Decided to Start Developing Addons

For more than a decade I’ve been fully immersed in the 3ds Max world—using it every single day for production, and building plugins and scripts under the Spline Dynamics brand to make workflows faster, smarter, and a lot less painful. 3ds Max has been my home, and honestly, I still love it. But over the past few years, it’s been frustrating to see Autodesk holding back on 3ds Max development, while Blender keeps expanding impressively across every corner of 3D production.

Like many of you, I was skeptical at first. Blender looked interesting, sure—but could it really compete with 3ds Max in professional pipelines? I’ve always believed that software is just a tool, and what really matters is what you create with it. Still, Blender kept popping up everywhere: in ArchViz, motion graphics, VFX, game development, even among freelancers and small studios that traditionally relied on Max. Why? It’s free, open source, growing super fast, and the community is insanely active.

So at some point, curiosity won. I started learning Blender on the side, playing with Geometry Nodes, digging into the Python API, and comparing it to my experience developing for Max. And here’s my honest take so far:

What I really like about Blender:

  • It’s free and open source, which lowers the entry barrier for tons of artists, and allows for continuous updates and revisions.
  • The software is really lightweight and opens in a few seconds.
  • Geometry Nodes are just brilliant. They open up procedural workflows that in Max would require either plugins or a lot of custom scripting.
  • The community is massive, helpful, and super engaged. There’s a constant flow of tutorials, addons, and experiments.
  • Development is active and transparent—you can see the roadmap, the commits, and even influence the direction.

What I still miss from 3ds Max:

  • Some workflows still feel more polished and robust in Max (especially when it comes to precision modeling and certain CAD-related tasks).
  • The modifier stack in Max is simple but extremely powerful—sometimes Blender’s approach feels a bit messy.
  • As a developer, the MaxScript environment (combined with the SDK) is very mature, while Blender’s Python API is powerful but still has quirks you need to work around.
  • Let’s be honest: switching after years in Max is not painless. Muscle memory is a thing!

After a while, I realized something important: I don’t need to choose. I can keep developing and supporting plugins for 3ds Max while also exploring Blender. Both have strengths, and many professionals (maybe you too) actually use them side by side depending on the project.

Which brings me to some exciting news: I’ve just released my very first Blender addon!

ECM, a simple and powerful Blender modifier

ECM – Extrude Curve Modifier is a non-destructive modifier built with Geometry Nodes that lets you extrude curves quickly and parametrically. If you’ve ever tried to create 3D geometry from curves in Blender, you know it’s possible but not always straightforward. ECM makes it simple, intuitive, and flexible—something I always aim for in my tools.

This is just the beginning. My plan is to keep developing addons for Blender while continuing my work in 3ds Max. I see this not as “switching sides” but as expanding the toolkit—for myself and for you, the artists who follow Spline Dynamics.

So if you’re a Blender user (or curious about becoming one), feel free to check out ECM, it’s already available on Blender Extensions and on Gumroad. I’d love to hear your feedback, suggestions, or ideas for future tools.

This is a new adventure for me, and I’m honestly excited to see where it leads.

Share
Posted on Leave a comment

Maxscript Bits & Tricks – Randomize Objects, Colors & Materials in 3ds Max

Bring more life and variation into your 3ds Max scenes with just a few lines of Maxscript!

In this edition of Maxscript Bits & Tricks, you’ll learn how to quickly randomize the position, rotation, wirecolor, and materials of selected objects.
Perfect for creating more natural, less mechanical arrangements in ArchViz, motion graphics, and product visualization projects.

Code snippets

1. Randomize position and rotation of selected objects

Move and rotate selected objects randomly to create more natural distributions.
This script supports 3ds max groups.

for obj in selection where obj.parent==undefined do (
rPos = random -3.0 3.0
rRot = random -20.0 20.0
move obj [rPos, rPos, 0]
rotate obj (eulerangles 0 0 rRot)
)

2. Randomize wirecolor of selected objects

Assign random wireframe colors to each selected object, making it easier to distinguish them in the viewport.

for obj in selection do obj.wirecolor = color (random 0 255) (random 0 255) (random 0 255)

3. Swap materials among selected objects

Mix up the materials of the selected objects randomly without repeating.

selArr = selection as array
matArr = for obj in selArr collect obj.material
for obj in selArr do (
idx = random 1 matArr.count
obj.material = matArr[idx]
deleteItem matArr idx
)

Why use randomization scripts?

  • Add natural randomness to scenes quickly
  • Create more believable and organic object arrangements
  • Speed up look development for ArchViz, design layouts, or product setups
  • Simplify creative variations without manual tweaking

More productivity tools and scripting for 3ds Max

If you found these tips helpful, be sure to check out our professional plugins and tools for 3ds Max.

We also offer custom scripting services to automate repetitive tasks and boost your workflow!

Share
Posted on Leave a comment

Maxscript Bits & Tricks – Smart Layer Hacks in 3ds Max

In this episode of Maxscript Bits & Tricks, we’ll take a look at some handy Maxscript snippets to help you organize your 3ds Max scenes more efficiently using layers.

Layers are a great way to group, control, and clean up complex scenes — but often, things end up scattered across random layers or grouped in ways that make no sense. These small but powerful scripts will help you fix that in seconds.

Let’s get started!

Code snippets

1. Move all lights and cameras to the Default layer

Sometimes cameras and lights are scattered across various layers, especially when importing scenes from external sources or merging multiple files. Use this simple line of code to send them all back to the “Default” layer:

for o in objects where (superClassOf o)==light or (superClassOf o)==camera do (LayerManager.getLayer 0).addnode o

2. Move all VRay proxies to a new layer

Keeping your heavy VRayProxy assets organized in a dedicated layer is a great way to manage scene complexity. This snippet finds all VRay proxies in the scene and places them in a newly created layer called “VRay_Proxies”:

lay = LayerManager.newLayerFromName "VRay_Proxies"
for o in objects where classof o == VRayProxy do lay.addNode o

3. Hide all layers except the ones of selected objects

Need to focus only on what you’re working on? This script hides every layer in the scene except the ones where your currently selected objects are. Ideal for isolating working sets without changing visibility layer by layer.

arr = for o in selection collect o.layer.name
LM = LayerManager
for i = 0 to LM.count - 1 do (
lay = LM.getLayer i
lay.isHidden = (findItem arr lay.name == 0)
)

Why use these layer scripts?

  • Quickly organize imported or messy scenes
  • Simplify your Layer Manager
  • Focus only on what matters in complex projects
  • Save time in lighting and layout workflows

More productivity tools and scripting for 3ds Max

If you found these tips helpful, be sure to check out our professional plugins and tools for 3ds Max.

We also offer custom scripting services to automate repetitive tasks and boost your workflow!

Share
Posted on Leave a comment

Maxscript Bits & Tricks – Lights Adjustments & Cleanup

Welcome to a new edition of Maxscript Bits & Tricks, our ongoing tutorial series featuring short and powerful Maxscript snippets to boost your 3ds Max productivity.

This time, we’ll focus on light management, one of the key aspects in optimizing and adjusting a scene — especially in large or complex projects.

In just a few lines of Maxscript, you’ll learn how to:

  • Turn off all lights in the scene except the selected ones
  • Increase the intensity of selected VRay lights by 50%
  • Delete lights that are turned off and not contributing to the scene

These quick actions can help speed up lookdev, clean up unnecessary elements, and keep your renders clean and efficient.

Let’s dive right in!

Code snippets

1. Turn off all lights except the selected ones

This quick snippet will turn off every light in the scene except the ones you’ve selected.
Very handy when you want to isolate and test the effect of specific lights.

InstanceMgr.MakeObjectsUnique selection #group; for o in lights where not o.isSelected do o.on = false

2. Increase intensity of selected VRay lights by 50%

Use this script to quickly boost the intensity (multiplier) of all selected VRayLight objects by 50%.
It works even if they are instanced or unique.

arr = #(); for o in selection where (classOf o)==VRayLight do (if (appendIfUnique arr o.baseObject) then o.multiplier *= 1.5)

3. Delete lights that are turned off

Clean up your scene by removing all lights that are off and not contributing to your render.
This helps declutter the scene and improve render prep times.

delete (for o in lights where o.on == false collect o)

Pro Tip: Lights cleanup and adjustment are essential steps in scene optimization — especially in ArchViz, interior renders, and product visualization projects where lighting plays a key role.

More productivity tools and scripting for 3ds Max

If you found these tips helpful, be sure to check out our professional plugins and tools for 3ds Max.

We also offer custom scripting services to automate repetitive tasks and boost your workflow!

Share
Posted on Leave a comment

Maxscript Bits & Tricks – How to Clean Up your 3ds Max Scene

In this edition, we’ll show you how to quickly clean up your 3ds Max scenes by deleting orphan helpers, hidden objects, and empty layers — all with simple Maxscript snippets!

These small scripts are extremely helpful for organizing and optimizing large or complex scenes, making your workflow faster and more efficient.

Code snippets

1. Delete orphan helpers

Helper objects that are not linked to anything (no parent or children) often remain in the scene as useless leftovers. This simple line of code allows you to remove all orphan helpers at once.

delete (for h in helpers where h.parent==undefined and h.children.count==0 collect h)

2. Delete hidden objects

Hidden objects might clutter your scene and take up resources without contributing anything. Use this snippet to delete all hidden objects instantly.

delete (for o in objects where o.isHidden collect o)

3. Delete empty layers

Layers that no longer contain any objects are unnecessary and can slow down your scene management. This snippet automatically removes all empty layers.

LM = LayerManager; for i=(LM.count-1) to 0 by -1 where (lay = LM.getlayer i).canDelete() do LM.deleteLayerByName lay.name

Why use these snippets?

  • Keep your scenes clean and organized.
  • Reduce unnecessary data and clutter.
  • Improve viewport performance.
  • Save time on large projects, especially in ArchViz workflows.

More productivity tools and scripting for 3ds Max

If you found these tips helpful, be sure to check out our professional plugins and tools for 3ds Max.

We also offer custom scripting services to automate repetitive tasks and boost your workflow!

Share