Skip to content

Overview

The shaders.properties is a text file placed in the shaders folder that allows for configuring many options of a shaderpack. This file has two main purposes:

  1. Configuring and displaying user accessible shader options
  2. Configuring internal shader settings

Any of the directives can be included on its own line in shaders.properties. The directives can appear in any order. Below is an example shaders.properties file:

shaders.properties
iris.features.required = CUSTOM_IMAGES COMPUTE_SHADERS SSBO REVERSED_CULLING
separateEntityDraws = true
shadow.culling = reversed
image.testImage = testSampler rgba rgba8 float false true 1.0 1.0
screen = <empty> <profile> <empty> [SHADOWS] [LIGHTING] iScream uScream weAllScream forIceCream *
screen.SHADOWS = shadowMapResolution shadowFilter
screen.LIGHTING = SSAO SSR

User Accessible Shader Options

shaders.properties can be used to configure user accessible options, which appear in the “Shader Pack Settings” screen in Iris. More info can be found in the shader settings page. The following directives are available to control user accessible options in shaders.properties:

DirectiveDescription
screenControls which shader options are displayed in the “Shader Pack Settings” screen and how they are displayed
slidersControls which shader options should be displayed as sliders
profileDefines profiles, i.e. pre-configured sets of user options selectable in the “Shader Pack Settings” screen

.lang files

.lang files can be used to add language specific overrides to option names and further customize how options appear in the “Shader Pack Settings” screen. The following directives are available in .lang files:

DirectiveDescription
optionChanges the visible name of an option
valueChanges the visible name of an option value
prefixAdds a prefix to all values of an option
suffixAdds a suffix to all values of an option
commentAdds/changes the tooltip for an option

Internal Shader Settings

These directives control aspects of the shader pipeline. For example, they might enable/disable specific programs, change the order particles are rendered, override user clouds settings, etc.

Preprocessor directives can be used with internal shader settings, using macros based on shader options defined automatically. However, you cannot use #define or #include in shaders.properties.

Below is an index of shaders.properties directives available in Iris. Directives marked as Iris Exclusive are only available in Iris, and any unmarked uniforms is available in either Optifine or Iris.

Feature Flags

Feature flags are an Iris system to query the activation state of certain features. Some features require setting a feature flag to use. Feature flags can also be set as required, meaning the pack will only load if the system / Iris version supports the feature.

DirectiveDescriptionTag
iris.features.requiredSets the feature flags required to load the shader, enables those featureIris Exclusive
iris.features.optionalSets the feature flags optional to load the shader, enables feature if supportedIris Exclusive

Programs / Ordering

DirectiveDescriptionTag
particles.orderingControls the order in the pipeline particles will be renderedIris Exclusive
particles.before.deferredLegacy option for particle ordering, replaced by particles.ordering
separateEntityDrawsControls whether translucent entities/block entities are drawn before or after the deferred passIris Exclusive
program.enabledAllows programs to be disabled based on shader options
shadow.enabledEnables or disables the shadow passIris Exclusive
shadowTerrainSets whether terrain is rendered in the shadow pass
shadowTranslucentSets whether translucent terrain is rendered in the shadow pass
shadowEntitiesSets whether entities are rendered in the shadow pass
shadowPlayerSets whether the player is rendered in the shadow passIris Exclusive
shadowBlockEntitiesSets whether block entities are rendered in the shadow pass
shadowLightBlockEntitiesSets whether block entities that emit light are rendered in the shadow passIris Exclusive
skipAllRenderingEnables or disables most gbuffers passesIris Exclusive
voxelizeLightBlocksRenders light blocks as an invisible quad in the shadow pass so that they can be voxelizedIris Exclusive
indirect.passAllows you to dispatch a compute shader with the work group amount specified from a SSBOIris Exclusive
allowConcurrentComputeEnables concurrent compute passesIris Exclusive

Features / Options

DirectiveDescriptionTag
cloudsEnables or disables vanilla cloud rendering
moonEnables or disables rendering of the moon texture in gbuffers_skytextured
sunEnables or disables rendering of the sun texture in gbuffers_skytextured
skyEnables or disables rendering of vanilla sky in gbuffers_skybasicIris Beta Exclusive
starsEnables or disables rendering of stars in the sky in gbuffers_skybasicIris Beta Exclusive
underwaterOverlayEnables or disables the water texture overlay when the player is underwater
vignetteEnables or disables rendering of the vignette overlay
oldHandLightSets heldBlockLightValue to use whichever hand’s value is higher (for legacy support)
oldLightingEnables the “old lighting”, which applies a lighting multiplier in the color attribute based on the block’s orientation
separateAoControls whether vanilla AO is stored in the RGB or A components of the color vertex attribute
supportsColorCorrectionAllows the shader to perform its own conversion to a different color spaceIris Exclusive
weatherEnables or disables weather (rain & snow) geometry and rain splash particles.Iris Beta Exclusive

Rendering

DirectiveDescriptionTag
alphaTestSets the alpha test function for cutout programs
blendSets the alpha blending parameters for a specific program, optionally per-buffer
scaleDefines a new viewport for a composite style program
flipEnable or disable buffer flipping for a composite style program
size.bufferSets the resolution of a colortex buffer
backFaceEnables or disables back-face culling for each type of rendering
frustum.cullingEnables or disables frustum culling
occlusion.cullingEnables or disables occlusion cullingIris Exclusive
shadow.cullingControls culling in the shadow pass
rain.depthSets whether rain and snow write to the depth buffer
beacon.beam.depthSets whether beacon beams write to the depth buffer

Custom Uniforms

Custom uniforms can be used to create one-off values on the CPU, rather than having to compute them on the GPU. They are then uploaded to the GPU as uniforms, and are accessible from any shader program.

DirectiveDescription
uniformDefines a custom uniform which is evaluated on the CPU and uploaded on program change
variableDefines a variable to be used in a custom uniform

Textures / Buffers

These directives allow for setting up custom textures, images, and SSBOs. They are further described in the “Buffers” section (and linked here).

DirectiveDescriptionTag
textureCreates a Custom texture, which binds an image/texture to an existing sampler
texture.noiseLoads an image from shader files into noisetex
customTextureCreates an Enhanced Custom Texture, which binds an image/texture to a new samplerIris Exclusive
imageCreates a custom image with a samplerIris Exclusive
bufferObjectCreates a Shader Storage Buffer Object (SSBO)Iris Exclusive