Virtuoso Engine

Description and Philosophy

Virtuoso Engine is my personal game and app development framework that I've been working on for about a decade or so in various iterations, and have shipped multiple apps on. The latest version is being used in the development of "Killing Baby Hitler."

The philosophy of the engine is to be a lightweight framework style engine, sort of like RayLib, but more focusing on C++20, 3D, and physics rather than C99/2D. I wanted to make this because it's the language / paradigm under which I'm most productive as a very experienced C++ programmer with lots of graphics programming and graphics driver experience.

I also am a really strong booster of the "STB" style of library - of making components or functionality that can be forked off without dependencies into a single header, permissive license "library."

The "full" engine will be posted here on this page with an easy build / install and documentation... eventually :). For now see the public components, third party libraries, and screenshots below.

Public Components

Several components of the engine can be seen publicly on my GitHub:

YarnMachine - A standalone C++ virtual machine for YarnSpinner, a narrative scripting language I use in KBH for dialogue and game scripting.

Quake Style Console - Debug console and IMGUI widget. The first version of this was written 11 years ago as an experiment but I've been maintaining and using this ever since.

GLSugar - Graphics framework for modern / AZDO style OpenGL development with nicer syntax. This has code for basic texture and shader handling, as well as struct annotation to easily make VAO's and UBOs with correct memory alignments. Built on GLHPP (discussed below), a library written by a colleague to which I am a contributor.

uJNI - Helper functions and classes to wrangle JNI / NDK things. Not used in KBH, but was rapidly developed for the 2016/2017 iteration of the engine to ship a Fireworks Show VR app on the GearVR platform (Android).

Spherical Harmonics - Utility code for environment map filtering. Used for glossy HDR environment rendering in unreleased prototypes, and diffuse probe convolution in Fireworks Show VR.

Noise - Perlin Noise Generation : Used in unreleased prototypes.

3rd Party Libraries

A lot of the work on the engine is curating which third party libraries to use vs which things to write myself. The engine puts together and builds on top of lots of third party open source libraries, including but not limited to:

glhpp - Object oriented, DSA OpenGL header by a colleague, to which I am a contributor.

PhysX - General purpose physics, collision, math, and simulation library

Eigen - For matrix and linear algebra

Dear ImGUI - For user interfaces and tools prototyping. Also several other 3rd party repo's for adding gizmos, markdown, and file dialogs to IMGUI.

MiniAudio - For 3D sound playback and music streaming

Yarn Spinner - For dialogue and narrative scripting. I use their VSCode plugin and their compiler, but built my own C++ runtime discussed above.

Debug Draw - For wireframe primitive visualization

GLFW and GLFWPP - for cross platform windowing system and input

STB - Image loading and other miscellanea

nlohmann's JSON - For data serialization

MiniZ - for compression and bundling of map data

protobuf - dependency for YarnMachine VM

Vince's CSV parser - dependency for YarnMachine VM

GLAD - OpenGL function loader

Made with Virtuoso

Killing.Baby.Hitler.Gameplay.Trailer.mp4

fwgif

HDR Mobile VR 2016 GLES Mobile Water Shader 2016 Bloom HDR Emissive 2012 Spherical Harmonic Lighting Probe Convolutions ShadowMaps Bloom LOD HDR Shadowmaps Bloom HDR