Description
OptiFine-format shader packs, on Minecraft's native Vulkan renderer
Minecraft ships a native Vulkan renderer alongside the OpenGL one. Every shader pack that exists today 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 runs its
frame on the Vulkan backend. What reaches the driver is SPIR-V: a compiler that
runs at load time, not a shim that runs per frame.
Which pack to bring
Vitrail is the engine, not the pack. It ships none of its own, and cannot bundle one: the packs belong to their authors and their licences do not allow redistribution. Bring your own, exactly as you would with OptiFine or Iris.
Start with one of these. They are the packs I run against daily.
* Complementary: Very High and Ultra ask for Iris in red and switch their coloured lighting off. Every profile below is fine, and so are those two with Colored Lighting off.
BSL: its waving foliage shimmers while the camera stands still, issue #62.
Also tried: Sildur's Vibrant, drawn except for its water, and Reverie, refused at load because it declares graphics features this backend does not serve.
A pack that is not named here is not thereby unsupported: it is a pack I have not loaded, and the format is the format. The table of packs actually tried says what I have seen with each.
Before you install: it is an alpha
The Vulkan backend is marked experimental by the game itself: the setting you have to turn on reads "Prefer Vulkan (Experimental)". Vitrail is early in its life, and it is one person's experiment: it runs, it looks good where it works, and it is not finished.
The world goes through your pack. A few families of geometry do not yet, and some of them come out wrong rather than absent, which on some packs shows the moment you load a world. What is through and what is not moves release by release, so the picture a pack gives you changes from one release to the next.
If what you want today is a finished picture, use Iris on the OpenGL backend instead. It does that job well, and it is the reference this engine is checked against. Vitrail is for people who want the Vulkan backend on and will trade image quality for it in the meantime.
After you install
Installing pulls everything Vitrail needs, but two things no installer does for you.
Switch the game to Vulkan and restart it. The setting is in Video Settings, "Prefer Vulkan (Experimental)", and the backend is picked when the game boots, so it takes effect on the next launch.
Turn five of Chloride's own settings off. All five are in the same Video Settings screen, and left on they take blocks and mobs out of the picture before your pack is ever asked; Vitrail also names any it finds on in the log at startup.
On the Performance page, Sodium's own, where Chloride adds these two, turn off:
- Fast Chests
- Fast Beds
On the Entities page, turn off:
- Max Entity Distance
- Max Monster Distance
- Max Block Entity Distance
The same five live in config/chloride-client.toml if you would rather edit
the file, and
the install guide
names them there, along with installing by hand and what to check when nothing
happens at all. Client only, and do not run another shader engine alongside.
Distant Horizons LODs, if you want them
Distant Horizons draws simplified terrain far past your render distance,
its LODs, and Vitrail hands them to your pack: the land and the water go through
the pack's own dh_terrain and dh_water programs. They do not enter the pack's
shadow map yet.
It needs a patched build, and I publish one for 26.2, one jar for both loaders:
Distant Horizons patched for Vitrail
Install this one by hand, no launcher will pull it, and leave no other Distant Horizons jar beside it. The release page says the rest.
Links and credits
The source, what goes through a pack today and the full compatibility notes are all at Vitrail-Shaders.
LGPL-3.0-only. Vitrail reuses code from Iris under the same licence, the implementation the packs are written against today; what was taken is recorded file by file in the project's NOTICE.










