The Nova Renderer is a complete re-write of Minecraft's renderer. It's designed from the ground up to support shaders, rather than hacking them into Minecraft as the Shaders Mod does. Nova accomplished this by putting the renderer into a C++ shared library, which is loaded into Minecraft by a thin Java shim. This enforces a clear separation of concerns between the renderer code and the rest of Minecraft, allowing for a high standard of code quality.


Nova brings a number of features to Minecraft:

  • Shaders Mod compatibility

    • Nova is 100% compatible with Optifine Shaders. All features supported by Optifine Shaders are also supported by Nova.

  • Write shaders in GLSL 120 or 450

    • One of Nova's primary goals is full compatibility with existing shader packs. This means supporting GLSL 120, even though Nova uses OpenGL 4.5 core which has no implicit support for GLSL 120. Nova solves this by including a GLSL 120 to 450 transformer to automatically upgrade GLSL 120 shaders into 450. Stick with the comfort of GLSL 120 or embrace the newest features in GLSL 450 - the choice is yours.
  • Render arbitrary block groups with arbitrary shaders

    • The Shaders Mod pre-defines some shaders, each of which renders a pre-set group of blocks. Nova allows you to create shaders that render whatever bits of geometry you want. Need a shader that only renders water? Need to include chests in the entities shader? Wish you could render leaves, grass, and other foliage in shaders all of their own? All of this and more can be done with Nova.
  • Tessellation and geometry shaders

    • Nova will include support for tessellation and geometry shaders. Using these, you can do things like subdivide water and lava so that ripples on them look nicer, or add fur to wolves and sheep to give them an authentic fluffy look.
  • Lighting shaders for emissive blocks

    • Minecraft has many emissive blocks. In vanilla, and in the Shaders Mod, the Minecraft engine itself calculates lighting. Nova will add the option for a shader pack to specify a light shader that will be used for emissive blocks. Nova will render a deferred light using the lighting shader for each lit block, allowing for more complex lighting effects.
  • Shader storage buffers

    • Nova will allow you to define shader storage buffers in your shaders. These are useful for passing data between shader stages without using a framebuffer attachment, or for keeping data across frames. You could, for example, keep an array with the log-luminance of the last few frames, which could then be used for dynamic eye adaptation. This enables more complex temporal effects of all sorts.

And that's just the features that are planned for Nova version 1! There's plenty more awesome stuff on the backlog for versions 2 and 3, off of it designed to enable more powerful shaders and more complex effects.