Project Status: Finished
Project Type: Game jam
Project Duration: 21 Days
Software Used: Godot 4.4
Plugins Used: Sky3D
Languages: GDScript, GDShader, GLSL
The Dirt Jam was a month-long event by Acerola
that encouraged exploring graphics and shader programming in Godot.
Instead of relying on built-in tools, I worked directly with low-level rendering concepts, learning how they shape visuals.
This is a technical project — see the Glossary if any terms are unfamiliar.
GitHub | Itch.io | Technical PRs
The goal was to improve the base class, even if only slightly. The idea was to learn how terrain generation works — from creating the data to rendering it.
Methods for creating the terrain data range from hand sculpting landscapes in ZBrush or Blender. You can't have one without the other. If you can generate terrain data but can't see it, then the data is useless. And if you can render it but don't have any data, then all you have is a flat plane.
I began by studying the source code's structure and comments. From there, I gradually added about 6-7 features — some were purely visual, others focused on tooling.
Rendering Fog - Light to Dense
Distance Fog was the first feature I added. It gives the scene a sense of depth and atmosphere, by making distant terrain blend gradually into the background.
Alongside fog, I also tackled other beginner-friendly graphics challenges: Shader Includes, Level of Detail (LOD), and improvements to the Lighting model.
Example Scene with Fog + Lightning
This mockup shows all of these features combined. I also experimented with post-processing (image effects) to add polish.
Next came a much harder task: Texture Mapping. Texture mapping is the process of covering terrain with different materials (grass, rock, snow) depending on slope or height. After four failed approaches, I reached out for guidance — and eventually implemented a working version.
Here you see 4 different textures applied to the terrain.
If you want to see the technical details of each feature, here are the individual pull requests (code change logs): Distance Fog, Shader Include, Level of Detail, Lighting, PCG3D, Water Shader.
This project was my crash course into graphics programming.
Where I learned about concepts such as:
To make sure I really understood GPU memory alignment, I came up with my own analogy:
“Think of UBO memory like an inventory grid.
Each data type has its own slot size, and a row can only hold 4 slots.
Bigger items (like vec3
and vec4
) get VIP spots at the start of the row,
and smaller items fill in the gaps.
If the order changes on the CPU side, you have to re-pack the layout to match on the GPU side.”
Image Source: Kris & Jen
These experiments show the atmospheric and stylistic directions I explored before the final version.
Cloud experimentation
Glacial peaks at sunset
Moodboard: Cloud Rap & Underground inspirations
Logo variations
Final Showcase