iakov.dev

I'm Iakov, a software engineer living in London. My day job has been in large products: Snapchat, Amazon Prime Video on PlayStation and Apple TV, graphics work on World of Tanks at Wargaming and firmware for Samsung TVs.

Since 2009 I've been building a C++ game engine in my spare time, and games on top of it. This is where I write about rendering, voxels, tools and whatever I'm working on.

Iron Cube 0.52: baked shadows, lens flares and better physics

· 1 min read

Video

Iron Cube has a new lighting system. Shadows are baked when the level is edited: for each voxel I cast a ray towards the light source, and if the ray hits anything on the way to the sun, the voxel is in shadow. The algorithm is primitive and took a couple of hours to write. Calculating the lighting for a whole level takes 20-30 seconds.

Iron Cube reborn

· 1 min read

Video

After a 9-month break from my old pet project (I joined a new company), I have finally launched it properly on Google Play. I spent 2 weeks of my Christmas staycation getting it ready for release. It was at least something to take my mind off what is going on around us. My 12-year-old son made the music for the trailer and the game in GarageBand, and my 8-year-old daughter was head of QA.

Glow engine videos from 2004 to 2020

· 2 min read

2003-2004

A walkable visualisation of the Ministry of Textile in my home country. I worked on this project with Bouygues Construction, the French multinational. The goal was to show clients what the future buildings would look like.

The whole building:

Video

Path tracing voxels, day 1

· 2 min read

Path tracing voxels, day 1

Ray Tracing in One Weekend

I was reading the excellent Ray Tracing in One Weekend and decided to try it in my voxel engine and editor. The book builds its scenes out of spheres, but I wanted to use voxels.

How it works

A ray goes from the camera through each pixel on the screen. You find where it hits the scene and then work out where the ray goes next. On a diffuse surface the ray scatters in a random direction, a metal surface reflects it, and glass either reflects or refracts it. The book explains this better than I can here.

Running Emscripten apps in fullscreen

· 1 min read

Running Emscripten apps in fullscreen

I spent an evening getting my Emscripten game demo to run in fullscreen. Emscripten has two modes for this: “proper” fullscreen and soft fullscreen. The first works like fullscreen in a native app, but it doesn’t seem to be supported in every browser. Soft fullscreen just resizes the app to fill the whole browser window, and that’s exactly what I needed.

Iron Cube in the browser with Emscripten

· 1 min read

Video

I ported my demo game Iron Cube to the web in a couple of days with Emscripten. Emscripten compiles C++ to code that runs in the browser, so the same engine code that runs on Windows and Android now runs in a web page. The video above shows the result.

You can play the demo here: https://glow3d.com/blog/demos/iron_cube.html. It should work in any modern browser, mobile browsers included.

Iron Cube is my multiplayer tank game in a fully destructible voxel world. The engine already renders with OpenGL and uses SDL2 as its platform layer, and Emscripten supports both.

glw_imgui 0.1, my immediate-mode GUI library

· 1 min read

Video

Version 0.1 adds initial support for themes and builds on Linux, macOS and Windows. The code is on GitHub: https://github.com/yak32/glw_imgui

IMGUI (immediate-mode GUI) is a simple, code-driven GUI approach with no bloat, and many modern game engines and games use it. The best explanation of the idea is this video. The library has basic support for layout (attachable toolbars and layout serialisation), themes (colours and serialisation) and lock-free multithreading through triple buffering.

It started as part of my game engine. Some time ago I pulled it out into its own library and put it on GitHub.

A voxel adventure game prototype

· 1 min read

Video

This is a video of the voxel game prototype I built on my Glow3D engine a while ago. The idea was something like the original Zelda: an isometric adventure, but made of voxels. The art in the video is by Sir carma.

I wrote a parser for the MagicaVoxel file format and made big changes to the code I had written for the Iron Cube game. To improve the picture I added NVIDIA HBAO+ and NVIDIA shadows through the ShadowWorks middleware. HBAO+ is a screen space ambient occlusion technique that approximates global illumination, and with it I gave up on writing my own SSAO, at least for a while. The engine already had some shadow support, but at the time it had no efficient cascaded shadow maps, so I went with the NVIDIA libraries instead. They are fast and many modern games use them.

MagicaVoxel is a nice voxel editor and renderer made by @ephtracy. He has more or less built a 3ds Max single-handed, only for voxel graphics. The music in the video is Medieval Introduction.

New website and blog

· 1 min read

New website and blog

I spent several evenings rebuilding my website and blog, www.glow3d.com.

How I got here

I started writing about my hobby game engine on blogger.com several years ago. Later I moved to my own website on AWS running WordPress. The main reason was to learn the basics of HTML and web development, and I also wanted to try the server as a host for my multiplayer game prototypes. The WordPress blog was bad. Its SQL database crashed every so often and I never found out why, probably something in the memory configuration. In the end I got tired of it, cancelled my AWS subscription (to be honest, mostly because the free period had run out) and closed the website and the blog.

Pied Piper, my first Ludum Dare game

· 1 min read

Pied Piper, my first Ludum Dare game

“Pied Piper” is a silly little game about dancing zombies. It’s my first attempt to take part in Ludum Dare and actually finish a game.

What went right. Using Fuse for the characters and mixamo.com for the animations saved a lot of time. Fuse makes it easy to build a realistic character, and before the jam started I had already set up a pipeline for exporting characters from mixamo.com into my engine. Making the game was also a lot of fun. I laughed out loud for the first 10 minutes after I saw the first dance, and that fun was a big part of why I kept going to the end.