Change Height and Rotation Segments of all Cylinders in scene


#1

Suppose I have a scene with many different cylinder objects. For the final render, I need all of them to have the maximum number of segments (1000 height and 1000 rotation segments), but this makes the viewport lag horrendously (I basically can’t do anything). So while I’m working on the scene, I need them all set to a much lower number.

Is there some way to automate the process of changing the number of height and width segments for all of them (no matter where they are in the hierarchy)? If so, how would I do this?


#2

I’ve done a similar rig for a project using Xpresso.
You basically choose your main object and pass its’ properties to the others. So changing the main object will change the others accordingly.


#3

Without Xpresso you could save a OM selection (Menu: Select -> Selection Filter -> Create Selection Object). With this you could simply multi edit the needed parameters.

With Xpresso I’d probably use an iterator. Later this day I could add an example, how to do this.


#4

Thank you, an example would really help.


#5

What do you dislike about the suggested Selection Object approach? In conjunction with the Object Manager Filter to quickly set/repopulate the Selection Object it seems to quite versatile. And I’m not sure the following Xpresso approach does have any advantage.

But here’s one Xpresso approach (the Control Null object’s Size parameter drives the Cube sizes): test_iterate_object_list_1.c4d (249.5 KB)

It’s making use of a In-/Exclude list (so you will still have to populate a list with the needed objects). I added a separate Null object as controller. For two reasons: a) one doesn’t get confused as easily, compared to one of the many identical instances being the driver and b) one can add a In-/Exclude User Data parameter in order to expose the needed list in the Object Manager. Without the Control object, the Xpresso would basically reduce to two nodes, the Object list and the right object node, plus another something providing the driving parameter. The Object List node is probably rather self explaining, the trick is the right object node. Note it uses the Object input port, fed from the Object List iterator. On every execution of the Xpresso (i.e. per frame) the Object List node runs through its entire list of objects, outputting them one after another and in turn the right Object node virtually turns into an Object node of that said object. The point is, while the Object node probably never represents thee object it was created for, you will nevertheless first need to create it with an object of the desired type in order to have the correct parameter ports available as inputs. A bit confusing, I know, but I’m not sure, I’m able to explain it better.

If you wanted to get rid of such a list containing all objects in question, in theory it may also be possible with Xpresso means to iterate the entire object hierarchy and make it work on just all objects of a certain type. But I doubt it’s a simple exercise. And I also doubt, it could simply be done with just one Hierarchy iterator node, at least not for arbitrary hierarchies.
If that’s really the goal and the only valid solution for your needs, then I’d probably rather go with a few lines of Python code, most likely not even within an Xpresso node, but with a simple script. But, and I hope you don’t get me wrong now, before I would even consider writing such lines for you, you’d need to give me reason. Plus I’d need reassurance, that really all objects of a certain single type get changed.

In the latter case, you may also want to consider to PM me, to get something more powerful tailored exactly to your projects needs, as in my experience such questions usually tackle just the tip of an iceberg of pains.

While writing this, I came to think. Usually that’s not a good sign and only leads to disaster… anyway, as I said in the beginning, I still like the Object Selection approach. And now, why not make use of the Take System? Then you wouldn’t even need to change the parameter anymore before rendering, but simply render out the Take with the final parameter settings. The Object Selection object would be gone. And it’s just a matter of facilitating the Object Manager filter to set up the Take… anyway…

Cheers

Edit: Re-uploaded the scene file, as I had forgotten to clean up in the Xpresso.


#6

Thank you, I just wanted an alternative in case more complicated logic was required to make the selections. It’s always helpful to know multiple ways to do things.


#7

You can just search for ‘cyl’ and change them all together.
Demo: https://gfycat.com/ImpossibleSingleBengaltiger

Alternatively, you can include them in a separate Take, and override the segments there. This would be a more efficient workflow, since you can set up Takes with rendering.
Another demo: https://gfycat.com/oblongoilyiceblueredtopzebra