Meshlets software raster is flickering pixels when camera moves

Abierto
#26,467 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
rust

Línea de trabajo

The flicker comes from the software-raster threshold in crates/bevy_pbr/src/meshlet/cull_clusters.wesl, around lines 74-78, where sw_raster is set from project_aabb and a 64-pixel size check. Start by running cargo run --release --example meshlet --features meshlet,https,free_camera and moving the camera to the distance where pixels flicker. Done means the artifact is gone without disabling software raster globally, with the threshold or the projection logic explained.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

A-Rendering C-Bug S-Needs-Investigation

Bevy version and features

commit 76295a0d268e5a72079e4c2d7ba7db18bcf259ff (grafted, HEAD -> main, origin/main, origin/HEAD)

Relevant system information

AdapterInfo { name: "NVIDIA GeForce RTX 3080", vendor: 4318, device: 8710, device_type: DiscreteGpu, device_pci_bus_id: "0000:01:00.0", driver: "NVIDIA", driver_info: "610.88", backend: Vulkan, subgroup_min_size: 32, subgroup_max_size: 32, transient_saves_memory: Some(false), limit_bucket: None }

What you did

I've launched a meshlet example

cargo run --release --example meshlet --features meshlet,https,free_camera

What went wrong

I've observed flickering pixels at a certain distance.
Out of curiosity, I asked Claude what usually could be the cause.
After that i found out about software rasterization and tried to disable it.

https://github.com/bevyengine/bevy/blob/main/crates/bevy_pbr/src/meshlet/cull_clusters.wesl#L74-L78

var sw_raster = project_aabb(clip_from_local, near, aabb, &screen_aabb);
sw_raster = false; // Disabled Software render
   if sw_raster {
       let aabb_size = (screen_aabb.max.xy - screen_aabb.min.xy) * view.viewport.zw;
       sw_raster = all(aabb_size <= vec2<f32>(64.0));
   }

It resolved the issue but I tried

sw_raster = all(aabb_size <= vec2<f32>(16.0));

It also helped.

Additional information

Image

better to watch fullscreen

https://github.com/user-attachments/assets/3503905b-15df-443c-8039-4178fc703af8

Lenguaje dominante
Rust
Estrellas
49.7k
Forks
5k
Merge medio
3 d 19 h
PR fusionados (30 d)
134

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de bevyengine/bevy

Todos los issues de bevyengine/bevy

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.