16. life in the mines part 4
These are interesting times in the Valley! All the separate pieces are finally coming together, creating not a full game, but a suggestion of one. The basic gameplay is there, the tools are online (if not all very usable), the monsters are threatening and the stones are glimmering. We just had the most fun co-op Quest testing session with Jammu.
This week we had the Loot Grinder come online. You remember the loot box in Cave Digger where you placed your loot and it spat out everything at the end? Same thing. You pour your hard-earned riches in the Grinder, and after the run it crunches the numbers and gives you the total. There is something there that I’m skeptical about – all the nasty mobile principles where it’s all about the flashiness and retention. But we do want to reward the player as much as possible. And in this I think we have already succeeded.
In other news, our music system is in the game. It reacts to the situation accordingly – whether you’re wandering around, actively mining new passages or stuck in combat – the music is reacting to the environment. Eetu Mikkola is currently doing variations for all the songs and he’s already started on the FX work.
Justus used this time to implement the Hurricane VR plugin into our game. It needed some refactoring of existing grabbing systems but it allows for better tool physics and hand animations. This also is something that will surpass CD1’s very bare bones implementation. Above is a video of Justus testing stuff in his aptly named sandbox-scene. Coder humor.
Tiina and Harri have also been busy. Now we have the other enemy ready to be implemented – the fearsome Nautilus. Tiina is animating life into the big guy, while Harri has been working on the remaining tools – the Shovel and the Gold pan. Next sprint we’ll have all the tool mechanics implemented with their respective loot nodes.
That’s it this time! See you next week.
-Kharan (Jaakko Asikainen)
Random development quote: “Suomen suurin VR-tuotanto on omituinen pornopeli, jossa työkaluina käytetään kirjaimellisesti venäläisiä perseensuristimia.“
This week our guest writer is Justus, our code guru and shader wizard. Take it away Justus!
Why bother making cool shaders? Why don’t you just go crazy with post-processing like everyone else?
Because we can’t. With Cave Digger 2 our first target platform is Oculus Quest. Quest is a standalone mobile device, and as such, it uses a rendering type called Tiled Rendering, which is really efficient for most rendering, but causes full screen effects like post-processing to be really slow. These effects will add significant fill-rate overhead and should almost always be avoided. Find out more about how Quest does Tiled Rendering here.
So in order to make fancy looking effects like custom fog, color grading or bloom, while maintaining stable 72 fps on Oculus Quest, we have to make the effects with shaders and particle effects.
But shaders are hard to make 🙁
It’s true that writing shaders can be annoying even if you’re an experience programmer. Cg/HLSL syntax is different from most programming languages. However there is a easier way. The trick is to use a node based editor like Amplify Shader or Shader Graph. You can find plenty of helpful guides and tutorials online. Also Amplify Shader has lots of good example shaders for you to learn from. This allows you to make shaders much faster, however the catch is that the shaders might not be as optimized as they would be if programmed by an experienced graphics programmer
Amplify Shader view of CD2 Gem shader. Cel Shaded lighting and Custom Fog are is done in a custom functions, which makes them more easy to reuse.
So what does it do?
*Slaps the roof of Cave Digger 2 Lit shader*
This bad boy has a custom fog that uses a cubemap for color. It uses a cell shaded lighting that’s similar to Breath of the Wild. It can do triplanar texturing and stochastic texturing.
Also we have a custom Gem Shader for making those loots look shiny and tasty.
How to make it work
To handle controlling the shader settings I created a scriptable object called Atmosphere and also created Atmosphere Manager to manage them
A scriptable object helps to quickly make different atmospheres for different areas. It currently controls the ambient lighting color and fog density.