Changelog - Shader API



  • lib-sparse.glsl: Sampling functions uses texture derivatives instead simple mipmap level. It's a requirement for the support of anisotropy sampling. Sampling functions signatures are not modified.
  • lib-pom.glsl: the getParallaxOffset function signature has changed in order to uses texture derivatives


  • Add a new lib-pbr-aniso.glsl library to help visualizing anisotropic specular highlight
  • Add a new lib-sparse.glsl library to help channel sampling by taking care of mipmaps availability
  • Update shader libraries interfaces to take care of this safe sampling
  • Deprecation: The previous functions based on the vec2 texture coordinates and the texture sampler have been deprecated (please use new signatures)
  • lib-pom.glsl: Add a applyParallaxOffset function to simplify to use of parallax occlusion effect
  • lib-random.glsl: Add a Blue Noise random value generator and temporal alternatives
  • lib-sampler.glsl: Split all channel sampling helpers to have both value interpretation and sampling helpers


  • Surface shader API change: the shade function signature has changed, see surface-shader.glsl
  • The shadeShadow function is no longer used and can safely be removed from custom surface shaders
  • Add Subsurface Scattering support, see surface-shader.glsl and lib-sss.glsl for details
  • lib-pbr.glsl: the pbrComputeBRDF function has been removed. See pbr-metal-rough.glsl example to know how to use the library now
  • New engine parameters have been added: texture_blue_noise, aspect_ratio, camera_vp_matrix_inverse, environment_exposure, environment_rotation, fovy, main_light and screen_size. See all-engine-params.glsl for details
  • Add the description metadata to provide tooltips for custom shader parameters


  • Fix missing shaders in documentation samples (pixelated and toon shaders)
  • Fix dithering for high resolution


  • Fix pbr-coated shader
    • lib-vectors.glsl: tangentSpaceToWorldSpace() and worldSpaceToTangentSpace() outputs are now normalized


  • Incorrect specular reflection in the 2D view for certain meshes


  • Cheaper dithering


  • Remove interpolated tbn normalization to match Substance Designer and bakers behavior
  • [Viewport] Replace Hammersley table by a Fibonacci spiral


  • Fix shaders blending and culling modes
  • Rework dithering. Now if we have a render in linear, we apply it after the color profile


  • Add support for Color Profiles (LUT) in viewports (Optional sRGB conversion)
  • Add dithering to opacity in shaders
  • Add parallax occlusion mapping to PBR shaders
  • Add a way to hide custom params from the default shader UI
  • Add a link to channel tags list in layering shader documentation
  • Replace 'channel_ao' tag by 'channel_ambientocclusion'
  • [Viewport] Some normal maps have clamped values which appear as artifacts
  • Fix available channels in shaders doc
  • Allow to define a custom shader UI
  • Add a standard custom shader UI for material layering shaders
  • Custom UI files are now searched relatively to a shaders/custom-ui folder in the shelves (like the mdl)
  • Use the specular level channel in default shaders
  • Fix vec3 shader params example
  • Upgrade Painter to OpenGL core profile


  • Fix the difference on the normal map combined exported and the one displayed in the viewport


  • Add support for bindless textures in generic material for non Document textures
  • Update custom shader sliders documentation
  • Allow to define step precision for sliders
  • Documentation for dynamic material layering


  • Add a 'RGB2Gray' function in lib-utils


  • Allow to define groups for shader parameters and materials/masks
  • Add missing channels in documentation ('ao', 'diffuse', 'specularlevel')


  • Normal unpack function incorrect with low alpha values
  • Allow to read mesh vertex colors in custom shader
  • [Viewport] Stretched environment map on some computers


  • Allow to override Normal/AO additional maps by dedicated channel
  • Change Height2Normal function to use Sobel method
  • Add the possibility to define a mdl per shader
  • Add a new mdl folder in the shelf
  • Add diffuse and specular level channel presets
  • Documentation update for tone mapping
  • Fix reflections when in orthographic mode
  • Fixed the vertical white glitch appearing at a specific location on the envmap
  • Allow to define 'default_color' for texture params


  • Allow to sample external textures (from shelf)


  • Expose gamma/tonemapping function to allow to override them
  • Expose multiple texcoords


  • Add line number and filename in shader error report


  • All sRGB conversions follow the sRGB standard, except those done in the shaders that have close approximation
  • Height channel to Normal map is converted to the wrong color space


  • Add ambient occlusion channel
  • Add new workflow for normal edition
  • Add 'or' expression syntax for texture related auto parameters
  • Fix pbr shader for Intel gpu on OSX


  • Allow to interpolate binormals in fragment shader
  • Fix Mikkt tangent space


  • Fix spherical harmonics producing negative light intensity
  • Exposure computation is different from Substance Designer (and fix exposure slider)
  • Shadows should not be visible on 100% metallic surface


  • Add shadow function
  • Add support for opacity ('alpha_test' and 'alpha_blend')


  • Ability to set required openGL states into custom shaders
  • Fix inverted bitangents
  • Add support for normal channel


  • Add support for custom shaders