Shader
Shaders are used to define the game's rendering of certain elements.
Java Edition[edit | edit source]
Two distinct kinds of shaders exist: core shaders and post-processing shaders.
Core shaders are used to render fundamental parts of the game.
Post-processing shaders are used for certain minor visual effects:
- The menu background blur
- Certain mob vision types as seen in the Spectator gamemode [more information needed]
- The Fabulous! graphics setting's fixed handling of translucent objects
- The Glowing status effect
Shaders are written in the OpenGL Shading Language (GLSL). Each single render program comes in two parts, "vertex" and "fragment"; vertex shaders modify the positions of individual vertices, whereas fragment shaders are applied to every pixel. For example, vertex shaders are often used to create waving foliage and water, and fragment shaders can be used to add effects like bloom, god rays, and blur. In Minecraft, vertex shaders must use the extension ".vsh", and fragment shaders, likewise, ".fsh"
Shaders are stored in the assets/minecraft/shaders/ directory of minecraft.jar, and can be replaced with a resource pack. Note that if any error occurs when loading the shaders, the resource pack is disabled and fabulous graphics mode is turned off.
Core shaders[edit | edit source]
Core shaders are responsible for rendering parts of the game. They are used to render not only blocks and entities when playing the game, but also menu and inventory screens.
Each core shader is a single render program defined by a JSON file, in which vertex and fragment shader files are specified.
Core shaders are stored in the assets/minecraft/shaders/core directory of minecraft.jar.
List of core shaders[edit | edit source]
A list of all core shaders can be found by expanding the header below, listing descriptions of what each shader is responsible for, with images highlighting each element in red:
Non-rendertype[edit | edit source]
Name | Used for | Sample Images |
---|---|---|
blit_screen | Blit copies one buffer to another, however this cannot be overridden in a resource pack. | |
particle | All particles. | |
position |
|
![]() |
position_color | Used for solid color-block, including:
|
|
position_color_lightmap | Unknown. | |
position_color_normal | Unknown; does not seem to be referenced anywhere in code. | |
position_color_tex |
|
![]() |
position_color_tex_lightmap | Unknown. | |
position_tex | Used to render a texture:
|
|
position_tex_color |
|
![]() |
position_tex_color_normal | Clouds. | ![]() |
position_tex_lightmap_color | Unknown. |
Rendertype[edit | edit source]
- Blocks
Name | Description | Sample Image |
---|---|---|
rendertype_beacon_beam | The beam of the beacon and end gateway. | |
rendertype_crumbling | The block cracks when mining a block. | |
rendertype_cutout | All blocks with partially transparent textures (with the exception of those listed in rendertype_cutout_mipped and rendertype_translucent )
|
|
rendertype_cutout_mipped | Some blocks: grass blocks, iron bars, glass panes, tripwire hooks, hoppers, chains (leaves when using fancy or fabulous graphics) | |
rendertype_end_gateway | The inside of an end gateway, reuses the same shader as rendertype_end_portal .
|
|
rendertype_end_portal | The inside of an end portal, as well as the insides of end gateways. | ![]() |
rendertype_solid | All solid blocks, lava, and when in fast mode, leaves. | ![]() |
rendertype_translucent | Translucent blocks: water (still and flowing), ice, nether portal, stained and tinted glass, slime and honey, bubbles. | ![]() |
rendertype_translucent_moving_block | Blocks that are translucent and are being moved by a piston. The one below is stained glass. | ![]() |
rendertype_tripwire | Tripwire (sections connected to tripwire hooks are instead rendered completely solid[1] | ![]() |
rendertype_water_mask | Used to mask out water surface inside a boat to to prevent it from appearing flooded. |
- Entities
Name | Description | Sample Image |
---|---|---|
rendertype_armor_cutout_no_cull | Armor and armor trims on entities. | |
rendertype_armor_entity_glint | Enchantment glint on equipped armor. | |
rendertype_armor_glint | Unknown. | |
rendertype_breeze_wind | The Breeze's wind armor and charges. | |
rendertype_energy_swirl | Charged Creeper swirling outline and Wither armor. | ![]() |
rendertype_entity_alpha | Ender Dragon death disintegration effect. | |
rendertype_entity_cutout | Items in the inventory, head (e.g. of armor stands) hand that are blocks (not flat textures)? Doesn’t seem to work with shulker boxes. | |
rendertype_entity_cutout_no_cull | All entities and guardian beams. | |
rendertype_entity_cutout_no_cull_z_offset | Skulls on entities and as an item. | |
rendertype_entity_decal | Dying Ender Dragon. | |
rendertype_entity_glint | Unknown. | |
rendertype_entity_glint_direct | Enchantment glint on trident model. | |
rendertype_entity_no_outline | Banner patterns (banners and shields). | |
rendertype_entity_shadow | The blocks that are affected by an entity's shadow, but not the shadow itself. | ![]() |
rendertype_entity_smooth_cutout | End crystal beams. | ![]() |
rendertype_entity_solid | Certain entities or entity-style objects: banners, shulker heads, books on lecterns/enchantment tables, shields, beds, bell part of bells, capes, shells of conduits, paintings, tridents, the ears on the Deadmau5 skin.
With item frames, the item frame entity itself is part of the shader, however items on it are not. Only non-filled in parts of maps placed on an item frame where the underlying frame is exposed are part of the shader. Also includes the first person bottom skin layer. |
|
rendertype_entity_translucent | Translucent entities and parts of entities: slimes, players (all layers) along with player heads with custom skins on them, markings on horses, shulker bullets, piglins, zombified piglins, elder guardian particle effect. | |
rendertype_entity_translucent_cull |
|
|
rendertype_entity_translucent_emissive | Glowing parts of Warden texture. | |
rendertype_eyes | A shader for the entire body of an entity that has glowing eyes (not the eyes themselves). This is not fully opaque. | |
rendertype_item_entity_translucent_cull | Handles dropped translucent items in Fabulous graphics. Also affects invisible entities while using spectator mode or the gamerule seeFriendlyInvisibles, as well as experience orbs in all graphics settings. | |
rendertype_leash | A leash on an entity. Applies when on a fence too. | ![]() |
rendertype_outline | Glowing effect on entities. This buffer draws the already-outlined and semi-transparent glowing, not covering the entire entity like pre-snapshot. | ![]() |
- Miscellaneous
Include shaders[edit | edit source]
Include shaders should be invoked by other shader files; they are not standalone shader programs.
Include shaders contain commonly used helper functions. To import a glsl file in a shader, use #moj_import <FILENAME.glsl>
or #moj_import "FILENAME.glsl"
. The imported file needs to end with an empty line, otherwise the shader does not load.
Include shaders are stored in the assets/minecraft/shaders/include directory of minecraft.jar.
Name | Description |
---|---|
fog | Contains the linear_fog function to calculate the color based on the vertex distance.
|
light | Contains the minecraft_mix_light function.
|
matrix | Contains the mat2_rotate_z function that returns the rotation matrix for a vec2 around the z-axis.
|
projection | Contains the projection_from_position function.
|
Post-processing shaders[edit | edit source]
As mentioned previously, post-processing shaders are used for menu backgrounds, special Spectator mode mob vision types, the Fabulous! graphics setting, and for rendering the outline associated with Glowing.
Post-processing shaders use "post" files to define a pipeline made up of applying a sequence of "programs". Each "program" is then defined by another JSON file, in which a single render program is defined.
"post" files are stored in the assets/minecraft/shaders/post directory of the jar file, while "program" files are stored in assets/minecraft/shaders/program.
Only six post-processing shaders are currently used in the game:
- blur.json: Used when in menus
- creeper.json: Used when spectating a creeper
- entity_outline.json: Used when a glowing entity is on screen
- invert.json: Used when spectating an enderman
- spider.json: Used when spectating a spider
- transparency.json: Used when in "Fabulous!" graphics mode.
Render process[edit | edit source]
File format[edit | edit source]
Render program[edit | edit source]
- The root tag
- blend: Settings for OpenGL blending.
- func: Operator to be used when blending. Can be
add
,subtract
,reversesubtract
,reverse_subtract
,min
, ormax
. Not case sensitive. Defaults toadd
. Used asmode
parameter ofglBlendEquation
- srcrgb: Used as
sfactor
parameter ofglBlendFunc
orsrcRGB
parameter ofglBlendFuncSeparate
. Can be0
,1
,srccolor
,1-srccolor
,dstcolor
,1-dstcolor
,srcalpha
,1-srcalpha
,dstalpha
, or1-dstalpha
. Case insensitive. Ignores "_". "1", "0", "-" can be replaced by "one", "zero", "minus". - dstrgb: Used as
dfactor
parameter ofglBlendFunc
ordstRGB
parameter ofglBlendFuncSeparate
. Can be0
,1
,srccolor
,1-srccolor
,dstcolor
,1-dstcolor
,srcalpha
,1-srcalpha
,dstalpha
, or1-dstalpha
. Case insensitive. Ignores "_". "1", "0", "-" can be replaced by "one", "zero", "minus". - srcalpha: Used as
srcalpha
parameter ofglBlendFuncSeparate
. Can be0
,1
,srccolor
,1-srccolor
,dstcolor
,1-dstcolor
,srcalpha
,1-srcalpha
,dstalpha
, or1-dstalpha
. Case insensitive. Ignores "_". "1", "0", "-" can be replaced by "one", "zero", "minus". - dstalpha: Used as
dstalpha
parameter of glBlendFuncSeparate. Can be0
,1
,srccolor
,1-srccolor
,dstcolor
,1-dstcolor
,srcalpha
,1-srcalpha
,dstalpha
, or1-dstalpha
. Case insensitive. Ignores "_". "1", "0", "-" can be replaced by "one", "zero", "minus".
- func: Operator to be used when blending. Can be
- cull: If true, run
glEnable(GL_CULL_FACE)
. If false, runglDisable(GL_CULL_FACE)
. Defaults to true. - vertex: The name (without file extension) of the vertex shader to be used.
- fragment: The name (without file extension) of the fragment shader to be used.
- attributes: Attributes to be used by the vertex shader.
- : An attribute. Available values are hard-coded.
- samplers: A list of samplers that may be used in the shaders.
- : A sampler.
- name: The samplers name.
- : A sampler.
- uniforms: A list of uniforms that can be used in the shaders.
- : A uniform.
- name: The name of the uniform as referenced in the GLSL code. Some names give a uniform special behavior(Note that these following special uniform does not work in all shader programs):
- (float) Time: A value from 0 to 1, representing time in seconds. Resets every second. Valid only in post-processing shaders.
- (vec2) InSize: The width and height of the input buffer in pixels. Valid only in post-processing shaders.
- (vec2) OutSize: The width and height of the output buffer in pixels. Valid only in post-processing shaders.
- (vec2) AuxSize<i>: The width and height of the auxiliary buffer in pixels. <i> should be replaced by the order of the auxtarget in the render pass. Valid only in post-processing shaders.
- (matrix4x4) ModelViewMat: The model-view matrix. Valid only in core shaders.
- (matrix4x4) ProjMat: The projection matrix.
- (matrix4x4) TextureMat: 4D matrix used to transform UV's for item glint effects. Valid only in core shaders.
- (vec2) ScreenSize: vec2 containing the current framebuffer width and height, in that order.
- (vec4) ColorModulator: A global vec4 of multipliers that can be set from the game code as a color multiplier. Valid only in core shaders.
- (vec3) Light0_Direction: First light direction as vec3 for entity rendering. Valid only in core shaders.
- (vec3) Light1_Direction: Second light direction, see Light0_Direction. Valid only in core shaders.
- (float) FogStart: Fog start distance from the camera. Valid only in core shaders.
- (float) FogEnd: Fog end distance from the camera. Valid only in core shaders.
- (vec4) FogColor: vec4 fog color. Valid only in core shaders.
- (float) LineWidth: Line width, used for rendering wireframe lines such as the block selection frame and debug hitboxes. Valid only in core shaders.
- (float) GameTime: Global time of the world, in fractional days. Valid only in core shaders.
- (vec3) ChunkOffset: When rendering a chunk section, the offset from the camera world position to the chunk section's base point. Valid only in core shaders.
- type: The type of the uniform. Can be one of
int
,float
,matrix4x4
,matrix3x3
andmatrix2x2
.int
can also be interpreted asivec2
,ivec3
orivec4
depending on how many values are actually included invalues
.float
can also be interpreted asvec2
,vec3
orvec4
depending on how many values are actually included invalues
. - count: The number of values included in
values
. - values: The value of the uniform, given as a list of floats. The length of the list should be the same as
count
.
- name: The name of the uniform as referenced in the GLSL code. Some names give a uniform special behavior(Note that these following special uniform does not work in all shader programs):
- : A uniform.
- blend: Settings for OpenGL blending.
Render pipeline[edit | edit source]
Here's the process of how a post-processing shader is used in game: first, the shader initializes all of the render targets specified in the "targets" list with the proper width and height. After that, the shader goes through each render pass specified in the "passes" list from first in the list to last in the list. Each pass applies the program shader on the render target specified by "intarget" (with any extra data provided by other auxiliary render targets) and output the end result on the render target specified by "outtarget".
- The root tag
- targets: A list of render targets. They can be buffer provided by the game, or new buffer with any name.
- : The name of a render target. The size defaults to screen resolution. Post-processing shader
transparency
must contain render targets namedtranslucent
,itemEntity
,particles
,weather
andclouds
. Post-processing shaderentity_outline
must contain a render target namedfinal
. - : A render target to add.
- name: The name of the render target to add.
- width: The width of the render target.
- height: The height of the render target.
- : The name of a render target. The size defaults to screen resolution. Post-processing shader
- passes: A list of passes.
- : A render pass.
- name: The name of a program shader to apply on the input and post into the output. Use "blit" to copy the data from intarget to outtarget.
- intarget: The name of a render target to use as an input. Use
minecraft:main
to specify the main screen. - outtarget: The name of a render target to output to. It should not be the same as intarget. Use
minecraft:main
to specify the main screen. - auxtargets: A list of auxiliary targets.
- An auxiliary target.
- name: The auxiliary target's name that is passed into the "Program" JSON.
- id: The auxiliary target's id. Either points into the name of a buffer that is defined in
targets
or into the location of a texture underassets/<namespace>/textures/effect
(use a resource location to reference it). Append:depth
after the name of the buffer to access its depth buffer. For example, to access the depth buffer ofminecraft:main
, useminecraft:main:depth
. - width: Required if
id
references a texture. Describes the width of the texture in pixels. - height: Required if
id
references a texture. Describes the height of the texture in pixels. - bilinear: Required if
id
references a texture. Determines whether the scaling algorithm used for the image is bilinear or nearest neighbor.
- An auxiliary target.
- uniforms: A list of overrides that change the values in the
uniforms
list in the "Program" JSON.- : A uniform.
- name: The name of the field that should be changed.
- values: The values that the field should be changed to.
- : A uniform.
- : A render pass.
- targets: A list of render targets. They can be buffer provided by the game, or new buffer with any name.
Bedrock Edition[edit | edit source]
Since Bedrock Edition 1.18.30, third party shader resource packs are no longer supported on all devices except Fire OS.
History[edit | edit source]
Java Edition | |||||||
---|---|---|---|---|---|---|---|
1.7.2 | 13w38a | Shaders were added for Super Secret Settings. | |||||
1.8 | 14w05a | The Creeper and Spider shaders were added. Shaders are automatically applied in spectator mode when viewing the world as a creeper, spider or enderman. | |||||
14w05b | Shaders have been removed from view when changing perspective while spectating a mob.[2] | ||||||
F4 toggles different shaders rather than turning them off.[2] | |||||||
14w06a | The Entity Outline shader was added. | ||||||
1.9 | 15w31a | Removed the Super Secret Settings button for an internal rewrite.[3] | |||||
1.16 | 20w22a | The Transparency shader was added for Fabulous! graphics mode. | |||||
1.17 | 21w10a | Core shaders were added. | |||||
1.19 | 22w12a | There are now shader files for translucent entity rendering. | |||||
1.20.5 | 24w05a | The unused attributes array in core shader definitions has been removed. | |||||
The unused position_color_normal and position_tex_lightmap_color shaders have been removed | |||||||
The position_tex_color_normal shader (only used by clouds) has been replaced by rendertype_clouds | |||||||
The IViewRotMat uniform has been removed, and the Position attribute for entities is now in (camera relative) world space | |||||||
Light direction uniforms are no longer premultiplied by the view matrix | |||||||
1.20.5 | 24w09a | The menu background dirt texture has been replaced by a post-processing blur shader. | |||||
[[ ]] |
Gallery[edit | edit source]
-
The creeper vision shader
-
The enderman vision shader
-
The spider vision shader
Issues[edit | edit source]
Issues relating to "Shader" are maintained on the bug tracker. Issues should be reported and viewed there.
References[edit | edit source]
- ↑ MC-214692
- ↑ a b MC-46727 (comment #219617)
- ↑ "nah just rewriting it all :p They are still in the game, the button is just gone atm. It would make more sense to keybind imho" – @_grum (Erik Broes) on X (formerly Twitter), July 31, 2015
External links[edit | edit source]
[edit | edit source]
Components |
| ||||
---|---|---|---|---|---|
Resource packs |
| ||||
Tutorials |