Fix gizmo line width issue when using perspective (#9067)
# Objective - In bevy_polyline, we discovered an issue that happens when line width is smaller than 1.0 and using perspective. It would sometimes end up negative or NaN. I'm not entirely sure _why_ it happens. ## Solution - Make sure the width doesn't go below 0 before multiplying it with the alpha # Notes Here's a link to the bevy_polyline issue https://github.com/ForesightMiningSoftwareCorporation/bevy_polyline/issues/46 I'm not sure if the solution is correct but it solved the issue in my testing. Co-authored-by: François <mockersf@gmail.com>
This commit is contained in:
parent
cbe13f3aa5
commit
0d7e81ee81
@ -64,7 +64,7 @@ fn vertex(vertex: VertexInput) -> VertexOutput {
|
||||
#endif
|
||||
|
||||
// Line thinness fade from https://acegikmo.com/shapes/docs/#anti-aliasing
|
||||
if line_width < 1. {
|
||||
if line_width > 0.0 && line_width < 1. {
|
||||
color.a *= line_width;
|
||||
line_width = 1.;
|
||||
}
|
||||
@ -79,10 +79,10 @@ fn vertex(vertex: VertexInput) -> VertexOutput {
|
||||
let epsilon = 4.88e-04;
|
||||
// depth * (clip.w / depth)^-depth_bias. So that when -depth_bias is 1.0, this is equal to clip.w
|
||||
// and when equal to 0.0, it is exactly equal to depth.
|
||||
// the epsilon is here to prevent the depth from exceeding clip.w when -depth_bias = 1.0
|
||||
// the epsilon is here to prevent the depth from exceeding clip.w when -depth_bias = 1.0
|
||||
// clip.w represents the near plane in homogeneous clip space in bevy, having a depth
|
||||
// of this value means nothing can be in front of this
|
||||
// The reason this uses an exponential function is that it makes it much easier for the
|
||||
// The reason this uses an exponential function is that it makes it much easier for the
|
||||
// user to chose a value that is convenient for them
|
||||
depth = clip.z * exp2(-line_gizmo.depth_bias * log2(clip.w / clip.z - epsilon));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user