Hello, I’m Ville Lindblad. I’m an experienced programmer capable of solving problems and building games or apps. I have several years of professional experience using the Unity engine and C#. Other tech I have experience with includes Git, Python, Bash, Java, C++, JavaScript, HTML and CSS. I’ll learn new technologies when needed.
Some things I have worked on:
- Dibs - Location based live-service game with multiplayer features
- Glass Art - Hyper casual art game
- Taxi Dash - Infinite runner
- Cubes - Procedural terrain generation and voxels
- Lockstep networking proto - Tech that enables large scale networked games
- Defender proto - Prototype of the classic arcade game Defender
- Physics2D JS - 2d physics simulation in JavaScript
- Soludus - VR game teaching about the use of renewable energy
- Scroll down for more!
I strive for code that is easy to understand and maintainable and I like building well organized projects. I help others to solve issues, avoid blockers and improve workflows.
My professional experience is in mobile games but I have interest in developing also for PC, VR or console. I can also see myself working as a backend or fullstack engineer in the future.
Projects
Dibs 🗺️
Playstack - iOS / Android
Gamified engagement with brands in a location-based live-service game. Includes multiplayer and AR features.
- Worked as a Unity developer and C# programmer
- Collaborated in an agile team. Wrote documentation, onboarding guides and tech design (Git, Jira, Confluence)
- Mentored juniors and conducted code reviews
- Character movement on a tile based world map (Mapbox SDK) based on GPS location
- Character customization (import tools for artists, assetbundles, scriptable objects)
- CI/CD pipeline in GitLab to test, build and upload the app to App Store and Google Play (yaml, git, bash, python, xcode, assetbundles, aws cli, self hosted runners)
- Publishing (comply with technical Google Play and App Store requirements)
- Localization system (Google Sheets, CSV)
- Helped design our GraphQL backend api and some MongoDB models
- Social login (Firebase auth, Google, Apple, email/password)
- Seasonal events (remote configuration, assetbundles, scriptable objects)
- Gifting (UI, client side logic, api and db model design)
- Utility code (web request pipeline, UI navigation stack, image downloader/cache, global event system, etc.)
- Runtime tools (Debug menu, console, inspector)
- Editor tools and workflow optimization (editor scripts, scene/user/server selector, etc.)
- Testing (unit tests, mockup backend for UI testing)
- Optimization (profiling, memory usage, build size, eliminating GC allocations, overdraw, draw calls)
- SDK integrations (Firebase Auth, Crashlytics, Analytics, Google sign in, Sign in with Apple, OneSignal, Branch.io)
- Analytics events (designed and implemented client events)
- Prototyped AR minigames (Vuforia, later AR Foundation)
Glass Art 🎨
Playstack - iOS / Android
Artful hyper casual game where you can build stained glass artworks by cutting and combining pieces.
- I worked as a Unity developer and C# programmer
- Algorithm for cutting a 2d mesh / polygon by drawing a line and generating the mesh from the list of edge points
- Firebase Storage and Dynamic Links to share the artworks you create
- Optimized sprites and guided the artist
Taxi Dash 🚖
Playstack - iOS / Android
Infinite runner where you drive a taxi, pick up and drop off passengers and plow through obstacles.
- I worked as a Unity developer and C# programmer
- Floating origin (camera stays still, world moves) to enable infinite run without floating point issues
- “Air resistance” custom physics logic to make physics look correct
- Online leaderboard using Firebase Realtime Database
Cubes ⛰️
Personal project - PC / Android
Cube based procedural world in Unity. Inspired by Minecraft.
Source code: villevli/cubes-unity
- Procedural terrain made from blocks. Includes noise caves under ground
- Generated in 16x16x16 chunks
- Hidden surfaces are culled to make rendering very fast even with larger view distances
- Using the burst compiler for all heavy calculations to make it many times faster
- Using background threads to make traversal in the world smooth even when loading or generating chunks
- Procedural generation with perlin noises is done in a GPU compute shader. 4096 chunks (16.7 million blocks) generates in under 20 milliseconds on RTX 3070
- Raycasting to find block surfaces
- Break and place blocks
Lockstep networking proto 🌐
Personal project - PC / Unity
Implementation of the lockstep networking protocol that allows syncing large scale game simulations over the network. Ideal for RTS games.
- Relies on determinism so that only player inputs need to be sent over the network
- Commands are buffered and simulation is advanced when commands from all players have arrived for the current tick
- Uses Unity with the ECS framework (Unity Entities) and Burst
- UDP messages over the network are sent using the low level Unity Transport library
- In this project I learned ECS systems and some low level networking concepts
A-star pathfinding in a grid 🌟
Personal project - PC / Unity
Implementation of the a-star pathfinding algorithm in a grid.
- Using Unity Entities, Job system and Burst to enable high performance
- Priority Queue implemented using binary heap and native collections
- Import test maps from images
- Reading about possible optimizations like Jump Point Search
- Reading about alternate solutions like Flow Field pathfinding
Procedural planet shader 🌍
Personal project - Unity
- Shader graph
- 3d fractal perlin noise
- Adapted from a tutorial video for Blender
Defender proto 👾
Personal project - PC / Android
Prototype of the classic arcade game Defender in Unity.
Source code: villevli/vl-defender-arcade
- Seamlessly looping game area
- Parallax background
- Minimap
- Keyboard, mouse, gamepad and touch controls using the new Input System
Physics2D JS 🏀
Personal project. Started from a game physics course at Metropolia University of Applied Sciences
2d physics simulation in JavaScript.
Try it here: Physics2D
Source code: villevli/physics2d-js
- Physics simulation that calculates collisions and forces between polygons
- Uses no libraries, only the canvas api and JavaScript in browsers
UnityExtensions
Personal project - Unity Library
Collection of small extensions, utils and property attributes for Unity.
Source code: villevli/UnityExtensions
- SingleLineAttribute - Draw a serialized field on a single line even if it’s a struct with multiple fields
- EnumDropdownAttribute - Draw a string or int field as an enum dropdown
- CSVParser - A simple utility to parse a csv file
- SDateTime - A DateTime value that can be serialized in Unity and displayed in inspector
- STimeSpan - A TimeSpan value that can be serialized in Unity and displayed in inspector
- SDictionary - Dictionary that can be serialized in Unity and displayed in inspector.
- EventSystemCallbacks - Global callbacks just before any EventSystem event is executed
- SavedPrefs - PlayerPrefs but supports more types like bool, long, enum and DateTime.
UnityEditorExtensions
Personal project - Unity Library
Collection of small extensions, tools and tweaks for the Unity editor.
Source code: villevli/UnityEditorExtensions
- DefaultAssetInspector - Shows the content of unsupported files in the inspector
- GameViewObjectPicker - Left click to select the object that is visible under the cursor in game view.
- GameViewScreenshot - Quickly take screenshots with F12 from the Game View or the Simulator View.
- DockAreaDragAndDrop - Quickly open a tab for assets or objects that are dragged and dropped into the dock area.
Mirror for firebase packages in Unity
Personal project - Unity Library. Need for this arised when working on Dibs at Playstack
google-unity-packages-mirror · GitLab
- Built to avoid having to commit the large firebase core package into a project and instead download it from a git repository via the Unity package manager
- Runs a scheduled CI/CD pipeline every night to download the .tgz unity packages published by google and pushes them to gitlab giving each version a tag so it can be used via the Unity package manager
Soludus ☀️
Metropolia Game Studio - SteamVR
Virtual reality game teaching about the use of renewable energy.
Source code: Soludus/Soludus2Enercity
- I worked as the sole programmer in Unity
- VR game controls using the SteamVR plugin
- Drag to move around game map using controls similar to Google Earth VR
- Day night cycle that continually adjusts light settings using curves and gradients. I designed this to fit the needs of our artist
- Integrated dynamically changing FMOD sounds from our sounds guy into the game logic
Capitalistica 💰
Metropolia Game Studio - Android
Mobile game teaching maths and financial management.
- I worked as a Unity developer and C# programmer
Siimes 🌳
Metropolia Game Studio - WebGL
Social game for use in elementary schools. Works in browsers using WebGL.
- I worked as a Unity developer and C# programmer
Procedural voxel terrain ⛰️
My Bachelor’s thesis at Metropolia University of Applied Sciences
Thesis (finnish): Vokselimaaston käsittely ja renderointi
- A tech demo with procedural generation of terrain and chunk based meshing to create an “infinite” world
- Multiple layers of perlin noise to create a signed distance field resembling mountains
- Marching cubes for generating a mesh from the signed distance field
- Multithreaded chunk loading and generation
- Realtime terrain modification using boolean operations on the distance field
Arkanoid 2016 🎮
Personal project at Metropolia University of Applied Sciences - PC / Android
A clone of the retro game Breakout/Arkanoid in the Unity game engine.
- Includes a level editor and leaderboard
Nox Daemonica 🕸️
Team project at Metropolia University of Applied Sciences - PC
- A small 1-4 player LAN co-op action RPG dungeon
- Implemented using the Photon Unity Networking library
Fleet Commander 🚀
Team project at Metropolia University of Applied Sciences - PC
- A space battle simulator where you build your fleet and watch a simulated battle in 3d space
- Ships have “AI” steering and attack routines
Space Incident 🌌
Team project at Metropolia University of Applied Sciences - PC
- A point and click graphic adventure game where you solve a mystery in a space station
- Includes procedurally generated corridors
Chess AI in C++ ♟️
Pair project at Metropolia University of Applied Sciences
- Pair programming for an AI chess competition
- Alpha-beta algorithm
- Optimizations like storing the 8x8 chessboard states in 64 bit integer bitmasks
- Our program won the competition 🏆
Intro to OpenGL API in C++ 🐇
Graphics programming course at Metropolia University of Applied Sciences
- Drawing a mesh with a texture and shader using the OpenGL API
Embedded ventilation fan controller in C++ 🔌
Pair project at Metropolia University of Applied Sciences
- Control the speed of a ventilation fan
- Fan is connected to an ABB frequency converter
- Converter is controlled using Modbus protocol
- Two operating modes: Manual and Automatic
- LCD user interface
- Arduino, LPCXpresso, UART, I2C
Procedural voxel terrain with LOD ⛰️
Personal project
- 3d fractal noise
- Marching cubes meshing
- Chunk loading to create “infinite” world
- Octree loading for level of detail based on distance to camera
Post Effect Mask
Personal project I started when a question at Unity Forums got my interest
Applying image effects to specific objects - Unity discussions
- Mask any camera post effects. Use e.g. to apply a post effect only to defined objects
- Draws an alpha mask and uses alpha blending to blend the processed image on top of the unprocessed image
Portal mechanics
Personal project
- Created a seamless portal between any 2 points in the 3d world (like in the game Portal)
- Used cameras, shaders, render texture and stencil buffer
- Teleports any objects passing through and keeping the relative orientation and velocity










