home

Blender + Godot + C++

November 28, 2020

Project Setup

This week I made a number of achievements (in spite of the holiday downtime). I've setup a new project repo with a CMake build system. CMake can also generate project files for Xcode, Visual Studio, and other IDEs. The project is using GoogleTest 1.7 for unit testing support.

I've also setup a successful integration with the Godot game engine. I can build a static library and have it linked directly to a fresh build of the Godot engine. The instructions were great. Building Godot from source can take about 10 minutes on my laptop but if I'm just recompiling a single module and relinking a static library it takes only a few seconds.

The only cumbersome part is that I expect to use the STL in my native code but Godot does not rely upon the STL at all. Yet, I don't have access to the Godot datatypes from my static library. The practical implication is that I'll have to manually convert data when it passes between my native components and the Godot runtime.

I also tried to setup a digital content creation pipeline using Blender 2.83 for generating 2D and 3D meshes with animations. However, that did not go as well. I wanted to be able to render graphs as meshes using Blender to create the meshes. However, Blender does not have good support for animating meshes at a per vertex, edge, or face level. Additionally, graphs would be considered degenerate meshes by most file formats (and also by Godot importers). I can import meshes consisting of extruded polylines –animating them is still tricky though. Lastly, I needed to mess around with the Blender exporters for glTF and Collada file formats to get assets showing up in Godot. The Khronos Group glTF exporter for Blender 2.83 seems to work. So does the Godot scene exporter for Blender. Hopefully that will be good enough to start with. We'll see...

Game Design Updates

On Thanksgiving Day, I played a few rounds of Netrunner with my wife. In the process, I was painfully reminded that gameplay rules must be simple if a game is to be enjoyed. Netrunner is super complicated –to the point where it becomes hard to play. So, I've decided to rely upon some more basic game construction for Automaton.

To reduce complexity of the gameplay, I'm going to ensure that every object or tool has a single purpose. Furthermore, I'm going to ensure that each resource type can only be consumed by one thing. Lastly, I've determined that the text-elements are all going to be rendered as normal Godot Node2D views. And finally, each program will mutate at most 2 views to limit the amount of visual context switching.

Next week, I hope to have some simple visual assets to share –stay tuned!