From January 2020 to July 2020, I worked as an environment artist for Clockwork Labs in San Francisco, California. I worked as the sole 3D artist on their mobile Unity game called Bitcraft. Since it was an extremely small team, I wore many hats; my job was to define the initial art direction of the game, create all manner of assets, optimize them for the mobile environment, and make a bunch of shaders and scripts along the way. I also interfaced with external art contractors to create early concept art. 

To provide some background on the game, Bitcraft is a fantasy 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 for Bitcraft.
Modular Building System & Construction Shader
one of the first problems we had to face as a team was how we wanted to create buildings. 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 seen from above - Full, Concave, and Convex
The base shapes seen from above - Full, Concave, and Convex
A perspective view of the base shapes
A perspective view of the base shapes
An example of some building shapes that can be made with the modular system.
An example of some building shapes that can be 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.

A video of the buildings constructing and un-constructing themselves.

This is the shader that is applied to all building pieces. It has inputs for top and side maps, and support for construction.

Fake Windows & Doors
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:
1) Mesh with custom cavity shader that "blocks out" space
1) Mesh with custom cavity shader that "blocks out" space
2) Same mesh, but inverted
2) Same mesh, but inverted
3) Extra details
3) Extra details
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. 

A video of the doors & windows being moved around

Vegetation Assets & Foliage Shader

A video of all the tree types I made, from least to most rare. They are modeled after real life tree species. Notice the fake translucency that is visible when the light angle gets closer to parallel to the camera angle.

LOD0 trees also have the ability to be chopped down, and have interior faces showing the trunk cross-section.

This is the shader that controls the tree foliage. It calculates lambertian diffuse and phong specular lighting, and uses that to sample a gradient to create a cel-shaded look. I also use the view angle to create a fake subsurface scattering effect. 2D noise is then translated across the mesh's UV map and creates a fluttering effect.

Birds VFX
I created a lowpoly bird model (~140 vertices) and a shader that animates the bird, which eliminates the need for a skeleton / animation system. This model can then be instanced using any VFX system to make a flock flying in the background.
Top view of mesh wireframe
Top view of mesh wireframe
Bottom view of mesh wireframe
Bottom view of mesh wireframe
A flying bird in action
A flying bird in action

The birds in action - here I've just spawned them and added simple attraction / repulsion physics.

This is the shader graph for the birds. It just uses a few sine waves to animate the vertex position on the GPU, making for a fairly lightweight asset.

Shelter & Campfire
As the game's first quest, users are prompted to build a shelter and campfire from resources they collect in the environment. 

A wireframe view of the shelter and campfire. The smoke is animated with a vertex shader, sparks are simulated with the VFX graph, and flames are a shader applied to the central planes. A surrounding capsule mesh gives off a heat wave effect by perturbing the camera opaque texture with some noise.

This is the shader graph for the flames. 3D noise is translated upwards and samples a colored gradient. The smoke is done similarly, with some noise also driving vertex animation.

Grass
For the grass, 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. 

This is a video of me adjusting the different material parameters of the LOD0 grass to show what they can do.

This is the LOD0 grass shader. Grass blades are constructed procedurally by applying a fraction function to the mesh's horizontal UV coordinates. The blades are then warped using some 3D noise to simulate a swaying motion. LOD 1 and 2 grass uses fewer planes and a simpler shader.

Ocean Shader
I also created a shader for the ocean, which is a huge focal point of the game. Players travel between terrain islands in boats they can craft themselves.

Notice the refraction, caustics and stylized waves near the shore.

A video of me changing the different parameters of the water shader to demonstrate what they do.

The shader graph for the water. It uses the camera's depth texture and opaque texture to achieve most of the effects.

Trading Post and Fabric Shader
As a player's second quest, they need to find a nearby trading post. These are ancient ruins built with arcane Hexian magic that have been repurposed to serve as a kind of regional bulletin board, where players can go to find or post quests.

A video of the trading post.

This is the shader used for all the moving fabric in the game - it takes some 2D noise and translates it across the mesh UV map in a direction, speed and intensity specified by the material parameters. 

Resource & Tool Models
The game map is littered with ores and minerals of varying scarcity, which players can collect to craft tools and structures. I made models for all the resources and tools in the game.
These are the resources scattered throughout the game.
These are the resources scattered throughout the game.
These are the tool types players can craft from resources.
These are the tool types players can craft from resources.
Back to Top