Nikita Lisitsa
banner
lisyarus.bsky.social
Nikita Lisitsa
@lisyarus.bsky.social
He/him

I teach C++ & computer graphics and make videogames

Working on a medieval village building game: https://youtube.com/playlist?list=PLSGI94QoFYJwGaieAkqw5_qfoupdppxHN&cbrd=1

Check out my cozy road building traffic sim: https://t.ly/FfOwR
Pinned
A new devlog about my medieval village building game! About 4 months of progress in this one!

#indiedev #gamedev #indiegames #devlog

www.youtube.com/watch?v=fymx...
Stockpiles, Roofs, and Much More! - Village Builder Devlog #10
YouTube video by Nikita Lisitsa
www.youtube.com
Another status update: the actual profiling thing (GPU Trace mode) doesn't support my GPU (GTX 1060). Oh well.
"8+ years exp graphics dev learns to actually profile stuff" status update:

After some guidance I decided to re-fetch chrome sources and now it builds without problems (3 hrs in, 70% done).

Also I downloaded actual Nsight Graphics and fed my game into it, now trying to make sense of the results
November 29, 2025 at 9:44 PM
Yay, Chromium build finished, and I was able to attach XCode Metal profiler to it and get a WebGPU capture! Now gotta figure out what all this means 😅

Though judging by high ALU utilization and low texture read utilization, it's compute bound, in line with my earlier tests.
November 29, 2025 at 9:20 PM
"8+ years exp graphics dev learns to actually profile stuff" status update:

After some guidance I decided to re-fetch chrome sources and now it builds without problems (3 hrs in, 70% done).

Also I downloaded actual Nsight Graphics and fed my game into it, now trying to make sense of the results
November 29, 2025 at 7:24 PM
Reposted by Nikita Lisitsa
Holy fuck, you can't even imagine how bad it is until you actually listen.
The only thing less human than these AI dub performances is the decision to sign off on them

A company this big can pay human actors a decent wage, not produce slop that intentionally removes the human element.
November 29, 2025 at 8:42 AM
Status update: still trying to build chrome. The build system is exactly what you'd expect from a large widespread product of a large company: absolutely nothing works on first try and there are absolutely zero solutions on the internet to all encoutered problems.
Decided I want to actually profile WebGPU, meaning I'll have to build a custom Chrome on MacOS and debug it with XCode, which involves like 3 pieces of technology I despise so wish me luck I guess
November 28, 2025 at 8:26 PM
Not sure where to ask this, so...
#graphics folks, has anyone used Nvidia Nsight on Linux successfully? On my machine the profiled app crashes at startup (only under Nsight). I've traced the issue to XOpenDisplay returning null (though the DISPLAY env var is ok), but that's it.
November 28, 2025 at 4:19 PM
Reposted by Nikita Lisitsa
ahah IT WORKS look it's a C² dual quaternion B-spline!!

this is interpolating *poses* in dual quaternion form, coupling position and rotation, instead of treating them independently (this is a really neat thing!!)
November 26, 2025 at 3:10 AM
Reposted by Nikita Lisitsa
Game Designer and AI Programmer looking at this together, trying to figure out a way to avoid this (currently 10% repro rate after 6h of gameplay)
So this happened in Oslo yesterday. Four articulated buses got stuck in a roundabout.
November 26, 2025 at 1:54 PM
Reposted by Nikita Lisitsa
Now streaming the development of my Colony Sim + RPG game! ⚒️🤖⚔️

I think I'm very close to the final design of the menus! Will I be able to finish them today? Let's try!

Come join me!

www.twitch.tv/sorcerystory

#gamedev #indiedev #godotengine
November 26, 2025 at 2:50 PM
Reposted by Nikita Lisitsa
"I will just make a few custom 32x32 icons for my Godot project"

oops, made a whole sheet. this is honestly one of my favourite things to do.
November 26, 2025 at 2:35 PM
Reposted by Nikita Lisitsa
Many men feel the stripper really likes them. Scientists say it's time to consider whether they're onto something
can’t fucking catch a breath

make it stop
November 26, 2025 at 7:27 AM
Decided I want to actually profile WebGPU, meaning I'll have to build a custom Chrome on MacOS and debug it with XCode, which involves like 3 pieces of technology I despise so wish me luck I guess
November 25, 2025 at 10:47 PM
More profiling! Replaced DDA voxel marching algorithm with just always walking along the +Y axis, removing most of the computations in shader. Expected this to be at most ~2x faster than true algorithm (less voxels visited). Timings here are relative to the base (true) case.
November 25, 2025 at 8:29 PM
More profiling stats! Replaced reading voxel data in the inner raytracer loop with computing it in the shader using the same exact noise function. Results barely differ from the base case, except it's slower at low voxel density, meaning I'm probably compute-bound in this case.
November 25, 2025 at 7:52 PM
First profiling results! Expectedly, on a fully-dense scene (256³ cube) chunk size doesn't matter - first hit is the result, no raytracing needed. On average density small chunks are better due to more fine-grained empty space skipping. On empty scenes larger chunks are better.
November 25, 2025 at 2:44 PM
Finally have some more time to work on this. The benefit of a noise-based scene is that 1) I can easily adjust its density, and 2) I can generate it in the shader on the fly. This will help in profiling the raytracer in a variety of cases and check if it's compute/memory bound.
November 25, 2025 at 2:10 PM
Once again visualizing the number of steps the raytracer takes through the voxel map (more yellow = more steps, red = hit a voxel). Looks quite surreal
November 23, 2025 at 7:59 PM
Trying a new voxel scene to test memory vs compute GPU performance in my raytracer, using @xordev.com's dot noise: mini.gmshaders.com/p/dot-noise
November 23, 2025 at 9:10 AM
Soo chunk size profiling results are kinda funny: the best chunk size is 4x4x4, just like the 64-wide octree nodes I unsuccessfully tried earlier! Maybe if I store octree nodes data in a 3D texture, I can make the best out of the 2 approaches...
November 22, 2025 at 8:06 PM
Rewrote the voxel raytracer to use a two-level chunk system (a 3D texture atlas for 16³-sized chunks, another 3D world-space texture referencing the atlas). Without any optimizations, for primary (camera) rays it's already 25% faster; not so much for random bounce rays.
November 22, 2025 at 5:23 PM
Rewriting my voxel storage once again, this time using a two-level tree, aka chunking. Here I'm raymarching the chunks storage, where individual unrelated nonempty 16³-sized chunks are packed in some order. Quite a surreal view of the scene :)
November 22, 2025 at 4:34 PM
Given that my primary perf sink is tracing highly incoherent rays (for Monte-Carlo) and not primary camera rays (I can really just rasterize voxels, I don't need enormous scenes), maybe octrees were a bad idea from the start?
Right now in the 1 sample per frame with just 1 bounce scenario, octree traversal ends up being 30% slower than raw 3D texture traversal. With 0 bounces (just the camera ray, which are very coherent) it seems to be about 50% slower. I think I messed something up really bad 😅
November 21, 2025 at 10:59 PM
Right now in the 1 sample per frame with just 1 bounce scenario, octree traversal ends up being 30% slower than raw 3D texture traversal. With 0 bounces (just the camera ray, which are very coherent) it seems to be about 50% slower. I think I messed something up really bad 😅
November 21, 2025 at 7:30 PM
I noticed that a lot of my octree traversal perf problems are due to rays not hitting anything when they should've (and thus looping until the max step count is reached). Here I'm visualizing whole warps that had such rays (for better readability), using subgroupAny()
November 21, 2025 at 6:52 PM
Visualizing the number of steps it takes for the octree traversal algorithm to find an intersection (yellow = higher)
November 21, 2025 at 2:55 PM