About

What I do

Professionally I'm a programmer, but my interests both in programming and outside vary quite a bit.

Graphics Programming, allows me to unite art, science, and programming, and is, naturally enough, my favourite.

I have written a book on shader development in Unity: Physically Based shader Development for Unity 2017.

I like learning new programming languages, and different programming paradigms (e.g. Rust, FP).

I also gingerly but stubbornly proceed in training myself to be both a concept artist and a 3d artist. Coding is definitely easier for me :P

How I got here

When I was 2.5 years old I was fascinated by the black and green screen of our Commodore PC-10. I learned to type in commands at the DOS prompt before I learned to read.

I offered a fair bit of resistance to becoming a programmer (I wanted to be an artist) but in the end, programming is the easiest thing I can do at a professional level.

I haven't given up on becoming a good artist though. Game Development, especially Graphics Programming, allows me to unite art and programming, and is, naturally enough, my favourite.

Procedural Modelling (and generative art in general) is another great way to unite programming and art (Houdini, Blender Geometry Nodes, and Unreal's Geometry Scripting)

Writing

Book

Physically Based shader Development for Unity 2017


I have written a book on shader development, out January 2018.

ShaderCat


Physically Based Shader development in Unity and WebGL, and Graphics Programming in Rust.
Latest post
How to Explore Unity 5's Shader System Code - IV - Global Illumination code overview
01 August 2016

This time we'll chase down how the Global Illumination contribution is calculated. It takes some work, because the code which does the key calculations is behind layers of quality choices, which are encoded as defines.

LambdaCat


Gathering any interesting/useful/cool Functional Programming tidbits I find. Mostly about many different programming languages.
Latest post
Getting to know Purescript (from Elm)
10 July 2016

If you know Elm and want to add to your toolset a language, which actually has those higher abstractions that you've heard about, Purescript is the obvious choice.

Purescript compiles to Javascript too, it can interoperate with any Javascript library, has no runtime, and has most of those Haskell abstractions, plus a few more.

Talks

Functional Programming

I also speak at conferences. Since I started in order to help popularise Functional Programming, most of my talks are about that.

Here I'm only going to list talks that were recorded.

Projects

Are We Game Yet?

Want to develop games in Rust? I made Arewegameyet? to gather all Rust crates useful for gamedev in one place.

It's now maintaned by the Rust Gamedev community.


Unity Neon Challenge

My entry for the Unity Neon Challenge. I made this game environment, all by myself. I modelled it in Houdini, and created the scene in Unity, complete with lighting and shaders.

Research

Rust for Rendering & Gamedev

C++ is the lingua franca of the game industry, but my experience with Functional Programming taught me that Type Systems can be much more useful than you'd expect.

Rust is a proper attempt at using PL research to achieve a practical goal, namely a memory safe, low level and high performance language.

I think Rust will prove itself very useful in making gamedev much less painful.

In order to help people use Rust for gamedev, I built and maintain Arewegameyet.rs, an overview of the state of the ecosystem, and an index of useful libraries.

Better Debugging & Live Programming

Following the example of "Inventing on Principle" and the little-known GOAL language and system by Naughty Dog, I seek to find ways to reduce the iteration times in gamedev drastically.

References:

Games

Tainted

An Interactive Fiction game about a lonely boy who is hit by some forceful hope in the aftermath of a catastrophe of local proportions.

CyberCook

A realistic 3d cooking simulation for iOS and GearVR. I made the physically based shaders, amongst other things.

vTime

A VR sociable network. I worked on the Avatar functionality.

Art

Photos

With my trusty rugged Lumix (update: now Canon M50) I take mainly photos of great architecture and landscapes.

Painting

Thanks to Schoolism and CGMA I've been progressing.

3D

The ideal complement of a Graphics Programmer is 3d modelling and animation.

I'm currently learning Houdini and procedural modelling.