vibrant banner

vibrant

14 devlogs
17h 6m 51s

An attribute-based, OpenGL/C++ 2D game engine.

This project uses AI

Used GitHub Copilot for repetitive tasks.

Demo Repository

Loading README...

sohiearth

Addressing Rejection Feedback #2

1. Tooltip Descriptions

So basically the program was hard to use, and tbh, I kinda agree. So I added tooltips on known attribute names to help understand which attribute/value does what.

2. Rethinking the Tutorial

In addition, the tutorial was a bit hard to understand. To address that, I simplified the tutorial and made it easier to understand what’s going on. While the previous tutorial was changing a texture, that required the user to understand where the change texture button is, and then locate the texture itself, requiring some understanding of the program. This defeats the purpose of a tutorial.
My new and improved tutorial involves removing textures, a simplified process that can be done with a click of a button. This helps the user understand how removing the normal, for example, affects how lighting calculations are made.

Something I noticed reviewing feedback videos.

In addition, I noticed that ImGui windows are really small at first launch, requiring the user to adjust its size before doing anything. With this update, I bundled preconfigured imgui.ini files for ImGui to detect and automatically scale windows to an appropriate size.

0
sohiearth

Addressing Rejection Feedback: Fixed a minor issue related to display scaling on ImGui that may cause small interfaces on high-DPI screens, such as laptops and high-resolution displays.

Attachment
0
sohiearth

Shipped this project!

What I made & What I’m proud of

I built a rendering engine that works based on something I’ve been thinking about for a while: attributes! Basically a large key-value map on a object that defines its properties. I feel like it’s intuitive and might be something that can be applied in a larger scale.

Challenges I faced

Language Woes

The hardest part about this challenge was dealing with C++, unsurprisingly, but I think such an abstract yet performant design wouldn’t have been possible without its library.

Troubles with the user interface

I just keep thinking that the engine is just plain hard to use. There’s definitely more I could improve on that.

sohiearth

The brush up update

  • Changed up the style to feel more fun.
  • Updated the tutorial
  • Minor QoL features.
Attachment
0
sohiearth

The User Friendly Update

New features

  • Added scene loading/saving
  • Added tutorial and documentations
  • Added a output log
  • Added Markdown/XML editors for both tutorial and documentation
Attachment
0
sohiearth

The Templates Update

As a part of making Vibrant easier to use, I added templates.

Attachment
Attachment
0
sohiearth

Finished my attribute based object management. Fixed attributes by using high-level C++ objects such as std::variant. I also added tags to help determine which objects should be worked on by which system. I think I need to work on my game systems now, like physics and audio, then I’ll probably be finished with the engine phase. I might take this project and use it to make a full-blown game.

Attachment
0
sohiearth

Added attribute based scenes. The program finds objects with a specified tag to work on (ex. sprite), then fetches data about the object based on the attribute’s name and data (void*). I’m not sure if it’s good or not to do so, but I guess I wanted to experiment with different ways of managing data.

Attachment
0
sohiearth

Fixed frame buffer scaling. It looks more retro now.

Attachment
0
sohiearth

Added z component influence on normal maps to improve user customization. The attachment below is the difference the height of the light makes, with the light at 0 being influenced the most by normals, while a larger z component is less influenced by the normal map.

Attachment
0
sohiearth

I added uniform buffer objects to optimize performance. It also served as a learning opportunity for me, since this is a realm I haven’t stepped in yet. Was interesting to learn.

Attachment
0
sohiearth

Made create functions for vertex array, buffer and texture creation to reduce the number of API calls and keep the codebase D.R.Y. (Don’t Repeat Yourself)

Attachment
0
sohiearth

I added 2D normal maps to my engine, and tweaked the shaders a bit to better mix them together. The UI is really jank and there’s a whole lot more to go until this thing can ship. Motivation is down a bit but will keep it going.

Attachment
0
sohiearth

Added basic window creation, shader loading, vertex/indices, etc. Still very early stage stuff.

Attachment
0
sohiearth

Added project boilerplate (CMake, vcpkg, main.cc)

Attachment
0