RSSAmplifier

Blog

RyanJuckett.com

ryanjuckett.comRSS feed ↗10 posts

Latest posts

How We Draw a 3D Sprite World (GDC2026)

These are the slides from the talk I gave at GDC 2026: HOW WE DRAW A 3D SPRITE WORLD: The Stylized Art of Never’s End. They’ll be a bit hard to follow without the video, but that should show up online eventually. Until then, everyone that…

Photoshop Blend Modes in HLSL

I recently needed to mimic all of the Photoshop color blend modes on the GPU so here we are. These were written for simplicity and correctness rather than performance. That isn't to say they are guaranteed to be 100% perfect (e.g. I'm not sure if the implementation for Darker Color should use a < or <=), but they did the trick for me!

Rollback Networking in INVERSUS

INVERSUS. is a fast-paced shared-screen multiplayer game for up to four players. It is the type of game that would traditionally be local-multiplayer, and for a long time I thought latency issues would make it a poor candidate for online. Late in development, I committed to&hellip;

Analog to Digital Input Translation

It’s common to use an analog input method (control stick, trigger button) to control a digital system. Maybe you want to control menus with an analog stick. Maybe you want to detect a tap or double-tap of the analog stick. Or, as is the focus&hellip;

Interpreting Analog Sticks

When a game supports controllers, the player is likely using an analog stick at all times. Nailing the input processing can have a substantial impact on quality throughout the experience. Let’s walk through some core concepts along with examples from INVERSUS. View the full article on&hellip;

Biarc Interpolation

Interpolating between two points comes up all the time in game development. Most of the time, only a simple linear interpolation is needed. Linear interpolations are great because you can't really get them wrong. There is only one possible line connecting the points. Just follow it. When a curved interpolation is required, the solution gets far more complicated. There are an infinite number of…

Printing Floating-Point Numbers - Part 4: Results

I knew this was going to be a difficult problem from the start, and it has lived up to the challenge. One of my initial concerns was how complicated the code would get to make it run at an acceptable speed. It started off terribly slow, but I'm happy to say it has arrived in a good place. Let's discuss the accuracy, performance and any considerations that should be made before using this…

Printing Floating-Point Numbers - Part 3: Formatting

We have written an implementation of the Dragon4 algorithm that can be used with both 32-bit and 64-bit floating-point numbers. However, the inputs and output to Dragon4 are not as user friendly as we need. Thus, we're going to create two user facing functions. One will print a supplied 32-bit float to a buffer and the other will print a supplied 64-bit float to a buffer.

Printing Floating-Point Numbers - Part 2: Dragon4

So far, we've covered enough background to start diving into the real code. To get started, we need to write some high-precision arithmetic. Luckily we only require a subset of operations: comparison, addition, multiplication, exponentiation, division, and a bitwise shift. The performance of what we write here will have a large impact on the overall algorithm. When I first got Dragon4 up and…

Printing Floating-Point Numbers

As far as I could find (as of today - March 5, 2014), there are only two open source implementations of floating-point to string conversion that are efficient, accurate and output "pretty" results. The code can be hard to follow and the licenses are a little more restrictive than I prefer. As an everyday tool that is often taken for granted, it might be surprising that it is so rarely implemented,…