Community
3ds Max Modeling
Welcome to Autodesk’s 3ds Max Forums. Share your knowledge, ask questions, and explore popular 3ds Max modeling topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to instance groups of objects

12 REPLIES 12
SOLVED
Reply
Message 1 of 13
nils.deitmers
301 Views, 12 Replies

How to instance groups of objects

Apologies for the vague question.
This is one that has been bothering me for years, so I'd like to learn if there's a trick I missed...

I find myself working with identical groups of objects all the time, like e.g. robot arms or car engines.
The goal is usually to instanciate the objects, while being able to treat them as one logical unit, but in a non destructive fahion, maintaining all modifers and transforms.

Obviously an almost ideal workflow would be to group the objects, while also instancing the controller. If it wasn't for the one big flaw that you can't add any new objects to a group instance. 
So if you were modeling a robot arm you'd have to regroup and instance it for every screw you decide to add.

Creating a boolean object is another way to do it, but I find this too laggy and cumbersome to work with.
I'll usually create references from my objects and create a boolean from those. So I can continue working on the objects, keeping a turbosmooth modifier above the reference line to enable for preview without affecting the boolean.
This is also not really convenient, since the performance is really bad, even when moving operands with relatively simple geometry.

Is there really no way to work with a bunch of objects that update as a group in real time?

12 REPLIES 12
Message 2 of 13
RobH2
in reply to: nils.deitmers

What version of Max are you using? In Max 2025 you 'can' add a new object to a Group instance. Make a group and drag it over to instance it. Then click on an object outside the instance and under 'Group' click 'Attach' and the object will be added to the Group. You mentioned that being able to add an object to an Instance was ideal, and you can do it. 


Rob Holmes

EESignature

------------------------------------------------------------------------------------------------------------------------------------------
3ds Max (2023-2025), V-Ray 6.2, Ryzen 9 3950-X Processor, DDR 4 128MB, Gigabyte Aorus X570 Master motherboard, Sabrent Rocket NVMe 4.0 M.2 drives, NVidia RTX 4090, Space Pilot Pro, Windows 11 Pro x64, Tri-Monitor, Cintiq 13HD, Windows 11 x64
------------------------------------------------------------------------------------------------------------------------------------------
Message 3 of 13
nils.deitmers
in reply to: RobH2

Hi RobH2, thanks for the hint!
I was on 2024 but did the update and now I'm on 2025.

Maybe I was unclear on what I'd expect to happen:
Adding objects to existing group instances has been possible before. But the other group instances in the scene will not update. So effectively the groups are not the same anymore. Adding a new bolt to a guitar's machine head would require adding it manually to all six group instances.
This still seems to be the case in 2025, unless I misunderstood?

Also.. I did some testing with groups and it turns out they're only ideal when I intend to place them by hand.
The array modifier (set to radial) would always create individual rings of objects using their local pivot as a center instead of the group pivot.
Applying the array mofifier to a container also won't do anything at all. (The update behavior of containers is basically how I would imagine instanced groups to work.)

So the "ideal" workflow for my situation would be one where I can really instanciate and manipulate a group of objects as one logical object, while still being able to easily work with the individual objects.
(So far booleans are still the only way I know, but as I mentioned they are not really great to work with due to the laggy performance and finicky selection of objects)

I'm surprised this particular workflow is so cumbersome, as it seems very common. In technical applications we come across the need for arrays of groups all the time. 
When the array modifier came out it really made my day. In many cases I can compromise and manage with a single object for the array. But sometimes it's just desirable to have diferent chamfer or turbosmooth settings on mechanical parts, some with symmetry, some without etc..

 

Message 4 of 13
RobH2
in reply to: nils.deitmers

I see. You have such a specific workflow I'll be interested if you find something that works for you. Post back here if you do so others can take advantage of what you figure out. 


Rob Holmes

EESignature

------------------------------------------------------------------------------------------------------------------------------------------
3ds Max (2023-2025), V-Ray 6.2, Ryzen 9 3950-X Processor, DDR 4 128MB, Gigabyte Aorus X570 Master motherboard, Sabrent Rocket NVMe 4.0 M.2 drives, NVidia RTX 4090, Space Pilot Pro, Windows 11 Pro x64, Tri-Monitor, Cintiq 13HD, Windows 11 x64
------------------------------------------------------------------------------------------------------------------------------------------
Message 5 of 13
mbreidt
in reply to: nils.deitmers

Some additional options that maybe are worth a shot:

  • Object Xrefs
  • Substitute modifier
  • Mesher (works also with groups!)
Message 6 of 13

Thank you for the suggestions. Did you successfully try any of them?

The mesher and substitute modifier both let you pick individual objects out of a group (even out of a closed group), but they do not seem to allow to pick multiple objects at all.
Can you explain what you mean by "Mesher (works also with groups)"?

Again: the idea is to have an arrangement of objects and repeat that in different places in the scene. To extend the examples I gave before: let's think of a dinner plate with a knife, a fork and a spoon next to it.
If I group these objects, create a mesher compund object and "pick object" the mesher will pick just one object out of a closed group and turn into that one object.
Same for the substitute modifer. Picking an object from the scene has the same effect and does not allow picking more than one object. "Select object by name" does also not work on groups. If you try to select a group it will ignore the input.


Message 7 of 13

I actually remembered a 3rd party tool that I used to work with 10 years ago.
It's called MultiMesher and it does exactly what I 've been describing, plus some boolean operations if you want.
The interface is incredibly simple and fast, in a way the boolean modifier is not.
You can just pick the objects you want to be part of the mesh and that's it. You can continue to work on the original objects, move them around in real time and tweak the relative position in the MultiMesh.  You can use the MultiMesh with the array modifier, no problem.
You will want to adjust the pivot of the new mesh, since the objects you pick initially have their world position as an offset relative to where you put the MultiMesh object.
But compared to working with the boolean tools this is a breeze of fresh air. 😉 


I honestly don't know if there's any limitations that I'm not aware of, or if this workflow of mine is really so specific, but it is beyond me why something like this seems to be considered "nioce to have". I think Autodesk should have bought it years ago.

https://www.kinematiclab.com/products/multimesher



Message 8 of 13
mbreidt
in reply to: nils.deitmers


@nils.deitmers  schrieb:

Thank you for the suggestions. Did you successfully try any of them?


The mesher and substitute modifier both let you pick individual objects out of a group (even out of a closed group), but they do not seem to allow to pick multiple objects at all.
Can you explain what you mean by "Mesher (works also with groups)"?


Mesher lets you pick the "head" of a group (which contains multiple objects), see the attached .max file (R2023).

If you open it you will see four sets of cutlery. Select the pink spoon and enable/change the Twist modifier -> this will update all the green mesher objects, too.

So you can change one object within an (opened) group and all the other "instances" will follow.

The only limitation I am aware of: Any transforms will need to be done through an "Xform" modifier, as the mesher seems not to update on simple PRS changes.

 

Does that help?

Message 9 of 13
nils.deitmers
in reply to: mbreidt

Thanks for taking the time to provide this example. I appreciate it.
You're right!
It never occured to me that I have to open the group to pick the header. That's rather confusing UX, since clicking on an object in the group selects the group and not the object. So if group headers are pickable then it seems logical to pick the header of a closed group and require opening it to pick an object inside. Not the other way around.

But yes, glad I understood this now. It's always good to have a workflow that doesn't require managing 3rd party stuff.

Message 10 of 13
mbreidt
in reply to: nils.deitmers


@nils.deitmers  schrieb:

It never occured to me that I have to open the group to pick the header. That's rather confusing UX, since clicking on an object in the group selects the group and not the object. So if group headers are pickable then it seems logical to pick the header of a closed group and require opening it to pick an object inside. Not the other way around.


I agree, this is not great UX, but IMO that is true for groups in 3ds Max in general, where 3ds Max often tries to be clever about those group heads (and sometimes fails).

I would generally recommend to avoid groups in 3ds Max where possible, but in this instance they are actually useful.

 

IMHO the cleanest way of doing what you want are probably Object Xrefs (or Proxies) - but you would have to open a second 3ds Max session if you want to edit them (and would have to do that without context).

Containers should, in principle, also be able to do what you want - and they even allow you to "open" them, do some edits and then save again (and all other references to that container file will update) without leaving your scene.

 

BTW, thank you for the like/acceptance as solution!

Message 11 of 13

Yes, I agree with your comment on groups.

as for xRefs.. the editing without context is indeed a big downside. They don’t feel like a convenience tool, but more like sth you’d use for organization or if viewport performance becomes an issue I guess. So the multimesher is really like an xRef you keep in the same scene.

and I‘m certainly going to use it more now.

In my opinion it is one of 3ds max‘s strengths to allow for a nondestructive modifier based workflow.

So when I model things like a spaceship engine it seems intuitive to use lathe objects in combination with radial arrays etc and keep them uncollapsed. And when there’s more than one engines it is obviously desirable to have instances of the complete engine that can be polished and extended without breaking the instance. 

I checked out containers only briefly and they seem to offer just that. Being able to edit them in place is even more intuitive than any proxy solution,  unfortunately I couldn’t get them to work with the array modifier, which is required in my current scene.

Message 12 of 13

Just a quick comment on performance, now that I'm testing the Mesher compound object vs the MultiMesher in the context of my actual scene:

Toggling a Turbosmooth on and off on the original mesh takes 2-3 seconds (!) to update the Mesher. Needless to say that's not an option. Also enabling a chamfer modifier on the source mesh makes the Mesher disappear entirely, not sure why. 
With the MultiMesher toggling the turbosmooth doesn't cause so much as a hickup, the chamfer works as expected and no need for extra xForm modifiers.
It also exports fine to Unity and Marmoset Toolbag, so I can recommend it.


Message 13 of 13
mbreidt
in reply to: nils.deitmers

Thanks for the update! Too bad Mesher isn't really up to the task. Sounds like some of this could worth a bug report.

Glad you found an alternative, even though it is a 3rd party plugin, so it needs to be re-released for any new version of 3ds Max.

 

Edit: I was curious and did some tests - it seems as if the Array modifier is slowing things down so massively with Mesher. An Array with 100 copies takes several seconds to update, but changing 100 instances works instantly.

I did not encounter any issues with chamfer modifier but that might just be lucky.

 

Edit2: I just realize that MultiMesher is a MAXScript plugin! Very nice, well done Clovis! That makes it quite resistant to all those version upgrades. But here I do not see a noticeable speed difference between an Array of Meshers of a group and an Array of MultiMeshers of the same objects:

  • Repeatedly turning TurboSmooth on and off for a 100-Array of Meshers of a group takes 4.1 sec per run.
  • Repeatedly turning TurboSmooth on and off for a 100-Array of MultiMeshers takes 4.2 sec per run.
  • Both Array variants have 76k polys without TurboSmooth, and  643k polys with it (using 3 iterations)
  • For comparison, doing this for 100 instances of the Mesher (no Array) takes 1.5 sec per run.
  • Without the Array, one run takes 0.08 sec
  • All times averaged across ten-fold MAXScript loop, with all 100 copies visible in the viewport 

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Technology Administrators


Autodesk Design & Make Report