Page MenuHome

Fast highpoly mesh editing
Confirmed, NormalPublicTO DO

Authored By
Dalai Felinto (dfelinto)
Jan 24 2020, 3:16 PM
Tokens
"Burninate" token, awarded by Blazitron."Love" token, awarded by Draise."Love" token, awarded by vr_sebas."Love" token, awarded by kursadk."Love" token, awarded by Voidium."Burninate" token, awarded by Nicknroll."Pirate Logo" token, awarded by Harti."Dislike" token, awarded by item412."Burninate" token, awarded by thornydre."Heartbreak" token, awarded by Zuorion."Heartbreak" token, awarded by ofuscado."Heartbreak" token, awarded by gilberto_rodrigues."Heartbreak" token, awarded by Blendork."Heartbreak" token, awarded by andruxa696."Heartbreak" token, awarded by hitrpr."Like" token, awarded by TheCharacterhero."Heartbreak" token, awarded by ace_dragon."Pterodactyl" token, awarded by hadrien."Love" token, awarded by jensdk."Love" token, awarded by frederico4d."Love" token, awarded by bluemagic."Love" token, awarded by Nominous."Love" token, awarded by rpserge."Love" token, awarded by billreynish."Love" token, awarded by Niritio."Love" token, awarded by garwell."Love" token, awarded by bestelix."Love" token, awarded by DiogoX2."Love" token, awarded by jc4d."Love" token, awarded by marcuspollio."Love" token, awarded by GeorgiaPacific."Love" token, awarded by Robonnet."Love" token, awarded by Arken."Burninate" token, awarded by chironamo."Love" token, awarded by mindinsomnia."Love" token, awarded by Chromauron."Love" token, awarded by Alumx."Love" token, awarded by christianclavet."Love" token, awarded by kenziemac130."Love" token, awarded by Tasosgr01."Love" token, awarded by Orange3d."Love" token, awarded by Ali6."Burninate" token, awarded by viadvena."Love" token, awarded by crantisz."Love" token, awarded by Kickflipkid687."Love" token, awarded by 0o00o0oo."Mountain of Wealth" token, awarded by candre."Love" token, awarded by radi0n."Love" token, awarded by juang3d."Love" token, awarded by NestorJimenezArt."Love" token, awarded by Serva."Burninate" token, awarded by Dir-Surya."Love" token, awarded by Yegor."Love" token, awarded by bnzs."Love" token, awarded by DaPaulus."Love" token, awarded by plundh."Love" token, awarded by Schamph."Love" token, awarded by silex."Love" token, awarded by Shimoon."Love" token, awarded by jshgdmn."Love" token, awarded by Tvartiainen."Love" token, awarded by TakingFire."Burninate" token, awarded by RomanKornev."Love" token, awarded by pierogo."Love" token, awarded by johny.zlo."Love" token, awarded by Edmis."Love" token, awarded by Krayzmond."Love" token, awarded by Idlero."Love" token, awarded by MichaelWeisheim."Like" token, awarded by samgreen."Love" token, awarded by staughost."Love" token, awarded by greyoak."Love" token, awarded by Schiette."Burninate" token, awarded by 3Rton."Like" token, awarded by ckohl_art."Love" token, awarded by misiewiczradoslaw."Burninate" token, awarded by shader."Love" token, awarded by alfredbaudisch."Love" token, awarded by brilliant_ape."Yellow Medal" token, awarded by 1D_Inc."Burninate" token, awarded by Kubo_Wu."Love" token, awarded by nunoconceicao."Love" token, awarded by xdanic."Love" token, awarded by ReinhardK."Like" token, awarded by amonpaike."Like" token, awarded by knightknight."Love" token, awarded by herbert123."Love" token, awarded by symstract."Love" token, awarded by Ztreem."Love" token, awarded by Dangry."Like" token, awarded by ThinkingPolygons."Grey Medal" token, awarded by Regnas."Love" token, awarded by Fracture128."Like" token, awarded by TheRedWaxPolice."Love" token, awarded by mazigh."Orange Medal" token, awarded by madminstrel."Like" token, awarded by MetinSeven."Like" token, awarded by wilBr."Love" token, awarded by CobraA."Like" token, awarded by Frozen_Death_Knight."Like" token, awarded by Biaru.

Description

Status: Need work plan "approval", all tasks listed already. Could use a design / engineer plan and ideally a commissioner (though if the scope here is super technical just having some artists testing may be enough.


Team

Commissioner: ?
Project leader: @Campbell Barton (campbellbarton)
Project members: @Clément Foucault (fclem)

Description

Big picture: 2.7x level of performance for mesh editing.

Use cases:

  • Editing high poly objects with good performance without modifiers.
  • Sample file with 3M avaiable on request, file is ~300MB.

Design: T74186: Proposal for fast high poly mesh editing

Engineer plan: ?

Work plan

Milestone 1
Time estimate: ?

  • Skip EditMesh to Mesh Conversion D7169 (committed)
    • Create API function to lazily initialize an edit-mesh objects evaluation mesh T64262
    • Lazily initialize by disabling edit-mesh to mesh conversion in the modifier stack, calling lazy initialization where needed.
    • Replace lazy initialization with code that uses the edit-mesh, where practical. (partially done)
    • Evaluate production scenes (yet to be defined) to ensure that conversion isn't required for common editing operations.
    • Draw manager support deformed edit-meshes, so an edit-mesh conversion isn't required when drawing an edit-meshes deformed cage (similar to 2.7x support).
  • Minimize GPU Transfer Overhead
    • Create API functions for tagging edit-mesh changes.
    • Limit updates to: selection data, active element.
    • Edge Flags Sharpness Seam
    • Limit updates to: deformations.
      • Coordinates, Face centers & normals.
      • Custom normals.
      • UV-tangents.
    • Limit updates to: custom-data layers.
      • UV coordinates.
      • UV selection.
      • Vertex color.
      • Vertex group color.
      • Custom normals.
    • Limit updates to: mesh properties.
      • Edge crease.
      • Edge flags (sharp, seam).
      • Face flags (freestyle).
  • Multi-Thread bmesh to mesh conversion.
    • For evaluation mesh (uses simplified logic). D6947
    • For the full bmesh to mesh coversion (uses more complex logic).
  • Optimize edit-mesh GPU updating code

    Benchmark production files, and investigate if the current code has room for improvement, making necessary optimizations.

Milestone 2
Time estimate: ?

  • Partial Geometry Updates
    • Support updating only modified geometry when transforming vertex coordinates.
      • Coordinates.
      • Normals.
      • Custom Normals (note: need to investigate feasibility).
      • UV-tangents (note: need to investigate feasibility).
    • Support partial updates for custom data layers.
      • UV mapping.
        • Mesh UV coordinates.
        • Mesh UV-tangents.
        • UV editor coordinate display.

          note: we may run into diminishing returns with UV layer partial updates for custom-data layers, since only updating a single layer will already give us significant benefits. I'd suggest only to support this if it doesn't add a lot of code-complexity.
  • Multi-object edit-mode
    • Undo optimization: skip mesh conversion for meshes which aren't modified.
  • BMesh support for the modifier stack.

Milestone 3 - opensubdiv
Fast mesh OpenSubdiv viewport implementation.
Time estimate: ?

Unknown Milestone

  • Multi-thread edit-mesh to GPU data uploading.
  • Improve geometry buffer configuration (data layout used by the draw manager).

Notes: Optimizing modifiers is out of the scope.


Relevant links:

Related Objects

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
Orange3d added a subscriber: Orange3d.
Arken awarded a token.Oct 5 2020, 2:14 PM

What is the status on this task? According to the roadmap this planned for 2.92. Isn't it too much for 2.92 or can we be optimistic?

Is there a reason why this is considered high priority, yet milestone 1 was barely worked on in spite of this being up for a year?

If the roadmaps are little more than window dressing, then the roadmaps should not exist at all and the BF should apologize to the donors (because they invested real money on the idea that Blender was now a well organized project as opposed to that little FOSS passion project with organic development).

Juan Gea (juang3d) added a comment.EditedJan 30 2021, 9:19 PM

Keep in mind that roadmaps are just intentions and plans that are tied to change, and changes are expected when other high priority things appear, and those tie this tasks to other tasks to be completed, also the programmer reponsible of this may be occupied working in a different thing which schedule may have been delayed or increased because of requirements that appeared later.

An important thing to is that only a part of a roadmap will be completed, and that a roadmap can evolve and change, that does not mean that this project is dead, but that other things are being done first.

However for talk about this would be better if you open a thread in devtalk.blender.org, usually this threads are to do specific technical talks about the task itself :)

BTW: I fully agree with you about this being a super high priority task, this is dragging other parts of performance I think :)

Campbell Barton (campbellbarton) lowered the priority of this task from High to Normal.Feb 4 2021, 12:48 PM

Setting this as normal priority, note that there are no near term plans to work on this, although spesific tasks may be picked up.

Specifically:

  • Improve performance of subdivision surface modifier.
  • Reduce overhead of redundant data to the GPU.

Keeping open as a TODO since these should be tackled at some point.

What a pity, this is a very problematic bottle neck in production, not being able to properly work with meshes from one million polys upwards it’s a big problem, not sure why there are not near term plans to tackle this.

Autodesk is only one consumer-friendly license overhaul away from erasing every bit of progress Blender made in 15 years of existence (as there would be absolutely no reason to use Blender if Maya licensing had a permanent option that was affordable).

If performance in the basic areas isn't a priority, then it is a pretty clear-cut case for a fork.

It will be sad if even Blender 3.0 is slower than 2.79 for modelling :/

Hi @Gilberto Rodrigues (gilberto_rodrigues) , the only known case where this happens is with the subsurf modifier. @Campbell Barton (campbellbarton) will update the task soon to give some status update and closure to it, since the remaining tasks are no longer a high priority target.

(oh nevermind, Campbell has already replied to this task)

Autodesk is only one consumer-friendly license...

Potential performance is largely determined by design.

Autodesk software is mostly used for performance, so you usually forgive its UI/UX when use it, while Blender was used mostly for better UI/UX solutions that allow users to perform work faster, which played a significant role at the market.
It looks like during 2.8 redesign it was assumed that Autodesk software is used for UI/UX instead of performance.
As a result we has got a software with beautiful and, probably, expensive wireframe effects, which disallow you even to see your selection properly during linear modeling, with sacrificing draworder, compatible with architectural/CAD modeling to save some performance, making architectural modeling types incredible hard and frustrating, and so one.

Maybe it should be redesigned again?

@Dalai Felinto (dfelinto) It is not affecting only Subsurf modifier, even without it, dens meshes that exceed 1 mil tris, is painful to modify. I just don't get it why such negligence towards traditional modeling and its performance. I see all these fancy features implemented in every update, but what's the point of them if simple traditional Hight to low poly modeling is sluggish and painful when used on Production-ready meshes ! Sure subdivided cube as test might work good but when you have mesh what have multiple objects and is complex and dense, performance drops to the ground, and that is with Top-notch PC system with high-end CPU and Graphics Card. I personally think you must focus on the core of the program what In my mind is 3d modeling application, make that as good as possible and all other features will benefit from that also!