Features proposal on right click select to create a ADAPTATIVE SUBDVISIONS method

Hello everyone, first, I like to apologize to forum moderators for create this post, but I hope you all can understand that my main intention is help Blender to evolve, so all help is necessary and welcome.

Right now, Right Click Select (RCS) is the main contact that we have with devs, so it’s important visit the website and vote in new features and etc.

So, I’m creating this thread to call blender users to go be more active in RCS, and also show the proposal of a little (big) change in the subdivision method that I’ve imagined.

Something that can be useful, for modeling, sculpting and rendering.

Here it’s the original RCS link: ADAPTATIVE SUBDIVISION

And here it’s the idea, just remember, you need to “VOTE” on RCS to be accepted and them developers take a look, otherwise, this will be ignored.

ADAPTATIVE SUBDIVISIONS (AS), it’s the proposal of a update to the current subdivision method in subdivision and multi resolution modifiers.

Today both modifiers uses a simple math to divide a edge, face into more parts, right now, one edge becomes two, and a single face become four, the major problem is how this math overload the system with unnecessary data.

So AS can be considered like a alternative to optimize the subdivisions levels, freeing system resources and also increasing the number of possible subdivisions levels.

With a good optimization, subdivisions can go from level 5, with today standard method to 6 or maybe 7 levels, freeing system resources at the beginning and them using it to increase resolution in future.

In sculpting mode, this is even more important, considering that the huge amount of data of current modifiers create too much data to work on small spaces and too little in large areas, what force the users to add manual edge loops on large areas or some manual workaround, wasting time with something that can be automated, it’s also have a system impact, considering that is hard to work with too much information in small areas and switch between subdivisions levels it’s also a waste of time.

So, a good way to optimize all the workflow and save system resources is update the subdivision method in the modifiers and create a code that create subdivisions based on edge or face spacing and a manual intervention in the begging of the process, where user can ignore certain areas of a mesh to avoid excessive subdivisions. Hard work, done once.

SA should be used like a first step subdivision and RS latter, so it’s necessary to have a button with a ADAPTATIVE SUBDIVISION text and another with other options,

Using Multires like example:

SA

Here it’s a simple example.

In IMAGE 1, we can see a RS, that create a huge amount of data around the nails and top of finger joints, creating a waste of resources with a higher poly count.

In IMAGE 2, we can see what AS can do, finger joints and nails have no edge loops in unnecessary areas, but fingers has been divide, trying to create a evenly space between faces, saving resources and making the next level of subdivisions more smart like we can see.

IMAGE 3 shows that there is no nail or finger joints excessive edge loops even in higher levels, in this case, with a user interference, choosing to ignore that area.

The result is: RS: 17.021 vertices (34.004 edges) AS: 13.753 vertices (27.470 edges)

SA in this example saved 3.268 vertices (6534 edges) in a hand, in a entire body, it maybe be possible to reduce enough unnecessary data to free one or more subdivision levels, if RS reaches a maximum level of 5, AS maybe can reach a level 6 or 7 depending of some manual intervention.

The AS concept can also be special useful for procedural data like GEOMETRY NODES (GN), where it can be used to avoid system resources loss.

In a place with a lot of rocks, or a procedural table, a Greek or Roman columns row, the number of details can be edited manually to increase or reduce the amount of displayed data, what eventually can be used to create a scene with a more controlled poly count, what is useful for game development, and also decrease render time, considering the SA can reduce unnecessary data to be processed.

In this hard surface example, we can have a better look in the difference.

The First (from left) it’s the base mesh, a cube with a bevel modifier, the middle it’s the RS and the last is a AS.

The manual intervention should be possible to select a loop and then increase or decrease the subdivisions in that loop.

PROS:

  • Save system resources creating less unnecessary data.
  • Optimize the sculpting with details where it needed.
  • Save render time with unnecessary calculation of unnecessary data.
  • Save manual edge loops creations to hard and organic meshes.

CONS:

  • SA it’s almost totally topology dependent, so it will work better with good topology, specially face loops and “modular” topology, weird loops will have no great benefit with it, so it requires that user think a little (what can be a problem for today people).
4 Likes

Hey, that’s an interesting idea but it’s unclear if this isn’t opening a big can of worms :smiley:

First of all, blender subdiv is based on opensubdiv, so it’s more likely that the request should go there. Or ironically blender devs will have to make the patch accepted by opensubdiv / pixar team, before being able to use it in blender.
Or last possibility, they do their “fork” of opensubdiv but it might get difficult to maintain when opensubdiv release a new version.
So not easy…

While it’s clear that it create lighter mesh, it’s unclear how much speedup we’ll get after these extra calculations.
What I mean is that it’s very likely that the modifier will took more time to create the mesh, even if that mesh will be faster to be displayed. This is ok for static mesh, but a real issue in animation.

Same issue in animation : since the topology is adaptive this can cause issues depending on how the mesh will deform. For instance closing the hand into a fist might make some loops closer and they might end up being discarded by the subdiv.

Finding optimisation tricks is really complicated and asks to do some profiling on the code. What is slowing things down in the first place ?
It’s true that the less data blender has to handle the faster it gets, and more subdiv = mode data.
But there are also issue on what is done to that data. For instance, I think it’s still the case, but every frame or every mesh update triggers an upload of all the geometry to the GPU. Where it’s possible to upload the mesh and send only the deformations to the GPU if the mesh topology doesn’t change. This is very likely to make a huge performance boost for animation, but probably not that much in other cases :smiley:
Some other optimisations involves how that data is stored, Hans Goudey made a great talk at this year’s blender conference. Where he explain why and how he spend two years changing how data is stored in blender, making it using much less memory and therefore faster to access and manipulate, leading to better mesh / curve … performance.

Though subject, keep in mind that the devs are the bests to know which optimisation scheme could benefit blender the most. Many times it’s more about implementing the solution that is an issue, rather than knowing what can be done :slight_smile:

3 Likes

First off all, tyvm for the intelligent reply and not a “I don’t like so it shouldn’t be done” (happens a lot or RCS)

First time reading about opensubdiv, even knowing that Blender uses third parties open source stuff, I never imagined that there is a “open subdivision libraries” exist, but I’ll send the idea or the link to them.

I really think that subdiv mat was based on some “regular” mathematical equation.

Considering that this will be used in the first version of the mesh, the speed won’t be a problem, it might not even be noticeable if the user is not developing Avatar 3.

But there is a big “BUT” in there, if the code is calculated on every frame instead of read from RAM (what don’t make too many sense for me, but I’m not a dev), so it will increase the time, even in milliseconds and what makes your point a problem.

It’s understandable, but after some problems with Blender devs and the “let’s down-vote everything” in RCS, and considering that RCS look like a cemetery, and the “slow evolution” of free software, I prefer try to make some noise where I can. At least I maybe found the right place to post the idea like you suggest OSD.

Once more TY.

2 Likes

This is an interesting proposal. I do like the idea of trying to make sure that the resulting mesh is always more uniform (if I understand the proposal correctly). However, I do have some concerns.

For example, the great thing about the current subdivision algorithm is simple. You take a face, split the edges in the middle, and create 4 faces (if the original face was a quad). In theory, this is an extremely simple algorithm. It doesn’t really need to know about faces around it or anything. Just split a face, smooth the verts along an approximation of a spline, then you’re done. If you want to make the mesh smoother, run the same operation on the resulting mesh.

There’s two main issues with your proposal. One of them is figuring out the metric to decide if a face should be split or not (if it is based on area, for example, you’d have to calculate the area for every face at least once and that can slow things down). The other is how would you handle cases where you have something like the following:

This is a simple cube that I subdivided, and pinched one side, but stretched the other. You’d probably see something like this in a shoulder or thigh. How should the algorithm decide how to subdivide this? Should it be greedy and subdivide less because the top is smaller? Or should it be conservative and subdivide more because the bottom is bigger? Also, how will it be able to decide what parts of the mesh are related to other parts? This sort of reminds me of the problem that EA/Frostbite solved with their quad mesh simplification (https://www.youtube.com/watch?v=vBJcdClynFE).

Lastly, if you’re creating a subdivision surface, then some implementations of OpenSubDiv actually support adaptive meshes. For example, Blender supports it if you use the experimental feature set: https://docs.blender.org/manual/en/latest/render/cycles/object_settings/adaptive_subdiv.html

Ok I see, so in your case you think more about a way to make the mesh lighter for static mesh.
Subdiv is used a lot in animation, basically every mesh on screen in a pixar movie run through a subdiv. When the mesh is deformed by an armature there are some optimization mechanism that avoid recomputing everything .
But in blender currently the whole modifier stack is executed from the beginning, and all that data needs to be send to the graphic card for display, which is taking some time. While it should be possible to keep some data in the graphic card memory and only move the vertex there if the mesh’s topology stay the same.

By looking more at your idea, it might be too complicated to include that in the subdiv modifier for various reasons. But it can be a way to simplify the mesh.
Even more IIRC someone did something similar in python, it was a way to remove loops based on angle. Say you have a tube that is subdivided it would remove unnecessary geo since the tube is straight.
Unfortunately I don’t know where to start to find that script back.

1 Like

In this particular case, the whole concept is decide what to divide along the loop itself, in a shoulder case, it should analyze the loop to head and fingers, in this case, fingers will have a much smaller area, so the loop won’t be divided, like I don’t divide the long portion of finger topology in the image, if the user want to divide it, the manual interaction can do it, selecting the loop and telling to the modifier to add that loop to the math or exclude a loop.

This is a CON in the idea, like I’ve said, it’s almost totally dependent of good topology, in this hand in the image, everything follows the “modular” procedure, so the concept fits like a glove (not a intentional joke), but in topology like the one in the Blenderela training course, Manuel Bastione Lab (Blender addon) it won’t have too many benefits, because they have some strange loops, the same with the Blender hand model that have a N-Gon in the palm of the hand.

I send this thread link to them over the google reunion, ty for the info.

Taking a look at the links, the idea might looks similar, but they act in different moments, the SA concept is used like a first step to generate a good base, a good start point, and the link shows a end point reduction.

The quad mesh simplification it’s something old today, they “rebuild” meshes to a simpler “thing” to reduce processing, the point in this method is do “anything” to decrease processing, works for games. In Blender I think we have decimation modifier or something similar.

But that’s a good start, if they already start to think on it, this might be real in future, in both sides, beginning with something like SA and in the end point.

Almost a “yes”, create a level 1 SA with static information, and them do a RS for higher, but not only for static mesh. But it’s true that I only think in the animation time considering the final amount of data, I only notice the problem with the animation movement, when you talk about it. My bad.

Maybe include it like a “layer” can solve the problem, let’s say that we have the level 0 hand mesh, so after a SA it becomes a level 1, this level 1 can be used to define weight painting and etc, but it need to extend the usage of the modifier, with a level 1 weight paint, it’s possible to create a level 0 weight paint, and level 2 and over can stay in same way.

But something is telling me that it won’t be so simple because there is another opensource stuff that needs some tweaking in weight painting to connect to opensubdiv and so on.

What is IIRC?

If I Recall Correctly :slight_smile:

Maybe the existence of that script rings a bell to someone, basically it takes a subdivided mesh and remove unnecessary loops based on angle… sounds pretty close to what you look for…

Alright, looks like I misunderstood a bit. I think this would make a pretty good add-on/built in operator because it is supposed to run maybe once on the mesh vs having it as a modified.

I think the same in first time, but if SA is developed like a ADDON this will create 2 objects, a original mesh and a higher version, inside of the current modifiers, only one mesh will exist.

For video games for example, you can create a base mesh, than SA and RS and transfer the high texture map to the lower mesh, something like ZBrush users do, BUT, you also can transfer this texture to the SA (level 1 subdivision), so you can keep one bone setup, let’s say we are doing a multi platform game for PS5 and XBox, the lowest poly mesh can go to XBox Series S and the SA can go to PS5 and Seriex X, I forgot to mention in this post, but this expand the usage of subdivisions to control mesh tessellation inside of Blender and out to, like in GODOT that support .blend files.

If things grow properly, with some more lines of code the SA like tessellation can be used to reduce the edge loops based on camera distance either, so in a rendering scene, distant objects can reduce the entire edge loops and them simplify them with opensubdiv adaptive code, what it means even more rendering performance.

Put this in the “core” create more possibilities. Even if Blender don’t do it by their own, but contact opensubidiv devs and talk about it, we can have a good gain.

If we have the same game development with SA like and ADDON to only subdivide, with different meshes, we need to weight paint booth, fix bot, and so on. It doubles the production time and put the mesh control on the end point of the job, what keeps unnecessary being processed in some specific scenarios.

I hope some Blender dev have a backup or the github link. : )

If you do this in an addon, you could edit the mesh in place. The only benefit that you’d get (currently) is that modifiers are C/C++ only. If you want that performance in the addon, you’d have to write the subdivision code in C, C++, Rust, or another language like that with Python bindings support. Then use Python to connect to Blender.

What is this “edit mesh in place”?

The only thing I know about programing is: “I’m not able to program” LOL

Basically it means that you can edit the mesh like you do in mesh edit without having to regenerate the mesh from scratch. So, for example, if you wanted to subdivide the mesh, you can just subdivide it in your add-on, and that won’t create a whole new mesh object. It’ll just modify the specified one.

Also, no worries! I mostly post in these types of threads to give a general software developer’s point of view, and try to ask some questions that could hopefully make the request more solid.

No problems, I really like to have this kinda of conversation, different points of understanding about one subject offer a opportunity to grow.

This place should be official forum to send ideas to Blender.

Oh no it should not

3 Likes

Right Click Select is one of the worsts places to interact with devs, not worst than opensubdiv, but almost too bad.

The entire concept of up vote and down vote, kill ideas because people just say “I don’ t like, so don’t do it” and your idea never reaches the dev itself, people in there hardly talk about the idea, benefits or problems, and the last, it’s a cemetery.

There is no 1000 people online a day, sometimes one idea get 1 vote in weeks or months, or 2 down votes, it’s look like Blender future is decided by 3 persons.

Something like this forum to talk with devs would better, and with this level of discussion, the idea itself can grow up until some dev take a look, most of the half of the thinking is done by users, programmers, and dev can start with a very good start point.

At least in my opinion and that’s why I bring it here.

1 Like

Long time ago this was more the case, but the bigger the community grows the more impractical it gets.
There is around 40/100 regular developers and probably a few millions blender users, and many of these users have ideas about what should be prioritized or features to be added.
It’s literally impossible for these 50 people to answer every users being there, on the developer portal, or in RCS… They are already busy with their regular coding job.

It’s true that the regular blender users has little leverage in blender development but this is necessary.
Eventually if you get more interested in how blender is made, you’ll find that devs are not that hard to reach.

Maybe this is the time to asks how blender is developed how it is decided to include a new feature, fix a bug , code a new hair system ?
First, this can come from BF, they basically have a roadmap of stuff they consider good targets : https://code.blender.org/2023/05/development-fund-supported-projects-q2/
Who decide what to include on that roadmap ? I don’t know all the detail but it’s basically a decision made between blender project leaders, and I guess it’s also approved by artists from the blender studio. Needless to say that in general these targets are also discussed with a bunch of professional and there is a general agreement that these features are needed to a large part of the community.

Then there are external contributions : that could be someone who decide to add something to blender on their spare time, a studio that needs a feature and share the code, or even regular developers that works on some pet projects…
Most of the time BF work on project that need a bunch of coordination, big rewrites or massive stuff and they leave small contribution for the community to pick up…

What about RCS , what role it plays in all that ?
Not a lot, it’s basically there to archive all feature requests , so if devs want to work on a particular subject they can look for ideas there, or they might find something fun to implement and they gave it a shot…
But it’s not because something is highly up-voted that it’s necessarily going to be implemented. But rules of thumb, is something is seen as useful to many, then it’s quite possible that a developer find that useful as well.

Basically the problem isn’t about getting new ideas in, devs probably already have a lot of stuff to do on their plate, but it’s more about allocating time for what is important. Suggesting new ideas is many time pointless, but what is already more productive is to give feedback on what is currently developed.

When a feature is developed devs generally asks for people to test and give feedback on usability , what works , what needs to be improved.
This is a good place to start if you want to be involved in the development.
That’s probably not how you envisioned all that to work , but given the limited resources there are it’s the best way to move forward for now…

1 Like

I understand your point, and makes perfect sense.

But one of the reasons that I don’t like RCS, and see it like a part of a problem not only for Blender but open source software have in general.

And again, I understand the problems of develop a free software and why they use someone else codes, like opensubdiv, but I highly disagree in the way FOSS take decisions about what is important or not to do or to have.

Blender for example focus a lot of time and efforts in rendering, and I’m not saying its wrong, and now on LTS versions, but when they decide to add a feature like sculpting mode, they put one person to work on the project, if I’m not wrong, sculpting mode was done only by Pablo, and when they put this resource in Blender, “it is done”, nothing else happens latter, after years in Blender, sculpting mode still pretty childish in may ways, the overall workflow is weird, not intuitive and time consuming, and there is no built-in layer system, multires do not support features that regular subdivision support, like edge crease, last time I’ve checked over a year ago, vertex paint was a completely joke.

Many people will say a lot of different things, “its hard to things without money”, “Blender its not a sculpting program”, “you can’t comply because its a free software”, “use addons to complete what you miss” and they’re “kinda” right, BUT, and this is a big BUT, FOSS exist inside of the problematic loop of the industry standard, like any other software, if Blender don’t update itself and try to “sell their idea” like a usable alternative to other applications like Maya and etc, companies will not use Blender, if they don’t use, the entire learning market will focus on software that can be used, its a simple math: less companies using Blender, mean less people learning Blender and less money on their pocket.

Sadly, depend on someone else code, like opensubdiv save time in overall development, but it also limit the growing of the application itself, if Pixar decide to update the code, them we got something new, if they don’t “need” anything new, we got nothing.

If Blender put some effort on Sculpting years ago, their user base will be much bigger, maybe big enough to have a team of programmers only for this area, because ZBrush users will migrate to Blender, we’re talking about replace a Windows machine that coasts money with licensing, anti-virus and more and a ZBrush subscription, change it for a machine with a Linux based system and Blender, initial 0 cost it’s pretty interesting, IF, sculpting mode was updated over years.

Use addons can be a quick fix, but they are not a solution, if the Sculpt Layers addon stop being updated by any reason, this will disappear from Blender, if the code is inside of Blender it will be there until Blender exists. And looking at RCS, Blender is walking to it’s grave, many good ideas being forgotten because of the vote system and because the foundation admins, just don’t put their efforts to make Blender a good industry standard alternative.

Wait for a company that eventually will use Blender and promote it like a fully capable software for game development and put money on Blender development and them things will start to grow and etc, it’s hallucination, maybe I’m the only person in the world that think in have a company that develop Linux games and them port them to Windows and work only with free software, but, if RCS, Tin and others, doesn’t listen users now, there is no guarantee that they will listen to what I think (if I one day I’m able to have a company).

Off course, this is the way I see things, the old “In My Arrogant Opinion”.

Hey !

You bring a lot of stuff to the table to be discussed !
My tendency is to think of blender for what it is capable currently rather than what it could be if…
Many modules tends to take dust while other areas are actively developed …
You mentioned sculpt but there is also VSE, Compositor, Motion Tracking module, Text Editor :slight_smile: , Texture Paint tools… all these tend to be lower on the priority list until someone step in and work on that by it’s own. This is basically why Sculpt mode started to see a lot of improvements with Pablo.

In these occasions BF generally jump on the occasion and hire the developer so their work go to the next level.

Well despite the side modules taking dust, currently blender is being seen more an more as a industry player and used more and more in studios.
IMO there are 3 ways blender can be that is relevant in a studio :

1/ A swiss army knife that can do a bit of everything despite the fact that there are better , dedicated alternatives like Zbrush, Nuke , substance, Syntheyes, premiere … Tools as they are are already useful in many ways especially if you need to combine them, like sculpting and doing rigging at the same time…

Anyway, a studio that relies highly on digital sculpting is never going to give up on zbrush… And for blender it’s impossible to compete anyway.

2/ A real competitor of Maya and Max : The core of a 3D DCC software, that is poly modeling, rigging, animation, rendering … This is where blender should be as good as their competitors to stand a chances to have a real place in a studio…

3/ A unique software : some areas of blender are pretty unique and this also attract a lot of interest from studios, point 1 is part of that, I’m not sure any software is filled with as many diverse tools as blender.
There is also the ability to mix 2D and 3D animation, and Eevee + realtime compositor bring new workflows to the table that are quite interesting. If you look at the competition blender is probably some of the best options for that.

I think that what they do is clever, even if for some areas I wish there would be better alternatives we should face the reality and accept that there isn’t enough development power to win all the battles…
It’s very likely that eventually all modules will improve, but not as fast as the core of the app !

My most sincere apologies for that, I’m the emotional kind and I talk too much.

I always think in past, present and future at same time, so I “overload” all my thinking, like we say in Brazil, “bad habits never die”.

Thinking in a Swiss knife application it is, it create a safe zone for growing, but at same time, this safe zone loses opportunities, when I talk about sculpting earlier, I mean that BF should have a marketing focused on game industry too.

Last time I’ve played with ZBrush, no sure if it was the last pixologic release or first maxon release, overall performance was pretty similar in my machine, Blender have a good update on the core and ZBrush looses performance over the years (according to some people on forums, its not a personal opinion), 8 subdivisions levels maximum in boot, but missing HD sculpting and vertex paint performance, so with a little tweaks, Blender can be a pretty good alternative.

This topic appears frequently in this forum. Usually, the discussion boils down to whether there is a better way for feature requests, which doesn’t require the Blender Foundation to heavily invest in people reviewing the proposals.
It is easy to grow an idea in a forum. It is difficult to make the idea fit into a large software package with many consistencies to consider.
You may have a look at the colored wireframe discussion in this forum. Everyone agreed that they were needed, but everyone had a different idea how they should be integrated. A developer even joined the discussion and later on left (being annoyed if I remember correctly).

This would require hiring people just for the coordination. People with a lot of experience in Blender and in communication. Personally, I doubt it would be a good investment of the available resources.

What exists at the moment is different modules in Blender where users may join. How they are working together heavily depends on the module as far as I can see.
The responsibility of the users and artists is usually not to make feature requests, but to help the developers with the features they are currently implementing or are planning to implement.
https://wiki.blender.org/wiki/Modules/Roles

If Blender had put more effort into any area of Blender, the user base could be bigger. As a matter of fact, they didn’t have lots of resources just a few years ago. As such, they didn’t have the luxury to be able to hire developers as they wanted.
Even today with way more resources, it is very obvious it isn’t easy to find the right people.

1 Like