-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Artefacts appear when filled polygons are added to a plot #36
Comments
I am also struggling with this issue. I am downsampling line plots with many plot points to two plots that display the minimum values and maximum values respectively, think a signal envelope. Then I try to fill the area between the minimum and maximum plots with polygons, to create a shaded area that signifies that it is a span, but I get these artifacts that @berke mentions too. Which makes it unusable. |
@CramBL maybe this is related to the graphics stack. What platform are you on? |
x86 Ubuntu 22.04
Driver: Intel Nouveau
This laptop: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadp/thinkpad-p16v-16-inch-intel-mobile-workstation/len101t0071 |
Same issue (using your example repo) on And on the same machine running Windows 11 |
You can fairly easily reproduce this issue on https://www.egui.rs/ by selecting the Just move the circles to produce tight angles between the lines It also produces another surprising result occasionally, which is that the blue filled area spills over and goes outside the boundaries marked by the green lines. |
Confirmed. I've just tested with 0.29.1 the issue is still here.
Running the test program under renderdoc one can see that the artefacts are present in the mesh received by OpenGL, so that it's not a driver issue. Upon further inspection, I traced this down to the egui tessellator's "feathering" feature. When I disable feathering as below I don't see the artefacts anymore.
EDIT: Unfortunately single-pixel lines drawn without feathering look really ugly. |
Fantastic work! I know very little of graphics programming, but I could still try to take a look at the feathering implementation. |
Relevant issue: emilk/egui#1226 The issue was linked right above this line: https://github.com/emilk/egui/blob/83a30064f4812d0029532675a5f2bf38c257ad0e/crates/epaint/src/tessellator.rs#L460 Flipping It seems @emilk and the rest are quite aware of the issue and the trade-off they have made in the current implementation. I assume it takes an expert + time to resolve this issue so I won't look into the implementation any further. |
I had a look at the feathering code and I think one of the problems is a conceptual issue where every point in a path is associated with one normal. For a closed polygon, a point will be associated with two normals in general. In the meantime, an easy fix could be to expose an option somewhere to allow feathering to be disabled on a polygon-by-polygon basis. |
Thanks for the discussion and pointers here @berke @CramBL, I had encountered a similar problem in a triangulation visualization and assumed I must had made a mistake in the polygons I was defining, but stumbled on this issue and realize I'm not the only one! I am currently only seeing the problem I think in triangles that are really obtuse to the point that you have to zoom in to even see that it's a triangle and not just a straight line. I'd like to try to figure out a workaround though other than not drawing it, since they are valid and present triangles in the triangulation. |
@berke many thanks! 🙏 I applied your suggestion to add ctx.tessellation_options_mut(|to| {
to.feathering = false;
}); and in my case it works great, the artefacts are no longer present. |
Filled polygons added to a plot show line-shaped artefacts under certain zooming conditions.
I have an
eframe::App
containing a canvas containing aPlot
, where I draw filled triangles usingui.polygon
.For certain triangles and at certain zoom levels, this produces fill-colored linear artefacts.
No artefacts appear if the triangles are not filled.
To Reproduce
Expected behavior
There should be no artefacts.
Screenshots
Real-world case:
Screenshot from simplified PoC:
Additional context
Latest
egui
andegui_plot
x86 machine under Debian and X11 with NVIDIA driver 535.183.01, xfce4 with xfwm 4.18.0-1, no compositing
The text was updated successfully, but these errors were encountered: