In January 2020, I joined the Clockwork Labs team in San Francisco; at the time, it was only a two-person company with a CEO and CTO.
As the company's third hire and the sole artist, I embarked on the exciting journey with them to develop the nascent game Bitcraft. My job was to define the game's artistic direction and style, and also create every single asset in the game.
From January 2020 to July 2020, I learned how to create an asset pipeline from the ground up, work with external contractors for concept art, optimize assets for the mobile environment, and make a bunch of shaders, scripts and effects along the way.
To provide some background on the game, Bitcraft is a fantasy open world MMORPG set in a land called Hexia, with a map made up entirely of hexagonal tiles. Players explore the procedurally generated landscape, collecting resources and building their own custom towns. Players can also exchange in-game currency for political power, working their way up to sovereignty.
Below are some samples of my work.
Players travel between terrain islands in boats they can craft themselves, making the ocean a big focal point in the game. We needed an ocean shader with fake refraction & caustics, and stylized waves near the shore. (And a bunch of parameters, so we could play around with the look of it & nail down the style.)
This is the ocean shader. It uses the camera's depth texture and opaque texture to achieve most of the effects.
For the grass shader, we needed a versatile shader that could be adjusted to fit any of the biomes we'd create in the future. It also needed to be optimized so that it could be instanced throughout the scene and still run on a mobile platform.
For the LOD 0 shader, I used simple scattered quad meshes, on top of a ground plane, and then created a procedural texture to use as an alpha mask with controls for wind, thickness, color, etc. I also added some hexagonal flowers on top for visual interest.
This is the LOD0 grass shader. Grass blades are constructed procedurally, then warped using some 3D noise to simulate a swaying motion.
One of the first problems we had to face as a team was how to represent buildings in the game. Early on we decided that they should be modular, so players could create whatever shapes they wanted. Cosmetic features (windows, doors, signs, etc.) would eventually delineate who owned a building and what purpose it served.
Creating hexagonal modular buildings was no small feat! We eventually settled on the system below. I figured out that any combination of hexagonal "modules" could be constructed using only the three triangular shapes below:
The base shapes as seen from above - Full, Concave, and Convex
A perspective view of the base shapes
Some building shapes made with the modular system
We also needed a way to show the buildings were being constructed. I ended up creating a shader to represent it, which can be controlled with a script.
Meshes have "skeleton" texture maps that show the underlying structural beams, and an ID mask controls the order in which pieces (bricks, planks, etc) get added on top.
This is the building shader, which includes all of the construction effects.
Since the game involves players creating their own buildings, we needed a way to apply cosmetic features to the buildings. This raised an interesting technical challenge: how could I apply things like windows and doors to buildings after they've been created? I needed a solution that would keep everything separated and wouldn't modify the underlying building mesh.
I ended up making a system that "faked" mesh cavities by using Unity's render queue system. See below for an explanation:
First, a mesh with a custom shader is used to block out the space.
Next, an inverted mesh with another depth shader is layered on top.
Finally, all the extra details are added.
The birds seen flying in flocks overhead in the game are extremely simple 140-vertex models that are procedurally animated with a vertex shader and then instanced with a VFX system, which eliminated the need for skeletal rigs.
Some of the collectable resources players can pick up during the game, which can be used to craft tools and structures.
The Trading Post, a place where players can go to find or advertise quests.
A shelter & campfire, which players craft as part of the game's first quest.
All of the trees in the game, which players can cut down (LOD 0 trees are rigged to show the interior, seen below)
The shader graph for the foliage, which includes some faked subsurface scattering.