CS2 smokes are a 32×32×32 voxel grid of 20-unit cells
A CS2 smoke is a 32 × 32 × 32 voxel grid of 20-unit cells — 640 units per side — Morton-coded and networked in the demo itself, not a sphere and not a particle cloud. That is why a CS2 smoke pours down stairs and around corners: its shape is real occupancy data computed by the server, and it is recorded, so a replay can reproduce the exact volume that was on screen rather than approximate it with a ball.
Reverse engineered from raw demo bytes in July 2026 on current-build recordings; the rendering law decompiled from the current build's own shader package and the client binary (Linux libclient SHA 29ad0f8…).
Most replay tools draw a CS2 smoke as a sphere because a sphere is what the entity looks like from the outside. The game does not work that way: the server computes which cells of a fixed grid are filled, and it networks that occupancy field. Reading it out of the demo bytes gives the exact shape the players saw — including the parts that flowed down a staircase or refused to fill a doorway.
The grid is fixed at 32 cells per axis with 20-unit cells, and cell indices are Morton-coded so that spatially close cells stay close in memory. Nothing about that is inferred: it was recovered by reading the raw frame data in the demo and validating the decode against rendered volumes.
The rendering side was taken from the game's own compiled pixel shader, decompiled and ported one-to-one rather than approximated, so the density falloff and lighting response are the game's and not a lookalike.
The most interesting single finding is what an HE does to a smoke. It is not a bullet capsule and not a generic disturbance — the client keeps a five-entry circular buffer of HE blasts and uploads their positions and times to the shader separately. Only samples within 250 units participate; the opened core is 200 units with a smoothstep feather out to 240; density in the hole drops to 2% rather than to nothing; and the hole closes on a smoothstep from 0.5 s to 5 s raised to the power 1.8, with the residual transient reaching zero at 7 seconds.
Every fact on this page, with its tier
CS2 smoke voxel format: 32³ grid, 20 u cells, Morton-coded
Value
32³ cells of 20 u
Confidence tier
VERIFIED
How it was derived
Reverse engineered from raw demo bytes and validated by decoding recorded smokes back into rendered volumes.
Evidence
The decoded occupancy reproduces recorded smoke shapes, including non-spherical fills, on current-build demos.
The smoke volume pixel shader
Value
ported 1:1
Confidence tier
VERIFIED
How it was derived
Decompiled from the current build's compiled shader package and ported without re-tuning.
Evidence
The shipped volume shader is the decompiled one; it is explicitly not to be re-tuned by eye.
HE opens a smoke through a separate five-entry trail: 200 u core, 240 u feather, 250 u influence, 2% residual density, recovery 0.5 → 5 s
Value
200 / 240 / 250 u, 2%
Confidence tier
T3 VERIFIED
How it was derived
Located by RTTI anchors on the client's smoke-volume scene object and its fixed-size circular buffer, then read out of the constant-buffer writer and cross-checked against the decompiled shader.
Evidence
The pixel law is exact: only samples within 250 u participate, the core is 200 u with a smoothstep(200, 240) feather, opacity reaches 2%, and recovery is pow(smoothstep(0.5, 5, age), 1.8) with the transient term reaching zero at 7 s.
Open questions — what is not known
Smoke detonation timing is not captured.
The grenade's flight, bounce and rest are reproduced tick-exactly on the current build. The delay between the projectile resting and the volume beginning to fill is not part of that gate and is not claimed.
Last updated 2026-07-14 — the date of the measurement, not of this
page's rendering. What the confidence tiers mean. Memorin is not affiliated
with or endorsed by Valve; Counter-Strike 2 is a trademark of Valve Corporation.