Software:
3ds max 2019
This is an example of procedurally animating a mesh’s vertices via Python script.
Notes:
1. The model has to be converted to Editable Mesh before the script is run.
* unless the scrip will be extended to do it.
2. The model must be selected for the script to work.
import MaxPlus import math from MaxPlus import INode from MaxPlus import TriObject from MaxPlus import SelectionManager from MaxPlus import Factory from MaxPlus import Animation from MaxPlus import Point3 from MaxPlus import Control ticks_frame = 160 #Selection sel = [] for n in SelectionManager.Nodes: sel.append(n) node = sel[0] #Setup Controllers obj = node.GetObject() Tri = TriObject._CastFrom(obj) mesh = Tri.GetMesh() num_verts = mesh.GetNumVertices() mesh_anim = obj.GetSubAnim(0) pnt_ctrl = Factory.CreateDefaultMasterPointController() node.AssignController(pnt_ctrl,1) for i in range(num_verts): bezp3 = Factory.CreateDefaultPoint3Controller() bezp3.SetPoint3Value(mesh.GetVertex(i)) mesh_anim.AssignController(bezp3,i) #Animation Animation.SetAnimateButtonState(True) for t in range(100): time = t * ticks_frame Animation.SetTime(time) mesh_anim.AddNewKey(time,0) for i in range(num_verts): vert_anim = mesh_anim.GetSubAnim(i) vert_ctrl = Control._CastFrom(vert_anim) vert_val = mesh.GetVertex(i) vert_val.SetZ(vert_val.GetZ() + math.sin(((Animation.GetTime()*0.5)/(ticks_frame))+i)) vert_ctrl.SetPoint3Value(vert_val) Animation.SetAnimateButtonState(False)
* note that when copying and pasting a script from this example, the indentation may not be pasted correctly.
One thought on “Python for 3ds max – Animated Mesh”