Quid sit, non quomodo.
— WHAT IT IS, NOT HOW —
Larry Gritz · Sony Pictures Imageworks · 2010 · ASWF · 2018
SHADER LANGUAGE · CLOSURE-RETURNING · DEFERRED EVALUATION · PRODUCTION-PROVEN
GLSL computes pixels. OSL describes surfaces. An OSL shader does not return a color — it returns a closure, a recipe of BSDF lobes the renderer can interrogate three ways: sample a direction, evaluate at a direction, return the pdf of that direction. The shader specifies what the surface is. The renderer decides how to ask. Cycles, Arnold, RenderMan, V-Ray, Karma, Mantra — all consume the same .oso bytecode and answer their own integration strategy.
// Anisotropic brushed copper with thin clearcoat. // Returns a closure, not a color — the renderer decides // how to evaluate (path trace, BDPT, MLT, photon map). shader brushed_copper ( color base_color = color(0.95, 0.62, 0.34), float roughness_u = 0.42, // along brush direction float roughness_v = 0.18, // perpendicular float coat_weight = 0.04, vector brush_dir = vector(1, 0, 0), output closure color BSDF = 0 ) { vector T = normalize(cross(N, brush_dir)); // Each line is a BSDF lobe. + composes them. // The renderer never sees a color — it sees this: BSDF = base_color * microfacet("ggx", N, T, roughness_u, roughness_v, 1.5, 0) + coat_weight * microfacet("ggx", N, 0.05, 1.5, 0) ; }
The trick is the inversion. The shader doesn't compute — it returns a closure, a deferred specification of what kind of surface this is. The renderer decides how to evaluate.
This is what lets one .oso work in path tracing, light tracing, bidirectional path tracing, photon mapping, and Metropolis. The shader doesn't know the integration strategy. It doesn't need to.
github.com/AcademySoftwareFoundation/OpenShadingLanguage~150 standard closures · spec ~1.13aswf.io| 2008 | Larry Gritz at Sony Imageworks begins designing OSL — production renderers needed a shading language that could survive cross-integrator use. |
| 2010 | OSL 1.0 released open-source · Apache → BSD · adopted internally for Cloudy with a Chance of Meatballs 2, the Smurfs sequels. |
| 2011 | Cycles 0.4 ships OSL support. Blender becomes the first open-source renderer to consume Imageworks' shader language natively. |
| 2012 | Arnold 4.x adopts OSL. Sony switches their internal renderer from RenderMan-RSL shaders to OSL. |
| 2014 | RenderMan replaces RSL with OSL in the new RIS engine. Pixar standardizes on it. |
| 2017 | OSL 1.10 — full closure-based BSDF taxonomy. Spider-Man: Into the Spider-Verse ships on it. |
| 2018 | OSL joins the Academy Software Foundation. Linux Foundation governance. |
| 2024 | OSL 1.13 — first-class GPU support via Cycles' OptiX backend. Closures now JIT to PTX. |
| ∞ | The renderer decides. Same .oso, every production path tracer, the same surface. |
The shader specifies what the surface is. The renderer decides how to ask. One closure, three questions, every integrator gets its answer.