my games: https://samael-kethill.itch.io
My guess is that hexagonal grid aligns better with radial gradients, resulting in reduced amount of aliasing artifacts compared to regular polygonal grid.
My guess is that hexagonal grid aligns better with radial gradients, resulting in reduced amount of aliasing artifacts compared to regular polygonal grid.
First pass uses regular alpha blending with constant alpha.
Second pass uses additive blending, light sources are also a bit smaller.
First pass uses regular alpha blending with constant alpha.
Second pass uses additive blending, light sources are also a bit smaller.
Instead of drawing sprites at each light source, full-screen subdivided plane with procedural vertex colors is rendered and blended with game frame.
#gamedev
Instead of drawing sprites at each light source, full-screen subdivided plane with procedural vertex colors is rendered and blended with game frame.
#gamedev
Not quite butter smooth, but it works
Not quite butter smooth, but it works
Turns out it's due to interpolation in linear color space. Interpolating sqrt(col) fixes the issue
I also tried sqrt(1/col) but it looks wrong on smooth normals
I wonder if this can be applied to lightmaps too
Turns out it's due to interpolation in linear color space. Interpolating sqrt(col) fixes the issue
I also tried sqrt(1/col) but it looks wrong on smooth normals
I wonder if this can be applied to lightmaps too
All I see is that bottle is fully opaque and doesn't use any colors from the framebuffer. Looks like only cubemaps and per-pixel lighting are used for refractions.
All I see is that bottle is fully opaque and doesn't use any colors from the framebuffer. Looks like only cubemaps and per-pixel lighting are used for refractions.
Only after all of this the player viewmodel is rendered. CS2 has a separate pass for the viewmodel SSAO, which feels like overkill to me.
Only after all of this the player viewmodel is rendered. CS2 has a separate pass for the viewmodel SSAO, which feels like overkill to me.
Fire is also rendered separately and merged with OIT later, but only 4 ½ res buffers are used.
Fire is also rendered separately and merged with OIT later, but only 4 ½ res buffers are used.
A whopping SIX (!) buffers are used! (R 32F, RG 32F, RGBA 32F, RGBA 16F, RG 16F, R 8UI).
The first 4 buffers seem to be the same as the OIT buffers, but I'm not sure about the rest.
A whopping SIX (!) buffers are used! (R 32F, RG 32F, RGBA 32F, RGBA 16F, RG 16F, R 8UI).
The first 4 buffers seem to be the same as the OIT buffers, but I'm not sure about the rest.
First pass uses 3 render buffers (R 32F, RG 32F, RGBA 32F).
Second pass uses previous data as input and renders color data in RGBA 16F buffer.
Final pass combines this data with framebuffer data.
First pass uses 3 render buffers (R 32F, RG 32F, RGBA 32F).
Second pass uses previous data as input and renders color data in RGBA 16F buffer.
Final pass combines this data with framebuffer data.
Box is rendered around each dynamic object, with soft shadows from 3 directions stored as RGB. This data is then used in the main rendering pass, where the AO direction is selected based on the light direction from lightmap.
Box is rendered around each dynamic object, with soft shadows from 3 directions stored as RGB. This data is then used in the main rendering pass, where the AO direction is selected based on the light direction from lightmap.
All cubemaps are stored in one large texture array. Pre-filtered mipmap are used for smooth rough reflections (looks really nice when used with roughness maps).
All cubemaps are stored in one large texture array. Pre-filtered mipmap are used for smooth rough reflections (looks really nice when used with roughness maps).
Data is stored in two large 3D texture atlases. The first one is HDR and is six times bigger than other (looks like Valve is still using ambient cubes). The second one is LDR RGBA, looks like a shadow mask.
Data is stored in two large 3D texture atlases. The first one is HDR and is six times bigger than other (looks like Valve is still using ambient cubes). The second one is LDR RGBA, looks like a shadow mask.
All shadow maps are rendered into one big atlas at the beginning of the frame.
All shadow maps are rendered into one big atlas at the beginning of the frame.
One HDR texture for static lights and GI.
One LDR texture for baked light direction. It's also half res on some maps.
And one more texture is used to store from 1 to 4 shadow masks for semi-dynamic per-pixel lights.
One HDR texture for static lights and GI.
One LDR texture for baked light direction. It's also half res on some maps.
And one more texture is used to store from 1 to 4 shadow masks for semi-dynamic per-pixel lights.