banner
billy-manning.bsky.social
@billy-manning.bsky.social
Graphics programmer, classical pianist
The Matrix Reloaded and Revolutions are both awesome. We all had terrible taste when we pretended they sucked in the 2000's.
July 18, 2025 at 4:09 AM
I finally released a whopping 7-part series on advanced graphics programming in Unreal! It has lots of good stuff that isn't mentioned anywhere else on the Internet.

The final article will come out tomorrow.

medium.com/@manning.w27...

#unreal #graphicsprogramming
Advanced Graphics Programming in Unreal, part 1
This is a seven-part article series.
medium.com
June 25, 2025 at 5:35 PM
Cursed c++ fact of the day: casting a compile-time constant 0 to a pointer must produce a nullptr, but that doesn't mean nullptr must equal 0. On CUDA it equals 0xffFFffFF!
June 17, 2025 at 5:21 PM
Modular Synths are the music equivalent of ShaderToy: take a ton of simple mathematical building blocks and mix them into something unique. Real modular setups are stupid expensive, but there's OSS simulators for them!

Here's a playlist of synth tracks I made for fun.

youtu.be/u0krjHwtP-8?...
Ancient Machine (VCV Rack modular synth sim)
YouTube video by William Manning
youtu.be
March 18, 2025 at 9:57 PM
Cursed c++ fact of the day: on some platforms (embedded devices), memory addresses starting at 0 are totally valid, often pointing to special things like interrupt tables. However dereferencing `nullptr` is still UB! So to safely access address 0, you need to use some assembly.
January 31, 2025 at 10:47 PM
Stayed up all night making this, just for fun.

www.shadertoy.com/view/M3Kczh
Shadertoy
www.shadertoy.com
January 4, 2025 at 12:06 PM
Cursed c++ fact of the day: if you have a C-style array a, and want to get element i, it's easy! Just do:

i[a]
December 19, 2024 at 9:55 PM
This is Moose!
December 19, 2024 at 4:37 PM
Cursed c++ fact of the day: it's so hard to parse that you sometimes have to insert hints to help the poor compiler. Calling a template function`t.get<2>(3)` kinda looks like the boolean expression `(t.get < 2) > 3`! So in some circumstances you must say `t.template get<2>(3)`.
December 13, 2024 at 3:30 PM
Cursed C++ fact of the day: the expression `((a || b) && c[~d])` can also be written as `((a or b) and c<:compl d:>)`. In fact, you can avoid ever touching the characters & , { }, [ ], #, \, ^, |, and ~ , using what are called "operator alternatives". This makes c++ ISO/IEC 646 compliant.
December 12, 2024 at 3:59 PM
Having used CUDA a little bit, it makes me furious to go back to shader languages and see what we're missing out on. It's literally going from modern c++ back to 70's-era C!

Did you know that CUDA compute has `assert()`, `printf()`, and nearly all modern c++ including templates and lambdas?
November 26, 2024 at 8:34 PM
We got the luckiest pair of dogs ever.
November 25, 2024 at 3:46 PM
Something that surprised me about #Unreal s renderer is the number of heap allocations it casually makes every frame. Is that just not a problem on modern hardware, even mobile?
November 20, 2024 at 1:25 AM
I jump-scared myself with a Blueprint graph I had forgotten about
November 17, 2024 at 6:42 PM
I've implemented mesh-slicing, which stretches the inside of the mesh but not its edges. 1/3 #unreal
November 16, 2024 at 8:27 PM
Advice on dynamically slicing meshes, like a 9-sliced sprite? Meaning to stretch the middle of it horizontally/vertically while leaving the tips alone. This is for a game idea with procedural levels.
Right now I'm thinking Vertex Colors -- Red for mask, Green for stretch interpolant, Blue for axis.
November 15, 2024 at 1:14 AM
Some photos of my Indian Ringneck Parrot, Tali.
November 12, 2024 at 7:41 PM
Any other graphics programmers here? I work in Unreal Engine and it's been a real trip familiarizing myself with everything that exists under the hood of this renderer.
November 12, 2024 at 5:51 PM