Is there any way of preventing the above from happening? When rendering out an “animation” containing different camera angles from several rooms, adaptive subdivision fails miserably; the chairs looks absolutely awful as well as the wall panels. The image on the right was re-rendered after going into edit mode and “forcing” a dicing update. The chairs are instanced on faces, but the original is one of them, so it’s not like they’ve been instanced from far away and failing that way.
So yeah, basically, how do I force a good dicing per frame when rendering out an “animation”?
Do the acoustic tiles need adaptive subdivision? how close are you getting to them? It seems like it might be easier to just model them, rather than displacing them.
In this specific case, probably not. But I sometimes work with very large scenes (5000+ objects for me is a lot - especially since I can’t animate collection active/inactive - probably small for others) that slows down viewport too much, so using as simple geometry as humanly possible became key at one point. Resorting to adaptive displacement was an approach I did before I got aware that simply instancing the things didn’t even work properly. So instancing the chairs from its origo didn’t work at all (used the far away source dicing), but face instancing a local chair worked, but now not even that works anymore due to dicing not being updated (might be my own “persistent data” fault, I’ll check).
well, any kind of instancing is going to break the whole purpose of adaptive subdivision. While doing local instances can help mask it, the problem will persist. If the closer chair is the original, then the far chair will be extremely overdiced, and the opposite is true.
If you are instancing objects, then I would avoid adaptive subdivision. Maybe this is a personal bias, but adaptive subd can overcomplicate a lot of things and needlessly force you into tessellation hell, often in cases where it is really overkill (like your acoustic tiles)
If you absolutely need to see the fibers on that chair, then I’d say that chair should be unique and have adaptive subdivision.
If you use instances, they should not have any modifier on them at all. Modifiers force instances to be calculated separately from each other, which cancels the memory saving benefit they would normally bring.
If you use instances with modifier-less objects, you will be surprised at the amount of geometry you can have. You could take a model with a million triangles, instance it 100 times and still have a scene that’s reasonably useable.
If you have thousands of objects, then the number of objects itself could be a source of performance issues. Objects have a base performance cost simply for existing. If you duplicate the default cube thousands of times, you will eventually destroy your scene’s performance simply from the number of objects, despite having a number of triangles that your computer would take easily.
If you have a bunch of small objects that could be joined into one, you should try. It might actually speed up your scene.
In general I would agree, but in this case the difference hardly matters. My main issue here was why it diced with extremely low resolution just because I advanced the frame that contained a closer camera.
Looking at it without, I don’t see any other way. While my requirements are far less than for a “typical arch viz artist”, I’d still like things to look nice and recognizable.
You sure? Adaptive subdivision microdisplacement cause the close object to have the same dicing rate as the distant source object. Anyway, I use bevel with harden normals activated or bevel with weighted normal modifiers a lot, depending on my shading needs. I prefer non destructive where I can due to constantly changing projects. For multiple and dense slatwalls, using modifiers I can simplify what I see on screen. Slatwall example using modifiers to better catch light, although won’t matter much in this 10spp cropped (have to) preview.
This particular project goes pretty easy on me though, as it’s just a single room rather than multiple full office floors. And no, I don’t do slatwalls, they’re just a decorative element to spice things up a bit
I reduced it from 5800 to around 3000 after joining a bunch of stuff (lots of box mapped objects, separated somewhat for wood grain direction control), and deleting the hidden stuff I could identify. It was still a slugfest, even with modifiers turned off for viewport. Those kinds of objects couldn’t be instanced though due to being part of what defined the space layout. But I couldn’t do this early on in the project, as the layout kept changing and I had to replace pretty much all geometry each time from imported IFC.
But yeah, those kinds of project complexities are very rare, but they do happen. I just want to be as prepared as I can be and learn ways to optimise and setup a complex project the best way. More so for viewport handling than rendering times.
Right, which is why I would think the overhead from adaptive subdivision isn’t worth it. Just use regular ol’ subdivision to the point where it is high enough, then instance that.
I’m not sure exactly how the dicing rate works on instances.
However, as soon as there is any modifier on an instance, it loses it’s reuse memory benefit and you can no longer use it with the usual instance workflow. Usually, when working with instances, you would use somewhat heavier objects (with subdivision and bevels applied), but relying on instancing to keep performance. Of course, in that case you have to accept a more destructive workflow, but it can be worth it if you have many copies of an identical object that will not change or deform.
When creating instances, check the scene’s polygon count. If you instance pure geometry with no modifier, you will see that the poly count stays the same. As soon as you add any modifier on any instance, the number will change.
From what I heard a while back the source does the dicing based on where it is, then that mesh is instanced. It sucks, but it also makes perfect sense.
I don’t normally put modifiers on instances, but modifiers on the instanced source. Usually I’m instancing collections, so no modifiers. The chair was kind of a unique case to get around the limitation mentioned above where it wouldn’t dice at all since the source was far away (origo).
Not only that, but have to allow a lot more geometry on screen which slows viewport. I’m only in the 100k to a few million faces (quite rare) range in my scenes, so nothing overly dramatic.
Tried to render out several versions of the chair last night with various amounts of regular subdivision. They all came out the same! So definitely persistent data had something to do with my previous issue using adaptive subdivisions, but worked when I turned it off. I had to go to 8 render levels to get acceptable results. At 9 it was mostly shading differences (darker due more shadowing most likely), and at 10 it just crashed my machine.
Note to self: ONLY use persistent data when rendering out several animation frames. NEVER while setting up the scene and previewing. Dangerous, that one…
Adding to the discussion:
With persistent data enabled subdiv modifier “render subdivisions” setting was not updating geometry in my renders. Took me some time to realize persistent data was to blame…