Jonathan van Immerzeel talked about the work process behind Lake, a narrative-adventure game about a postal worker, explained how the landscape was made in World Creator 2, and shared what he learned while working on vegetation.
Introduction
My name is Jonathan van Immerzeel, for the past 6 years, I’ve been active as a publisher on the Unity Asset Store as Staggart Creations, which, fortunately, still manages to captivate my creative interests. I’ve been involved in the development of Lake as a Technical and Environment Artist.
The Lake Project
Lake is a narrative-adventure game offering a slice-of-life experience as you take on the role of a postal worker in a sleepy lakeside town. It is set in the fictional town of Providence Oaks (Oregon, USA) during the ’80s. The game is developed by Gamious and published by Whitethorn Games. And it’s now available on PC, Xbox, and PlayStation.
I was invited to join the initiative of fleshing out Lake’s initial concept in November 2017. We started as a small task force focused on setting up a vertical slice of the game. which led up to the first playable demo some 6 months later showcased at the Indigo game convention here in The Netherlands.
Over the course of the game’s development, the team was expanded with character/prop artists, an animator, gameplay/systems programmers, writers, music/SFX artists, and a producer. Each step of the way, their contributions proved to be vital and ultimately made the game what it is today.
Unity as a game engine was the obvious weapon of choice for us, seeing as everyone had previous experience with it. This, at the very least, ensured we could achieve what we were after with confidence. It's safe to say though that we’ve all gotten a little wiser about Unity’s ins and outs in the end.
My responsibilities mainly revolved around world building, developing the supporting workflows and tools, as well as graphics. Each was the aspect I had aspirations for, and Lake saw the early promise to fulfill them.
Pretty much the entire game world is split up into separate scenes evenly split between art and gameplay logic. Distinct locations, such as the diner and motel, are housed in their own scene. Whereas one “overworld” scene contains the entire landscape and vegetation. This ultimately allowed any team member to claim a particular scene without stepping on anyone’s toes.
Periodically, this involved bringing all the (updated) content together through set dressing and updating global aspects, such as the terrain and roads.
The Landscape
Building out a landscape for an actual game, as opposed to mere practice and experimentation, was new for me. There’s a certain flow and purpose to the lay of the land to consider. I anticipated iteration would be a key factor, certainly, since a degree of experimentation should be possible in early production.
Hence, I had my mind set on adopting a procedural and non-destructive workflow, wherever possible. Ubisoft’s approach to world-building, as demonstrated in their GDC presentations, has always been a huge inspiration in this regard!
When I was evaluating the available options for terrain authoring, World Creator 2 showed much promise. It offered a mix between filter-based procedural terrain generation and manual control through painting. The latter is particularly important to exert control over the somewhat unpredictable results of pure proceduralism.
World Creator offers a “bridge” tool for Unity, which converts a WC project into a useable Unity terrain. This tool was extended to suit our specific needs, such as the addition of firing off “post-sync” scripts. These handle things like updating vegetation, carving roads, or generating LODs for the terrain. A key principle was to ensure the workflow supported a creative flow and wasn't a potentially dangerous process prone to mistakes.
As the landscape was evolving, so was the rest of the environment in Unity. Namely, the road network and urban structures taking shape. When things started to converge on smaller details, such as driveways and narrow forest roads, it got increasingly difficult to fine-tune the terrain on such a scale.
This required making minor adjustments in WC, syncing it to Unity, observing the result, and often repeating. This was pretty tedious! Using Unity’s terrain tools to touch up the terrain was a solution but never really viable. Any manual changes made would simply be reverted after syncing from WC again.
To make persistent terrain modifications possible in Unity whilst retaining a non-destructive workflow, I went on a tangent and developed a GPU-based terrain “stamping” toolkit. These stamps modify the terrain’s height map in a select area or through splines and can be moved around freely (or even attached to prefabs!).
This proved to be a vital addition to the world-building workflow as a little over 2000 stamps ended up being used. Later, the toolkit was extended with a similar function, but for applying terrain materials as well.
The Vegetation
A cornerstone of the natural environment was the presence of large amounts of vegetation. Probably the fewest, yet most enjoyable days for me were when I was working on vegetation assets. Given that they make up for a large part of the environment’s character, any iteration seemed to bring an overall improvement, which made it particularly rewarding to work on.
Seeing as the game takes place in Oregon, USA, there were plenty of resources available to consult for figuring out which vegetation assets to make. One of the most valuable things I have learned here, regarding the production of vegetation assets, is the concept of maturity: trees in a forest are never all the same age nor do they have access to the same resources such as water, nutrients, and sunlight. As such, for any given species, at least a mature and young tree variant was created. Visually, this also provides natural-looking variations in height and foliage density.
Vegetation is a particular thing usually rendered in abundance, Lake’s environment being no exception. Using tens of thousands of individual GameObjects puts a massive strain on Unity’s rendering system since it requires culling and batching each one of them, which was clearly not a viable option.
Shortly before production started, the Vegetation Studio asset was released and saw a lot of promise. It essentially builds on Unity’s direct rendering API and makes efficient use of DOTS and compute shaders. One of its major strengths is that it offers rule-based procedural spawning of vegetation. Manually handling the placement of vegetation wasn’t a realistic option, especially when you consider the terrain could change on a whim, invalidating a lot of work. Procedural spawning provided a shortcut to a polished end result, without imposing restrictions on future iterations.
The placement of the vegetation is supplemented by a “density map” texture fed into the spawner. This made it easy to restrict dense foliage to only areas accessible by the player whilst gradually thinning it out further out into the wilderness. This made dense vegetation possible while keeping performance leveled.
Vegetation Studio was an integral part of both the world-building workflow and the vegetation rendering. The road splines and wire network also tie into its API and remove vegetation as needed.
The Graphics
Lighting in Lake is technically all simple Lambertian shading through a directional light and a flat ambient color for indirect lighting, supplemented by exponential fog that uses the skybox’s base color, which ends up being a fast way to approximate atmospheric scattering without resorting to more complex techniques.
Lake features a proprietary lighting system, which hinges on the use of predefined lighting profiles. This allowed me to light the world for a specific time of day until satisfied and save all the related information to such a profile. In turn, based on a 24-hour timeline, the system blends between these profiles to create a seamless time of day cycle.
Weather works in the same way, except that these profiles alter the direct/indirect light intensity on top of everything. Additionally, weather profiles modify the fog density, wind strength, and cloud coverage in the skybox. This coupling makes denser clouds appear to naturally dim and diffuse lighting globally.
The goal wasn’t to create a physically accurate lighting model but rather something that offered artistic control whilst providing a natural-looking result. I’m particularly happy with how this all panned out and I feel it also ended up giving Lake its own visual identity.
A point of attention was making sure that graphical features were always scalable through pre-defined quality profiles either through user settings on PC or through presets on consoles.
Conclusion
I believe the game ended up surpassing our own expectations, both in terms of scope and cohesion. And the response from players has been overall positive.
Personally, this project fulfilled many of the ambitions I had in game development at a rapid pace. Working on a game that’s been physically released seemed like a pipe dream several years ago, but there’s one sitting on a shelf now, which is a little unreal. I’ve been fortunate to have a lot of creative freedom with ample room for experimentation and intermediate polishing. That’s a certain professional privilege I don’t take for granted.
Thank you for inviting me to look back on the development! Hopefully, this will provide some insight for those who are interested in game development or are already well on their way!
Jonathan van Immerzeel, Technical and Environment Artist
Interview conducted by Arti Burton
Keep reading
You may find these articles interesting