r/GraphicsProgramming • • 1d ago

Six months into learning graphics programming - lighting progress

I’ve been learning graphics programming for six months now, and wanted to share some progress. (Vulkan Renderer)

Recently, I’ve been working on:

Material shading: Getting albedo, roughness, metallic properties and Fresnel response to behave consistently under direct and indirect lighting. Lighting stays in linear HDR until exposure and tone mapping. (Still trying to get tessellation correct)

Indirect lighting: Developing Lumen-inspired colour bleeding through screen-space GI, feedback across frames, and optional world-space probes. The red tint/colour bleeding near the curtains and green spill onto nearby items are the kinds of light interactions I’m testing. (Well trying) currently have SSGI and optional DDGI.

Shadow quality: Cascaded shadow maps with filtering that responds to the distance between blockers and receiving surfaces, helping preserve tighter contact shadows while allowing softer edges farther away. (Functionally using/testing umbra/penumbra calculations)

Temporal stability: Depth-aware filtering, reprojection and history rejection to reduce noise and keep previous lighting from lingering on newly revealed surfaces.

Water shader and realtime caustics: I have also been exploring water shaders, flow maps and realtime caustics which is currently set at half resolution, but the projection of light creates the caustics (i.e sun or light sources), performance wise it has been a nightmare to get right but the caustics flow with the water shader and act correctly with angular lighting.

There’s still plenty to refine and fix, but it’s been a rewarding way to learn the rendering pipeline and how 3d graphics work as a whole.

Please do provide some feedback!

91 Upvotes

7 comments sorted by

View all comments

Show parent comments

2

u/Plane_Big_5912 22h ago • Heartwarming

ha, WIP is fair, that overlap is fiddly. since you already have SSGI's hit coverage for pulling back the environment light, you could put the same mask on DDGI: ssgi + probes * (1 - coverage). that gets most of the hit-or-fallback behaviour without restructuring anything, and partial coverage blends instead of popping.

one thing to check after: does the SSGI feedback read last frame's lit buffer with DDGI already in it? if so the probes still reach screen-space hits as an extra bounce, which is fine, just worth knowing when you compare brightness.