animate1978 / MB-Lab

MB-Lab is a character creation tool for Blender 4.0 and above, based off ManuelBastioniLAB
Other
1.76k stars 308 forks source link

Optimize calculate_disp_pixels for faster displacement calculation #329

Closed Upliner closed 3 years ago

Upliner commented 3 years ago

My displacement calculation algorithm is faster and uses less memory

1) multiply_images function doesn't seem to be used anywhere so I removed it 2) pixels.foreach_get() is much faster than np.array(pixels) 3) I use in-place array modifications such as += and *= to get rid of excessive data copying and memory allocations 4) reshape(-1) is faster than flatten() and doesn't allocate additional memory

As a result my version is 2x faster, and calculate_disp_pixels function is 18x faster

Before:

2021-02-01 17:50:40,307 INFO: MB-Lab.materialengine - calculate_disp_pixels - 155 - start: calculate_disp_pixels human_female_displacement.png
2021-02-01 17:50:44,805 INFO: MB-Lab.materialengine - calculate_disp_pixels - 164 - finish: calculate_disp_pixels human_female_displacement.png
2021-02-01 17:50:48,840 INFO: MB-Lab.materialengine - calculate_displacement_texture - 314 - Displacement calculated in 8.53285837173462 seconds

After:

2021-02-01 17:42:59,544 INFO: MB-Lab.materialengine - calculate_disp_pixels - 155 - start: calculate_disp_pixels human_female_displacement.png
2021-02-01 17:42:59,784 INFO: MB-Lab.materialengine - calculate_disp_pixels - 172 - finish: calculate_disp_pixels human_female_displacement.png
2021-02-01 17:43:03,849 INFO: MB-Lab.materialengine - calculate_displacement_texture - 312 - Displacement calculated in 4.30582857131958 seconds
Upliner commented 3 years ago

UPD: now I also use foreach_set and now displacement calculation is really fast!

2021-02-01 18:17:39,929 INFO: MB-Lab.materialengine - calculate_disp_pixels - 155 - start: calculate_disp_pixels human_female_displacement.png
2021-02-01 18:17:40,195 INFO: MB-Lab.materialengine - calculate_disp_pixels - 172 - finish: calculate_disp_pixels human_female_displacement.png
2021-02-01 18:17:40,230 INFO: MB-Lab.materialengine - calculate_displacement_texture - 313 - Displacement calculated in 0.3054218292236328 seconds