Hide the valuables, stow the kids – Digits is thinking!
I wish I’d joined this thread earlier, because there are a lot of great ideas in here.
First of all, Kaz, you’re absolutely right. You can create a ZScript that will output a sequence of images, then combine them into a GIF or movie using an outside utility. The ZSpin ZScript is a simple example.
To animate a number of elements (WingedOnes particles or Upham’s rings), you could either place each object, save the image, then press Undo that many times; or you could place the changing elements on a separate layer and clear the layer after each image save.
Several ZScript features come to mind here. First, the [TransformSet…] command. Draw a 3D object, then issue the command:
Substitute the complicated-looking algebraic variables in the above line with:
Xp,Yp,Zp = the X, Y and Z position of your 3D object
Xs,Ys,Zs = the X, Y and Z size of your 3D object. 100 means 100 percent size.
Xr,Yr,Zr = the X, Y and Z rotation angles of your 3D object.
You can use some mathematical formulas to arrive at the above, or use random numbers, or whatever strikes your fancy.
You can also experiment: place a 3D object somewhere in the canvas, and read all 9 of the above elements directly from the Transform:Info sliders. First, press the Transform:Move button, and the Info sliders display the X,Y, and Z position. Then press the Transform:Resize button, and the Info sliders display the X,Y and Z sizes. Then press the Transform:Rotate buttone and the Info sliders display the X,Y and Z rotation angles.
Another feature that comes to mind is the [FileNameMake…] command, combined with the [FileNameAdvance…] command. These are tailor-made to output sequential files with names like “Image001.bmp”, “Image002.bmp” and so on.
Another feature is List variables. By defining a list variable early on, such as
you can signal ZBrush that the variable MyList is intended to be a whole array of numbers, text-strings, or strokes. You can refer to each element by calling it MyList(n), where n is any positive integer less than the defined value.
In the above example, MyList can have 10 elements: MyList(0), MyList(1) through MyList(9).
Another feature is [StrokeGetInfo…] which can get data from any single brush stroke. Data such as: how many single points, the X and Y of any single point, the smallest X and Y, the largest X and Y, how many curls, and so on.
Another feature is [Interpolate…] which finds values within any two points or sets of points.
If any of this whets your appetite, let me know and we’ll discuss these elements in more detail.
Have fun,
dave