So, I'm finally working on a "material" system in my engine. Until now there was no need for it since there was just one scene shader, with the only object-unique uniform being the texture. The framebuffer and debug lines were special cases that bind their own shaders (1/?)
So, each "object" (I called it Model) was just Mesh, texture, and the model matrix. This was actually the whole scene rendering logic, I did some checks to see if models in sequence have the same texture or mesh to reduce unnecessary binds: (2/?)
But now with adding materials, I actually have to refactor almost everything, and turn the Model into a bigger beast, that has a Transform, Mesh and Material. With the only addition being ability to switch shaders (3/?)
But that adds a layer of complexity. First you need to add unknown-size properties to each material, meaning you'll have dynamic arrays scattered around. The easy way of optimizing like in the loop above becomes a more difficult. (4/?)
And I still want to keep the ability to have manually set property materials as I did with the old shader. I'm trying to use inheritance (for the first time in C++!) to be able to do that, but I don't like it so much. (4/?)
While the "dynamic" material is like this (using union as well for properties, which I discovered is actually a pretty cool concept :D):
The question is kind of, is the added complexity worth it? I thought the abstraction of Material might help, but now that I'm deep into it, I feel like the old system was just fine. I wanted to not need a special case framebuffer and debug lines, but they are special anyway (?/?)
Actually, I'm probably even going to have just a few shaders, an opaque one, cutout, transparent, maybe a triplanar one for ground. Skybox, lines, framebuffer are already special and completely out of the main scene loop anyway. (?/?)
And I'm not trying to make a AAA engine for customers. I want to have a thing where I can just go into the main loop and poke things DIRECTLY, instead of creating these abstractions. That's the benefit of a custom engine anyway! :D (end)
• • •
Missing some Tweet in this thread? You can try to
force a refresh
For people thinking of writing their own engine in C/C++ after the Unity fiasco, here's a few things I learned in my own journey making #ShakedownGame in C++: 🧵👇 #gamedev #cpp
1. Making your engine is not "hard", individual steps are easy, but there's just many of them! Every magical checkbox in Unity is now a feature you have to implement. So you're better off chosing specific features for your game, if you want generalist use another engine..
2. C++ is a mess, it's almost 40 years old, and built upon C, which is 50, so it inherited a lot of issues, like terrible defaults and manual header file management. It has evolved and grew drastically over the years, and all this makes it a rocky road for any beginner to learn..
So, my life in the old year was very eventful and hectic with many ups, but unfortunately, I will remember 2022 as one in which I haven't published a single game! Real life stuff took so much energy from me.. ->
..& I haven't participated in jams. While my new social landscape has kept me satisfied, games have definitely taken a back seat & for the second half of the year I barely worked on or could focus on my own projects. Any free time I had I used on learning new not-games skills. ->
That said, 2023 will be different! In the new year, I am making plans which I want to stick to. 1st of which is that I am going to release the first version of #ShakedownGame on 18th of January! Yes, that's in just a bit more than 2 weeks, and a day before Monte Carlo Rally! ->
Kinda disappointed that anti-anti-art redirects to Stuckism
Stuckism was definitely the last "movement" we learned about in school. But seems like there's been a bunch new ones in the mean time that I've never even heard of. I guess to be an anti-anti it needs to be direct response to anti-art.
Good news it works on win10. But for some reason on my native resolution it crops part of the screen. On 4:3 seems it doesn't crop. Oh & I had to start the game a few times to test it, which was super annoying cuz it has the first sin of video games, an UNSKIPPABLE INTRO!!
Everything in this game uses like deltatime lerping:
> current = lerp(current, target, dt);
from menu highlights to mouselook, lol. It's painful.