This event is all about terrain generation! Using my code as a base or implementing it yourself, expand on the ideas presented in my video on the subject over the month of July however you see fit.
Please read below for more details!
The Dirt Jam is a community event run by Acerola to encourage participants to get started learning graphics and shader programming. This event assumes you already have programming experience but haven't dipped into graphics because unfortunately, graphics programming is esoteric.
If you're totally new to programming, I will accept any p5js or processing animation as a submission. It's still graphics, but much more accessible to a new programmer. Check out The Coding Train!
To fully understand the context of the event, please watch my video below:
You are welcome to implement the base terrain generator in any development environment you prefer. Because I made mine in Godot, the reference code is obviously for Godot. I recommend people choose the FOSS option, but also, due to the low level nature of Godot compositor effects, you really get to understand graphics and shader programming without the assistance of commercial engines.
My source code for the video can be found here with comments explaining pretty much every line of code. Feel free to start with this as a base!
If you're new to graphics, I recommend starting by making a very simple change to the shader code that you can see (make sure to recompile the shader by clicking 'Regenerate'!). Then, learn how the code is compiling the shader, and try separating that functionality from the mesh generation so that you can recompile the shader without having to regenerate the whole mesh!
Here are some additional learning resources I would recommend you check out:
If you find resources you like, please share them in the discussion tab or on the Discord server!
Also, here is a list of ideas for you to choose from if you're not sure what to do!
- BEGINNER
- Distance Fog (Visual)
- How could you give the shader access to the camera position and fade out distant pixels?
- Shader Include Files (Tooling)
- Annoyingly, the vertex and fragment shaders contain a lot of duplicate code! How could you use GDScript to automatically inject the shared code into each shader so you don't have to make double the changes?
- Level Of Detail (Optimization)
- To get a highly detailed terrain surface, we must calculate many layers of noise, but at a certain distance, more noise layers don't result in any visual difference! Could you use the distance from the camera to control how detailed the pixel needs to be?
- Improved Lighting (Visual)
- I've explained several simple lighting models in my past videos. The shader is currently only doing a lambertian diffuse, could you add a specular highlight?
- INTERMEDIATE
- Analytical Shadows (Visual)
- The terrain has no sense of scale because there's no shadows communicating the larger shapes. We have an analytical height function, how could you determine if the terrain is blocking the view to the sun?
- Cloud Shadows (Visual)
- A very underrated technique that you don't actually need real clouds for, famously demonstrated by Genshin Impact. How could you utilize noise to give the impression of clouds slowly drifting over the terrain?
- Improved Random (Visual?)
- You'll notice that some seeds give some very strange noise patterns. This isn't a fault of perlin noise, but of the pseudo random function I'm using which is from UE4. It isn't very good! Can you find a better hash function?
- Physics Mesh (Gameplay)
- Oh no! The terrain doesn't actually exist! How could you create a much simpler mesh that approximates the terrain for physics calculations?
- Material Improvement (Visual)
- Right now the terrain kind of just looks like rock. This is obviously not ideal for all terrain types, how could you upgrade the lighting model to support something that looks more like snow or sand or mud?
- Texturing (Visual)
- Flat colors are boring! How could you add UV coordinates to the mesh data and start sampling textures to make the surface more interesting?
- Precalculating Height (Optimization)
- It turns out perlin noise is really expensive to calculate at this scale! How could you precalculate the noise into textures for the mesh to make use of?
- Parallax Mapping (Visual)
- If you've played Final Fantasy 14 you may have noticed the terrain surface looks really weird! That's cause it's poorly parallax mapped to try and give some sense of depth to the flat surface. Thankfully, we have an analytical height function! How could you use that to parallax map the terrain surface?
- Automated Shader Recompilation (Tooling)
- Uh oh! It turns out this project has the same issue as the project I went over in my video 'How Engines Make Shaders Easy'. Can you apply the same techniques to automatically recompile the terrain shader when you make changes?
- ADVANCED
- Shadow Mapping (Visual/Optimization)
- Shadows are very expensive to compute! How could you render the scene from the light source to create a shadow map for the terrain?
- Tessellation (Optimization)
- The terrain mesh is very very expensive, how could you subdivide the triangles at runtime to reduce the geometric complexity?
- Erosion (Visual)
- Perlin noise is kind of lame by itself! Environments in the real world are the result of hundreds of thousands of years of slight erosion whether from wind, water, heat, or anything else. Explore different literature on the subject to create a more realistic landscape!
- Signal Processing (Visual)
- Perlin noise is a signal which can be processed like any other, what signal processing techniques could you apply to make the terrain generator more interesting? Perhaps a band pass filter!
- Foliage (Visual)
- hahahahahahahahahahahahaha
The person with the coolest project will get to add Acerola on Mahjong Soul and also he will follow you back on Umamusume :)
There aren't really any rules!
You can do whatever excites and motivates you beyond the initial starting point, as long as you learn something you're doing it right! The ideas I provided in the welcome section are just suggestions, no need to pick from only those.
For any other questions please ask in the community tab or in the Discord server. If you have been banned from the server, you can request an unban in the community tab or dm me on twitter.
By submitting anything to the jam you give permission for it to be shown on stream or in a video.