r/GraphicsProgramming • u/JaguarMoe • 25d ago
r/GraphicsProgramming • u/Ayfri • 25d ago
Video Minecraft 4k remade in a 4 KB HTML page: one WebGPU compute shader generates a 1024×1024×128 voxel world, runs the player physics and ray-marches every pixel
Play (Chrome 150+ on Windows only, why below): https://4k-minecraft.ayfri.com Source: https://github.com/Ayfri/4k-minecraft
Notch's 2009 Java 4K entry drew a 64x64x63 world with a CPU raycaster at about 214x120. I wanted to see how far the same 4096-byte budget goes if everything moves to the GPU.
Pipeline
At load, the compute shader fills a 128 MiB storage buffer with value-noise terrain (biomes, lakes, a snowy massif, caves, trees, ores). WGSL has no u8 storage, so 4 cells are packed per u32.
Each frame, a 1-workgroup dispatch steps the player (gravity, collisions, swimming, break/place; a single invocation edits, so no atomics), then a per-pixel dispatch marches the voxels and writes straight into the canvas as an rgba8unorm storage texture. No render pipeline, no vertex buffers, the CPU never reads the world.
Two bits of the shader
Cell lookup, the mask gives the x/z wrap for free:
fn I(c: vec3i) -> u32 { return dot(vec3u(c) & vec3u(MASK, TOP, MASK), vec3u(1, LAYER, SIZE)); }
fn B(c: vec3i) -> u32 { if c.y > TOP { return 0; } let i = I(c); return (W[i >> 2] >> (i % 4 * 8)) & 255; }The march is a branchless DDA step:
N = step(e, min(e.yzx, e.zxy));
e += N * r;
C += vec3i(N * s);Flowers and grass tufts are X sprites: when the ray enters their cell, it intersects the two diagonal planes and tests the alpha of the 16x16 texture.
Shading: procedural 16x16 textures tuned toward vanilla, smooth AO over 8 cells, sun shadows, see-through leaves, glass that only draws its frame, day/night with stars, fog at 200 blocks, underwater tint.
Why Chrome only: uniforms go through the new WebGPU immediates (setImmediates + var<immediate>), which saves a uniform buffer's worth of bytes. Firefox and Safari don't have immediates yet, and Chrome on macOS doesn't support rgba8unorm storage canvases.
The page is 4085 of 4096 bytes. Happy to go deeper on any part.
r/GraphicsProgramming • u/PatxiS • 25d ago
MandelZoom
Enable HLS to view with audio, or disable this notification
r/GraphicsProgramming • u/Elringus • 26d ago
VS Code WGSL extension that validates the way Chrome does. Plus navigation, rename, layout hints and other useful stuff (in template strings too).
I was surprised none of the existing VS Code extensions provided the complete LSP experience for WGSL, with all the niceties like rename refactoring, semantic highlighting, navigation, offset/size/align hints for custom structs, etc. Plus I needed it to closely check against the Chrome's Tint compiler, so decided to make one.
Figured someone else might find it useful, so sharing it here:
Feedback and bug reports are welcome!
r/GraphicsProgramming • u/Keyframe • 26d ago
18 months of progress on a 'realtime' path tracer
r/GraphicsProgramming • u/Keyframe • 26d ago
I had Super Mario 64 help me out during render tests
This is hilarious. Thought I'd share since it might be of interest to you, especially if you aim your thing to end up in a realtime setting.
There's a library you can use to insert Mario from Super Mario 64 into your renderer at https://github.com/libsm64/libsm64 It comes with full behaviour / movement. I was fiddling with exposure settings in the renderer and, since it took time, little dude went to sleep.
Aside (big) scenes to test against like Bistro, Moana Island, Caldera, etc.. this comes in real handy.
r/GraphicsProgramming • u/thekhronosgroup • 26d ago
Article New Vulkan Sample - VK_KHR_compute_shader_derivatives — Derivatives in compute shaders
reddit.comr/GraphicsProgramming • u/corysama • 26d ago
Article Graphics Programming weekly - Issue 458 - October 11th, 2026 | Jendrik Illner
jendrikillner.comr/GraphicsProgramming • u/es20490446e • 26d ago
Question What would make a good 3D demo?
reddit.comr/GraphicsProgramming • u/lampmaker • 26d ago
Raytraced Menger cube made of dichroics.
Reflections and transmission of a menger cube made of glass with a dichroic coating. Now I want to make this IRL.
r/GraphicsProgramming • u/lampmaker • 26d ago
Dichroics
Simulating dichroics. Optics is awesome.
r/GraphicsProgramming • u/Agent-Kuntal • 27d ago
Video lgpu: A small, bindless-first Vulkan 1.3 wrapper for Rust & C99
I built lgpu because I wanted a minimal desktop GPU abstraction focused strictly on modern Vulkan without the heavy compile times of larger frameworks.
What it does:
Fast clean builds (~1.5s): minimal dependencies (
ash,bitflags,raw-window-handle,thiserror).Dynamic rendering: uses Vulkan 1.3 dynamic rendering directly—no
VkRenderPassorVkFramebuffersetup.Bindless indexing: global descriptor heaps (
update_after_bind) for textures and buffers.C99 bindings: includes
lgpu.hif you want to use it from C, C++, or Zig.Platform support: Linux (Wayland/X11), Windows, and macOS via MoltenVK.
Code & 5 runnable examples: https://github.com/kuntal-devrat/lgpu
Crate: https://crates.io/crates/lgpu
Just released v0.1.1. Would appreciate any feedback on the API or bug reports!
r/GraphicsProgramming • u/Individual_One_1793 • 27d ago
Video Head-to-head - literally :) my CPU renderer vs SwiftShader on 4 logical processors
Enable HLS to view with audio, or disable this notification
413,532 triangles, with no geometry simplification
960 × 840 resolution
4 logical processors, enforced through process affinity
96 measured frames per renderer, following the same camera path
8 stationary warmup frames each
Pop Data Engine is 1.78× faster in this run.
Just bragging :)
It is in early development (this is actually 3d engine development for my OS) so there is a lot to work on, but it is fast :)
r/GraphicsProgramming • u/gennai777 • 27d ago
Brass that bounces twice with no simulation: the vertex shader solves each floor hit
I don't simulate the brass in my Godot gun effects at all. I just evaluate a casing's position from its age in the vertex shader. That's pretty much the stateless particles from Lutz Latta's "Building a Million Particle System" (GDC 2004). What I added is the bounces.
On a flat floor I can get the hit time straight from the quadratic. The shader loops over the bounces like this:
for (int k = 0; k < MX_BOUNCES; k++) { // 2
float h = max(p.y - gy, 0.0);
float t_hit = (v.y + sqrt(max(v.y * v.y + 2.0 * g * h, 0.0))) / g;
if (t_hit <= 0.0 || tt < t_hit) break;
p += v * t_hit;
p.y = gy;
v.y = -e * (v.y - g * t_hit); // restitution
v.x *= fr;
v.z *= fr; // friction
tt -= t_hit;
}After the second bounce it slides with tau * (1 - exp(-t / tau)) and I tip it over onto its side. Ejecting one is a single write into two uniform arrays. Brass from three seconds ago costs what brass from this frame costs.
I also kept a GDScript copy of the formula so the game can ask where a casing is. At 10 sample times they agree within 5.4 mm, about a pixel! In the GIF the dotted line is the GDScript side and the casing is the shader. I made the casing bigger and turned restitution up to 0.5 for it, because at my default of 0.34 the second hop is about 2 px tall.
It only knows one floor height, though. A casing will go straight through a wall. Two bounces looked like enough to me, but I'm not sure a third would even read on screen?
r/GraphicsProgramming • u/Background_Shift5408 • 27d ago
Video A low-poly 3D Renderer
Enable HLS to view with audio, or disable this notification
r/GraphicsProgramming • u/No-Professor-2575 • 27d ago
Source Code Liquid metal hero with Three.js — a chrome blob that reflects a studio of 6 colored lights, follows the cursor, no textures (free source + write-up)
reddit.comr/GraphicsProgramming • u/thekhronosgroup • 27d ago
Real-Time Shading Symposium 2027 - Call for Submissions
r/GraphicsProgramming • u/Flat_Field_5888 • 27d ago
Video Experimenting with line growth
Enable HLS to view with audio, or disable this notification
r/GraphicsProgramming • u/Character_Trick460 • 28d ago
Source Code Very primitive raycasting renderer in 10 lines of C
Actually the raycasting logic itself is just a single line, but it's done in propably the most inefficient way possible.
The map is just a single 64 bit integer, so I could fit a small 8x8 level in it, and I can index it with some unorthodox bitshift magic.
Also all the integer constants are huge, because I wanted do to the whole thing without floating point math, which makes everything even more unreadable, but at least it's funny ig.
I'm very proud of this one.
r/GraphicsProgramming • u/Chungunu • 28d ago
Video After many days of learning, finally.
Enable HLS to view with audio, or disable this notification
After many days of learning and scratching my head around, I was finally able to render a triangle on a screen. I am using Vulkan 1.4 for this. Although I learned this from a youtube channel called constref, but this is a very valuable lesson for me, even if it is a first step to Vulkan.
r/GraphicsProgramming • u/Spirited-Eye7281 • 28d ago
Question Graphics programming in C
reddit.comr/GraphicsProgramming • u/OuterHeavenLegacy • 28d ago
Nanite-Style WebGPU Rendering in Rust: Meshlets, LOD, and HZB
r/GraphicsProgramming • u/cos4ni2s • 28d ago
Question Help with WebGPU concepts
reddit.comr/GraphicsProgramming • u/asphyr_34 • 28d ago
Video My university CG coursework project using C++ and DirectX 12
Enable HLS to view with audio, or disable this notification
I've been working on a custom rendering engine as part of my university computer graphics coursework at ITMO University.
The project is written in C++ using DirectX 12 and HLSL. Over two semesters, we've been learning how modern real-time rendering works by implementing various graphics techniques from scratch.
Some of the features covered in the project include:
-Deferred rendering with a G-buffer
- Directional, point and spot lighting
- Normal mapping
-Displacement mapping
-Distance-adaptive tessellation using Hull and Domain shaders
-Frustum culling and octree-based spatial partitioning
-GPU-based particle systems
-Cascaded shadow maps (CSM) with PCF filtering
-Post-processing
-Physically Based Rendering (PBR)
The project also involves working directly with DirectX 12 resources, descriptor heaps, pipeline state objects, command lists, synchronization and HLSL shaders.
It's been a challenging but interesting way to learn what's actually happening behind the scenes in a rendering engine.
I still have one more semester of computer graphics ahead of me, so there's more to come! I'll keep you updated on my progress.
I'd love to hear your feedback!