Hice una prueba para buscar una forma de resolverlo y llegué a esto, es un ejemplo de cómo se podría hacer en XSI (el script esta crudo crudo, era sólo una prueba) pero es sumamente simple y supongo que, traducible a cualquier lenguaje de cualquier software.
La idea tras el script es la siguiente, básicamente se trata de seleccionar los cubos de abajo hacia arriba (puede ser en grupo, es importante que sea de abajo hacia arriba para que lo que sea que usemos se contruya en ese sentido) y mediante el script animar el sacalado de cada cubo de la selección de modo que en 2 frames pasa de 0% a 100% de escala (idealmente poner las curvas en stepped mode, a mí se me olvidó). Te dejo el código comentado, es para XSI, pero seguro lo puedes hacer con Maxscript sin necesidad de un conocimeinto muy profundo.
Código:
// desactivamos el log para mayor velocidad de ejecución.
Var cmdlog = getvalue (preferencias, scripting, cmdlog).
Setvalue (preferencias, scripting, cmdlog, false, null).
// guardamos la selección en la variable osel.
Var osel=getvalue (selectionlist).
// iniciamos un ciclo para recorrer la selección.
For(VAR i=0;i<osel. Count;i++){.
// creamos una colección para guardar la escala en x y, z (opcional) tvar okinescl = new activexobject(XSI. Collection), tokinescl. Add(osel(i), Kinematics, local, sclx), tokinescl. Add(osel(i), Kinematics, local, scly), tokinescl. Add(osel(i), Kinematics, local, sclz), t.
// hacemos un key con un escala de 0% en todos los ejes tfor (VAR j=0;j<okinescl. Count;j++) okinescl(j), value=0, tsavekey(okinescl, 1+(2*i), null, null, null, false), t.
// volvemos la escala a 100% y grabamos otro key 2 frames más adelante tfor (VAR j=0;j<okinescl. Count;j++) okinescl(j), value=1, tsavekey(okinescl, 3+(2*i), null, null, null, false).
}.
// volvemos las opciones del log a como estaban.
Setvalue (preferencias, scripting, cmdlog, cmdlog, null).
Saludos.