top of page
Skärmbild 2025-09-12 163924.png

Island Architect

I got to work on Island Architect during my LIA,

developed by Björn Ottosson AB.

 

I got to work as a game programmer and designer in its custom Engine, working on tools, UI and procedural generation.

Introduction

During my education at TGA, we have half a year of “LIA” (internship). I had the opportunity to work at Björn Ottosson AB on the indie game Island Architect, a world-building game where players can populate a world that procedurally generates structures from basic input. The small size of the studio gave me the opportunity to work in a variety of areas.

Skärmbild 2025-10-03 155857.png

Building during early development

Tools

When I started working on this project, I was assigned to develop tools and the HUD for the player. During my education, I usually had time to create a working product and then move on to the next task, so this was a nice change of pace where I could build something, receive feedback, and continuously improve it.

Gutter Shader

As we need to create a lot of cylinders and half cylinders when creating drainpipes and gutters in different lengths, and cut at the corners at different angles, we opt to use a rectangle and then raytrace the shape we want, instead of using premade models. This allows us to lower the vertex count to 36 per cylinder and instead do some extra math in the pixel shader. While we need to do a bit more work in the pixel shader, it reduces the amount of LODing we are required to do, as the shape is already reduced to a minimum number of vertices and we only need to perform calculations for the pixels that are on screen.

​

This also allows us to use a plane on each end to cut the cylinder and avoid overlap.

Shader using raytracing

Skärmbild 2026-03-31 164209.png
Skärmbild 2026-03-31 165058.png
Skärmbild 2026-03-31 173208.png

For each shape needed we send a ray towards it and saving the position and raydistance in a float4.

Setting up ruls depening on the ray direction to create the shape we want. 

Skärmbild 2026-03-31 171253.png

Generation of fences and gutters.

LVK

Generate DrainPipes Rules

I got the assignment to generate drainpipes, gutters and fences. To generate positions where we needed any gribbles I started with a general loop, setting up rules that gave me every possible position where they could be generated, storing them with a value representing how good the position is. Then looping through every position and adding more rules to prevent them from being generate too close to each other and other rules that needed information of other positions. 

 

We could then use this data to generate the gribbles with the correct height and direction after we generated the buildings. 

We decided to change the graphics API from WebGPU to Lightweight Vulkan, a wrapper for Vulkan that handles bindless rendering in a more convenient way. This was my first time working with both APIs and with bindless rendering. Working with pointers on the GPU side felt more natural and closer to programming in C++.

bottom of page