Hillsguy
banner
hillsguy.bsky.social
Hillsguy
@hillsguy.bsky.social
hi hemlo i develop videogames and draw (sometimes)
my games: https://samael-kethill.itch.io
November 5, 2025 at 11:53 PM
While I think that this effect looks great in open locations, sometimes I find it a bit weird looking in interiors.
October 29, 2025 at 12:53 AM
Also note the hexagonal grid structure.
My guess is that hexagonal grid aligns better with radial gradients, resulting in reduced amount of aliasing artifacts compared to regular polygonal grid.
October 29, 2025 at 12:53 AM
This is how individual passes look when applied:
October 29, 2025 at 12:53 AM
This effect is applied in two passes:
First pass uses regular alpha blending with constant alpha.
Second pass uses additive blending, light sources are also a bit smaller.
October 29, 2025 at 12:53 AM
Silent Hill 4 uses interesting volumetric light / light glare approximation.
Instead of drawing sprites at each light source, full-screen subdivided plane with procedural vertex colors is rendered and blended with game frame.
#gamedev
October 29, 2025 at 12:53 AM
Does anyone know how Climax Studios implemented shadow maps on PS2 and PSP in Silent Hill: Origins and Shattered Memories?
October 3, 2025 at 10:45 PM
Got bizarre dream bazaar to work with portmaster
Not quite butter smooth, but it works
September 11, 2025 at 11:28 AM
yeah
September 11, 2025 at 12:06 AM
(Textures by Makkon)
August 9, 2025 at 4:02 PM
Was wondering why vertex lighting looks ugly in linear RGB compared to sRGB
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
August 3, 2025 at 10:13 PM
July 31, 2025 at 9:12 PM
Car model is from Need for Speed: Undercover (J2ME)
July 25, 2025 at 2:35 PM
Experimenting with normals for spherical environment mapping
#gamedev #indiedev
July 25, 2025 at 2:35 PM
I also wanted to check out that famous bottle shader, but I don't think that I can pinpoint anything useful without looking at shaders.
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.
June 11, 2025 at 12:58 AM
The next one in the pipeline is water, but I've already covered it earlier.
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.
June 11, 2025 at 12:58 AM
Two sets of buffers with different resolutions are used for smokes at different distances. Close ones are rendered in ¼ buffers, and distant ones in ½ buffers.
Fire is also rendered separately and merged with OIT later, but only 4 ½ res buffers are used.
June 11, 2025 at 12:58 AM
Smoke is rendered separately in a bunch of low-res buffers and is combined with OIT buffers later.
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.
June 11, 2025 at 12:58 AM
Two render passes and one final composing pass is used for transparent geometry (see moment-based OIT).

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.
June 11, 2025 at 12:58 AM
Decals are rendered after all solid geometry. Some flavor or parallax occlusion mapping is used (no fancy cone step mapping here). Textures are projected using data from z-buffer, which can cause artifacts when anti-aliasing is enabled.
June 11, 2025 at 12:58 AM
AO is calculated in half-res RGB buffer.
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.
June 11, 2025 at 12:58 AM
CS2 uses parallax-corrected cubemaps as it's main method for reflections.

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).
June 11, 2025 at 12:58 AM
Light probe volumes are used to light dynamic objects.

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.
June 11, 2025 at 12:58 AM
Shadow masks are used to combine shadow maps with dynamic props and players with baked penumbra shadows from static geometry. You also get per-pixel shading with proper normal mapping and specularity.

All shadow maps are rendered into one big atlas at the beginning of the frame.
June 11, 2025 at 12:58 AM
Baked lighting is stored in 3 textures.

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.
June 11, 2025 at 12:58 AM