Loading the frame
DuckDB compiled to WebAssembly, and the 1.3 MB of tables this article queries. The 3D view's 29.1 MB of geometry is fetched separately, when you reach it. Everything is cached after the first visit.
Sébastien Vercammen / root-cause engineering
Open to select engagements

Reverse-engineering · Guild Wars 2 · D3D11

Guild Wars 2: Lion's Arch shadows, as a database

Hey y'all,

I was doing some hobby work on Guild Wars 2's rendering.

With shadows being known for being expensive, I tackled that first. My modded reimplementation work is not ready yet, so in the meantime I figured I would publish some fun/interesting experiments and a small data sandbox for you to enjoy.

In my next steps, I hope to complete a mod to replace GW2's CSM with a VSM to bring some performance improvements to shadows.

If you found any of this interesting, you have requests/feedback, or you work in the field, don't hesitate to reach out.

Seb

Caster records
·
in one tick, across 2,001 collections
Shadow atlas
6144×2,048
three 2,048² cascades, side by side
Rows to query
·
facts · visits · meshes · placements · wireframe · wireframe_instanced
Scope and provenance

I do not work for ArenaNet and have no relationship with them. This is independent black-box research on a retail client. The data provided is heuristically approximated and derived from the shadow rendering in Lion's Arch. While the data is representative, none of the data is GW2's actual data.

Method withheld

This page shows what was measured, never how the measurement is taken. It does not describe how the capture attaches to the process, how the shadow tick is located, which structures are read, or any of the hooking, signature-matching or addressing involved. The identifier map that reverses the public ids back to the capture exists, is necessary for my own work, and is not published. The measurement is the publication; the mechanism is not.

Where the queries run

DuckDB-WASM: starting

Lion's Arch's shadows

click inside to move with the keys · WASD ZQSD ←↑↓→ · RF move · shift faster · drag to look · right-drag to orbit

The tick, stage by stage

01

·

·

The atlas, reconstructed from the table

cascade 0 · nearestcascade 1 · middlecascade 2 · farthest

Distributions

The data model

Ask it something else

Starting points