




🌟 Special thanks to our amazing supporters:
✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Arch Toasty][Benedikt][David Martínez Martí]
This post is about a few different aspects regarding how the game is being rendered. It's mostly technical but I figured it might still be interesting to see behind the scenes a bit. We're using Unity as the engine for this game. A game engine is a piece of software that provides various features for you, such as systems for animations, the UI, or how things get drawn (rendered). This brings a bunch of benefits for game developers - creating all of this yourself is a big non-trivial task, so using an existing engine can save a lot of time. Plus if it's an engine that's already been used by many other games that probably means it comes with many helpful features have been proven to work well. On the other hand, using something that has been created by others to work across a wide variety of games can also mean that despite being adaptable to your needs it's probably not going to be a 100% perfect match. If you need a feature to work slightly differently you might be out of luck, especially if it's an engine like Unity where you can't change the source code yourself. Also, since the features were designed to work for many different purposes and to have as few limitations as possible, they are probably doing things that you never need, or are doing things in a way that aren't necessarily the most optimal performance-wise for your specific game. This is why we're not using many of Unitys default features and are developing our own solutions instead. One big area where we're doing a lot of custom work is rendering. You might think: why are you even using Unity then, couldn't you just make your own engine? We're still using many lower-level Unity features such as the graphics API abstractions; how assets are being loaded; and being able to deploy to many different platforms is great. So while we're not using some big parts of it the remaining parts still save us a lot of time. I also want to point out that this is not supposed to be a "Unity is bad" post. When we decide to not use a Unity feature it's usually not because what Unity has is not good, but because we have some needs that other games might not have, or we might want to have more control over what's going on so we can do some slightly unusual things. Also Unity is constantly changing too - some of the things we have developed ourselves they have added in similar form in the meantime as well, so if were restarting development on this game today then the decision to develop some things ourselves might look differently.
A big part of Croakwood is providing cozy little houses that your frog villagers can live and work in, so let's take a look at how the houses work!
All of the buildings are created from individual pieces, so every wall, furniture item and decorative object is an individual object that you can place.
This is a system that's similar to the one we used in our previous game, Parkitect. We really like that it allows a lot of creative freedom while still ensuring that houses a pretty quick and easy to design due some restrictions on what you can and can't do.
Paths, walls and furniture objects are locked to a grid so they always fit together nicely, and to make sure that things the frogs need to interact with are accessible. Purely decorative objects like lamps or potted plants can be placed freely.
One somewhat annoying thing with the building pieces in Parkitect were doors and windows. In Parkitect the doors and windows were part of the wall piece, so for each wall style we had to add special wall pieces with holes cut out for doors and windows, or alternatively there were doors and windows that you could stick onto the wall, but they would just sit on top of it without creating a hole.
We couldn't figure out a better solution at the time, but now for Croakwood we came up with a way of putting holes into walls using shaders. This gives you more freedom for placing doors and windows and we have to create fewer building pieces, which is a nice win-win.
Most objects can be recolored.
One challenge we faced there is that the art style of Croakwood is somewhat textured, whereas Parkitect was mostly using flat colors which made recoloring easy.
Figuring out how to do this for textured objects took some time, but we eventually came up with something that works quite nicely.
It took a few tries to figure out how to do this but wasn't too difficult in the end.
Our first approach was to create our textures in grayscale and then multiply in the custom colors, which gave pretty flat results because it doesn't allow for any variations in color value.
We divide our textures into different sections that should be recolorable and pick one of the most prominent colors in that section as its "base color". Then we generate a new texture where each pixel contains the delta in Oklab color space from its original color to the base color.
Left to right: texture; base color sections; delta texture in Oklab color space
To apply the customized colors we submit the chosen custom color for each section to the shader, add the L/a/b values from the delta texture to it and convert back to RGB.
This gives pretty nice results even if pixels in a section have color values that are very different from the base color.
Also our artists can simply create their textures in the way they are used to without having to do anything special to make a texture recolorable.
Of course houses can also be saved and shared, so you won't have to design a complete new house every time. We're storing them in PNGs again since that worked quite nice :)
Objects have resource costs, so once they are placed construction materials arrive and the builder frog constructs the objects to make them useable.
Once the house is complete you can always peak inside and see what its inhabitants are up to :)
Figuring out which objects to hide when peeking into a house is a bit tricky. We don't want to obscure the view of anything important, but also want to show as much of the inside as possible and not unnecessarily hide things that could stay visible.
We tried a few different approaches for this but what worked the best in the end was to simply check if the bounds of an object are in front of the volume defined by the paths of the currently viewed floor.
This alone would result in a lot of "visual noise" when rotating the camera caused by individual objects appearing and disappearing which doesn't feel very nice, so we're grouping nearby objects together and then decide the visibility for the whole group, so that we're always changing the visibility of a larger chunk of the building at once where possible.
In a game about frogs you kind of need to have water, which means you need to program a water shader. A shader is basically a short program that calculates what color a pixel should receive. To me as a programmer they can be somewhat intimidating to create - you need to write some code that, somehow, produces something that matches a certain artistic vision. Whenever I'm working on a shader I find that oftentimes the result looks terrible for a long time until eventually a tiny change is made and suddenly everything looks great, but figuring out what tiny change is required can be a long process of trying lots of different things.
Oftentimes it's also not clear from the start what the artistic vision is, especially when the art style of the rest of the game is still evolving, but you have to start somewhere. So one of our first tests around late 2021 for the water looked like this:
We liked the reflections and the wavy outlines around the edges of the water, but it felt like it was still missing something.
Eventually Marve came up with this concept art for the fishing hut:
This concept is really more about the the objects for the fishing hut, but it still gave us a some direction for what the water could look and "feel" like.
Over the next few years we kept making small tweaks to the water shader until eventually arriving at the current version, which looks like this:
This is what I meant at the start of this post - from a technical point of view this is really not all too different from the very first version we had, there's just some tweaks to the color, the transparency, the width and shape of the outlines, and some "smaller" additions like the ripples from the fish and other things swimming in the water, but with all of these things together it eventually looks good.
We'll surely keep making more small changes but for now we're quite happy with how it looks.
In this post our art director and concept artist Marve gives some insights into her thoughts on the setting of the game and some of the influences for the art direction.
In a game about building frog towns the frogs are unsurprisingly pretty important.
Here's a look at how they developed over time and what we had in mind while working on them.
First of all, as with everything else, figuring out their look took some time and we went through some revisions.
The first try was a more biologically accurate version with the eyes on the side of the head. When viewed from the front the model looked like a perfectly fine frog, but in game it was a bit weird...
Left: first test version. Right: an updated version to fix some of the issues with it (but not quite the final version yet)
...especially when viewed from a more top-down camera, as you'll oftentimes see them in the game:
The positioning of the eyes made them look kinda angry from this camera view, so we changed this by moving the eyes more to the front. The head shape was also changed so you're more likely so see their "chin", which makes their default appearance look a bit more as if they are smiling.
To give them some individuality there's a bunch of different patterns and colors they can have. Here's a small selection:
To make the frogs feel more alive we gave them the ability to look around freely:
We can mark objects in the game as "interesting to look at" to have some control over where they are looking, but they can also simply look at some random unspecific point somewhere in front of them.
Apart from making them more interesting to watch it feels really good to see the frogs actively looking at the nice town you've built for them as they wander around
They can also react to things happening around them and express their current mood. Here's some of the animations we have for that:
We have some ideas for how to push this a bit further to be a bit more readable and noticeable, but this is something we still need to work on.
One problem we had is that the frogs have pretty long feet and whenever they stood on stairs or sloped terrain the feet would clip into the ground and disappear entirely:
Not very nice! So we improved it by moving the feet out of the ground using IK:
Where do you even start developing a game? There's so many things you need to work on at the same time.
A good starting point probably is the terrain and general environment, so let's take a look at how that developed.
As with any feature, it starts very simple. Over time we get a better idea for what exactly we need and we keep iterating to improve and expand.
Since we knew it would be a grid-based game again our starting point was the Parkitect terrain. The main challenge is that you have to be able to build paths and buildings on the terrain, which means the terrain can't be too bumpy, but we still wanted it to look somewhat smooth and natural.
First Croakwood terrain tests, ~early 2022
What we came up with is not too different from Parkitects terrain actually - it's secretly still using the same blocky slopes that work well for putting paths on them, but then we add a bunch more polygons to it, smoothen it using ideas from Bezier surfaces and add a bit of random bumpiness.
This creates the problem of the bumps in the terrain clipping through the paths...
...which we can solve by flattening the terrain wherever a path is.
Another technical challenge we had to solve was that our terrain could only be a single big rectangle initially, but we wanted to create maps that are very irregularly shaped sprawling woods, with little pockets where you can build.
Big rectangular terrain, ~mid 2022
Creating this kind of playable space inside a big rectangle would mean there'd be a lot of wasted space, which is bad for performance. We solved it by splitting up the terrain into lots of small rectangles that can be created wherever we want, which allows us to give the map a much more freeform shape.
And since the terrain was more detailed than Parkitects we also had to add a system for reducing details in far-away areas.
Terrain chunks with different levels of detail
Finally, to make the terrain look more interesting we added a way to paint it with a bunch of different textures.
To decorate the terrain even more we wanted a way to place lots of objects on it, for example blades of grass.
Figuring out a fitting style for the grass took some iterations. Especially early on we didn't fully know what the game was going to look like yet, so the first version was more of a technical test:
Early grass test, ~late 2021
Eventually we figured out that having a nice transition between the terrain texture and the grass is really important for it to look good.
On the technical side, the key to achieving this was to give the grass the same normals as the terrain to make everything look less messy, and to fade its color towards the terrain texture at the bottom.
Here's a test where they blend together more nicely:
Better fitting grass, ~mid 2022
And finally it received some more texture to reach the current state. In addition to the grass there's a couple of other objects that can be spammed across the terrain.
This is getting quite technical now, but there were a few questions that stumped us for a while:
Whew! Feels good to finally have this game announced and be able to talk about it
Seeing all the reactions to the announcement trailer was incredibly thrilling, and we're all very happy that people seem to be quite excited about it and sent so many nice comments. You never know - obviously we think this game is cool, but it's very hard to judge if anyone else thinks so as well before actually showing the game. So this is very reassuring!
With that, let's continue where the previous blog series left off and properly start the Croakwood devlog.
We have been working on this game since late 2020 roughly and still have a lot of work ahead of us before release. So, there's lots of stuff to talk about that's already been done, and then over time we'll catch up with what's going on recently.
Obviously we did end up deciding to make a town building game, despite the prototyping attempts chronicled in the previous blog series only having mediocre success. How did this happen?
The conclusion from our previous attempts was that if we want to make a town builder, it should be somewhat unique gameplay-wise, with some mechanics that are more interesting than just plopping down buildings and waiting. Additionally, it should have a somewhat unique setting - everyone has already seen a dozen medieval or futuristic town building games, so doing something else seemed more interesting with a bigger chance to stand out from the crowd.
The answer to the gameplay question should have been obvious after making Parkitect, but it really took creating all these other prototypes to find it: what if you could design the houses in the town yourself? What if decorating the town nicely had some impact on gameplay, like in Parkitect?
Surely there must be some other town builders out there that are a mix between management and creativity/decorating but it's certainly not the norm, so that immediately seemed like it could be a good idea. Plus we'd get to apply a bunch of stuff we learned from Parkitect to it!
And so we created one more town builder prototype, and since it would share a lot of gameplay mechanics with Parkitect... we simply took Parkitect and turned that into the prototype! Here's how that looked:
It's not much but it had all of the core elements that are part of Croakwood: houses you can design yourself; villagers doing various jobs; resources getting created and transported around. This seemed promising and convinced us to keep going!
All that was left to figure out was a setting then. We thought a "miniature scale" world would be fun and interesting, so we started looking around for a fitting concept artist... and found Marve, who had lots of concepts of cozy house interiors and miniature scale towns in her portfolio, and was interested in doing some concept art for us!
(Not Croakwood concept art. This is something Marve had made before and is one of the pieces that caught our attention)
She came up with a first concept to determine the rough setting, style and mood of the game:
And she also tried a few ideas for the villagers, of which we all liked the frogs the most.
... and she's been working on an endless stream of concept art ever since . As it turns out there's lots of objects to design if you want to fill an entire frog village.
Which also means there's lots of objects to model! It was more than Garret could possibly handle alone, and we were lucky once again to find Kindra, who has not only been tirelessly trying to keep up with the concept art but also designed plenty of additional objects.
Abby originally joined us for animating all of the activities the frogs get up to, but she has also done a lot of work on shading and lighting and is currently working on concept art for additional characters.
And to make the team introduction complete, we have the same team members you might remember from Parkitect: Garret is mainly doing 3D art once again, Sebastian and Patrick are handling the programming, and Jada is taking care of production and game design tasks.
Of course while there's more people around now we're still a pretty small team, so it's not unusual for anyone to do some other tasks outside their main expertise.
Finally, anything regarding sound and music is handled by the great team at A Shell in the Pit again and the Croakwood logo was designed by Colby Nichols, who also created the Texel Raptor logo.
[ 6079 ]
[ 2063 ]
[ 4245 ]