openage icon indicating copy to clipboard operation
openage copied to clipboard

Speed up converter texture packing with Cython

Open heinezen opened this issue 5 years ago • 4 comments

Required skills: Cython

Difficulty: Medium

Animation frames from AoE2 graphics files are packed into a texture atlas by the openage converter. We use bin packing to find the optimal arrangement (= smallest atlas dimensions) of the frames in the atlas. Bin packing becomes computationally intensive if a lot of frames are packed (looking at you Definitive Edition), so we want to optimize the algorithm as much as possible.

The goal of this issue is to speed up the bin packing implemented here using Cython. The most important methods to cythonize are pack() and factor(), since they are responsible for the packing logic. Ideally, these functions should contain as little Python overhead as possible.

Additional optimization might be possible such as:

  • [ ] Currently pack() gets passed a list of frame objects, but technically only width, height and index of a frame are needed.
  • [ ] Most of the games have a fixed number of frames per animation (e.g. 50 frames for a unit animation in AoC). These could be hardcoded as lookups into factor()
  • [ ] texture_merge.pyx, the function initiating the binpacking, could also use optimization for merging the individual frames into the atlas using the packer settings.

You can test your changes with the singlefile media converter.

Further Reading

heinezen avatar Jan 22 '21 18:01 heinezen

Looking in the binpack.pyx history, seems that the converter already received some speed up improvement

fabiobarkoski avatar Jul 11 '24 02:07 fabiobarkoski

@fabiobarkoski It has been converted to Cython but none of the points in the ssue have been solved completely afaik.

heinezen avatar Jul 12 '24 00:07 heinezen

Can I try to work on it? But I'll need some guidance :)

fabiobarkoski avatar Jul 12 '24 00:07 fabiobarkoski

You absolutely can :) Although it might be a bit harder than medium difficulty if you don't work with Cython much. Just saying :D

heinezen avatar Jul 12 '24 01:07 heinezen