afonsolage / projekto

Voxel game made with Bevy Engine
MIT License
59 stars 4 forks source link

Filtered empty chunks to not be sent to meshing worker #18

Closed afonsolage closed 2 years ago

afonsolage commented 2 years ago

Currently the mesh generation for 32³ chunks on a 8³ landscape takes 13s. This PR tries to reduces this time.

afonsolage commented 2 years ago

Reduced from 13s to 12s by filtering empty chunks on mesh generation worker

afonsolage commented 2 years ago

Focusing on optimize faces_merging since it runs a lot!

generate_vertices              avg: 41824μs, samples:   766, min: 11341μs, max: 89226μs, meta:     5μs
faces_merging                  avg: 30426μs, samples:   550, min:  8859μs, max: 65351μs, meta:     0μs
faces_occlusion                avg: 19727μs, samples:   766, min:  2414μs, max: 25695μs, meta:     0μs
process_batch                  avg:  3638μs, samples:   512, min:  2723μs, max:  7620μs, meta:   634μs
load_chunk                     avg:  3629μs, samples:   512, min:  2719μs, max:  7584μs, meta:     0μs
load_cache                     avg:  3585μs, samples:   512, min:  2702μs, max:  7509μs, meta:     0μs
update_landscape_system        avg:  1491μs, samples:    13, min:   618μs, max:  4913μs, meta:     5μs
update_chunk                   avg:   627μs, samples:   512, min:   354μs, max:   886μs, meta:     0μs
vertices_computation           avg:    94μs, samples:   550, min:     2μs, max:   676μs, meta:     0μs
merge_faces                    avg:     8μs, samples: 101994, min:     1μs, max:  1745μs, meta:   156μs
update_world_system            avg:     6μs, samples:   135, min:     2μs, max:   173μs, meta:     1μs
update_chunks_system           avg:     2μs, samples:     1, min:     2μs, max:     2μs, meta:   437μs
spawn_chunks_system            avg:     1μs, samples:   512, min:     1μs, max:   202μs, meta:     0μs
afonsolage commented 2 years ago

Reduced from 12s to 9s. Now the bottleneck is faces_occlusion!


generate_vertices              avg: 32170μs, samples:   766, min: 11605μs, max: 55936μs, meta:     5μs
faces_occlusion                avg: 20084μs, samples:   766, min:  2422μs, max: 29694μs, meta:     0μs
faces_merging                  avg: 16485μs, samples:   550, min:  8977μs, max: 26277μs, meta:     0μs
process_batch                  avg:  3622μs, samples:   512, min:  2753μs, max:  5874μs, meta:   634μs
load_chunk                     avg:  3615μs, samples:   512, min:  2749μs, max:  5863μs, meta:     0μs
load_cache                     avg:  3572μs, samples:   512, min:  2732μs, max:  5762μs, meta:     0μs
update_landscape_system        avg:  1464μs, samples:    10, min:   857μs, max:  2358μs, meta:     5μs
update_chunk                   avg:   628μs, samples:   512, min:   355μs, max:   850μs, meta:     0μs
vertices_computation           avg:    90μs, samples:   550, min:     1μs, max:   535μs, meta:     0μs
spawn_chunks_system            avg:     6μs, samples:    61, min:     1μs, max:   145μs, meta:     8μs
update_world_system            avg:     6μs, samples:   134, min:     2μs, max:   194μs, meta:     2μs
merge_faces                    avg:     4μs, samples: 28644, min:     1μs, max:   490μs, meta:   311μs
update_chunks_system           avg:     1μs, samples:     1, min:     1μs, max:     1μs, meta:   322μs```
afonsolage commented 2 years ago

I wasn't able to find any other big improvements, so we'll stick with this improvement for the time being. The performance will be better once #7 is done