Hey everyone! For the past half a year I’ve been building Skinshotter — a browser app that inspects any CS2 weapon skin in full 3D, rendered as close to the game as I could get it. It’s built entirely on Babylon.js on the WebGPU backend, and I’m posting here because most of the interesting work turned out to be rendering work: getting Valve’s Source 2 material and lighting model to run faithfully inside Babylon.
What it does:
- Any skin, any float - the wear slider drives the actual paint compositing, so scratches and wear land exactly where the game puts them. Pattern seeds work too (Case Hardened blues, Fade %, Doppler phases).
- Full craft simulator - apply any sticker to any slot and drag it freely across the weapon like in-game crafting: rotate, wear it down, stack layers. Charms/keychains included, with proper swinging physics.
- First-person mode - the real viewmodel animations (draw, inspect, fire — with sounds).
- Inspect links both ways - paste an in-game inspect link to load that exact item (stickers, float, pattern, name tag), or build a craft and export a link that previews in CS2.
- Gloves and agents - viewable together with your weapon.
- Real map lighting - inspect under Dust II or Mirage lighting instead of a void.
- For artists - export Blender-ready PBR texture sets of any skin.
What’s ported from Source 2:
The goal was never “looks close”, it was to reproduce the game’s actual shading, so wherever I could I ported the real thing rather than approximating it.
- The paint finishes. A CS2 skin isn’t a texture. It’s a recipe run through one of the game’s paint “finish styles”. I reverse-engineered each of those shaders out of the compiled game code and rebuilt them to run in the browser, so pattern placement, wear masking and color ramps behave the way the game does.
- The surface shading. The final look uses the game’s own lighting model reimplemented in the browser’s shading language rather than swapped for Babylon’s stock PBR.
- The map lighting. Lighting is real data exported from the actual maps, and the math that shapes each light was ported from Valve’s own tooling, so a skin sits in Mirage’s light the way it would in a real match.
- The charm physics. The swing is the game’s own cloth simulation ported over and driven off the weapon’s motion.
It’s free, runs in the browser, and works on mobile.
https://skinshotter.com
Happy to go deeper on any of it — the shader porting, the offscreen baking, or the engine/framework integration. Bug reports and ideas very welcome — it’s a passion project.
