bevy/examples/3d
JMS55 a0faf9cd01
More triangles/vertices per meshlet (#15023)
### Builder changes
- Increased meshlet max vertices/triangles from 64v/64t to 255v/128t
(meshoptimizer won't allow 256v sadly). This gives us a much greater
percentage of meshlets with max triangle count (128). Still not perfect,
we still end up with some tiny <=10 triangle meshlets that never really
get simplified, but it's progress.
- Removed the error target limit. Now we allow meshoptimizer to simplify
as much as possible. No reason to cap this out, as the cluster culling
code will choose a good LOD level anyways. Again leads to higher quality
LOD trees.
- After some discussion and consulting the Nanite slides again, changed
meshlet group error from _adding_ the max child's error to the group
error, to doing `group_error = max(group_error, max_child_error)`. Error
is already cumulative between LODs as the edges we're collapsing during
simplification get longer each time.
- Bumped the 65% simplification threshold to allow up to 95% of the
original geometry (e.g. accept simplification as valid even if we only
simplified 5% of the triangles). This gives us closer to
log2(initial_meshlet_count) LOD levels, and fewer meshlet roots in the
DAG.

Still more work to be done in the future here. Maybe trying METIS for
meshlet building instead of meshoptimizer.

Using ~8 clusters per group instead of ~4 might also make a big
difference. The Nanite slides say that they have 8-32 meshlets per
group, suggesting some kind of heuristic. Unfortunately meshopt's
compute_cluster_bounds won't work with large groups atm
(https://github.com/zeux/meshoptimizer/discussions/750#discussioncomment-10562641)
so hard to test.

Based on discussion from
https://github.com/bevyengine/bevy/discussions/14998,
https://github.com/zeux/meshoptimizer/discussions/750, and discord.

### Runtime changes
- cluster:triangle packed IDs are now stored 25:7 instead of 26:6 bits,
as max triangles per cluster are now 128 instead of 64
- Hardware raster now spawns 128 * 3 vertices instead of 64 * 3 vertices
to account for the new max triangles limit
- Hardware raster now outputs NaN triangles (0 / 0) instead of
zero-positioned triangles for extra vertex invocations over the cluster
triangle count. Shouldn't really be a difference idt, but I did it
anyways.
- Software raster now does 128 threads per workgroup instead of 64
threads. Each thread now loads, projects, and caches a vertex (vertices
0-127), and then if needed does so again (vertices 128-254). Each thread
then rasterizes one of 128 triangles.
- Fixed a bug with `needs_dispatch_remap`. I had the condition backwards
in my last PR, I probably committed it by accident after testing the
non-default code path on my GPU.
2024-09-08 17:55:57 +00:00
..
3d_scene.rs Swapping back to using From<Color> for StandardMaterial in examples (#13566) 2024-05-29 13:50:28 +00:00
3d_shapes.rs Disabled usage of the POLYGON_MODE_LINE gpu feature in the examples (#14402) 2024-07-29 23:40:39 +00:00
3d_viewport_to_world.rs Return Results from Camera's world/viewport conversion methods (#14989) 2024-09-03 19:45:15 +00:00
animated_material.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
anisotropy.rs Fix some examples having different instruction text positions (#15017) 2024-09-02 22:48:48 +00:00
anti_aliasing.rs style: simplify string formatting for readability (#15033) 2024-09-03 23:35:49 +00:00
atmospheric_fog.rs glTF labels: add enum to avoid misspelling and keep up-to-date list documented (#13586) 2024-05-31 23:25:57 +00:00
auto_exposure.rs Fix some examples having different instruction text positions (#15017) 2024-09-02 22:48:48 +00:00
blend_modes.rs Fix common capitalization errors in documentation (#14562) 2024-07-31 21:16:05 +00:00
bloom_3d.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
clearcoat.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
color_grading.rs style: simplify string formatting for readability (#15033) 2024-09-03 23:35:49 +00:00
deferred_rendering.rs Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
depth_of_field.rs Have EntityCommands methods consume self for easier chaining (#14897) 2024-08-26 18:24:59 +00:00
fog.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
fog_volumes.rs Allow volumetric fog to be localized to specific, optionally voxelized, regions. (#14099) 2024-07-16 03:14:12 +00:00
generate_custom_mesh.rs Fix a few "repeated word" typos (#13955) 2024-06-20 21:35:20 +00:00
irradiance_volumes.rs style: simplify string formatting for readability (#15033) 2024-09-03 23:35:49 +00:00
lighting.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
lightmaps.rs glTF labels: add enum to avoid misspelling and keep up-to-date list documented (#13586) 2024-05-31 23:25:57 +00:00
lines.rs Highlight dependency on shader files in examples (#13824) 2024-06-12 14:16:01 +00:00
load_gltf.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
load_gltf_extras.rs update gltf example to use type-safe GltfAssetLabel::Scene (#14218) 2024-07-14 15:42:32 +00:00
meshlet.rs More triangles/vertices per meshlet (#15023) 2024-09-08 17:55:57 +00:00
motion_blur.rs Have EntityCommands methods consume self for easier chaining (#14897) 2024-08-26 18:24:59 +00:00
orthographic.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
parallax_mapping.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
parenting.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
pbr.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
post_processing.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
reflection_probes.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
render_to_texture.rs Simplify render_to_texture examples (#14855) 2024-08-25 14:15:11 +00:00
rotate_environment_map.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
scrolling_fog.rs Fix fog density texture offset seam (#14900) 2024-08-24 00:56:39 +00:00
shadow_biases.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
shadow_caster_receiver.rs Remove redundant imports (#12817) 2024-04-01 19:59:08 +00:00
skybox.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
spherical_area_lights.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
split_screen.rs Fix num_cascades in split_screen exmample for WebGL (#14601) 2024-08-04 13:57:22 +00:00
spotlight.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
ssao.rs Have EntityCommands methods consume self for easier chaining (#14897) 2024-08-26 18:24:59 +00:00
ssr.rs Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
texture.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
tonemapping.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
transmission.rs Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
transparency_3d.rs fix examples after the switch for msaa to a component (#14446) 2024-07-24 01:22:00 +00:00
two_passes.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
update_gltf_scene.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
vertex_colors.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
visibility_range.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
volumetric_fog.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
wireframe.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00