Alkahest rebuilds Destiny 2's renderer in Rust
A clean-room tool that parses Bungie's packages, interprets Tiger Engine shader logic, and reassembles the frame for study.
- Alkahest is a reconstruction project, not a basic asset browser, because it rebuilds the path from packaged game data to a final shaded frame.
- Its hardest problem is the Tiger Engine shader system, where TFX bytecode and runtime bindings have to be interpreted instead of guessed.
- Rust helps by keeping parsing, ECS world state, and D3D11 interop in separate crates, which makes a reverse-engineering codebase easier to trust.
- The public repository now functions as a preservation artifact because later source moved closed-source and the open tree preserves the method as much as the result.
Most asset viewers stop at meshes, textures, and a quick preview. Alkahest goes after the whole rendering path, from Bungie's package files to the final shaded frame. Even the name is a trap, because search results also point to an unrelated R package, which makes this reverse-engineering project feel like a hidden room in plain sight.
A viewer that wants to be an engine
The repository is split like a real engine team would split it. alkahest handles the app shell and egui tooling, alkahest-renderer owns the Direct3D 11 pipeline, alkahest-data translates game-specific binary structures, alkahest-pm reads Bungie's package format, and destiny-havok connects physics data.
That separation is the first clue that this is not a toy viewer. The public tree reads like a carefully chosen slice of a larger effort, and the source availability notice makes the snapshot feel deliberate rather than accidental.
How the frame gets rebuilt
The heart of the renderer is the frame orchestration in render_world. It begins with visibility and culling, fills a G-buffer with normals, albedo, and material data, runs lighting and screen-space effects such as SSAO, then merges everything into the final HDR result. The point is fidelity, but the architecture also makes the process inspectable.
That inspectability comes from borrowed discipline. A custom fork of bevy_ecs treats lights, terrain, and entities as data, while glam, winit, and egui keep math, windows, and tooling cleanly separated from the renderer core.
The hardest part is not geometry
The hardest problem is not loading a mesh. It is interpreting Bungie's TFX system, where shader bytecode and runtime bindings decide how a material behaves at draw time. The project even has a file called black_magic.rs, which is a fair warning that some of the D3D11 interop sits right on the edge of what Rust would normally let you do.
That is why alkahest-data matters. It acts like a Rosetta Stone for Tiger Engine structures, translating textures, vertex layouts, and geometry blobs into Rust types that the rest of the pipeline can trust. When the data model is right, the renderer can spend its energy on light instead of guesswork.
Why it is not just another viewer
A generic viewer shows you what is inside a file. Alkahest tries to reproduce the rules that made the file visible in the first place.
| Capability | Generic viewer | Alkahest |
|---|---|---|
| Data ingestion | Reads meshes and textures directly | Maps Tiger Engine packages into Rust structs |
| Shader handling | Renders whatever survives import | Interprets TFX bytecode and runtime bindings |
| Frame architecture | Often a one-shot draw path | Deferred passes with culling, G-buffer, lighting, and shading |
| Goal | Inspection | Preservation-grade fidelity |
The public tree is also an archive
The repository's source availability notice matters as much as the code. Versions 0.6 and later moved closed-source, so the public tree is now a frozen record of a hard-won reconstruction effort. That makes it useful twice: once as tooling, and again as a map of how serious game preservation work actually happens.
There is no glamour in the path. It is package parsing, buffer layouts, shader plumbing, and many small decisions that keep the wrong pixels from escaping. Alkahest is compelling because it treats that machinery as the story, not the afterthought.