Some users are discussing that the current refit algorithm does not
produce the expected results when using Apply Base, while others expect
this feature to create a base mesh that will look like the Multires grid
displacement when being subdivided again.
This patch splits the Apply Base operator into Apply Base and Refit Base.
Apply base will not refit the mesh, creating the same final result as
applying the subdivisions and using Rebuild Subdivisions. Refit Base is
the equivalent of the previous Apply Base, which will deform the base
mesh and refit.
Details
Diff Detail
- Repository
- rB Blender
- Branch
- multires-refit-base (branched from master)
- Build Status
Buildable 8761 Build 8761: arc lint + arc unit
Event Timeline
@Sergey Sharybin (sergey) As automatic Apply Base is planned in T73317, maybe we can skip this patch, make a new operator for refit and remove Apply Base once automatic apply base is working.
The goal of Apply Base is to modify base mesh in a way that level 0 elements of the displacement grids are 0. While current refitting does not really achieve that perfectly it is possible to improve refitting.
To me it seems to address motivational part of this patch improving refitting algorithm is the way to go.
The fact that your new Apply Base behavior matches Rebuild Subdivisions suggests that it is the latter one which needs fixing.
Basically, the rule of thumb is: keep displacement as small as possible.
In 10 years of baking head/character displacement maps in production in Zbrush I have never once used the Cage feature. The Cage feature in Zbrush is identical to the Apply Base feature in Blender. Why not just fully automate the propagation from high to low subdiv levels and get rid of this Apply Base button? To me it seems redundant. Nobody in production is going to be deriving displacement maps from a base mesh that is so radically different in volume/form from the Cage mesh.
I think the new "refit base" operator would be a great addition to the multires modifier. It is just what I'm looking for in my current real time character workflow that uses baked normals. The fact that the lowest resolution is closely matching the shape of the highest subdivision is really beneficial.
I can also see the benefits of using "apply base" that Sergey mentions above, since it would result in the smallest change in the subdivided shape when using displacement maps.
I think that by implementing both "Apply base" and "refit base" would make sure that the most artists get what they need for their workflow.
I also saw a discussion about auto changing the lowest subdivision when sculpting on a higher subdivision. Perhaps a checkbox would be a good implementation to let the user decide if she/he wants to auto update the shape of the lowest subdivision?
@Sergey Sharybin (sergey) I rebased the patch with the new modifiers UI. Can we reconsider it?
Using an operator property is strange decision to me here: in the interface there is no way for anyone to see a difference: there is no redo panel, the tooltip for both "Apply Base" and "Refit" is exactly the same.
| source/blender/editors/object/object_modifier.c | ||
|---|---|---|
| 1866–1867 | I do not find this wording clear, it doesn't help understanding what's going on. | |
| source/blender/editors/object/object_modifier.c | ||
|---|---|---|
| 1905 | Isn't it the other way around: refit will require having sbdivision surface modifier to put vertices at the same locations as they currently are, while "Apply Base" makes it so base mesh vertices are placed to where they currently are? | |
| source/blender/editors/object/object_modifier.c | ||
|---|---|---|
| 1905 | The description is not the best, but I think it is right. By subdividing the mesh after refit you get something similar to the displacement mesh, so it puts the vertices of the base mesh in the position before being subdivided | |
Sorry for barging in here, but I just wanted to drop a suggestion here
Apply low level to cage OR Apply low to cage:
This would be the standard/old apply base where the lowest sculpt level is conformed to a mesh that resembles the highes level in shape AFTER a subdivision modifier is added to it
Apply low level to highest level OR Apply low to high:
This would be a new implementation where the position of the vertices matches exactely the corresponding vertices on the highest sculpt level
Any news on when this will land in master? The current method of adapting the base mesh to the high poly mesh is really not up to snuff. Right now I have to do really complicated workarounds where I apply the modifier to the mesh and then rebuild all the subdivisions to get the results needed to have proper baking done. It really needs to be high priority for the next release.
@Pablo Dobarro (pablodp606), can you work together with @Julian Eisel (Severin) and @Hans Goudey (HooglyBoogly) to find suitable description and wrap this up?
The code side seems fine, but I think description can become more clear and explicit.
I discussed the description with @Pablo Vazquez (pablovazquez) before, but we didn't really find something good. Maybe he could take a look again, or @Aaron Carlisle (Blendify) as the dark lord of documentation.
Here are my suggestions for naming and renaming Refit Base and old Apply Base respectively.
New operator name: Align Base
It aligns the base geometry to the sculpted MultiRes model so that every vertex matches perfectly with the high res model where they are the same in a destructive manner.
The old Apply Base name renamed to: Rebuild Base or Reconstruct Base
It rebuilds/reconstructs the base mesh so MultiRes becomes less destructive and doesn't shrink the mesh when you delete all MultiRes levels and subdivide it again. I would however suggest calling it Rebuild Base over Reconstruct Base, since you already have a similar naming scheme with Rebuild Subdivisions.
So we use "Refit Base" and "Apply Base" for the initial commit? Maybe we will need to change this again anyway if we make refit basic to be automatic
I find the suggested names to be hard to understand intuitively. Perhaps it could be amended with a descriptive tooltip.
Here are my suggestions. The names are a bit long (which is not optimal), so I guess the buttons would need one row each in order to fit the text.
Apply base to cage:
This would be the standard/old apply base where the lowest sculpt level is conformed to a mesh that resembles the highes level in shape AFTER a subdivision modifier is added to it
Apply base to highest level:
This would be a new implementation where the position of the vertices matches exactely the corresponding vertices on the highest sculpt level
Can we decide name for the options to commit this for 2.92? I would say something like "Apply to Cage" and "Apply to Base" or "Update Cage" and "Update Base Mesh"
Hopefully you'll stick with Apply to Base since most users will probably find it less confusing if it's clear which button represents the original, unchanged behavior. None of the suggested name changes make Apply Base's behavior or usage clearer in my opinion, they'll just add confusion, especially for users who aren't following this discussion and so won't know where Apply Base went, or whether it's been renamed or removed. Apply to Cage is the least confusing of the suggested name changes because it still has "Apply", but I don't see how changing Base to Cage will improve the user experience or understanding.
Ultimately users will figure out the behavioral differences between Apply Base and Update Base (or whatever name you settle on for Refit Base) by experimenting and observing the differences.
I would like to know what is the status of this? Will this ever be on master? Thanks.
When are the devs planning on actually committing this patch? It's been nearly a full year since Pablo Dobarro asked about implementing this into Master, yet zero work has been done to add this essential sculpting feature into Blender. I'm sorry if I sound annoyed, but I don't think waiting a full year just because no one can agree on a name is in any way a justifiable reason for having this project being put on ice for this long.
Imagine if this was done to Face Sets when it was added to Blender and no one knew what to call that feature. Odds are that it wouldn't have been in Master by now as well.