Subdivision surface settings part of the Mesh
#68891
Open
opened
No Branch/Tag Specified
main
blender-v3.6-release
temp-sculpt-dyntopo-hive-alloc
temp-sculpt-dyntopo
asset-shelf
cycles-light-linking
tmp-usd-python-mtl
brush-assets-project
blender-v2.93-release
blender-v3.3-release
universal-scene-description
node-group-operators
asset-browser-frontend-split
temp-sculpt-attr-api
blender-v3.5-release
realtime-clock
sculpt-dev
gpencil-next
bevelv2
microfacet_hair
blender-projects-basics
principled-v2
v3.3.7
v2.93.18
v3.5.1
v3.3.6
v2.93.17
v3.5.0
v2.93.16
v3.3.5
v3.3.4
v2.93.15
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78c
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76b
v2.76a
v2.76
v2.76-rc3
v2.76-rc2
v2.76-rc1
v2.75a
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72b
2.72b
v2.72a
v2.72
v2.72-rc1
v2.71
v2.71-rc2
v2.71-rc1
v2.70a
v2.70
v2.70-rc2
v2.70-rc
v2.69
v2.68a
v2.68
v2.67b
v2.67a
v2.67
v2.66a
v2.66
v2.65a
v2.65
v2.64a
v2.64
v2.63a
v2.63
v2.61
v2.60a
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.57
v2.56a
v2.56
v2.55
v2.54
v2.53
v2.52
v2.51
v2.50
v2.49b
v2.49a
v2.49
v2.48a
v2.48
v2.47
v2.46
v2.45
v2.44
v2.43
v2.42a
v2.42
v2.41
v2.40
v2.37a
v2.37
v2.36
v2.35a
v2.35
v2.34
v2.33a
v2.33
v2.32
v2.31a
v2.31
v2.30
v2.28c
v2.28a
v2.28
v2.27
v2.26
v2.25
Labels
Clear labels
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
Apply labels
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
Eevee & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest/Import
Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest: Wayland
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
Eevee & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
Eevee & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest/Import
Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest: Wayland
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
Eevee & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
28 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#68891
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. It CANNOT be undone. Continue?
Description
We want to make subdivision surfaces a property of the Mesh datablock. The modifier would remain, but would likely be used less.
There are a few reasons for this:
TODOs
Modeling
Cycles/EEVEE
Normals (work on some aspects of #68893 (Smooth shading usabilty))
Alembic/USD
Workflow
Other
Added subscriber: @dfelinto
Added subscriber: @SergienkoEugene
Added subscriber: @Ace_Dragon
Hi.
Can I ask about the rationale for this? Is there is any advantage moving subsurf out of the modifiers would bring (ie. performance)?
Per-Mesh Subsurf with OpenSubdivto Subdivision surface settings part of the MeshAdded subscriber: @JasonClarke
Added subscriber: @lemenicier_julien
Added subscriber: @BrianSavery
Removed subscriber: @BrianSavery
Added subscriber: @giuseppebufalo
Added subscriber: @1D_Inc
Also interested in use cases.
Subd modifier is nice for usability - multiple objects control, scene rendering setup and during complex organic modeling (mesh display modes).
Subd as mesh data seems to be mostly a display perfomance issue solution, depending on realization.
The rationale is in the task description.
For example, Subd can only be handled by GPU (OpenSubdiv) if in the bottom most part of the modifier stack. To have it as a mesh option allows users to more clearly benefit from OpenSubdiv without needing this technical understanding.
Thank you for response) This seems to be useful for characters displaying / animations.
Can be doubtable for parametric/mechanical modeling (subd before bevel or bevel before subd example)
Is it planned to move modifier's infrastructure to mesh implementation (Ctrl+1,2,0 shortcuts, mesh editing display modes, render/view values, options) to make it main?
Added subscriber: @zaster
Added subscriber: @Frand
Our current game project applies bevels and weighted normals after subdivision, and this gives us the kind of geometry we need in the game engine. If OpenSubdivs are removed from the modifier stack, we may lose necessary control over the quality of the final export geometry.
Yep, it is mentioned as "Can be doubtable for parametric/mechanical modeling (subd before bevel or bevel before subd example)" in previous post.
Added subscriber: @rotoglup
Added subscriber: @LucasVeber
Added subscriber: @EAW
Added subscriber: @Andruxa696
Added subscriber: @JacobMerrill-1
What about a shader to do this?
Vertex transform feedback?
So it still fits in the stack?
Gpu is idle at this point of render anyway? (asking I don't know)
I am not sure how exactly "less commonly used" is counted.
The ability to place subd in a stack to control behavior and result by its order is definitely workflow dependent feature, so it will be less commonly used by someone like character animators only, not modelers for example.
What about getting rid of modifiers and instead writing vertex shader nodes capable of doing skinning and subdivision?
Also has transform feedback for data for nex frame etc?
(pass out particles it emitted etc)
It will have the same lack of flexibility issue, but you can already write any vertex shader you want and then just commit it as a shader. Just like bevel shader some time ago.
Added subscriber: @Znio.G
A quick stupid question.
Coming from Maya i always was able to have smooth preview with subdivisons on instanced meshes(duplicated linked) but in Blender since you have to use the subdiv modifier, then the linked duplicated meshes don't "instance that modifier", so you only have the preview on the original mesh until you enter edit mode.
So we'll be able to have this functionality when Subdivision is part of the Mesh or we would need a way to link the modifier with the duplicated linked meshes?
Can you, please, post a couple of screenshots (object mode / edit mode) with instances from Maya to clarify the issue?
I can do that but the last time i tried Brecht said it's not okay to make such posts.
I don't want to put the Devs in uncomfortable situation where they have to delete our comments, But i can show you with Blender.
Here i have a cube instanced 4x times put a Subdiv modifier on one, can easily modify them in edit mode but once i go to object mode then the modifier is only used on one object and can't be applied.
The only trick i know is you have to join them with the last selected object that has the modifier, apply it then separate them again.
While in Maya it's simpler, Instance, smooth preivew, model then convert those instances to objects.

Well, okay then. Thank you for GIF.
EDITED
Yes, the ability to set subd directly on mesh level should make subd inherit through all instances.
Seems you are using 2.81, such weird modified instances behavior was fixed in 2.82.
I am using 2.82 and it seems we might have found a bug, i tried 2.81 and it's different.
I'll report it.
Added subscriber: @brecht
The subdivision surface modifier is not proposed to be removed from the stack. But if you are doing subdivision surface followed by bevel, you will not be able to benefit from OpenSubdiv GPU acceleration, since the library does not support that.
You will be able to have this functionality. The proposal is to not require a modifier to be present to create subdivision surfaces, so there is no modifier to link.
Thank you @brecht for the answer.
That's actually strange. I've contacted our team and we figured that official 2.82 doesnot share modifiers to instances in edit mode by default on multiple computers.
That's proper behaviour, otherwize editing single instance with subd, placed close to camera, will inherit subd to other instances, that will drop down viewport perfomance for every editing session.
That issue was fixed.
That's great! Thank you for the answer.
There was also a question of infrastructure. We are wondering if hotkeys for modifier will be changed, because for multiple objects subd modifier can be placed to a different level, so it is nice to control it with Ctrl+1, 2, 0 shortcuts.
Will it be possible to assign mesh datablock subd level to something like Alt+Shift+1, 2, 0, keeping subd modifier shortcuts?
It's too early to make decisions on that. There are many design details to work out once work actually starts on this.
For sure. Thank you for the answer.
Added subscriber: @Russ1642
Added subscriber: @ostry
Added subscriber: @MichaelHermann
Added subscriber: @jakaboxjumping-2
Added subscriber: @Nominous
Added subscriber: @kevindietrich
Claiming this task since I started looking into this for my GPU subdivision work, as not worrying about modifiers kinda simplifies detecting whether subdivision should be used (which is also noted in the task description). Maybe we could format this as a project, to note exactly what change is needed, areas to improve/look at, etc?
As it stands, simply storing the parameters in the Mesh data-block solves the issue reported by @Znio.G in #68891#877510 since linked duplicates share subdivision data, which is not really doable with modifiers (first part of the video is with modifiers, second part is using the Mesh setting):
subdiv_linked_duplicates_2.mp4
(This also solves the issue of Cycles receiving an already subdivided mesh from the modifier when adaptive subdivision is used, by simply not requiring a modifier.)
@kevindietrich not sure what exactly you mean by formatting this as a project. But feel free to edit the task description, with more specific plans and todo items.
Removed subscriber: @giuseppebufalo
Yes!
And subd modifier solves another widespread usecase - when you don't need to share subdivision data between instances, which is not really doable with mesh data.
That is the point of a subd modeling workflow - to obtain a model that have subd levels that can be used as LODs.
For example, as a result of subd modeling you can subd only those decor object that is close to the camera, or what you need to modify/edit at some point to check its subd curvature without overwhelming viewport with subdivision of all its instances.
It is workflow dependent.
I don't want to poke the bear here, but it would seem
LOD/tesselate, displace, animate should all be done on the GPU and 'gathered' by the logic somehow
so I think this is a great start !
also game engines use a 'blend' between LOD levels using a stable alpha hash *
I want to clarify that modifier and mesh subd realizations have different scopes.
So I am asking if it is possible to change the description of the task from
to something like
to avoid confusion.
Our modellers tried to imagine how they can probably use subd modifier "less" with the proposed solution and failed at it, since subd modifier is a primary tool for different types of modeling workflows)
The current description is fine, let's not assume your preferred workflows apply to everyone or that you can predict how it would be used by others.
Indeed, it may look like I am trying to push some preferred workflow, while situation is quite opposite - if you need stack position flexibility, you have to use subd modifier, and when you need faster GPU and instances dependency you have to use mesh subd. There can't be a preferred option.
I want to point out that in current form description assumes that subd modifier will be used less, this can be interpreted as if mesh subd is a true substitution for subd modifier and is preferable option, which is not true for workflows where stack flexibility is needed.
How about to point it directly, something like:
Let's take a look.
The very first question - less than what?
Less than mesh subd? Both realizations are needed for their own workflow-depenent usecases which are not mutually exclusive.
Less than usual? Generally unprovable because of the same reason.
Less than average? What kind of average, and how to estimate it.
So many questions out of the blue.
Added subscriber: @TheRedWaxPolice
Added subscriber: @heini
Added subscriber: @SteffenD
Added subscriber: @Garek
Added subscriber: @dursunumit