###############################################################################
# Sample configuration for OptiFine's Shaders feature.
#
###############################################################################
# shaders.properties
###############################################################################
# Place this file in the "shaders" folder of the shader pack
#
# Set clouds type or turn clouds off
# The clouds are also controlled by "Video Settings -> Details -> Clouds" with higher priority
clouds=fast|fancy|off

# Enable or disable old hand light 
# Backwards compatibility for shader packs not supporting main and off hand.
# When enabled uses the handheld item with higher light value for the main hand.  
# The old hand light is also controlled by "Video Settings -> Shaders -> Old Hand Light" with higher priority
oldHandLight=true|false

# Enable or disable the dynamic hand light from "Dynamic Lights"
# This option can be used to disable the dynamic hand light from "Dynamic Lights" if the shader implements its own hand light.
dynamicHandLight=true|false

# Enable or disable old block lighting with fixed multiplier
# The old block lighting is also controlled by "Video Settings -> Shaders -> Old Lighting" with higher priority
oldLighting=true|false

# Enable or disable rendering of translucent blocks (water, stained glass) in the shadow pass
shadowTranslucent=true|false

# Enable or disable underwater screen overlay
underwaterOverlay=true|false

# Enable or disable sun rendering
sun=true|false

# Enable or disable moon rendering
moon=true|false

# Enable or disable vignette rendering
vignette=true|false

# Enable back-face rendering per render layer
# Default is false
backFace.solid=true|false 
backFace.cutout=true|false
backFace.cutoutMipped=true|false
backFace.translucent=true|false

# Custom textures
# Allows custom textures to be loaded from the shader pack and to be bound to the available shader units.
# Format:
#  texture.<stage>.<name>=<path>
# Stage:
#  gbuffers - gbuffers and shadow programs
#  deferred - deferred programs
#  composite - composite and final programs
# Name is the texture unit name, see "shaders.txt" for the available names. 
# The texture path is relative to the folder "shaders".
# Example:
#  texture.composite.colortex5=textures/glass.png
texture.<stage>.<name>=<path>

# Custom noise texture
# Allows the noise texture to be loaded from the shader pack
texture.noise=<path>

# Shader options are parsed from the ".fsh" and ".vsh" files located in the folder "shaders".
# The line comment located after the option is shown as a tooltip.
# Tooltip lines are split on sentence end ". ".
# Tooltip lines ending with "!" are automatically shown red.
# One option can be present in several shader files and it will be switched simultaneously in all of them.
# Ambiguous options (different default values found) are disabled and can not be changed.
# Left click on an option button selects the next value, right click selects the previous value and 
# Shift + click resets the option to default value.
#
# Boolean, default ON
#   #define SSAO       // Screen space ambient occlusion. High performance impact.
# Boolean, default OFF
#   // #define SSAO    // Screen space ambient occlusion. High performance impact.
#
# The boolean variables are recognized only if the matching "#ifdef" or "#ifndef" is also found in the same file. 
#
# Variable
#   #define SHADOW_DARKNESS 0.10   // Shadow darkness levels [0.05 0.10 0.20]
#
# The allowed values are given as a list "[v1 v2 v3]" in the comment.
# The default value is automatically added if not present in the list.
#
# Some "const" variables are also recognized (backwards compatibility with the Shaders Mod).
# They use a structure similar to the macro variables, for example: 
#   const int shadowMapResolution = 1572; // Shadowmap resolution [1024 1572 2048]
#   const float shadowDistance = 64.0;    // Draw distance of shadows [32.0 64.0 128.0 256.0]
#
# Const variables without allowed values are by default not visible, unless used in a profile or configured on a screen.
#
# The recognized "const" variables are:
#   shadowMapResolution
#   shadowDistance
#   shadowDistanceRenderMul
#   shadowIntervalSize
#   generateShadowMipmap
#   generateShadowColorMipmap
#   shadowHardwareFiltering
#   shadowHardwareFiltering0
#   shadowHardwareFiltering1
#   shadowtex0Mipmap
#   shadowtexMipmap
#   shadowtex1Mipmap
#   shadowcolor0Mipmap
#   shadowColor0Mipmap
#   shadowcolor1Mipmap
#   shadowColor1Mipmap
#   shadowtex0Nearest
#   shadowtexNearest
#   shadow0MinMagNearest
#   shadowtex1Nearest
#   shadow1MinMagNearest
#   shadowcolor0Nearest
#   shadowColor0Nearest
#   shadowColor0MinMagNearest
#   shadowcolor1Nearest
#   shadowColor1Nearest
#   shadowColor1MinMagNearest
#   wetnessHalflife
#   drynessHalflife
#   eyeBrightnessHalflife
#   centerDepthHalflife
#   sunPathRotation
#   ambientOcclusionLevel
#   superSamplingLevel
#   noiseTextureResolution
#
# User friendly option labels can be loaded from language files in "/shaders/lang"
# Example from "/shaders/lang/en_US.lang":
#   option.SHADOW_FILTER=Shadow Filter
#   option.SHADOW_FILTER.comment=Smooth out edges of shadows. Very small performance hit.
#
# User friendly value labels can be loaded from language files in "/shaders/lang"
# Example from "/shaders/lang/en_US.lang"
#   value.SHADOW_FILTER.0.4f=Normal
#   value.SHADOW_FILTER.0.9f=Soft
#
# Value formatting can be added with:
#   prefix.SHADOW_FILTER=(
#   suffix.SHADOW_FILTER=)

# Sliders
# Options with multiple allowed values can be shown as sliders
sliders=<list of options>
 
# Profiles allow a set of options to be switched together
# The current profile is detected based on the selected option values
# If no profile matches the current option values, the profile "Custom" is selected
# It is recommended that all profiles use the same list of options and only the values differ
# Disabled programs are special options and only disabling (prefix !) is recognized for them 
profile.NAME=<list of options>

# Profile options
#   OPTION:value  - set value
#   OPTION=value  - set value
#   OPTION        - set boolean option ON
#   !OPTION       - set boolean option OFF
#   profile.NAME  - copy all options from another profile
#   !program.name - disable program "name". The program name may include dimension: "world-1/gbuffers_water"
#
# The following program names are recognized:
#   gbuffers_basic
#   gbuffers_textured
#   gbuffers_textured_lit
#   gbuffers_skybasic
#   gbuffers_skytextured
#   gbuffers_clouds
#   gbuffers_terrain
#   gbuffers_terrain_solid
#   gbuffers_terrain_cutout_mip
#   gbuffers_terrain_cutout
#   gbuffers_damagedblock
#   gbuffers_water
#   gbuffers_block
#   gbuffers_beaconbeam
#   gbuffers_item
#   gbuffers_entities
#   gbuffers_armor_glint
#   gbuffers_spidereyes
#   gbuffers_hand
#   gbuffers_weather
#   composite
#   composite1
#   composite2
#   composite3
#   composite4
#   composite5
#   composite6
#   composite7
#   final
#   shadow
#   shadow_solid
#   shadow_cutout
#   deferred
#   deferred1
#   deferred2
#   deferred3
#   deferred4
#   deferred5
#   deferred6
#   deferred7
#   gbuffers_hand_water
#
# Examples
# profile.LOW=SSAO:false GOD_RAYS:false SHADOW_DIST:40 !program.composite1
# profile.MED=profile.LOW GOD_RAYS SHADOW_DIST:80
# profile.HIGH=SSAO GOD_RAYS SHADOW_DIST:120 
# 
# User friendly profile labels can be loaded from language files in "/shaders/lang"
# Example from "/shaders/lang/en_US.lang"
# profile.LOW=Low
# profile.LOW.comment=Low quality. Intel and Mac compatible. No God Rays and SSAO.
# profile.MED=Medium
# profile.MED.comment=Medium quality. Nvidia or AMD graphics card recommended.
# profile.HIGH=High
# profile.HIGH.comment=High quality. Modern Nvidia or AMD graphics card required.

# Option screen configuration
# Main screen
screen=<list of options>
# Sub-screen
screen.NAME=<list of options>

# Screen options
#   OPTION    - option name
#   [NAME]    - link to sub-screen NAME
#   <profile> - profile selection
#   <empty>   - empty slot
#   *         - the rest of the options not configured on any of the screens

# Option columns per screen
# By default the options are shown in two columns:
#   1  2
#   3  4
#   5  6
#   ...
# When more than 18 options are present the screen switches to 3 or more columns.
# The option names are automatically shortened to avoid text overflow outside the button.
#
# Main screen
screen.columns=2
# Sub-screen
screen.NAME.columns=2

# Example:
# screen=<profile> <empty> BLOOM CELLSHADING [SUN_EFFECTS] [WAVING_GRASS]
# screen.SUN_EFFECTS=SUN_EFFECTS GOD_RAYS LENS_FLARE RAINDROPS
# screen.WAVING_GRASS=WAVING_GRASS WAVING_LEAVES WAVING_VINES
# screen.MISC=*
#
# User friendly screen labels can be loaded from language files in "/shaders/lang"
# Example from "/shaders/lang/en_US.lang"
# screen.DOF=Depth of field
# screen.DOF.comment=Depth of field effect. Adds blur to out of focus objects.
# screen.WAVING=Waving grass and leaves
# screen.WAVING.comment=Waving grass, leaves, fire and entities

# Custom uniforms
# Define custom variables and uniforms using general mathematical expressions with brackets, 
# constants, variables, operators and functions.
# The uniforms are sent to the shaders, the variables can be used in other variables or uniforms.
# 
# Constants
#   floating point number
#   pi - 3.1415926
#   true
#   false
#
# The available biomes are defines as constants. For example: BIOME_PLAINS, BIOME_DESERT, BIOME_EXTREME_HILLS, etc. 
#
# Parameters (float)
#   biome - biome id
#
# The fixed scalar uniforms are also available as parameters. For example: heldItemId, worldTime, moonPhase, etc.
# Vector elements can be accessed with suffix ".x", ".y" and ".z". For example: "sunPosition.y". 
# Color elements can be accessed with suffix ".r", ".g" and ".b". For example: "skyColor.r".
#
# Parameters (boolean)
#   is_alive
#   is_burning
#   is_child
#   is_glowing
#   is_hurt
#   is_in_lava
#   is_in_water
#   is_invisible
#   is_on_ground
#   is_ridden
#   is_riding
#   is_sneaking
#   is_sprinting
#   is_wet
#
# Operators
#   +, -, *, /, %
#   !, &&, || 
#   >, >=, <, <=, ==, !=
#
# Functions
#   sin(x)
#   cos(x)
#   asin(x)
#   acos(x)
#   tan(x)
#   atan(x)
#   atan2(y, x)
#   torad(deg)
#   todeg(rad)
#   min(x, y ,...)
#   max(x, y, ...)
#   clamp(x, min, max)                             Limits a value to be between min and max values
#   abs(x)
#   floor(x)
#   ceil(x)
#   exp(x)
#   frac(x)
#   log(x)
#   pow(x)
#   random(x)
#   round(x)
#   signum(x)
#   sqrt(x)
#   fmod(x, y)                                     Similar to Math.floorMod()
#   if(cond, val, [cond2, val2, ...], val_else)    Select a value based one or more conditions
#   smooth(id, val, fadeInTime, [fadeOutTime])     Smooths a variable with custom fade-in time. The "id" must be unique.  
#
# Boolean functions                 
#   between(x, min, max)                           Check if a value is between min and max values
#   equals(x, y, epsilon)                          Compare two float values with error margin
#   in(x, val1, val2, ...)                         Check if a value equals one of several values
# 
# Example:
#   variable.bool.isBiomeDark=in(biome, BIOME_RIVER, BIOME_FOREST)
#   variable.float.valBiomeDark=smooth(1, if(isBiomeDark, 1, 0), 5)
#   variable.float.valHurtDark=smooth(2, if(is_hurt, 1.3, 0), 0, 10)
#   variable.float.valSwordDark=smooth(3, if(heldItemId == 276, 1, 0), 0.5, 0.5)
#   uniform.float.screenDark=max(valBiomeDark, valHurtDark, valSwordDark)
#
uniform.<float|int|bool>.<name>=<expression>
variable.<float|int|bool>.<name>=<expression>

# Shaders can be separated by world dimension by placing them in folder "/shaders/world<id>" where "id" is the world dimension.
# When the world folder is present the shaders will be loaded only from there ignoring the default folder.
# Creating an empty world folder effectively disables the shaders for this world dimension.
# Mod world dimensions should also work.
# Only ".vsh" and ".fsh" files are loaded from the dimension folder.
# Example
#   /shaders         - default shaders
#   /shaders/world-1 - nether shaders
#   /shaders/world1  - end shaders
#
# Dimension folders are also scanned for options.
# The options in dimension foldes may be given different names to avoid conflict with default values.

# The "#include" directive found in ".vsh" and ".fsh" files is replaced with the contents of the included file
# Relative, look in same folder
#   #include "const.inc"
# Absolute, start from base folder "/shaders"
#   #include "/world-55/lib.inc"
# 
# Included files may include other files.
# The maximum include depth is limited to 10.
#
# To avoid code duplication on nested includes the following can be used:
#   // File A
#   #ifndef INCLUDE_A
#   #define INCLUDE_A
#   ... <code>
#   #endif
# 
# When Minecraft is started with argument "-Dshaders.debug.save=true" then the final shaders will be saved in "shaderpacks/debug".