OptiFine-format shader packs, on Minecraft's native Vulkan renderer.
Complementary Shaders, running unmodified on the Vulkan backend.
Minecraft 26.2 ships a native Vulkan renderer alongside the OpenGL one. Every shader pack that exists was written for OpenGL, and none of them run on it.
Vitrail runs them anyway, unmodified. It reads an OptiFine-format pack out
of shaderpacks/, translates its GLSL once when the pack loads, and hands it to
the compiler the game already embeds. Nothing translates while a frame is drawn.
One person's side project, and an early one: the backend it runs on is marked experimental by the game itself.
- One jar, both loaders. On CurseForge and on every release here.
- Put it in
mods/next to Sodium. Client only. - Switch the game to Vulkan, in Options then Video Settings, and restart it.
- Packs go in
shaderpacks/as they always have, and are picked from Vitrail's own settings screen.
INSTALL.md has the versions this needs, the Chloride settings that decide what reaches your pack, and what a game that came up on the wrong backend looks like.
Terrain, water, shadows, sky, clouds, weather, particles, mobs, block entities, the held hand, and the far terrain of Distant Horizons given a build of that mod that draws on this backend, which Other mods names. The settings screen reads the pack's own menu layout, and a resource pack's normal and specular maps are served beside the blocks they belong to.
The rest still comes from the game, and that set moves from one release to the next: the engine logs which families do when a place first draws, and pack compatibility starts from what you are seeing and names the cause. If what you want today is a finished picture, use Iris on the OpenGL backend instead, which is the reference this engine is checked against.
| If you want to | Read |
|---|---|
| Know why the format is OptiFine's, and how this sits next to Iris, Sulkan and Aperture | Why this exists |
| Work out why your pack looks wrong, starting from what you see | Pack compatibility |
| See what changed from one version to the next | CHANGELOG.md |
| Install it, and know what it refuses to run beside | INSTALL.md |
| Understand how any of this works | The documentation |
Open an issue before writing anything substantial. I order the work by risk, and code that lands ahead of what can be verified is hard to accept however good it is.
CONTRIBUTING.md opens on the short version, what refuses a first push, and carries the rest.
LGPL-3.0-only, in LICENSE, with GPL-3.0.txt beside it because version 3 of the Lesser GPL is written as permissions on top of the ordinary GPL rather than as a standalone document.
Parts of the pack loader and of the value catalogue are adapted from Iris, which is LGPL-3.0 as well. What was taken and what was changed on the way is recorded in NOTICE.





