Grease Pencil Build and Simplify Modifier Order Ignored #66744

Closed
opened 2019-07-12 10:31:53 +02:00 by Philip Holzmann · 19 comments

System Information
Operating system: Windows 10 64 bit
Graphics card: Nvidia GTX 750 Ti

Blender Version
Broken: blender-2.80.0-git.d663048696b2-windows64

Short description of error
If a Grease Pencil Object has both a Simplify and Build Modifier, it doesn't matter which order they come in.
It always behaves as if the Simplify Modifier came after the Build Modifier.

I'd expect Simplify before Build to behave as if the Simplify Modifier was applied first.

Exact steps for others to reproduce the error
GreaseBuild.blend
From left to right:

  1. Simplify before Build
  2. Build before Simplify
  3. Simplify before Build, with Simplify applied

As you can see, 1 and 2 behave the same (when you play the animation).
However, I'd expect 1 to behave the same as 3.

**System Information** Operating system: Windows 10 64 bit Graphics card: Nvidia GTX 750 Ti **Blender Version** Broken: blender-2.80.0-git.d663048696b2-windows64 **Short description of error** If a Grease Pencil Object has both a Simplify and Build Modifier, it doesn't matter which order they come in. It always behaves as if the Simplify Modifier came after the Build Modifier. I'd expect Simplify before Build to behave as if the Simplify Modifier was applied first. **Exact steps for others to reproduce the error** [GreaseBuild.blend](https://archive.blender.org/developer/F7601868/GreaseBuild.blend) From left to right: 1. Simplify before Build 2. Build before Simplify 3. Simplify before Build, with Simplify applied As you can see, 1 and 2 behave the same (when you play the animation). However, I'd expect 1 to behave the same as 3.

Added subscriber: @Foaly

Added subscriber: @Foaly
Antonio Vazquez was assigned by Sebastian Parborg 2019-07-12 11:00:28 +02:00

IIRC this is how is designed because there are several types (internally) of modifiers... modifiers that change geometry, modifiers that generate geometry and modifiers that use time.

I will review, but I think this is a problem of communicate this and explain how and why the modifiers are evaluated in that way.

IIRC this is how is designed because there are several types (internally) of modifiers... modifiers that change geometry, modifiers that generate geometry and modifiers that use time. I will review, but I think this is a problem of communicate this and explain how and why the modifiers are evaluated in that way.

Added subscriber: @ZedDB

Added subscriber: @ZedDB

@ZedDB I have been looking at the code, and the build modifier must be evaluated before the others modifiers due this modifier needs to read all frames to decide what to do, but the other modifiers only read the current frame and strokes.

Run Build before is done for data access and also for performance, so all geometry modifiers (Build, Mirror and Array) run first, and then all modify modifiers. Time modifier plays totatlly different.

I don't think we can change this or consider as a bug, but a limitation of what you can do with modifiers... maybe we could add some type of warning on modifier panel to inform about this.

Note: For 2.81 I'm going to replace where the modifiers are evaluated (see #66294). I have the change done in greasepencil branch, but we decided not to move to 2.80 and wait for 2.81.

@ZedDB I have been looking at the code, and the build modifier must be evaluated before the others modifiers due this modifier needs to read all frames to decide what to do, but the other modifiers only read the current frame and strokes. Run Build before is done for data access and also for performance, so all geometry modifiers (Build, Mirror and Array) run first, and then all modify modifiers. Time modifier plays totatlly different. I don't think we can change this or consider as a bug, but a limitation of what you can do with modifiers... maybe we could add some type of warning on modifier panel to inform about this. Note: For 2.81 I'm going to replace where the modifiers are evaluated (see #66294). I have the change done in greasepencil branch, but we decided not to move to 2.80 and wait for 2.81.

@antoniov How about we make it so that the build modifier adds a warning to its UI if it is not first in the stack?

@antoniov How about we make it so that the build modifier adds a warning to its UI if it is not first in the stack?

Yes, this is the idea... I have seen this before in the code for some modifiers, but don't remember where

Yes, this is the idea... I have seen this before in the code for some modifiers, but don't remember where
Antonio Vazquez was unassigned by Dalai Felinto 2019-12-23 16:33:48 +01:00

Added subscriber: @antoniov

Added subscriber: @antoniov

Added subscriber: @mont29

Added subscriber: @mont29

That is a fairly sever usability issue, order in the stack should always be actual order of evaluation. If some modifiers need to run first, then they should be forcefully put in first positions of the stack.

We have that with regular Object modifier e.g., Multires cannot be moved or added after a modifier like Build, because the latter breaks access to mesh orig data needed by multiress…

It is most likely too late to address that in 2.82, but would consider it a show-stopper for 2.83 then. You cannot expect users to guess the actual order of evaluation, they have to get what they see here. ;)

That is a fairly sever usability issue, order in the stack should **always** be actual order of evaluation. If some modifiers need to run first, then they should be forcefully put in first positions of the stack. We have that with regular Object modifier e.g., Multires cannot be moved or added after a modifier like Build, because the latter breaks access to mesh orig data needed by multiress… It is most likely too late to address that in 2.82, but would consider it a show-stopper for 2.83 then. You cannot expect users to guess the actual order of evaluation, they have to get what they see here. ;)

@mont29 Are there any tag to force a modifier to be first in stack?

@mont29 Are there any tag to force a modifier to be first in stack?

@antoniov For 'regular' data check eModifierTypeFlag_RequiresOriginalData flag in BKE_modifier.h. However if you have three different 'stages' you'll probably need another extra tag for the second stage?

@antoniov For 'regular' data check `eModifierTypeFlag_RequiresOriginalData` flag in `BKE_modifier.h`. However if you have three different 'stages' you'll probably need another extra tag for the second stage?
Antonio Vazquez self-assigned this 2020-01-28 22:44:12 +01:00

I'm going to refactor the modifier loop to use the order on the stack. All the changes will be done in greasepencil-refactor branch, because we have changed all modifiers evaluation for the new drawing engine.

I'm going to refactor the modifier loop to use the order on the stack. All the changes will be done in greasepencil-refactor branch, because we have changed all modifiers evaluation for the new drawing engine.

I don't think we must consider as high priority, just a Know Limitation that will be fixed in 2.83 with the new engine and evaluation logic.

I don't think we must consider as high priority, just a Know Limitation that will be fixed in 2.83 with the new engine and evaluation logic.

This is fixed in the branch in commit: d0b8b49b447b

This is fixed in the branch in commit: d0b8b49b447b

We keep this as Know Issue in this version because it will be fixed when the refactor branch will be merged in master branch.

We keep this as Know Issue in this version because it will be fixed when the refactor branch will be merged in master branch.

Added subscriber: @brecht

Added subscriber: @brecht

Is this fixed now?

Is this fixed now?

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'

Yes, fixed in 2.83

Yes, fixed in 2.83
Thomas Dinges added this to the 2.83 LTS milestone 2023-02-08 16:39:39 +01:00
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
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
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
Overlay
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
Interest
Workbench
Interest: X11
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
No Milestone
No project
No Assignees
6 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#66744
No description provided.