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.

10 min read • View on GitHub • More from cohaereo

A conservator's workbench where a luminous cathedral window is rebuilt from shards shaped like binary fragments, mesh pieces, and shader slivers. The scene explains that Alkahest is reconstructing the rendering pipeline, not just displaying extracted assets.
The project treats Destiny 2's frame as something that can be rebuilt from first principles.
Key Takeaways

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.

A close-up cross-section of stacked translucent plates, each etched with different line patterns, while a narrow beam of light passes through and recombines on the far side. It explains how Alkahest's deferred renderer stores the scene in layers before lighting is applied.
Deferred rendering separates the scene into buffers first, then recombines them into a final image.

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 interesting part is not the final image, but the sequence of transforms that builds it.

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.

CapabilityGeneric viewerAlkahest
Data ingestionReads meshes and textures directlyMaps Tiger Engine packages into Rust structs
Shader handlingRenders whatever survives importInterprets TFX bytecode and runtime bindings
Frame architectureOften a one-shot draw pathDeferred passes with culling, G-buffer, lighting, and shading
GoalInspectionPreservation-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.