Water shaders and geo trees


This game started from an idea, of imagining a still lake, with tall trees reflecting from the still surface. What if the world you see in the reflection was another realm? "The other side" as was the jam theme. 


This post explores my contributions to the project, what I did and what I learned.


Water shader


The water shader in game is based on the tutorial by Ghost Studios 

I was contemplating on adding refraction and reflection as a camera-mirror, but the game ended up having this very simple shader, that has moving normal map textures, and simple colours as the shallow and deep water. 


Geotrees

I spent a good deal of the game jam trying to create good-looking trees. I explored the geometry node-based solution, and was trying to change the leafy tree to a coniferous spruce. https://blenderartists.org/t/geotree-procedural-trees-in-geometry-nodes/1301810

Geotree created quickly a good-looking tree, but it posed some issues in game. 


Our wonderful artist set out to create alpha-texture needles instead of leaves to the tree, and hand painted a tiling bark texture for the tree. The UV-mapping of the tree was however painfully slow. I ended up exporting the needles (leaves) separately from the trunk and the branches, to create some sense to the UV-map, for the trunk and branches to not include the leaf square. I did not yet learn how to make all the leaves share a single square for the texture, instead of all the crossing planes, so applying it be light on the computer did not happen in the scope of the jam. The trunk/branches also included such many separate almost-cylinders, that rearranging them to the nice created seamless texture did not fit in the scope of the game jam.

The point of using Geotrees was to quickly generate interesting variations of trees, but because of my bad communication of that the workflow does not support cool textures on the trunk and the branches, because of the slowness of UV-mapping of even one tree, to not talk about UV-mapping a bunch of them, the workflow did not fit for the game jam. It could have been solvable with better practices how to stack UV-islands and make them texture-wide, so I'll be looking at Blender addons to do the job. 


For some reason, the tree was also performance heavy, so we ended up having only one of them on the fairy land. 


The updated, more coniferous shaped texture on the needles was also orienting itself wrong, and noticed that late in the development that I did not fix the branching ends of the originally leafy-tree, so the needles don't nicely continue from the branches. 

Most of the trees in the game were made by Joonas, so we'd got a little bit of communication trouble of doing duplicate work. As the Geotrees were closer to the look of the game that I was hoping to go for, I did spend way too much of the jam trying to make them to work, without getting it finished. I also did not want to scrap the work of another artist. In the end, we had both kind of spruces, and it feels atmospheric in the game.


Orbs

Learning shader graph, I followed the tutorial of 

The nodes created an interesting effect, that with a good texture we're going to be "black holes with whitefish". 

I was browsing Pexels for textures, and found a rainbowy-darkness that looked nice even though not tiling. 

There was also plans of several different types of orbs, as push and pull orbs, that did not get implemented. The current orb in the game was supposed to pull the player, but that created such an unescapable vacuum, that I changed it to pull and then push.


Terrain

We wanted a modeled terrain to provide a surface for the player to walk on, that is walkable on both sides. The size of the terrain was decided to 200x200 meters, that fits the scope and smallness of the game.


I modeled the terrain in Blender, with a hope to get it quickly done to the playtest. I was going to create soft hills between the fairy lakes. The first version got done in 15 minutes, after which I spent the next hour trying to get the underside to be flat. Merging the plane with the sculpted upper part was surprisingly challenging.

After new understanding of needed more pointy and obstacley mountains between the lakes, I was trying to correct the terrain in Zbrush, but ended up carving the flat backplane repeatedly. In our game mechanics, the 0-coordinate on the axis is the flip, so any holes or easing's on the fairy side end up causing mechanic problems for the player. There is in the current version at least one pocket of "third dimension", that's created by the too low coordinates on the mesh plane. 

Only after the jam I learned that a mask to prevent sculpting the backside would have been a better workflow, as well as making the surface just thicker. The sculpted version ended up being worse than the Blender-sculpted high-poly (30k) mesh, even though the earlier mesh has embarrassingly badly done edges of the lakes with way too pointy and big polygons. 

Overall

They say that if you're the smartest person in the group, you're in the wrong group. This game jam was a humbling experience, working together with experienced and really skilled people. I felt such imposter syndrome, and having confidently said at the pitching stage that I can do the 3D-art, and starting the jam as the sole artist before Joonas joined in and later Viktor starting the 2D-art, and Muricaboss working on the postprocessing, it felt like I gave too big of words. The jam team was really supportive and fun to work in. At the times that we're at the same table, the communication worked surprisingly well. At 19 in the evening for the playtest we'd not yet have the pieces together, but later in the night the team pulled it together. 

I did not end up making much of the 3D-art, but I learned a lot about Blender, some simple, some harder things. Gradient texturing is something I'll have to look up in the case of low-poly 3D-modelling for game jams and other short timeframe projects. I do not yet have the skills to push out 3D-models from a conveyor belt, but during the jam I got more familiar with the process, and can improve my skills further.

Shader graph nodes still absorb my interest, and I hope to evolve to a stage to understand what I'm doing, and create my own shaders instead of copying the work of others. During this jam a helpful soul appeared when I was having issues with the shader, and I could for my surprise explain what the shader is supposed to do and what the nodes do, so that a shader-experienced person without experience of the node-based visual shader creation could help me troubleshoot. I'm learning understanding of the nodes and their cooperation!

Zbrush sculpting soothes me, but I could notice that I was out of practice, and doing quick fixes for smoothing the edges ended up as smoothing and creating for most of the demo comp at our table next to the big screen. Absorption in the process instead of executing the task quickly.  


Thank you for this awe-inspiring experience. It was such a warm feeling in the jam, I learned a lot, got to work together with great people for a shared goal, and we created a playable game in just 3 days.


Get Fairy Forest