Regression: Wire frame display doesn't draw every edge in some cases #102365
Labels
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
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#102365
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
System Information
Operating system: Windows-10-10.0.19045-SP0 64 Bits
Graphics card: NVIDIA GeForce GTX 1060 6GB/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 526.47
Blender Version
Broken: version: 3.5.0 Alpha, branch: master, commit date: 2022-11-08 01:18, hash:
fddcdcc20c
Worked: 3.4
Caused by
10131a6f62
Short description of error
in some meshes the wireframe display doesn't show all edges. Most obvious in 2d meshes but also with meshes that have stretched or concave face areas. Happens in wireframe mode, wireframe overlay and object properties->VP display: wireframe
this is the same object in object and edit mode
wireframe_overlay_bug.blend
select object 3, enter edit mode, return to object mode - wire overlay is gone.
save and open in blender 3.4, select any, enter edit/sculpt mode - peekaboo, wireframe is back in objectz mode
Added subscriber: @heini
#102407 was marked as duplicate of this issue
wire frame display doesn't draw every edge in some casesto Regression: Wire frame display doesn't draw every edge in some casesChanged status from 'Needs Triage' to: 'Confirmed'
Added subscribers: @HooglyBoogly, @iss
Bisect seems to point at
10131a6f62
CC @HooglyBoogly
Hmm, interesting. Thanks for the report.
Added subscriber: @lichtwerk
This is because
bmesh_quick_edgedraw_flag
clears theME_EDGEDRAW
flag if the angle between faces is too small, see the comment:This seems to be broken since 2.8 however (drawing code was using
ME_EDGERENDER
instead) , so the whole business withViewport Display
>Show
>All Edges
is also broken since 2.8 (shows all edges anyways).But now we are in the unfortunate situation that
bmesh_quick_edgedraw_flag
clears theME_EDGEDRAW
but we cant even get all edges to display withViewport Display
>Show
>All Edges
Will look into this (the idea is to fix both the recent regression as well as the older 2.8 regression in one go)
Hm, this might require a bigger refactor than anticipated, so would like input from other devs first.
file for the Icosphere case below:
T102365_display_as_wire_normal_threshold.blend
To recap:
10131a6f62
, the following situation was broken (since 2.8, was working in 2.79):display_type
set toWire
has all edges displayedViewport Display
>Show
>All Edges
OFF -- that setting is only used for the wireframe overlay in 2.8)bmesh_quick_edgedraw_flag
would "correctly" clear theME_EDGEDRAW
flag based on face angle, but for drawingME_EDGERENDER
was used instead inextract_edge_fac_iter_poly_mesh
, settingMeshExtract_EdgeFac_Data
data to 255 mostly)10131a6f62
, the Icosphere case now actually behaves like in 2.79display_type
set toWire
has no edges displayedViewport Display
>Show
>All Edges
ON -- that setting is only used for the wireframe overlay in 2.8)d have to use something like
wires_all_grp` outside the overlay as well?10131a6f62
, the overlay is also brokenbmesh_quick_edgedraw_flag
would "correctly" clear theME_EDGEDRAW
flag based on angle, drawing now uses this inextract_edge_fac_iter_poly_mesh
, settingMeshExtract_EdgeFac_Data
data to 0 if the flag was cleared)Viewport Display
>Show
>All Edges
ON does not have an affect since it only results inwires_all_grp
to be used,MeshExtract_EdgeFac_Data
is still in effect, if it is zero,get_edge_sharpness
will still return negativeOne idea was to somehow pass
OB_DRAW_ALL_EDGES
tobmesh_quick_edgedraw_flag
to not clearME_EDGEDRAW
, but there might be cleaner solutions.Prefer if someone with a broader view takes a look here
Added subscribers: @fclem, @Jeroen-Bakker
CC @fclem
CC @Jeroen-Bakker
Added subscriber: @pablovazquez
IMO the technical bits and pieces should follow a design. As there is no clear idea how this should work I would say that the blender manual is the design. But current way is not consistent or clear to users.
In that case I would start with, what does the user want. and how can we make this consistent and predictive.
Blender 3.3.1
All Edges
option...Yes it is a mess!
To me some options are substractive, other are additive and other are overrides, which is not communicated to users. I rather have a single base and clearly defined additive and substractive functionality. IMO the base is what depsgraph outputs.
I don't know the details what should be done to the current code-base to get this working and that we have situations covered. So would like to get some feedback from others as well. @pablobazquez
Personally we should stick with previous implementation until we have a good design and the time to implement it. Doing to many changes after each other is not helping our userbase.
To me it looks like the best solution is to remove
bmesh_quick_edgedraw_flag
. That is only applied when leaving edit mode, which makes it a non-starter for anything procedural, and is inconsistent with all other uses of the draw flag.The one similar feature,
Viewport->Overlays->Wireframe slider
should be calculated as part of the mesh rendering process. I believe this is already implemented withextract_mesh_vbo_edge_fac.cc
.It doesn't appear to be working at the moment, I thought I tested that, sorry about that.
The "All Edges" option should be removed, since it's redundant with the other settings.
Classifying it as a 3.5 only bug to make the reporting gods happy. Not sure if we should lower the prio.
Well,
All Edges
is away to display all edges on a per object basis (even if the wireframe overlay slider reduced this for the whole scene, so the slider is connected with object viewport display settings) .I think this is usefull and I dont think there is another way to achieve this (nothing else triggers using
wires_all_grp
), so it is not redundant.Since this really needs some design (and while I applaud the directin of getting rid of edge flags), I really think the design should be done first.
My vote for reverting
10131a6f62
for now.But does it also has more priority than that the depsgraph has (Optimize Display)... All Wires might be a tag to ignore the wireframe slider but it is not clear.
I agree to revert it the change for now to reduce confusion later on.
Reverting would be an option, but I'd like to avoid reverting the commit if necessary, I don't think the code churn is necessary here.
As far as I can tell, restoring the previous behavior is quite simple. I've implemented that in D16451.
Added subscriber: @PancakeMSTR
This issue was referenced by
145839aa42
Changed status from 'Confirmed' to: 'Resolved'