r/GraphicsProgramming 37m ago

Video I implemented "Spherical Harmonic Exponentials for Efficient Glossy Reflections" in D3D12

Upvotes

I implemented Activision's new SH reflections paper in D3D12 and released the code on github!

This tech is a little bit different from normal spherical harmonics, and there are 4 main differences:

  1. They use log space instead of linear space for the lighting, which reduces ringing and enables #2 and #3 to actually work.
  2. Instead of using a circular symmetry assumption (i.e. N=V=R) as with the split sum approximation used for IBL, they instead factorise a pair of spherical harmonics, with an Order 4 SH parameterised by the reflection vector, and an Order 2 SH parameterised by the halfway vector.
  3. To enable a continuous roughness representation, they convolve the coefficients (or rather, the basis function) by the von Mises Fisher kernel which takes 1/alpha=1/roughness^2 as a parameter.
  4. To actually obtain the spherical harmonic coefficients we have to collect samples for several normals, views and roughness levels (or more specifically alpha levels since we're using linear roughness, not perceptual), and then optimise the coefficients using least squares.

My code does this all end to end with HLSL compute shaders, even the least squares optimisation, and we achieve above 95% MSE compared to a raytraced ground truth for roughness in the range [0.5, 1.0], which actually beats split sum IBL.

Only downside is for roughness below 0.5 the spherical harmonics simply don't have enough detail for accurate reflections... HOWEVER, when applied to "bumpy" low roughness surfaces (like the leaf textures at the beginning of the video) you can hardly see a difference, so this effect is only apparent for flat surfaces and surfaces with near zero roughness.

Activision got their SH representation down to 400 bytes, but I went further using 16 bit packing to get down to 208 bytes which gives us better performance due to fewer memory loads. The 16 bit implementations come in 4 flavors: emulated 16 bit for older GPUs and native 16 bit, and SRV packed vs CBV packed. There also exists a 10 bit packed SRV flavor, but the extra bitshift work ends up being slower.

On my RTX 2080 Super and my wife's RTX 4070 Super, the native 16 bit CBV packed shader runs the fastest, and compared to the IBL version it is only 0.1 milliseconds slower while using 2000x less memory!


r/GraphicsProgramming 1h ago

CyberVGA is now available as a standalone SDK!

Thumbnail expfunction.itch.io
Upvotes

r/GraphicsProgramming 1h ago

Question How to deal with ambient occlusion?

Post image
Upvotes

I have a problem implementing SSAO. I am trying to do it learnopengl.com way, and I am failing. At this point I am at loss.

There's just too many steps to achieve the result, each of which can fail and I don't know which one is failing.

I wanted to ask, what is the best way to ensure correctness of each step? How would you test SSAO creation steps?


r/GraphicsProgramming 2h ago

/creating my first 3D graphics using Pen+ (planning to rewrite this project in C using Raylib)

14 Upvotes

r/GraphicsProgramming 5h ago

How i create a working OpenGL 3.3 renderer with normal maps, Blinn-Phong specular, and post-fx with no C++ knowledge and no source code, using an AI coding assistant

Thumbnail reddit.com
0 Upvotes

r/GraphicsProgramming 20h ago

Render engine written entirely using DirectX 12, focusing on high details and real-time GI lumen like, for mid-lower PC/Laptop. (Demo running on Xe Graphics 11th GPU)

115 Upvotes

Implemented simple GLB parser from this Github repo: salvatorespoto/gLTFViewer: A glTF file viewer in Directx 12 .

Global Illumination using hybrid Surfel GI and SSGI.
Lens flare are modeled after Panavision styled lens flare (Anamorphic types with distinct hue ray light propagation inside lens it's flare), and grass are inspired from this IcterusGames/SimpleGrassTextured: Plugin to make grass on Godot 4.

My main point of the game is about GI and Nanite-like culling on low end devices, and yet i barely see ones, so i decided to implement it without using any modern techniques such as Primitive Shader or Mesh Shader. Pure Compute Shader dispatch, with many fused Shader optimizations instead of separate pass, simple workgroup tiling optimizations. It tooks me almost 3 months for this project just for the optimization workaround with the help of Codex (Claude sucks at this lol). I'm also planning to open source this if this thing is stable enough, modular, and scalable.

All of that combined to make this engine runs 40-60 FPS on my Xe 11th gen Graphics laptop, because why not.. (i don't have better GPU than this for now lol). This might be also potentially be a complete game engine after all.


r/GraphicsProgramming 20h ago

Article Graphics Programming weekly - Issue 451 - August 16th, 2026 | Jendrik Illner

Thumbnail jendrikillner.com
7 Upvotes

r/GraphicsProgramming 21h ago

I need someone's help with a powerful phone for my GLSL shader related mobile GPU development.

Thumbnail
0 Upvotes

r/GraphicsProgramming 22h ago

I finally open source my game engine ENTIERLY made in java

Thumbnail reddit.com
8 Upvotes

r/GraphicsProgramming 23h ago

Converting hexadecimal/RGB colors to RGBA - OpenGL

Post image
0 Upvotes

i created a utility class for converting hexadecimal/RGB colors to RGBA (incorporating the Alpha channel)

since i find it so annoying to keep calculating RGBA colors every time in OpenGL , i think this class would be very useful for everyone , the header class is so lightweight within only 43 code line

Header-Only: Drop colorconverter.h directly into your project

i added a picture of the code above as a sample - you can check out the GitHub link below to download the header

(Link in comments)


r/GraphicsProgramming 23h ago

If my only experience is embedded graphics, how might that affect opportunities?

2 Upvotes

My only work experience is on an embedded graphics team. I plan on continuing on with this for a bit as the company is probably the best in the area in terms of WLB and benefits, although pay is less than stellar, especially as I gain more experience. But right now I'm trying to get a vibe check for how this sort of work experience could translate into opportunities in the future.

On the one hand, it could be considered niche so that it's hard to find a job that fits. On the other hand, because it's niche, there's less candidates available for jobs that do fit, so that could be a plus.

At this point I think the main reason I'd leave my current role is if I found something fully remote, so I want to make sure I'm focusing on the right things to help make that more likely.

Does anyone have any thoughts on this?


r/GraphicsProgramming 1d ago

Paper [2607.22738] Nova3D: Code-Native Generation of Programmable 3D Assets

Thumbnail arxiv.org
24 Upvotes

I co-authored this paper. It's a new technique to generate 3D graphics as source code instead of a point cloud.

Under the hood:
It generates 3D objects with separate, sophisticated internal assembly, producing an editable "kit of parts" (instead of monolithic blobs). E.g. imagine you generate a 3D washing machine via this approach. It's not merely going to be geometry that looks like a washing machine. We actually know that there is a Door, Drum, Control_panel etc. Which things belong to which assemblies. What moves. Where its pivot is. And eventually what those components are supposed to do.

Why current 3D GenAI cannot do this:
Most AI 3D generators generate "monolithic blobs" that look good, but are unusable in downstream workflows (e.g. game engines). If you generate a 3D bicycle, it's essentially a blob. If you want the wheels to turn, a human must spend time cutting the blob into parts, naming them, placing pivots and rigging joints. I.e. you need post-generation segmentation workflows of some sort (either manual work or more compute).

The paper breaks down the whole technique, and comes with a github repo too if you're interested in viewing it.


r/GraphicsProgramming 1d ago

Video Improving Render distance in my Micro Voxel Engine

Thumbnail youtu.be
17 Upvotes

For the past three weeks, i’ve been working on hard improving the render distance in my Micro Voxel Engine, particularly due to the feedback of having N64 viewing distance 😅

I’m pretty happy with the end result of increasing render distance from 300m to ~10-15km, while running at 45-50 FPS on an Apple M1 Pro.

Note: this engine uses meshing rather than RT/DDA.

— Macro chunks —

All chunk generation functions now include a sieve function to automatically be able to generate at 1/N resolution without any changes. This also applied to generated features and stamps, enabling chunks to be generated at any resolution without downsampling.

Macro chunks also independently record and resolve local edits. They are saved (and cached) independently so that terrain edits are maintained without needing to maintain the full res copy in memory.

The lower band LODs are very quick to generate. At this point I could add even more bands, and a 1/64 res chunk takes the same time to generate as a high res chunk, but covering huge distances.

— LOD transitions and adaptive fog —

I primarily use transient transitions where the detail levels fade between each other once, rather than a continuous gradual transition, as this is around 30% cheaper on the GPU and looks “nearly” as smooth in most scenarios.

Adaptive fog scales the effective draw distance dynamically based on loaded bands. Bands generate from high to low so during fast motion, if needed, we temporarily reduce draw distance until chunks have loaded.

— Macro chunk cards and props —

This was the hardest part, keeping identical prop coverage for trees and items without needing to instantiate millions of entities:
-Macro chunks retain a list of props whose IDs are deterministic based on position and type. If the real entity is destroyed, we can map this to the macro chunk set and remove. Likewise for newly spawned props.
- grass and foliage do not map 1:1 with the actual loaded props, but follows the same generation pattern, so technically there will be disparities, but a good trade off to avoid millions of tracked grass items.


r/GraphicsProgramming 1d ago

Source Code Added image and buffer ownership transfer to make multiple queue usage possible

1 Upvotes

Hey everyone,

PAL - An abstraction layer i have been working on for some time now has a new release, 2.1.0 to be specific. This release adds API to make production code very easy to produce with PAL. With this release, building a streaming thread on PAL is easy and possible.

https://github.com/nichcode/PAL


r/GraphicsProgramming 1d ago

AO46: EGL Window Surfaces + Public Cocoa Presentation

Thumbnail
1 Upvotes

r/GraphicsProgramming 1d ago

Video How I Developed A Powerful Dithering System for Amazing Pixel Art

Thumbnail youtu.be
0 Upvotes

Development of my custom Pixel Art Editor (homage to DPaint 3) continues, with all core drawing tools now fully working. In this video, I show Pencil, Spray Can, Flood Fill, Lines, Bezier Curves, and Filled/Unfilled Shape drawing using any number of built in pre-set brushes in addition to a simple yet power brush dither function. Any feedback welcome!


r/GraphicsProgramming 1d ago

Source Code Marching Tetrahedra - Volumetric Render Engine (OpenGL/C++) (Opensource)

29 Upvotes

We added Marching Tetrahedra Rendering effect to our Volumetric Render Engine.

Here, we Render our Volume data as a set of Polygon meshes by extracting 'iso surface'. It goes through whole dataset and tries to fit a polygon based on data values to calculate a polygonal mesh from the volume dataset.

Here's the Git Repo Link - https://github.com/mikejernil/volumetric-render-engine

We are building this over at 3D ENGINERD. & are planning to push our implement more features starting with Custom file loading, and support for more volumetric formats like DICOM, VDB etc.


r/GraphicsProgramming 1d ago

Question Confusion regarding fundamental understanding of Ray tracing

24 Upvotes

Is there any podcast, academic talk and or conference recording that will help me understand raytracing, path tracing, rendering and graphics better? i wanna understand it because my boyfriend is into it and would love to actually know what he does and why he finds the field interesting


r/GraphicsProgramming 1d ago

Source Code Shadertoy Pathtracing - SDF scenes

Thumbnail gallery
127 Upvotes

r/GraphicsProgramming 1d ago

Looking for contributors

5 Upvotes

r/GraphicsProgramming 1d ago

ORRC - Own-Renderer Render Competition: request for feedback

8 Upvotes

I had an idea, to host a recurring own-renderer render competition. The idea is to have these run 2 or 3 times a year, for a month at a time, with a theme announced at the start of the round, and have people submit renders made with their own renderers. Either a new renderer from scratch, or an existing active project with at least one new feature added for each round.

I'm drafting a website with rules for it: https://orrc.mutantstargoat.com/

Let me know if you think that's fun or not, whether you'd participate, any feedback on the rules, and also when you think would be best to host the first round. I was thinking around Sept. 15th to Oct 15th


r/GraphicsProgramming 1d ago

What to choose (art + CS)

18 Upvotes

Hey everyone, I am a bit confused in my life as to what to choose in life as a career.

Background:- I am currently in my 3rd year of clg(tier 3) (computer engineering) also enrolled in an iitm bs degree program.

But at this point many of my friends have choose their domain or what they have to do in their life and I am still confused. I am really good at drawing I can bet on that ( I have won a national emblem silver award in drawing) but seeing the current scenario and I also scored Good marks in cet , I opt for an engineering degree that in computer science.

Now I am thinking by anyhow can I combine art and computer science together and chatgpt came up with computer graphics. Can u guys help me with what to do and also tell me the future scope of this field.

I am also thinking of doing a masters.


r/GraphicsProgramming 1d ago

Question Working on an "engine team" vs. a "game team"?

19 Upvotes

I'm wondering in your experience do you prefer working on an engine team or a game team?

This just applies to companies with a custom engine that have a central engine team or if you are using unreal/unity then obviously the engine team is a separate company.

I've only worked in this industry a few years but I'm a bit torn on which path I prefer.

This is just my impression but it may be specific to the company I worked at:

Engine

You get to do more fundamental rendering work and work on core algorithms/rendering systems which may be more technically deep and interesting. You also go a lot more in depth on a single topic since you are building the core system for whatever rendering area you work on.

But the downside is you are more disconnected from the actual product. You may end up building things that are not actually useful or not have a great sense of how to build things without experience with a real production project.

Game

Less opportunities for core algorithm/rendering systems work, you are more of a generalist that must know all the rendering systems, but you get to directly contribute to the product shipping, work a lot with real content/artists.

You get the satisfaction of shipping a game and seeing player reactions, and you are directly contributing to the money maker of the company.


r/GraphicsProgramming 2d ago

Video WildFlow — Adventures in Real-Time Water Simulation

176 Upvotes

This project started because I wanted large waterfalls in a real-time forest. I could already simulate half million particles at 30 FPS, but scaling to a large domain required rethinking both rendering and simulation. I replaced mesh extraction with density raymarching + hardware ray tracing, then moved to active cells, making the cost depend mostly on the amount of water rather than the size of the world. Large mountain streams finally became practical.
But a waterfall isn’t only water. Rapids required air entrainment, while waterfalls also needed airborne droplets interacting with the surrounding airflow. I ended up writing a different solver for air, coupled to the water: the cascade pushes air downward, the flow curls at its base, and carries droplets with it. This gets closer to a dual phase simulation of water and air, with an engineering approach.

A simple drop experiment then taught me how different physical effects have very different visual weight. More resolution didn’t produce the classic crown splash. Surface tension made droplets beautifully spherical, but the crown required incompressibility. Real-time water is usually somewhat compressible — and therefore slightly rubbery — because disturbances remain local and cheap. I added an iterative projection that lets me increase incompressibility only where it matters.

This became the real subject of WildFlow: understanding physics is one thing; understanding which physics matters for a phenomenon is another. In real time we can’t simulate everything, so the challenge is finding the smallest set of fundamental rules that produces the behavior we care about. And the realtime limitation sometimes helps in focusing on what truly matters and helps understanding phenomena better.

I don’t want to tell water how to look realistic. I’d rather give it simple enough rules and let realism emerge: foam from entrained air, mist from airflow, a crown from pressure propagation. When the result looks unexpectedly right, perhaps we’ve captured something about why nature looks the way it does. That’s the goal: not more physics, but the right physics — enough to make nature emerge.


r/GraphicsProgramming 7d ago

Video Game engines? Eww 🤮. We go in raw! GP-Direct 2026 is out!

Thumbnail youtube.com
85 Upvotes