I was looking at the "AddNoiseToClay" example, and was wondering how one would rotate the grid.

I tried adding a "Make 3D Transform" to each "Make 3D Object", and then realized that since it goes to noise, and then the grid is made, it wouldn't even spin the 3D objects themselves, let alone the entire grid.

Is there a way to apply matrix transform to objects one they are whatever type "arrange 3D objects in grid" creates?

Is the output of "Make 3D Object", "Add Noise to 3D Object", and "Arrange 3D Objects In Grid" all the same type? What type of processing can be done to that type once it is constructed?

Comments

Is the output of "Make 3D

smokris's picture
Submitted by

Is the output of "Make 3D Object", "Add Noise to 3D Object", and "Arrange 3D Objects In Grid" all the same type? What type of processing can be done to that type once it is constructed?

Yes, they all output Scene Objects. (When you click on a port, a popover appears — check out the "Data type" line.)

You can connect Scene Objects and filters in any configuration; they're hierarchical. For example:

  • Make 3D Object -> Add Noise to 3D Object -> Arrange 3D Objects in Grid — This applies the noise filter to each object individually before it's arranged into a grid. Like AddNoiseToClay.vuo.
  • Make 3D Object -> Arrange 3D Objects in Grid -> Add Noise to 3D Object — This applies the noise filter recursively to all the objects in the grid. For spatially-invariant filters (like Divide 3D Object), this won't make a difference, but for spatially-variant filters (like Add Noise to 3D Object) this will produce different results — each object will be deformed at a different position in 3D noise space.

I was looking at the "AddNoiseToClay" example, and was wondering how one would rotate the grid. Is there a way to apply matrix transform to objects one they are whatever type "arrange 3D objects in grid" creates?

Yes: Arrange 3D Objects in Grid -> Combine 3D Objects -> Render Scene to Window. Then connect a Make 3D Transform to the Combine 3D Objects node to apply the rotation. I've attached an example.

I tried adding a "Make 3D Transform" to each "Make 3D Object", and then realized that since it goes to noise, and then the grid is made, it wouldn't even spin the 3D objects themselves, let alone the entire grid.

If you apply a transform to the Make 3D Object node, it should spin the individual object. But it gets applied before any filters are applied — so if you're rotating a sphere, you won't notice (unless you view it in wireframe mode) since spheres are rotationally symmetric. If you'd like to rotate the sphere after applying the filter, send it (with a transform) through a Combine 3D Objects node.

(Good questions! Glad to see you're digging into Vuo's scenegraph system.)

Thanks for the example! That

George_Toledo's picture
Submitted by

Thanks for the example! That's good to see how "combine 3D objects" can be used to add an attribute.

I notice on my system that if I change the parameters on "Make Unlit 3D Object From Image", for example Z position or width, I seem to need to restart the example before changes update in the viewer. Is that intentional? Is there something to connect to that to keep changes updating? Parameter changes on the "arrange 3D objects in grid" do update, for example, but I can't see what the difference would be that would make one update and not the other.

I change the parameters on

smokris's picture
Submitted by

I change the parameters on "Make Unlit 3D Object From Image", for example Z position or width, I seem to need to restart the example before changes update in the viewer.

Yes: in AddNoiseToClay, the Make Radial Gradient Image and Make Unlit 3D Object from Image nodes only execute once, since they only receive a single event from the Fire on Start node, since (per the original composition design) they never change.

To make them execute every frame, you could connect Render Scene to Window's requestedFrame to Make Radial Gradient Image's refresh port (the triangular port in the top left. (Keep in mind that Vuo is event-driven/"push", rather than lazy-evaluated/"pull" like Quartz Composer.)

Alternatively, if you just want to update the values once, you can re-fire the Fire on Start node (without having to stop and restart the composition) by command-clicking on its started port (or right-clicking on the port and selecting "Fire Event").