Page Information

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Open Shading Language: shaders can now be written in Open Shading Language, an advanced shading language for production GI renderers. OSL shaders placed in the shader search path are automatically registered as Arnold shader nodes, with their parameters converted to Arnold parameters. Once loaded, they can be inspected, instantiated and linked in exactly the same way as C++ shaders. OSL shaders can be used to implement texture patterns and materials using closures. See the OSL documentation for more details. (#4357, #5400, #5487, #5526, #5471)
  • Closures: a new closure parameter type has been added, which shaders can output instead of final colors. There are BSDF, BSSRDF, emission, matte, transparency and volume closures. See the API documentation and examples for more details on how to use these. Linking a color to a closure parameter will automatically create an emission closure with that color. A closure parameter however can't be linked or converted to a color, as the integrator only computes lighting after shader evaluation. (#4793)
  • Light group AOVs: surface shaders now natively support light group AOVs, previously this feature was only available for volume shading. (#4305)
  • Light path expressions: light path expressions are used to write lighting components into separate AOVs. No longer should individual shaders define AOVs for direct/indirect light and various layers, rather a regular expression syntax is used to define the subset of all scattering and emission events in the scene that should be written to each AOV. Built-in AOVs are available for the common cases. See the the LPE documentation for details. (#5491, #5581, #5582)

...

  • AiBSDFIntegrate() can be used to integrate both direct and indirect light. If more low level access is needed, it is still possible to manually implement light loops and multiple importance sampling using the light sampling API. See the documentation for an an example of custom direct light integration. However it is strongly suggested to use closures and leave the light sampling to Arnold instead, to benefit from sampling optimizations and support light path expressions. (#5423)
  • AiLightsGetSample() now returns an AtLightSample with all light sample data, rather than writing it to shader globals. For light filters the AtLightSample in sg->light_filter can be used to read and modify the current light sample. (#5423)
  • AiLightsTrace() and AiLightsTraceRayTypes() have been added for low level direct light integration. (#5423)
  • Removed AiEvaluateLightSample(). (#5423)
  • Removed AiLightGetAffectDiffuse() and AiLightGetAffectSpecular()AiLightGetDiffuse() and AiLightGetSpecular() now automatically return zero for when light.affect_diffuse or light.affect_specular are off. A new AiLightGetInfluence() utility function can also be used instead of these functions, returning the right influence depending on the shading context and ray type. (#5423)
  • AiLightsIntegrateShadowMatte() was added to compute more useful shadow mattes. The new matte has color information if needed, correctly weights light occlusion when multiple lights are present and takes into account the surface's BSDF. (#5496)
  • Removed AiLightsGetShadowMatte(), use AiLightsIntegrateShadowMatte() instead. (#5496)

...