vibrant banner

vibrant

15 devlogs
17h 29m 45s

A rendering engine focused on 2D lighting and the use of normals to create beautiful scenes. It features: Dynamic lighting, normals support and framebuffer scaling. Performant and gets the job done. Can also load/save scenes.

Pro tip: edge ligh…

A rendering engine focused on 2D lighting and the use of normals to create beautiful scenes. It features: Dynamic lighting, normals support and framebuffer scaling. Performant and gets the job done. Can also load/save scenes.

Pro tip: edge lighting looks really good.

This project uses AI

Used GitHub Copilot for repetitive tasks.

Demo Repository

Loading README...

sohiearth

Shipped this project!

Hours: 1.41
Cookies: 🍪 22
Multiplier: 15.59 cookies/hr

A bit of a minor fix/update to the vibrant engine that I worked on a whim.

This engine is a 2D Rendering Engine. It supports normals and lighting.

Architecture

This game engine uses something I call attributes.
Basically, the following:

  • Parameters and its types are defined by the user, not the engine.
  • Flexible development by both the engine developer and the user.
  • Clearer architecture of each object. -> Improves the user’s understanding of the engine.
sohiearth

Minor Update:

Updated the UI to feel more developer-y

Attachment
0
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!

Hours: 16.08
Cookies: 🍪 167
Multiplier: 10.39 cookies/hr

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