Published: Mon 04 September 2023
By heinezen
In blog .
tags: devlog news renderer converter release
Welcome to our monthly openage update. As we wrap up for release v0.5.0
, we can talk about a few quality-of-life
and speed improvements that happened over the last weeks.
Tales of Renderer Troubles
In last month's update, we announced the implementation of a stresstest for the renderer. This has now
been added in form of a simple render demo that incrementally adds renderable objects to the render
loop and logs the current FPS. It's very bare bones, but it gets the job done:
However, while playing around with the first few stresstest runs, we noticed that the renderer performance
was extremely bad (not to say abysmal). It barely managed handling 400 objects with 30 FPS and there were
massive slowdowns after only 100 rendered objects. Keep in mind that the objects in question are not just
units. They are everything that needs to be displayed in the game world: buildings, trees, birds,
cacti... If 400 objects were the limit, we would run out of frames pretty quickly in a real game.
So we set out to investigate and fix the bottleneck. It turns out that there was a call to the Python API
in the objects' frame update. Every frame the renderer would check its asset cache to see if the texture
required for a render object was already loaded from disk. The cache lookup would resolve the texture path,
initiating a Python call and introducing a massive overhead. We have since removed the calls to Python and
the stresstest now easily manages >3500 objects at 30 FPS - almost 9x as much as before.
New Startup Flow
In the new release, we want to make the initial startup more user-friendly, so that it's easier to
get the engine running. Well, maybe you should imagine large quotation marks around "user-friendly"
because the engine is very much not ready to be used by the general public. However, we wanted to make
sure that at least the people who get as far as successfully compiling everything are not greated with crashes.
To accomplish this, there is a new CLI startup flow that guide users through the initial setup phase
and the conversion process. Common installation folders for games can be automatically searched,
so that it should be easier to create usable modpacks no matter which AoE game or release you have.
Even if no installation is available, the converter is now able to download the
AoC Trial Version
as a fallback. We also made sure that the engine works with all game releases.
What's next?
After release v0.5.0
is done, we will do a brief planning session to set the milestones for the next
months. It's possible that we will prioritize removing legacy code in the next minor release
and take a step back from adding new features until that's done.
Questions?
Any more questions? Let us know and discuss those ideas by visiting our subreddit /r/openage !
As always, if you want to reach us directly in the dev chatroom:
Matrix: #sfttech:matrix.org