Details
Custom attributes added to a Maya root object
Maya C++ plugin My main work on this project was done on the Maya plugin. When this plugin is installed together with the Houdini tools our artists provided it would extend Maya by giving objects extra attributes.
These attributes are engine features such as collision shapes/dimensions, setting collision layers, setting the object types etc. Besides this, it came with an exporter. This would use the Houdini tools to generate the collision mesh and
visual mesh of the track. This would also generate all the waypoints used by the lap system in the engine. In order to allow for jumps, a designer could create multiple ‘tracks’ in the same level and link them up using the Maya node editor.
The export has 2 settings, Debug and Release. Debug would use the collision mesh as its visual mesh thus reducing the export time by a lot.
In order to speed up export, even more, the export was multithreaded since the number of vertices put out by Houdini could be a lot depending on the Houdini tool settings the designer used
(before multithreading a release export could take up to 2.5 min with 3.3 million vertices. After the multithreading the same export took 41 seconds).
The outputted file is a binary file that could be fed directly to the engine.
Multiple track parts could be linked up to create one coherent track. This allowed for jumps and splits. The voodoo track nodes were created by the plugin and would take a Houdini tool object as input.
Input: For the input I wrote an interface that works cross-platform for both PC and PS4 although the game could only be played using a controller. On windows, I used Xinput for handling controller support. The mouse and keyboard were used to tweak the game with ImGui
The interfaced followed the listener pattern. That is to say in order to receive input an object had to be registered with a single input processing system.
The PhysX debugger could be used to debug the physics scene.
PhysX: Our PhysX implementation exposed most of the PhysX functionalities. Such as collision filtering and ray casts. It would also send out callback in a unity style interface but then written in C++. All most common collision shapes where supported
i.e. Capsule, Sphere, Box, Mesh, Convex hull and height maps. In debug mode, the PhysX visual debugger could be attached to view and debug the physics scene.
Gameplay Features: With regards to gameplay I was responsible for one of the early iterations of the vehicle behavior. Besides that, I also worked on the lap system that was built in the engine and on the different object types that are available in the engine.
We did not use an entity component system like unity because of time constraints and the specific target game of the engine could do without.