I’ve mainly doing core engine work, putting in time to lay decent groundwork for features in the future.
Entity Component System
I’ve started building an ECS, specifically to manage the large amount of game units. The technical design of the game units would indeed fit in a deep class hierarchy, however I don’t believe this system will give me the flexibility or speed that I need. I took a glance at different c++ ECS libraries like EntityX, but none seem to be in active development so thats why I’m rolling my own.
When the player hovers over the landscape in construction mode a grid indicating the underlying tiles now shows. This is simply done in shader.
Construction grid covering the whole landscape
A grid surrounds the players mouse
Started experimenting with Polyvox, a c++ voxel libary. For sake of dev time, I would much rather use an established lib than roll my own solution. Thinking of using this for storing and meshing the user constructed buildings that sit upon the terrain.
Voxel sphere in a 128×128 chunk
LOD Texturing and Ocean Texturing
When zoomed out the engine is displaying the lowest LOD world map, previously you would only see a flat green across the whole landscape. Now the system generates a texture that shows the different tile types and changes in biome (Currently only the grass/sand) and places it on the mesh. The texture is generated at the start of the game so is not dynamic yet. Later I will implement a system to make it possible to update the texture mid game, to show the change in seasons for example.
Areas inland which are below sea level currently get treated as ocean, will be fixed later.
There is also a similar technique for the ocean, at the start of game a texture is generated from the height map data. I then plug this into the ocean shader to create lighter values near the landmass.
Ive been playing around with the terrain shaders. I imagined the game having some form of pixel art, but still being a fully 3D world. Up until this point I’ve just been running generic default shaders with a sprite map from ripped from Minecraft. When I get round to creating the art assets for trees, players etc then I will settle on a more concrete style, but thats later in development.
Test scene with new shaders
Rendered with 5 colours as opposed to 10 in the others
Below are 2 screenshots where I have rendered the scene at half resolution and then scaled it back to full res after. The effect is that a single pixel is now double size. Pretty cool, gives a neat low res look, but doesn’t really make the scene any more readable.
Terrain Level Of Detail
I want the player to be able to zoom out of the world at get a look at the whole landscape. It’s important to the gameplay that the player be aware of the goings on in the surrounding area. Say, if an army is approaching or a village is being raided nearby. At the furthest out zoom level entities within the world will be represented as icons.
Here you can see some billboarded saplings.
The visible seams between LOD levels needs to fixed with a transition.
The lowest LOD only uses the grass tile at the moment, that’s why beaches cant be seen.
– Added button to switch to dev camera from within game
– Added an simple ocean shader with faux waves
– Progress made on billboarded grass and trees
– Wrote shaders for different terrain LOD’s