Ben Sims
arycama.bsky.social
Ben Sims
@arycama.bsky.social
Senior Programmer.
Graphics, C++, C#, Shaders, Unity, Unreal, PC, Console, Mobile, cats.

github.com/arycama
mastodon.gamedev.place/@Arycama
twitter.com/BenSimsTech
Just some mildly moody screenshots from the thing that I'm trying to make into a thing. Also pictured: rewritten gpu driven foliage, terrain and grass renderers. Writing a device radix sort was fun-ish.
Currently reworking the terrain shader, needs better height blending.
September 1, 2025 at 2:10 PM
Shaders are fun. Sky+lightrays rendered together with 1 sample per pixel+temporal with importance sampling) Clouds+sky integrate with ambient probe and aerial perspective so environment light is cohesive.
End result is quite nice, only change between these pics is sun+view angle
May 8, 2025 at 5:41 PM
Simple multipass parallel prefix sum+stream compaction. First pass writes groups of 1024 scans and max value for each group. Pass 2 does a prefix sum on the group sum array to compute a final offset for each group of 1024 which is used as an offset for final pass write indices.
January 26, 2025 at 2:28 PM
It was difficult to find a simple, concise parallel prefix sum example online, even the GPU gems code was obscure and had bugs.
I wrote a simple one, only handles a 1024 array, but can be expanded to larger arrays with multiple passes.
Not the most efficient method, but simple
January 24, 2025 at 6:56 PM
Optimised (I think) HLSL for converting float3 to and from R11G11B10. Input values must be in range, doesn't handle -ve/denorms/nan/inf.
Handy for packing positive float3 data into a single uint.
Convert to+from is 21 DXC instructions.
Handy for packing 3D data into a single int
January 23, 2025 at 3:18 PM
I wrote a blog post about using #Unity packages, git submodules and Visual Studio together. Would be really cool if this kind of thing just worked out of the box (Eg add package as git submodule, and that's it), but oh well, this kind of works!

arycama.github.io/2024/12/21/v...
Visual Studio Submodules and Unity Git Packages
I’ve been using Unity git packages to develop a few different libraries alongside my game projects, such as my Custom Render Pipeline. While the setup isn’t too complicated, and Unity will automatical...
arycama.github.io
December 21, 2024 at 4:19 PM
I think I'm ready to start writing more graphics/shader blogs.

I have many complex subjects I'd love to delve into, but what are some graphics/shader related techniques/topics you would be interested in knowing more about?

These won't be full tutorials though, some prior knowledge will be assumed
November 26, 2024 at 11:57 AM
Being part of a wall of death while Periphery played Blood Eagle was certainly an interesting way to spend a Thursday night lol

10/10 background art too
November 7, 2024 at 11:29 AM
I inverted it btw, the equation is quite cursed, but it works. Had to re-derive using a normalized CDF so that a random number from 0-1 will always map to a valid value.

Now I can importance sample underwater scenes nicely, handy as a base for more complex effects!

www.desmos.com/calculator/b...
Thanks! Your response made me think of a different way to write the integral, and I plugged that in and got a closed form solution: lx(exp(-ca/l)-exp(-c(lx+b)/l))/(c(b+lx-a))

(Left pic is numerical integration, right is analytical. Also handles large distances (eg far plane))

Now to invert it 😅
November 2, 2024 at 5:47 PM
Equation for underwater rendering I'm trying to solve.. Assume viewer is at depth "A", target pixel is at depth "B", "L" is dot(lightDir, up), and c is extinction coefficient. Wolfram doesn't give an analytical solution and I have no mathematica license. How to solve?
www.desmos.com/calculator/s...
Underwater Extinction
www.desmos.com
November 1, 2024 at 4:19 AM
Welp, turns out I have a bug in my GPU random gaussian number generation. Can't believe this took me nearly 3 nights to track down. I started rewriting my entire iFFT algorithm from scratch.

These are the two renderdoc captures, one is much more... pink. My X and Z values were always identical.
October 24, 2024 at 10:44 AM
My ocean FFT does this in the corners, why does it do this in the corners? Does anyone know why it does this in the corners? It didn't used to do this in the corners.
I think the spectrum texture looks okay, displacement has weird pixels in the corners though.
Do I need to add an extra row/column?
October 22, 2024 at 10:50 AM
Reposted by Ben Sims
October 18, 2024 at 12:18 PM
Anyone else done much work on shore waves using distance fields? I'm trying to come up with some nice equations using distance/direction/underwater depth, plus the wind speed+direction from the iFFT ocean spectrum. (Tessendorf Phillips spectrum for now). It's hard to find much info though.
October 20, 2024 at 3:37 PM
Today's random optimisation finding:
Temporal upscaling pass was writing to a 64 bit (Rgba16) instead of 32 bit (Rgb111110) texture. Changing this sped up the TAA and subsequent bloom pass by 0.3ms with no visual differences. (As alpha channel is unused)

A nice quick win!
January 11, 2024 at 7:11 AM
2023:
Got my name in credits on 2 AAA titles (AoE2 DE Xbox and Return to Rome), lots of optimisation on another AAA port which will be finished this year, finished building my house and moved in, went an entire year without changing studios, and made some spicy game engine tweets
January 9, 2024 at 7:05 AM
I think an important skill is learning to build stuff from scratch without tutorials, which is a skill that you don't develop while watching tutorials.

They're good if you have nowhere to start, but otherwise you're often better off just making a quick plan and then starting to build something.
September 20, 2023 at 2:27 AM
Might have to start posting here a bit, since Twitter is about to self-implode.

I do game-dev things, and graphics things, shader things. I recently updated my imposter baker/shader. Primary usage is for large amounts of foliage.

Having a few issues getting the normals to match up though!
September 19, 2023 at 12:17 PM