theor

solutions looking for problems

Demo effects using Rust and WebAssembly

I needed a reason to play with rust+wasm, and I have always loved the demoscene and its cleverness. I also wanted the result to be embeddable here on my blog made with Astro. Guess who’s about to fill buffers with fire, plasma, stars and roads. ..

DOOM maps to SVG to laser cutter

DOOM maps to SVG to laser cutterI’ve heard a lot about classic Doom’s data format and decided to write some Rust code to extract its maps and convert that to vector graphics I could laser cut. ..

ESP32: leaving love notes and entering demoscene territory

ESP32: leaving love notes and entering demoscene territoryI’ve been tinkering with arduino-like platforms recently (more on the midi synth soon) and got the idea to make a small message board to leave notes to my girlfriend. This is how I ended up with a simulator, an integration with a demoscene tracker, custom tools to make palette cycling effects, having to learn CAD to make a laser-cut front panel and more. ..

A visual graph editor to output ASCII art

At work, I used to write a lot of unit tests that would create a graph, then act on it. A bit of ASCII art can go a long way to quickly get the point of the graph ; I eventually got bored by drawing them by hand and wrote a visual tool to do it: https://unicode-graphs. netlify. app/ ..

Fast expression evaluation with burst in Unity

I recently implemented the famous Marching Cubes algorithm (Wikipedia) using density function to describe the terrain (GPU Gems chapter about that). Having to recompile the code to tweak the density function was too slow, so I wrote a fast expression evaluator for Unity, available on GitHub. ..

Implementing Conveyor Belts à la Satisfactory with DOTS in Unity

I was curious to see if I could implement belts like in Satisfactory or Factorio with DOTS in a performant manner. In the end, my implementation is highly parallel and works at 60fps for a million items, but let’s start with a deep dive into how both games do it. ..

Delaunay Triangulation and Triangle Storage

Delaunay Triangulation and Triangle StorageIn the last part, we ended up with a collection of random 2D points. Now it’s time to triangulate them. After an overview of what a Delaunay triangulation is, we’ll describe the Bowyer-Watson algorithm and write a custom data structure to store the triangles, then we’ll generate a mesh from it. ..

Random 2D Points

Random 2D PointsWe’ll start by generating the random points we’ll triangulate later and benchmark that, but first, we need a bit of boilerplate : ..

Map Generation: Introduction

I always loved procedural generation, and was really impressed by mewo2’s fantasy maps. I decided to give it a try using Unity and the Burst Compiler, an amazing piece of tech developed at Unity. It was also the opportunity to dig into SVG and implement a few algorithms and white papers: Delaunay’s triangulation, a depression filling algorithm, a cartographic labeling algorithm based on simulated annealing, water network computation and a few others. I’ll write a (probably long) series of articles detailing the interesting parts and algorithms of the project and my general process to approach this kind of topic. ..

Choosing a language to replace Javascript (and why it's F#)

This is an opinion piece. YMMVOnce in a while, I start a side project whose ideal format is a website. This article is about how I eventually settled on F# and Fable. ..