I have not posted anything in months so I thought it was time to tell the world that Pixleon is still alive.
During the last eight months most of my work-related energy has been put into creating a successful launch of a new product for a customer I have been collaborating with during the last two years. It has been a fun, trying but rewarding time. During this period I have gotten the chance to learn and become productive in Rust. I have also been writing some Javascript, with mixed feelings. Anyway, the intention with this blog post is not to cover these programming languages, or the project I am helping out with, but rather connect to one of the goals I had with the last twelve months.
If you read the previous post I wrote about exploring commercial game engines to broaden my view and understanding of what is available out in the wild. I must confess that I thought I would be able to invest more time into this endeavour. I really try not to work more than eight hours a day since I want to have time and energy for other things like my family, friends and working out. I also would like to reduce the risk of burn out since I have a few friends that have already gone down that path. This means that there is currently not much room for personal projects since I have a full time contract with my customer. Sure, there is a difference between working on a personal project and doing contract work but I still think it is important to find time away from the computer to recharge.
That being said, during the last year I have still managed to look into Game Maker, Unreal Engine, Godot and Bevy. Not in depth, but enough to have a better understanding of what the different engines have to offer and how it feels to develop software using some of the tools they provide. For Unreal and Godot I only did small experiments but for Game Maker and Bevy I went a bit deeper. I already covered some thoughts about Game Maker but I want to add a few words about Unreal, Godot and Bevy. Note that the comments below do not cover any engine in depth, it is rather a short summary of my first impressions.
Let us start with the Unreal Engine. What I do like about Unreal is the fantastic (unmatched?) graphics capabilities. It is easy to make something look good and the free Quixel library together with the nice Quixel bridge plugin makes finding and applying great materials a breeze. I also experimented a bit with camera animation and particle systems. It was straight forward and the end-result looked good. I spent some time and effort to understand the Blueprint “programming” approach and even though I can see the benefit with this approach I did not fall in love with it. I think it boils down to the fact that I am used to writing code and dragging out nodes and connecting them is just not as appealing to me. I also did not fall in love with the fact that the editor crashed a few times, nor the shader compilation times. I do have a pretty decent machine at my disposal but maybe not fast enough to have a great Unreal Engine experience. The most important question I am currently trying to answer is: “Will I enjoy developing applications using engine/tool X?”. The answer to that for Unreal Engine currently is: “Maybe”. It probably depends on what kind of application and if I need to do most of the development using Blueprints or if I could use some other type of scripting language. I recently played “It Takes Two” by Hazelight (awesome game) and learned it was developed using Unreal Engine Angelscript. Maybe I would enjoy using something like that or just plain C++ more? If photo realism would be a goal for the project, Unreal Engine would still be my first choice. I might delve deeper into this engine during the upcoming year, time will tell. If I take into account collaboration with other developers and artists then Unreal Engine might be a good path forward.
So what about Godot then? I have been following the development of Godot on the sideline for some time now and I have been wanting to experiment with it for a while. I think I need to return to Godot later on because I have not spent enough time with it to give a proper review. I can tell you a bit about the first impressions though. My first thought when starting the editor was that it feels very snappy. The UI is very responsive and working with nodes felt natural to me. I experimented a bit with their non-baking global illumination solutions but I was nowhere near getting the same quality as I get using Unreal Engine. Part of that is probably to blame on me and parts of it is probably due to limitations in the technology. I did test GDScript a bit and I think I would enjoy creating games using that. It seems like more Unity developers have been turning towards Godot lately so it might get even better traction in the upcoming years.
Last but not least I have been experimenting with Bevy. I was mostly interested in trying out Bevy since it is written in Rust and I happen to have fallen in love with Rust during the last year. Everything with Rust is not great but the cross platform support, cargo, compile-time help you get etc is really good compared to what I am used to. I have been struggling a bit with Rust when I want to try out a simple idea and have to fight the borrow-checker, so it is not all roses.
I did learn that Rust and Bevy made it easy to develop applications for the web by leveraging WASM. So I was a bit interested in exploring that further. After a while I had a simple application that I could link from this very site (I do not intend to keep this experiment for long so no real point to link to it here). I was able to get some simple lighting going and some basic support for keyboard or touchscreen input. The touchscreen input was especially interesting since this would allow me to build mobile web applications using Bevy.
I was a bit surprised how easy it was to work with Bevy and I enjoyed the development process more than some of the alternatives I tried earlier. Compared to some of the other engines Bevy is still far behind but for some types of applications it is probably a better choice compared to behemoths like Unreal Engine. There is for instance no editor for Bevy, at least not yet. Not having an editor has not been a problem for me though. I like writing code in Emacs and running the game directly from Emacs. The shorter iteration time the better. Bevy was pretty easy to get up’n running with Emacs and by dynamically linking the code I was able to get pretty good iteration speed (around 3s). It is not as good as a built-in scripting language where you can edit the game while it is running but it is not bad. Also, integrating a scripting language on top of Bevy could also be a path to explore in the future.
After I finished the WASM experiment I wanted to dig more into game creation using Bevy. I have a simple POC (see image at the top) where the player should collect letters to form words. The idea is that the game shows an image of “something” and then the player must find the letters to spell the word that “something” represents. This is just a simple idea to get a feel for how it would be to create a real game using Bevy. There are still a few questions left to be answered so I will probably continue with this POC for some time. What I do know already though is that I enjoyed creating this POC in Bevy. Like a lot. The iteration time could be better for sure, but the simplicity in realizing my ideas for the “game” (so far) really appeals to me.
I am not sure where this will take me but I am pretty sure I will keep on experimenting with game engines in the upcoming year. That being said, my family along with my well being and the success of the company I am currently collaborating with is currently my top priority. Until next time.