Dynamic Topology doesn't create new topology for grab brush, and causes drastic slow down. #62718

Closed
opened 4 years ago by j4m3z0r · 28 comments

{F6845548}System Information
Operating system: Ubuntu 18.04
Graphics card: Various: 2 x Nvidia 1080 Ti, and Nvidia GTX Titan X amongst them.

Blender Version
Broken: 2.79 Ubuntu stock, 2.79b and 2.80 from Thomas Schiex PPA

Short description of error

When in sculpt mode, if dynamic topology is enabled, the grab brush becomes extremely slow (on my wife's computer it takes 1-2 seconds to redraw the screen when she drags the mouse). On closer inspection, it seems that despite this huge slowdown, dynamic topology isn't actually creating any new topology. Reading the manual, it seems like the grab brush is not supposed to create new topology, in which case I wouldn't expect any performance difference between dynamic topology enabled vs disabled. Better yet might be to remove the dynamic topology option if the grab brush is selected.

Exact steps for others to reproduce the error
Based on the default startup or an attached .blend file (as simple as possible).

  1. Download the attached .blend file, open it.
  2. Attempt to use the grab brush (should already be selected) to extend the neck of the character downwards.
  3. Note that no new topology is created, despite dynamic topology being enabled. Also note that performance is notably slower with dyntopo enabled (it's unusable on my wife's computer (1-2 seconds to redraw the screen), but manageable on mine (looks to be around 10-15 FPS), but in either case, much slower than with dynamic topology disabled.
{[F6845548](https://archive.blender.org/developer/F6845548/3_15_2019_Sculpt_longchinhumanface.blend)}**System Information** Operating system: Ubuntu 18.04 Graphics card: Various: 2 x Nvidia 1080 Ti, and Nvidia GTX Titan X amongst them. **Blender Version** Broken: 2.79 Ubuntu stock, 2.79b and 2.80 from Thomas Schiex PPA **Short description of error** When in sculpt mode, if dynamic topology is enabled, the grab brush becomes extremely slow (on my wife's computer it takes 1-2 seconds to redraw the screen when she drags the mouse). On closer inspection, it seems that despite this huge slowdown, dynamic topology isn't actually creating any new topology. Reading the manual, it seems like the grab brush is not supposed to create new topology, in which case I wouldn't expect any performance difference between dynamic topology enabled vs disabled. Better yet might be to remove the dynamic topology option if the grab brush is selected. **Exact steps for others to reproduce the error** Based on the default startup or an attached .blend file (as simple as possible). 1. Download the attached .blend file, open it. 2. Attempt to use the grab brush (should already be selected) to extend the neck of the character downwards. 3. Note that no new topology is created, despite dynamic topology being enabled. Also note that performance is notably slower with dyntopo enabled (it's unusable on my wife's computer (1-2 seconds to redraw the screen), but manageable on mine (looks to be around 10-15 FPS), but in either case, much slower than with dynamic topology disabled.
Poster

Added subscriber: @j4m3z0r

Added subscriber: @j4m3z0r

Added subscriber: @WilliamReynish

Added subscriber: @WilliamReynish
  • First, what is '2.80 from Thomas Schiex PPA'? Please always test with official nightly builds. It's not clear which version of 2.8 you are using, but be sure to always test with the latest official builds.
  • The Grab tool doesn't create new geometry by design. Use the Snake Hook tool instead for that.
  • As for performance, I cannot reproduce that here. Tested on a quite weak laptop with integrated graphics and was able to use the Grab tool smoothly.
- First, what is '2.80 from Thomas Schiex PPA'? Please always test with official nightly builds. It's not clear which version of 2.8 you are using, but be sure to always test with the latest official builds. - The Grab tool doesn't create new geometry by design. Use the Snake Hook tool instead for that. - As for performance, I cannot reproduce that here. Tested on a quite weak laptop with integrated graphics and was able to use the Grab tool smoothly.
Poster

This is the "Thomas Schiex PPA": https://launchpad.net/~thomas-schiex/+archive/ubuntu/blender

Fair point on testing on official builds -- apologies for the noise. I just downloaded the official 2.79 binary from blender.org and was able to repro the issue there.

I'd argue that if Grab tool is not supposed to add geometry, then having the option to enable dynamic topology when the grab tool is selected is at least confusing, and it does seem to carry a significant performance penalty on the machines I'm testing on.

I've uploaded a video of the issue from my computer. This is on the 2.79 build from the blender.org website.

Screencast_03-19-2019_02:46:41 PM.webm

This is the "Thomas Schiex PPA": https://launchpad.net/~thomas-schiex/+archive/ubuntu/blender Fair point on testing on official builds -- apologies for the noise. I just downloaded the official 2.79 binary from blender.org and was able to repro the issue there. I'd argue that if Grab tool is not supposed to add geometry, then having the option to enable dynamic topology when the grab tool is selected is at least confusing, and it does seem to carry a significant performance penalty on the machines I'm testing on. I've uploaded a video of the issue from my computer. This is on the 2.79 build from the blender.org website. [Screencast_03-19-2019_02:46:41 PM.webm](https://archive.blender.org/developer/F6851726/Screencast_03-19-2019_02_46_41_PM.webm)

You can report bugs for the 2.8 beta. Just make sure you are testing the latest nightly official builds.

As for the Grab tool, this is how it's supposed to work by design. It could change, but this is how it's meant to be. The Dyntopo toggle applies globally to Sculpt mode, not to any specific tool, so it's always visible.

You can report bugs for the 2.8 beta. Just make sure you are testing the latest nightly official builds. As for the Grab tool, this is how it's supposed to work by design. It could change, but this is how it's meant to be. The Dyntopo toggle applies globally to Sculpt mode, not to any specific tool, so it's always visible.
Poster

Ok, fair enough. Were you able to watch the video and see the performance degradation I observed? If dyntopo isn’t supposed to apply to the Grab brush, it seems like it shouldn’t be any slower. If it would help, I could repeat the above experiment on the official 2.8 build (the above was the official 2.79 build) and post a video of that. Let me know.

Ok, fair enough. Were you able to watch the video and see the performance degradation I observed? If dyntopo isn’t supposed to apply to the Grab brush, it seems like it shouldn’t be any slower. If it would help, I could repeat the above experiment on the official 2.8 build (the above was the official 2.79 build) and post a video of that. Let me know.

Yes, that's fine.

For better performance, try turning off the wireframe overlay.

Yes, that's fine. For better performance, try turning off the wireframe overlay.
Poster

I'm not sure I understand your comment "For better performance, try turning off the wireframe overlay" -- in the video above, wireframe is already disabled, isn't it? I also still don't understand why there is a performance difference with dyntopo on vs off if the grab brush doesn't actually create dynamic topology.

I've just downloaded 2.8-beta official build. I'll try that and upload a video if I get the same behavior with it.

I'm not sure I understand your comment "For better performance, try turning off the wireframe overlay" -- in the video above, wireframe is already disabled, isn't it? I also still don't understand why there is a performance difference with dyntopo on vs off if the grab brush doesn't actually create dynamic topology. I've just downloaded 2.8-beta official build. I'll try that and upload a video if I get the same behavior with it.
Poster

Ok, here's a video showing the same behavior on Blender 2.8 beta with the official build from blender.org. Wireframe is disabled, but this doesn't seem to have any impact on performance.

Using Grab without dynamic topology is fast, as soon as dyntopo is enabled, the screen refreshes at a fraction of the speed.

Screencast_03-20-2019_11:55:02 AM.webm

Ok, here's a video showing the same behavior on Blender 2.8 beta with the official build from blender.org. Wireframe is disabled, but this doesn't seem to have any impact on performance. Using Grab without dynamic topology is fast, as soon as dyntopo is enabled, the screen refreshes at a fraction of the speed. [Screencast_03-20-2019_11:55:02 AM.webm](https://archive.blender.org/developer/F6856987/Screencast_03-20-2019_11_55_02_AM.webm)
YAFU commented 4 years ago

Added subscriber: @YAFU

Added subscriber: @YAFU
YAFU commented 4 years ago

Hello.
It is not yet clear to me if the performance problem with Dyntopo happens mainly in Linux or in all operating systems.
https://developer.blender.org/T54807

Hello. It is not yet clear to me if the performance problem with Dyntopo happens mainly in Linux or in all operating systems. https://developer.blender.org/T54807
Poster

Hi @YAFU, I just booted into Windows 10, downloaded blender 2.8 official packages and repeated the test there.

I still see a difference in performance between dyntopo enabled vs disabled on Windows. It is, however, much smaller than what I see on Linux: Linux sees performance drop to maybe 2-3 FPS, whereas Windows sees a drop to around 15 FPS.

However, I think this is beside the point: if the grab brush doesn't create any topology, why does toggling dyntopo on and off change the performance at all, on any operating system? Perhaps Linux is slower, but if dyntopo doesn't do anything for the grab brush, it should be the same amount of slower, regardless of dyntopo being enabled, right?

Hi @YAFU, I just booted into Windows 10, downloaded blender 2.8 official packages and repeated the test there. I still see a difference in performance between dyntopo enabled vs disabled on Windows. It is, however, much smaller than what I see on Linux: Linux sees performance drop to maybe 2-3 FPS, whereas Windows sees a drop to around 15 FPS. However, I think this is beside the point: if the grab brush doesn't create any topology, why does toggling dyntopo on and off change the performance at all, on any operating system? Perhaps Linux is slower, but if dyntopo doesn't do anything for the grab brush, it should be the same amount of slower, regardless of dyntopo being enabled, right?
YAFU commented 4 years ago

I really have no idea about how Dyntopo works and I do not know why Dyntopo is much slower compared to Dyntopo disabled in this case. I have found this answer and I am not sure if that could be the explanation:
https://blenderartists.org/t/sculpting-low-performance-but-low-cpu-usage/611229/2

Anyway as a Linux user, the comparison with Windows that you made makes me sad, it's a lot of difference.
I have tried with your file in Linux and I also get about 2 fps with your file while using Grab brush. i7-3770 CPU.

I really have no idea about how Dyntopo works and I do not know why Dyntopo is much slower compared to Dyntopo disabled in this case. I have found this answer and I am not sure if that could be the explanation: https://blenderartists.org/t/sculpting-low-performance-but-low-cpu-usage/611229/2 Anyway as a Linux user, the comparison with Windows that you made makes me sad, it's a lot of difference. I have tried with your file in Linux and I also get about 2 fps with your file while using Grab brush. i7-3770 CPU.
Added subscribers: @NicholasBishop, @ideasman42, @ErickNyanduKabongo

In #62718#645228, @j4m3z0r wrote:
Hi @YAFU, I just booted into Windows 10, downloaded blender 2.8 official packages and repeated the test there.

I still see a difference in performance between dyntopo enabled vs disabled on Windows. It is, however, much smaller than what I see on Linux: Linux sees performance drop to maybe 2-3 FPS, whereas Windows sees a drop to around 15 FPS.

However, I think this is beside the point: if the grab brush doesn't create any topology, why does toggling dyntopo on and off change the performance at all, on any operating system? Perhaps Linux is slower, but if dyntopo doesn't do anything for the grab brush, it should be the same amount of slower, regardless of dyntopo being enabled, right?

I will assume that you are a kind of new Blender user or a new dyntopo user. This is not a really "bug", this is known dyntopo limitation. Since @NicholasBishop had introduced dyntopo in Blender, we have been having performance problem. Some years ago @ideasman42 and @spy-fi had boost the performance a bit but dyntopo has never performance the same as multires. or basic sculpting.
I will advice to add detail only where needed when using dyntopo, and keep your model as low as possible. you can decimate your model and continue adding more details from the decimated one.
Here is me sculpting a head, note how heavy is my model at the end and compare to yours. -> https://youtu.be/Qt8McFQPOBE

> In #62718#645228, @j4m3z0r wrote: > Hi @YAFU, I just booted into Windows 10, downloaded blender 2.8 official packages and repeated the test there. > > I still see a difference in performance between dyntopo enabled vs disabled on Windows. It is, however, much smaller than what I see on Linux: Linux sees performance drop to maybe 2-3 FPS, whereas Windows sees a drop to around 15 FPS. > > However, I think this is beside the point: if the grab brush doesn't create any topology, why does toggling dyntopo on and off change the performance at all, on any operating system? Perhaps Linux is slower, but if dyntopo doesn't do anything for the grab brush, it should be the same amount of slower, regardless of dyntopo being enabled, right? I will assume that you are a kind of new Blender user or a new dyntopo user. This is not a really "bug", this is known dyntopo limitation. Since @NicholasBishop had introduced dyntopo in Blender, we have been having performance problem. Some years ago @ideasman42 and @spy-fi had boost the performance a bit but dyntopo has never performance the same as multires. or basic sculpting. I will advice to add detail only where needed when using dyntopo, and keep your model as low as possible. you can decimate your model and continue adding more details from the decimated one. Here is me sculpting a head, note how heavy is my model at the end and compare to yours. -> https://youtu.be/Qt8McFQPOBE
YAFU commented 4 years ago

I just installed Windows 7 to do the test. With today's 2.8 buildbot builds, Linux an Windows. Using this file:
Grab_dyntopo_2.8.blend
There is a clear difference in favor of Windows. You open the file and without zooming, you try to make a continuous stroke with Grab brush. In Windows there are a few jumps in the movement, but in Linux directly hangs for a few seconds without showing changes.
Has any developer been able to confirm this problem? Is there any open report about it? The previous report whose link I have shared above seems to have turned into an AMD CPU problem, but I have an intel i7-3770.
By the way, disabling dyntopo, the difference in performance is also in favor of Windows 7.

I just installed Windows 7 to do the test. With today's 2.8 buildbot builds, Linux an Windows. Using this file: [Grab_dyntopo_2.8.blend](https://archive.blender.org/developer/F6861288/Grab_dyntopo_2.8.blend) There is a clear difference in favor of Windows. You open the file and without zooming, you try to make a continuous stroke with Grab brush. In Windows there are a few jumps in the movement, but in Linux directly hangs for a few seconds without showing changes. Has any developer been able to confirm this problem? Is there any open report about it? The previous report whose link I have shared above seems to have turned into an AMD CPU problem, but I have an intel i7-3770. By the way, disabling dyntopo, the difference in performance is also in favor of Windows 7.
Poster

@ErickNyanduKabongo thanks for your note. Your assumptions are correct: I am a new blender user, and new to dynamic topology. However, I'm also a software engineer and have done some work on computer graphics (in the context of games).

Consequently, I appreciate that more geometry will involve greater computational complexity to manipulate, and that there exist tools to reduce the complexity of the model. I also understand that there is a performance delta between Windows and Linux.

However, none of those factors seem pertinent to the issue at hand.

The sole issue I'm trying to highlight here is this: when using the grab tool in sculpt mode, performance drops drastically when dynamic topology is enabled. For other sculpting tools this makes perfect sense, but quoting from above "The Grab tool doesn't create new geometry by design" (per @WilliamReynish), so I would not expect dyntopo to influence performance at all, in this specific case.

Reframing this: if dyntopo isn't intended to impact the behavior of the grab sculpting tool, shouldn't there be a branch somewhere in the code to wholly disable dyntopo (and eliminate its performance cost) if the grab sculpting tool is active?

Zooming out just a little more on this, whist it seems like a reasonable UI decision to make the grab tool available in sculpt mode (it is certainly more convenient than switching to edit mode and enabling proportional editing or similar), and for the grab tool to not create topology, I do think that surfacing the fact that dyntopo will not do anything in that mode would be helpful: it was surprising to me that no topology was created when dyntopo was enabled. Blender provides other warnings when topology won't be created (because of modifier configurations, for instance), this seems like an analogous case to me. However, I view this UI question secondary. Initially I'd just like to get closure on this question of the performance degradation.

@ErickNyanduKabongo thanks for your note. Your assumptions are correct: I am a new blender user, and new to dynamic topology. However, I'm also a software engineer and have done some work on computer graphics (in the context of games). Consequently, I appreciate that more geometry will involve greater computational complexity to manipulate, and that there exist tools to reduce the complexity of the model. I also understand that there is a performance delta between Windows and Linux. However, none of those factors seem pertinent to the issue at hand. The sole issue I'm trying to highlight here is this: when using the grab tool in sculpt mode, performance drops drastically when dynamic topology is enabled. For *other* sculpting tools this makes perfect sense, but quoting from above "The Grab tool doesn't create new geometry by design" (per @WilliamReynish), so I would not expect dyntopo to influence performance at all, *in this specific case*. Reframing this: if dyntopo isn't intended to impact the behavior of the grab sculpting tool, shouldn't there be a branch somewhere in the code to wholly disable dyntopo (and eliminate its performance cost) if the grab sculpting tool is active? Zooming out just a little more on this, whist it seems like a reasonable UI decision to make the grab tool available in sculpt mode (it is certainly more convenient than switching to edit mode and enabling proportional editing or similar), and for the grab tool to not create topology, I do think that surfacing the fact that dyntopo will not do anything in that mode would be helpful: it was surprising to me that no topology was created when dyntopo was enabled. Blender provides other warnings when topology won't be created (because of modifier configurations, for instance), this seems like an analogous case to me. However, I view this UI question secondary. Initially I'd just like to get closure on this question of the performance degradation.
Poster

This comment was removed by @j4m3z0r

*This comment was removed by @j4m3z0r*

Yes, you are right that it makes no intuitive sense why the Grab tool would be slower with Dyntopo enabled, given that the Grab tool doesn’t actually use dyntopo.

But, I suspect the technical issue could be because the Dyntopo feature organizes and processes the mesh in a different way that in turn has impact of all tools, even those that don’t add or remove geometry.

In conclusion, it would be great if it were faster. But, as of now I don’t think it is considered to be a bug.

@Sergey anything you want to add?

Yes, you are right that it makes no intuitive sense why the Grab tool would be slower with Dyntopo enabled, given that the Grab tool doesn’t actually *use* dyntopo. But, I suspect the technical issue could be because the Dyntopo feature organizes and processes the mesh in a different way that in turn has impact of all tools, even those that don’t add or remove geometry. In conclusion, it would be great if it were faster. But, as of now I don’t think it is considered to be a bug. @Sergey anything you want to add?

Added subscriber: @Sergey

Added subscriber: @Sergey
Poster

@WilliamReynish could we not simply ignore the setting of the dyntopo flag if the user has selected the grab tool? Or is there some subtlety to this that I'm missing?

@WilliamReynish could we not simply ignore the setting of the dyntopo flag if the user has selected the grab tool? Or is there some subtlety to this that I'm missing?
boemak commented 4 years ago

Added subscriber: @boemak

Added subscriber: @boemak
boemak commented 4 years ago

To be honest, there seems to be something fundamentally different between Windows and Linux in the performance department. Which is a shame, because I am just starting to like KDE. :)

To be honest, there seems to be something fundamentally different between Windows and Linux in the performance department. Which is a shame, because I am just starting to like KDE. :)
Poster

Hi @boemak, I just added some notes to this ticket on the subject of Windows vs Linux performance, however*this// issue impacts both Linux and Windows builds.

Hi @boemak, I just added some notes to [this ticket ](https:*developer.blender.org/T54807) on the subject of Windows vs Linux performance, however*this// issue impacts both Linux and Windows builds.
boemak commented 4 years ago

Hi James, I saw those and they prompted me to update the case. Maybe Windows just hides the issue better?

Hi James, I saw those and they prompted me to update the case. Maybe Windows just hides the issue better?
mont29 commented 4 years ago
Owner

Added subscriber: @mont29

Added subscriber: @mont29
mont29 commented 4 years ago
Owner

Changed status from 'Open' to: 'Archived'

Changed status from 'Open' to: 'Archived'
mont29 closed this issue 4 years ago
mont29 self-assigned this 4 years ago
mont29 commented 4 years ago
Owner

Fact that grab becomes slower when dyntopo is enabled is totally expected, dyntopo uses a much more complex set of data, and as already explained, dyntopo applies globally to a sculpt session, it's not related to which tool is being used.

Performances in general are always possible to improve, but think that report can be archived then, thanks.

Fact that grab becomes slower when dyntopo is enabled is totally expected, dyntopo uses a much more complex set of data, and as already explained, dyntopo applies globally to a sculpt session, it's not related to which tool is being used. Performances in general are always possible to improve, but think that report can be archived then, thanks.
Sign in to join this conversation.
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/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/Modeling
Interest/Modifiers
Interest/Motion Tracking
Interest/Nodes & Physics
Interest/Overrides
Interest/Performance
Interest/Performance
Interest/Physics
Interest/Pipeline, Assets & I/O
Interest/Platforms, Builds, Tests & Devices
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
legacy module/Animation & Rigging
legacy module/Core
legacy module/Development Management
legacy module/Eevee & Viewport
legacy module/Grease Pencil
legacy module/Modeling
legacy module/Nodes & Physics
legacy module/Pipeline, Assets & IO
legacy module/Platforms, Builds, Tests & Devices
legacy module/Python API
legacy module/Rendering & Cycles
legacy module/Sculpt, Paint & Texture
legacy module/Triaging
legacy module/User Interface
legacy module/VFX & Video
legacy project/1.0.0-beta.2
legacy project/Asset Browser (Archived)
legacy project/BF Blender: 2.8
legacy project/BF Blender: After Release
legacy project/BF Blender: Next
legacy project/BF Blender: Regressions
legacy project/BF Blender: Unconfirmed
legacy project/Blender 2.70
legacy project/Code Quest
legacy project/Datablocks and Libraries
legacy project/Eevee
legacy project/Game Animation
legacy project/Game Audio
legacy project/Game Data Conversion
legacy project/Game Engine
legacy project/Game Logic
legacy project/Game Physics
legacy project/Game Python
legacy project/Game Rendering
legacy project/Game UI
legacy project/GPU / Viewport
legacy project/GSoC
legacy project/Infrastructure: Websites
legacy project/LibOverrides - Usability and UX
legacy project/Milestone 1: Basic, Local Asset Browser
legacy project/Nodes
legacy project/OpenGL Error
legacy project/Papercut
legacy project/Pose Library Basics
legacy project/Retrospective
legacy project/Tracker Curfew
legacy project/Wintab High Frequency
Meta/Good First Issue
Meta/Papercut
migration/requires-manual-verification
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 & Devices
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 Information 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 Milestone
No project
No Assignees
6 Participants
Notifications
Due Date

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#62718
Loading…
There is no content yet.