This page discuses a selection of research software and tools developed.

Interactive GPU active contours

This software (GitHub link) is an OpenCL implementation of the paper "Interactive GPU active contours for segmenting inhomogeneous objects". Please cite the paper if you find it useful.


Automatic Billboard Imposters (ABI)

ABI or Automatic Billboard Imposters is an asset for Unity3D which allows the batched drawing of large amounts of complex geometry.

This is achieved by replacing distant objects with photographs, which are generated for each object at three orthogonal views (front, right, and top). This means that there are significantly fewer triangles and texture memory used in the final scene.

Stippling shaders are also employed to smoothly transition between model and photograph, when the projected model size is less than some threshold. These shaders blend with a subtle low-frequency Gaussian bubbling effect.

Hardware batching ensures that the number of draw calls remains low, which is especially useful when thousands of objects are instanced. The package can be downloaded here.


I find using a mouse painful, so made this responsive widget to act as a mouse alternative/replacement using the keyboard. The widget has two modes, normal "keys" mode and "mouse" mode. When in mouse mode, all typical keyboard inputs are gobbled up and replaced with a powerful interface for manipulating the "mouse" at different speeds.


  1. Awesome WM
  2. xdotool (not required but installing it gives access to the majority of features)

Install Instructions

  1. clone next to awesome/rc.lua (there should be a folder called "keym" with widget.lua inside next to rc.lua)
  2. local keym = require("keym/widget") -- put somewhere near top of awesome rc.lua
  3. right_layout:add(keym) -- put in your wibox to add visual mode button to rc.lua
  4. awful.key({ }, "`", function () keym.Toggle() end), -- put somewhere in globalKeys to bind it to rc.lua
  5. script requires "xdotool" installed for the majority of features: mouse clicks, scrolls etc

Usage Instructions

  1. Press the backtick key ` to toggle keym mode ON/OFF.
  2. keym is intended to be flexible to one-handed, or two-handed usage
  3. typical two-handed use is: WASD=move, J=click, K=right-click RF=scroll, ;speed1, '=speed2, h=slow
  4. left-handed only use is: WASD=move, Q=click, E=right-click, RF=scroll, \=speed1, z=speed2
  5. right-handed only use is limited: Arrows=move, Return=click, /=speed1
  6. why no vim-mode bindings? moving along diagnols causes finger-collisions, but do otherwise remap

Please let me know if you find this useful, or if you find any bugs/have suggestions. Sources for this software can be downloaded here. Note: after over a year of using this, I ended up switching to a hardware alternative with a Planck keyboard with custom firmware written in C.

MIT © Chris G. Willcocks

Godot Pixel Painter

This is a small pixel-art painter addon for use with the Godot engine. This actually makes it pretty powerful even though its just a sprite editor, e.g. you can work with Godots powerful cutout pipeline to edit bone-based animations directly, something you can't even do with Spine.


Requires latest version of godot. Copy addons folder and all its contents to your project, restart Godot, then activate plugin from editor settings.

Features & Usage

To use, simply select a sprite from editor and you're good to go.

Sources for this software can be downloaded here. MIT © Chris G. Willcocks

[return to top]