Home Technical Talk

3Ds Max: Scale distance between objects, but not objects themeselves.

polycounter lvl 7
Offline / Send Message
Computron polycounter lvl 7
Is there any way to scale the distance between objects but not the actual objects' geometry?

Say I got this:

5eqKqdt.png

I want to scale the distance between the three objects so they are closer together.

If I use the scale tool they will all be scaled in toward the center and will all become smaller:

LZmSAF3.png

What I want is this:

N6s77xy.png

Any way to quickly do this in max without having to manually attache all the objects pivots to empties or anything like that? Kinda like a switch to operate on the object's pivot, but so that the onject will follow the pivot and stay the same in scale?

Replies

  • spacefrog
    Offline / Send Message
    spacefrog polycounter lvl 15
    create a group ( with your objects selected, pick Menu->Group ) and in the "hierarchy panel->adjust pivot" activate "affect hierarchy only". Now you can scale the group, without effecting it's content's scale, only their positions. Of course this works best when your have set your "Use center flyout" set to "use Selection center"
    After all is done you can quickly ungroup and your objects will not have any changed scale on them.
    Without grouping or creating any other kind of parent, i can't think of any way for this, except scripting some small tool
  • Mrfred
    Offline / Send Message
    Mrfred polycounter lvl 4
    I wouldnt suggest using a group in max as they're kinda wacky.
    Instead: use a dummy instead,link everything to the dumy and uncheck the scale inheritance in the lock panel
  • RappyBMX
    rappatools has a feature that can do that... if you don't have rappatools3 you can get the old free one http://remusjuncu.com/maxscripts/#rappatools2 that also has that feature :) see the tooltip for the World button... it's the distanceTool...
  • Computron
    Offline / Send Message
    Computron polycounter lvl 7
    I new Rappatools would have something like this. Thanks.
  • spacefrog
    Offline / Send Message
    spacefrog polycounter lvl 15
    Mrfred wrote: »
    I wouldnt suggest using a group in max as they're kinda wacky.
    Instead: use a dummy instead,link everything to the dumy and uncheck the scale inheritance in the lock panel


    They are only whacky when sitting inside a hierarchy, because they are essentially a (invisible) dummy parented to the groups content. So when you got groups sitting inside hierarchies and do an ungroup, you might end up with the hierarchy broken. Nothing speaks against using groups in limited scenarios like this and with their implications in mind. Grouping objects is essentially the same as creating a dummy and link the group contents to the dummy.
  • jcgzrz
    Offline / Send Message
    jcgzrz polycounter lvl 5
    spacefrog said:
    create a group ( with your objects selected, pick Menu->Group ) and in the "hierarchy panel->adjust pivot" activate "affect hierarchy only". Now you can scale the group, without effecting it's content's scale, only their positions. Of course this works best when your have set your "Use center flyout" set to "use Selection center"
    After all is done you can quickly ungroup and your objects will not have any changed scale on them.
    Without grouping or creating any other kind of parent, i can't think of any way for this, except scripting some small tool
    Nope, it doesn't work. 
  • Eric Chadwick
    jcgzrz said:
    Nope, it doesn't work. 
    Which version of Max are you using? Also please explain step by step what you are doing, for example:
    1. Restart 3ds Max 2024
    2. Create three primitives.
    3. Select all three objects.
    4. Group menu, Group, default name, OK.
    5. Hierarchy panel, enable Affect Hierarchy Only.
    6. Scale tool, scale uniform 200%.
    7. Group menu, Explode.
    Works for me.
  • Klunk
    Offline / Send Message
    Klunk ngon master
    fn scale_node_position nodes scale = 
    (
    	for i in nodes do 
    	(
    		tm = i.transform;
    		tm.row4 = tm.row4 * scale;
    		i.transform = tm;
    	)	
    )
    scale_node_position $selection [1,2,1]
    will scale by 2 along the y axis about the origin. 
    to scale about arbitary point, subtract the point, scale and then add back the point. 
    fn scale_node_position nodes offset scale = 
    (
    	for i in nodes do 
    	(
    		tm = i.transform;
    		tm.row4 = offset + (tm.row4 - offset) * scale;
    		i.transform = tm;
    	)	
    )
    
    scale_node_position $selection $selection[1].pos [0.5,0.5,1]


  • Eric Chadwick
Sign In or Register to comment.