From f63347866856eb21ddec9ac382ef73eb5653ec80 Mon Sep 17 00:00:00 2001 From: Larry Gritz Date: Sat, 5 Apr 2025 21:53:52 -0700 Subject: [PATCH] docs: Get rid of old LaTeX documentation Only use markdown -> readthedocs for the language specification. No need to continue maintaining the LaTeX version, it only makes it confusing for people who don't know which they should be updating. Signed-off-by: Larry Gritz --- src/doc/CMakeLists.txt | 2 +- src/doc/languagespec.tex | 6931 ---------------------------------- src/doc/macros.tex | 132 - src/doc/osl-languagespec.pdf | Bin 418389 -> 0 bytes src/doc/techref.sty | 199 - 5 files changed, 1 insertion(+), 7263 deletions(-) delete mode 100644 src/doc/languagespec.tex delete mode 100644 src/doc/macros.tex delete mode 100644 src/doc/osl-languagespec.pdf delete mode 100644 src/doc/techref.sty diff --git a/src/doc/CMakeLists.txt b/src/doc/CMakeLists.txt index 958c93c8e5..f94c2cb902 100644 --- a/src/doc/CMakeLists.txt +++ b/src/doc/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: BSD-3-Clause # https://github.com/AcademySoftwareFoundation/OpenShadingLanguage -set (public_docs osl-languagespec.pdf +set (public_docs testshade.md.html osltoy.md.html markdeep.min.js diff --git a/src/doc/languagespec.tex b/src/doc/languagespec.tex deleted file mode 100644 index ed3470193e..0000000000 --- a/src/doc/languagespec.tex +++ /dev/null @@ -1,6931 +0,0 @@ -% Copyright 2009-present Contributors to the Open Shading Language project. -% SPDX-License-Identifier: CC-BY-4.0 -% SPDX-License-Identifier: BSD-3-Clause -% https://github.com/AcademySoftwareFoundation/OpenShadingLanguage - -\documentclass[11pt,letterpaper]{book} -\setlength{\oddsidemargin}{0.5in} -\setlength{\topmargin}{0in} -\setlength{\evensidemargin}{0.3in} -\setlength{\textwidth}{5.75in} -\setlength{\textheight}{8.5in} -%\setlength{\oddsidemargin}{1.25in} -%\setlength{\evensidemargin}{0.5in} - -% don't do this \usepackage{times} % Better fonts than Computer Modern -\renewcommand{\sfdefault}{phv} -\renewcommand{\rmdefault}{ptm} -% don't replace tt -- old is better \renewcommand{\ttdefault}{pcr} -%\usepackage{apalike} -\usepackage{pslatex} -\usepackage{techref} -%\usepackage{epsfig} -\usepackage{verbatim} -\usepackage{moreverb} -\usepackage{graphicx} -\usepackage{xspace} -%\usepackage{multicol} -%\usepackage{color} -\usepackage{hyperref} -%\usepackage{version} -\usepackage{makeidx} -\usepackage[chapter]{algorithm} -\floatname{algorithm}{Listing} - -\usepackage{syntax} - -\widowpenalty=1000 -\clubpenalty=1000 - -\usepackage{fancyhdr} -\pagestyle{fancy} -\fancyhead[LE,RO]{\bfseries\thepage} -\fancyhead[LO]{\bfseries\rightmark} -\fancyhead[RE]{\bfseries\leftmark} -\fancyfoot[C]{\bfseries Open Shading Language Specification} -\renewcommand{\footrulewidth}{1pt} - - -\def\langname{Open Shading Language\xspace} -\def\product{{\sffamily Open Shading Language}\xspace} -\def\versionnumber{1.13} -\def\productver{\product\ {\sffamily \versionnumber}\xspace} - - -\title{ -{\Huge{\bf \product} -%\textregistered\ -{\bf\sffamily \versionnumber} \medskip \\ \huge -Language Specification -} \bigskip } -\author{ -\copyright\ Copyright Contributors to the Open Shading Language project. \\ -All rights reserved. - \bigskip \\ -\vspace{1in} \\ -Editor: Larry Gritz \\ -\emph{lg@imageworks.com} -} -\date{{\large Date: 27 Oct 2023 \\ - (with corrections, 24 May 2024) -} -\bigskip -\bigskip -\bigskip -\bigskip -} - - - -\include{macros} - -\def\color{{\cf color}\xspace} -\def\float{{\cf float}\xspace} -\def\inttype{{\cf int}\xspace} -\def\matrix{{\cf matrix}\xspace} -\def\normal{{\cf normal}\xspace} -\def\point{{\cf point}\xspace} -\def\vector{{\cf vector}\xspace} -\def\void{{\cf void}\xspace} -\def\C{{\cf Ci}\xspace} -\def\Ci{{\cf Ci}\xspace} -%\def\opacity{{\cf Oi}\xspace} -\def\Oi{{\cf Oi}\xspace} -\def\I{{\cf I}\xspace} -\def\N{{\cf N}\xspace} -\def\Ng{{\cf Ng}\xspace} -\def\P{{\cf P}\xspace} -\def\dPdu{{\cf dPdu}\xspace} -\def\dPdv{{\cf dPdv}\xspace} -\def\commonspace{{\cf "common"} space\xspace} -\def\shaderspace{{\cf "shader"} space\xspace} -\def\worldspace{{\cf "world"} space\xspace} -\def\cameraspace{{\cf "camera"} space\xspace} -\def\objectspace{{\cf "object"} space\xspace} -\def\rgbspace{{\cf "rgb"} space\xspace} -\def\noise{{\cf noise()}\xspace} -\def\snoise{{\cf snoise()}\xspace} -\def\pnoise{{\cf pnoise()}\xspace} -\def\psnoise{{\cf psnoise()}\xspace} -\def\cellnoise{{\cf cellnoise()}\xspace} -\def\hashnoise{{\cf hashnoise()}\xspace} -\def\illuminance{{\cf illuminance}\xspace} -\def\illuminate{{\cf illuminate}\xspace} - -\def\closure{{\cf closure}\xspace} -\def\colorclosure{{\cf closure color}\xspace} -\def\closurecolor{{\cf closure color}\xspace} -\def\closurecolors{{\cf closure color}s\xspace} - - -\makeindex - -\begin{document} -\frontmatter - -\maketitle - -\newpage -\label{speccopyr} - -\vspace*{0.2in} - -\noindent The Open Shading Language specification, source code, and -documentation are: - -\vspace*{0.2in} - -Copyright \textcopyright\ Contributors to the Open Shading -Language project. All Rights Reserved. - -\vspace{0.5in} - -The code that implements Open Shading Language is licensed under -the BSD 3-clause (also sometimes known as ``new BSD'') license: - -\vspace{0.25in} - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -\begin{itemize} -\item Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -\item Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -\item Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. -\end{itemize} - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -\vspace{0.5in} - -This specification and other text documentation about Open Shading -Language is licensed under a the Creative Commons Attribution 4.0 -Unported License. \\ - -\smallskip -\spc \includegraphics[width=0.85in]{Figures/CC-BY.png} -\spc http://creativecommons.org/licenses/by/4.0/ - \bigskip - - - -\newpage - - - - -\setcounter{tocdepth}{1} -\tableofcontents - -\mainmatter - -%\part{Part name} - -%\include{blah} - - -\chapter{Introduction} -\label{chap:intro} - - -Welcome to Open Shading Language! - -\vspace*{0.2in} - -Open Shading Language (OSL) is a small but rich language for -programmable shading in advanced renderers and other applications, ideal -for describing materials, lights, displacement, and pattern generation. - -OSL was developed by Sony Pictures Imageworks for use in its in-house -renderer used for feature film animation and visual effects. The -language specification was developed with input by other visual effects -and animation studios who also wish to use it. - -OSL is distributed under the ``New BSD'' license. In short, you are free -to use it in your own applications, whether they are free or commercial, -open or proprietary, as well as to modify the OSL code as you desire, -provided that you retain the original copyright notices as described in -the license. - - -\section*{How OSL is different from other shading languages} - -OSL has syntax similar to C, as well as other shading languages. -However, it is specifically designed for advanced rendering algorithms -and has features such as radiance closures, BSDFs, and deferred ray -tracing as first-class concepts. - -OSL has several unique characteristics not found in other shading -languages (certainly not all together). Here are some things you will -find are different in OSL compared to other languages: - -\subsubsection*{Surface and volume shaders compute radiance closures, not final colors.} - - OSL's surface and volume shaders compute an explicit symbolic - description, called a ``closure,'' of the way a surface or volume - scatters light, in units of radiance. These radiance closures may be - evaluated in particular directions, sampled to find important - directions, or saved for later evaluation and re-evaluation. - This new approach is ideal for a physically-based renderer that - supports ray tracing and global illumination. - - In contrast, other shading languages usually compute just a surface - color as visible from a particular direction. These old shaders are - ``black boxes'' that a renderer can do little with but execute to for - this once piece of information (for example, there is no effective way - to discover from them which directions are important to sample). - Furthermore, the physical units of lights and surfaces are often - underspecified, making it very difficult to ensure that shaders are - behaving in a physically correct manner. - -\subsubsection*{Surface and volume shaders do not loop over lights or shoot rays.} - - There are no ``light loops'' or explicitly traced rays in OSL surface - shaders. Instead, surface shaders compute a radiance closure - describing how the surface scatters light, and a part of the renderer - called an ``integrator'' evaluates the closures for a particular set of - light sources and determines in which directions rays should be - traced. Effects that would ordinarily require explicit ray tracing, - such as reflection and refraction, are simply part of the radiance - closure and look like any other BSDF. - - Advantages of this approach include that integration and sampling may - be batched or re-ordered to increase ray coherence; a ``ray budget'' can - be allocated to optimally sample the BSDF; the closures may be used by - for bidirectional ray tracing or Metropolis light transport; and the - closures may be rapidly re-evaluated with new lighting without having - to re-run the shaders. - -\subsubsection*{Surface and light shaders are the same thing.} - - OSL does not have a separate kind of shader for light sources. Lights - are simply surfaces that are emissive, and all lights are area lights. - -\subsubsection*{Transparency is just another kind of illumination.} - - You don't need to explicitly set transparency/opacity variables in the - shader. Transparency is just another way for light to interact with a - surface, and is included in the main radiance closure computed by a - surface shader. - -\subsubsection*{Renderer outputs (AOV's) are specified using ``light path expressions.''} - - Sometimes it is desirable to output images containing individual - lighting components such as specular, diffuse, reflection, individual - lights, etc. In other languages, this is usually accomplished by - adding a plethora of ``output variables'' to the shaders that collect - these individual quantities. - - OSL shaders need not be cluttered with any code or output variables to - accomplish this. Instead, there is a regular-expression-based - notation for describing which light paths should contribute to which - outputs. This is all done on the renderer side (though supported by - the OSL implementation). If you desire a new output, there is no need - to modify the shaders at all; you only need to tell the renderer the - new light path expression. - -\subsubsection*{Shaders are organized into networks.} - - OSL shaders are not monolithic, but rather can be organized into - networks of shaders (sometimes called a shader group, graph, or DAG), - with named outputs of some nodes being connected to named inputs of - other nodes within the network. These connections may be done - dynamically at render time, and do not affect compilation of - individual shader nodes. Furthermore, the individual nodes are - evaluated lazily, only their outputs are ``pulled'' from the later nodes - that depend on them (shader writers may remain blissfully unaware of - these details, and write shaders as if everything is evaluated - normally). - -\subsubsection*{No ``uniform'' and ``varying'' keywords in the language.} - - OSL shaders are evaluated in SIMD fashion, executing shaders on many - points at once, but there is no need to burden shader writers with - declaring which variables need to be uniform or varying. - - In the open source OSL implementation, this is done both automatically - and dynamically, meaning that a variable can switch back and forth - between uniform and varying, on an instruction-by-instruction basis, - depending on what is assigned to it. - -\subsubsection*{Arbitrary derivatives without grids or extra shading points.} - - In OSL, you can take derivatives of any computed quantity in a shader, - and use arbitrary quantities as texture coordinates and expect correct - filtering. This does not require that shaded points be arranged in a - rectangular grid, or have any particular connectivity, or that any - "extra points" be shaded. - - In the open source OSL implementation, this is possible because - derivatives are not computed by finite differences with neighboring - points, but rather by ``automatic differentiation,'' computing partial - differentials for the variables that lead to derivatives, without any - intervention required by the shader writer. - - -\vspace{0.5in} - - -\section*{Acknowledgments} - -The original designer and project leader of OSL is Larry Gritz. Other early -developers of OSL are (in order of joining the project): Cliff Stein, Chris -Kulla, Alejandro Conty, Jay Reynolds, Solomon Boulos, Adam Martinez, Brecht -Van Lommel. - -Additionally, many others have contributed features, bug fixes, and other -changes: Steve Agland, Shane Ambler, Martijn Berger, Farchad Bidgolirad, -Nicholas Bishop, Stefan Büttner, Matthaus G. Chajdas, Thomas Dinges, Henri -Fousse, Syoyo Fujita, Derek Haase, Sven-Hendrik Haase, John Haddon, Daniel -Heckenberg, Ronan Keryell, Elvic Liang, Max Liani, Bastien Montagne, Erich -Ocean, Mikko Ohtamaa, Alex Schworer, Sergey Sharybin, Stephan Steinbach, -Esteban Tovagliari, Alexander von Knorring, Roman Zulak. (Listed -alphabetically; if we've left anybody out, please let us know.) - -We cannot possibly express sufficient gratitude to the managers at Sony -Pictures Imageworks who allowed this project to proceed, supported it -wholeheartedly, and permitted us to release the source, especially Rob -Bredow, Brian Keeney, Barbara Ford, Rene Limberger, and Erik Strauss. - -Huge thanks also go to the crack shading team at SPI, and the brave -lookdev TDs and CG supes willing to use OSL on their shows. They served -as our guinea pigs, inspiration, testers, and a fantastic source of -feedback. Thank you, and we hope we've been responsive to your needs. - -OSL was not developed in isolation. We owe a debt to the individuals -and studios who patiently read early drafts of the language -specification and gave us very helpful feedback and additional ideas, -and especially to those at other companies who have taken the risk of -incorporating OSL into their products and pipelines. - -\bigskip -The open source OSL implementation incorporates or depends upon several -other open source packages: - -\begin{itemize} -\item {\cf OpenImageIO} \copyright\ Contributors to OpenImageIO -\url{http://openimageio.org} -\item Imath \copyright\ Contributors to Imath. -\url{http://www.openexr.com} -\item LLVM \copyright\ 2003-2010 University of Illinois at - Urbana-Champaign. \url{http://llvm.org} -\end{itemize} - -These other packages are all distributed under licenses that allow them -to be used by and distributed with \product. - -\bigskip - -% \section*{Annotations} -% -% \begin{annotate} -% When you see text in this style, it's an annotation. These annotations -% will not be in the final draft of this document. They are notes to the -% readers of early drafts, sometimes questions, sometimes guideposts -% to uncertain areas, sometimes explanations of what is to come but that -% has not yet been fully fleshed out. -% -% \begin{comment} -% Short annotations will sometimes spring up anywhere, but there's also a -% full chapter of discussion of design choices -% (Chapter~\ref{chap:discussion}). Opinionated readers should pay -% particular attention to this chapter, as these big decisions will be the -% hardest to change later. -%\end{comment} -% \end{annotate} - - -\chapter{The Big Picture} -\label{chap:shaderstructure} -\label{chap:bigpicture} - -This chapter attempts to lay out the major concepts of \langname, -define key nomenclature, and sketch out how individual shaders fit -together in the context of a renderer as a whole. - -% \begin{annotate} -% Other than the background material of this chapter, the rest of this -% specification deals strictly with the language itself. In the future, -% there will be separate (shorter) documents explaining in detail the use -% of the language compiler, the renderer-side issues, the library and APIs -% for how a renderer actually causes shaders to be evaluated, and so on. -% \end{annotate} - -\subsection*{A shader is code that performs a discrete task} - -A shader is a program, with inputs and outputs, that performs a specific -task when rendering a scene, such as determining the appearance behavior -of a material or light. The program code is written in \langname, the -specification of which comprises this document. - -For example, here is a simple {\cf gamma} shader that performs -simple gamma correction on is {\cf Cin} input, storing the result -in its output {\cf Cout}: -\bigskip - -\includegraphics{Figures/shaderschematic} - -\medskip - -The shader's inputs and outputs are called \emph{shader parameters}. -Parameters have default values, specified in the shader code, but may -also be given new values by the renderer at runtime. - -\subsection*{Shader instances} - -A particular shader may be used many times in a scene, on different -objects or as different layers in a shader group. Each separate use of -a shader is called a \emph{shader instance}. Although all instances of -a shader are comprised of the same program code, each instance may -override any or all of its default parameter values with its own set of -\emph{instance values}. - -Below is a -schematic showing a {\cf gamma} instance with the {\cf gam} parameter -overridden with an instance-specific value of {\cf 2.2}. - -\bigskip - -\bigspc\spc \includegraphics{Figures/instanceschematic} - -\medskip - - - -\subsection*{Shader groups, layers, and connections} - -A \emph{shader group}\index{shader group} is an ordered sequence of -individual shaders called \emph{layers}\index{layer}\index{shader layer} -that are executed in turn. Output parameters of an earlier-executed layer -may be \emph{connected} to an input parameter of a later-executed layer. -This connected network of layers is sometimes called a \emph{shader network} -or a \emph{shader DAG} (directed acyclic graph). Of course, it is fine for -the shader group to consist of a single shader layer. - -Below is a schematic showing how several shader instances may be -connected to form a shader group. - -\bigskip - -\noindent \includegraphics{Figures/groupschematic} - -\bigskip - -\noindent And here is sample pseudo-code shows how the above network may -be assembled using an API in the renderer\footnote{This document does -not dictate a specific renderer API for declaring shader instances, -groups, and connections; the code above is just an example of how -it might be done.}: - -\begin{code} - ShaderGroupBegin () - Shader ("texturemap", /* shader name */ - "tex1", /* layer name */ - "string name", "rings.tx") /* instance variable */ - Shader ("texturemap", "tex2", "string name", "grain.tx") - Shader ("gamma", "gam1", "float gam", 2.2) - Shader ("gamma", "gam2", "float gam", 1) - Shader ("wood", "wood1") - ConnectShaders ("tex1", /* layer name A */ - "Cout", /* an output parameter of A */ - "gam1", /* layer name B */ - "Cin") /* Connect this layer of B to A's Cout */ - ConnectShaders ("tex2", "Cout", "gam2", "Cin") - ConnectShaders ("gam1", "Cout", "wood1", "rings") - ConnectShaders ("gam2", "Cout", "wood1", "grain") - ShaderGroupEnd () -\end{code} - -\noindent Or, expressed as serialized text (as detailed in -Chapter~\ref{sec:serialize}): - -\begin{code} - param string name "rings.tx" ; - shader "texturemap" "tex1" ; - param string name "grain.tx" ; - shader "texturemap" "tex2" ; - param float gam 2.2 ; - shader "gamma" "gam1" ; - param float gam 1.0 ; - shader "gamma" "gam2" ; - shader "wood" "wood1" ; - connect tex1.Cout gam1.Cin ; - connect tex2.Cout gam2.Cin ; - connect gam1.Cout wood1.rings ; - connect gam2.Cout wood1.grain ; -\end{code} - -The rules for which data types may be connected are generally the same as -the rules determining which variables may be assigned to each other in OSL -source code: -\begin{itemize} -\item {\cf source} and {\cf dest} are the same data type. -\item {\cf source} and {\cf dest} are both \emph{triples} (\color, \point, -\vector, or \normal), even if they are not the same kind of triple. -\item {\cf source} is an {\cf int} and {\cf dest} is a {\cf float}. -\item {\cf source} is a {\cf float} or {\cf int} and {\cf dest} is a -\emph{triple} (the scalar value will be replicated for all three components -of the triple). -\item {\cf source} is a single component of an aggregate type (e.g. one -channel of a {\cf color}) and {\cf dest} is a {\cf float} (or vice versa). -\end{itemize} - -\subsection*{Geometric primitives} - -The \emph{scene} consists of primarily of geometric primitives, -light sources, and cameras. - -\emph{Geometric primitives} are shapes such as NURBS, subdivision surfaces, -polygons, and curves. The exact set of supported primitives may vary -from renderer to renderer. - -Each geometric primitive carries around a set of named \emph{primitive -variables} (also sometimes called \emph{interpolated values} or -\emph{user data}). Nearly all shape types will have, among their primitive -variables, control point positions that, when interpolated, actually -designate the shape. Some shapes will also allow the specification of -normals or other shape-specific data. Arbitrary user data may also be -attached to a shape as primitive variables. Primitive variables may be -interpolated in a variety of ways: one constant value per primitive, one -constant value per face, or per-vertex values that are interpolated -across faces in various ways. - -If a shader input parameter's name and type match the name and type -of a primitive variable on the object (and that input parameters is -not already explicitly connected to another layer's output), the -interpolated primitive variable will override the instance value or -default. - - -\subsection*{Attribute state and shader assignments} - -Every geometric primitive has a collection of \emph{attributes} (sometimes -called the \emph{graphics state}) that includes its transformation -matrix, the list of which lights illuminate it, whether it is one-sided -or two-sided, shader assignments, etc. There may also be a long list of -renderer-specific or user-designated attributes associated with each -object. A particular attribute state may be shared among many geometric -primitives. - -The attribute state also includes shader assignments --- the shaders or -shader groups for each of several \emph{shader uses}, such as surface -shaders that designate how light reflects or emits from each point on a shape, -displacement shaders that can add fine detail to the shape on a -point-by-point basis, and volume shaders that describe how light is -scattered within a region of space. A particular renderer may have -additional shader types that it supports. - - -\subsection*{Shader execution state: parameter binding and global variables} - -When the body of code of an individual shader is about to execute, all -its parameters are \emph{bound} --- that is, take on specific values -(from connections from other layers, interpolated primitive variables, -instance values, or defaults, in that order). - -Certain state about the position on the surface where the shading is -being run is stored in so-called \emph{global variables}. This includes -such useful data as the 3D coordinates of the point being shaded, the -surface normal and tangents at that point, etc. - -Additionally, the shader may query other information about other -elements of the attribute state attached to the primitive, and -information about the renderer as a whole (rendering options, etc.). - -\subsection*{Surface and volume shaders compute closures} - -Surface shaders (and volume shaders) do not by themselves compute the -final color of light emanating from the surface (or along a volume). -Rather, they compute a \emph{closure}, which is a symbolic representation -describing the appearance of the surface, that may be more fully -evaluated later. This is in effect a parameterized formula, in which -some inputs have definite numeric values, but others may depend on -quantities not yet known (such as the direction from which the surface -is being viewed, and the amount of light from each source that is -arriving at the surface). - -For example, a surface shader may compute its result like this: - -\begin{code} - color paint = texture ("file.tx", u, v); - Ci = paint * diffuse (N); -\end{code} - -\noindent In this example, the variable {\cf paint} will take on a -specific numeric value (by looking up from a texture map). But the {\cf - diffuse()} function returns a \colorclosure, not a definite numeric -\color. The output variable {\cf Ci} that represents the appearance of -the surface is also a \colorclosure, whose numeric value is not known -yet, except that it will be the product of {\cf paint} and a Lambertian -reflectance. - -\bigskip - -\includegraphics{Figures/shaderexecschematic} - -\medskip - -The closures output by surface and volume shaders can do a number of -interesting things that a mere number cannot: - -\begin{itemize} -\item Evaluate: given input and output light directions, compute the - proportion of light propagating from input to output. -\item Sample: given just an input (or output) direction, choose a - scattering direction with a probability distribution that is - proportional to the amount of light that will end up going in various - directions. -\item Integrate: given all lights and a view direction, compute - the total amount of light leaving the surface in the view direction. -\item Recompute: given changes only to lights (or only to one light), - recompute the integrated result without recomputing other lights or - any of the calculations that went into assembling constants in the - closure (such as texture lookups, noise functions, etc.). -\end{itemize} - -% \begin{annotate} -% At present, we are assuming that the primitive closure functions (such -% as {\cf diffuse}, {\cf ward}, {\cf cooktorrance}, etc.) are all built -% into the renderer, or implemented as renderer plugins. At a later time, -% possibly in a later draft or maybe not until a truly later version of -% the spec, we will fully spec it out so that closure primitive functions -% may be written in \langname. But I fear that if we do it too soon, -% we'll screw it up. But, yes, the eventual goal is for you to be able to -% write these primitive functions in the language itself. -% \end{annotate} - -\subsection*{Integrators} - -The renderer contains a number of \emph{integrators} (selectable via the -renderer's API) which will combine the color closures computed by -surfaces and volumes with the light sources and view-dependent -information, to yield the amount of light visible to the camera. - -\bigskip - -\includegraphics{Figures/integratorschematic} - -\medskip - -% \begin{annotate} -% At present, this document is written as if the integrators are built -% into the renderer itself (or implemented as renderer plug-ins). At a -% later time, we intend to make it possible for integrators themselves -% to be written in \langname. -% \end{annotate} - -\subsection*{Units} - -You can tell the renderer (through a global option) what units the scene -is using for distance and time. Then the shader has a built-in function -called {\cf transformu()} that works a lot like {\cf transform()}, but -instead of converting between coordinate systems, it converts among -units. For example, - -\begin{code} - displacement bumpy (float bumpdist = 1, - string bumpunits = "cm") - { - // convert bumpdist to common units - float spacing = transformu (bumpunits, "common", bumpdist); - float n = noise (P / spacing); - displace (n); - } -\end{code} - -So you can write a shader to achieve some effect in real world units, -and that shader is totally reusable on another show that used different -modeling units. - -It knows all the standard names like \qkw{cm}, \qkw{in}, \qkw{km}, -etc., and can convert among any of those, as well as between named -coordinate systems. For example, - -\begin{code} - float x = transformu ("object", "mm", 1); -\end{code} - -now {\cf x} is the number of millimeters per unit of \objectspace on -that primitive. - - -\chapter{Lexical structure} -\label{chap:lexical} - -\section{Characters} -\label{sec:lexical:chars} -\index{character set} - -Source code for \langname consists of ASCII or UTF-8 characters. - -The characters for space, tab, carriage return, and linefeed are -collectively referred to as \emph{whitespace}. Whitespace characters -delimit identifiers, keywords, or other symbols, but other than that -have no syntactic meaning. Multiple whitespace characters in a row -are equivalent to a single whitespace character. \index{whitespace} - -Source code may be split into multiple lines, separated by end-of-line -markers (carriage return and/or linefeed). Lines may be of any length -and end-of-line markers carry no significant difference from other -whitespace, except that they terminate {\cf //} comments and delimit -preprocessor directives. - -\section{Identifiers} -\label{sec:identifiers} -\index{identifiers} - -\emph{Identifiers} are the names of variables, parameters, functions, -and shaders. In \langname, identifiers consist of one or more -characters. The first character may be a letter ({\cf A}-{\cf Z} or -{\cf a}-{\cf z}) or underscore (\verb|_|), and subsequent characters may -be letters, underscore, or numerals ({\cf 0}-{\cf 9}). Examples of -valid and invalid identifiers are: - -\begin{code} - opacity // valid - Long_name42 // valid - letters, underscores, numbers are ok - _foo // valid - ok to start with an underscore - - 2smart // invalid - starts with a numeral - bigbuck$ // invalid - $ is an illegal character -\end{code} - - -\section{Comments} -\label{sec:comments} -\index{comments} - -\emph{Comments} are text that are for the human reader of programs, and -are ignored entirely by the \langname compiler. Just like in C++, there -are two ways to designate comments in \langname: - -\begin{enumerate} -\item Any text enclosed by {\cf /*} and {\cf */} will be considered -a comment, even if the comment spans several lines. - -\begin{code} - /* this is a comment */ - - /* this is also - a comment, spanning - several lines */ -\end{code} - -\item Any text following {\cf //}, up to the end of the current line, -will be considered a comment. - -\begin{code} - // This is a comment - a = 3; // another comment -\end{code} -\end{enumerate} - - -\section{Keywords and reserved words} -\label{sec:lexical:keyreserved} - -There are two sets of names that you may not use as identifiers: -keywords and reserved words. - -The following are \emph{keywords} that have special meaning in -\langname: \index{keywords} - -\begin{quote} {\cf - -and break closure color continue do else emit float for if illuminance -illuminate int matrix normal not or output point public return string struct -vector void while - -} -\end{quote} - -The following are \emph{reserved words} that currently have no special -meaning in \langname, but we reserve them for possible future use, or -because they are confusingly similar to keywords in related programming -languages: \index{reserved words} - -\begin{quote} {\cf - -bool case catch char class const delete default double -enum extern false friend -goto inline long new operator private protected -short signed sizeof static -switch template this throw true try typedef -uniform union unsigned varying virtual volatile - -} -\end{quote} - - -\section{Preprocessor} -\label{sec:preprocessor} -\index{preprocessor} \index{C preprocessor|see{preprocessor}} -\indexapi{\#define} -\indexapi{\#undef} -\indexapi{\#if} -\indexapi{\#ifdef} -\indexapi{\#ifndef} -\indexapi{\#elif} -\indexapi{\#else} -\indexapi{\#endif} -\indexapi{\#include} -\indexapi{\#pragma} - -Shader source code is passed through a standard C preprocessor as a -first step in parsing. - -Preprocessor directives are designated by a hash mark ({\cf \#}) as the -first character on a line, followed by a preprocessor directive name. -Whitespace may optionally appear between the hash and the directive -name. - -\langname compilers support the full complement of C/C++ preprocessing -directives, including: - -\begin{code} - #define - #undef - #if - #ifdef - #ifndef - #elif - #else - #endif - #include - #pragma error "message" - #pragma once - #pragma osl ... - #pragma warning "message" -\end{code} - -\noindent Additionally, the following preprocessor symbols will already be -defined by the compiler: - -\smallskip - -\begin{tabular}{p{1.5in} p{3.5in}} -{\cf OSL_VERSION_MAJOR} & Major version (e.g., 1) \\[0.5ex] -{\cf OSL_VERSION_MINOR} & Minor version (e.g., 9) \\[0.5ex] -{\cf OSL_VERSION_PATCH} & Patch version (e.g., 3) \\[0.5ex] -{\cf OSL_VERSION} & Combined version number = 10000*major + 100*minor + patch -(e.g., 10903 for version 1.9.3) -\end{tabular} - - -\chapter{Gross syntax, shader types, parameters} -\label{chap:grosssyntax} - -The overall structure of a shader is as follows: -\medskip - -\begin{quote} -\em -optional-function-or-struct-declarations \\ - -shader-type shader-name {\cf (} optional-parameters {\cf )} \\ -\rm -{\cf \{ } \\ -\em -\spc statements - -{\cf \} } -\end{quote} - -Note that \emph{statements} may include function or structure -definitions, local variable declarations, or public methods, as well as -ordinary execution instructions (such as assignments, etc.). - -\section{Shader types} -\label{sec:shadertypes} -\index{shader types} \index{types!shader} - -Shader types include the following: {\cf surface}, {\cf displacement}, -{\cf light}, {\cf volume}, and generic {\cf shader}. Some operations -may only be performed from within certain types of shaders (e.g., one -may only call {\cf displace()} or alter \P in a displacement shader), -and some global variables may only be accessed from within certain types -of shaders (e.g., {\cf dPdu} is not defined inside a volume shader). - -Following are brief descriptions of the basic types of shaders: - - -\subsection*{{\cf surface} shaders} - -Surface shaders determine the basic material properties of a surface and -how it reacts to light. They are responsible for computing a -\colorclosure that describes the material, and optionally setting -other user-defined output variables. They may not alter -the position of the surface. - -Surface shaders are written as if they describe the behavior of a single -point on the primitive, and the renderer will choose the positions -surface at which the shader must be evaluated. - -Surface shaders also are used to describe emissive objects, i.e., light -sources. OSL does not need a separate shader type to describe lights. - -\subsection*{{\cf displacement} shaders} - -Displacement shaders alter the position and shading normal (or, -optionally, just the shading normal) to make a piece of geometry appear -deformed, wrinkled, or bumpy. They are the only kind of shader that -is allowed to alter a primitive's position. - -\subsection*{{\cf volume} shaders} - -Volume shaders describe how a participating medium (air, smoke, glass, -etc.) reacts to light and affects the appearance of objects on the other -side of the medium. They are similar to {\cf surface} shaders, except -that they may be called from positions that do not lie upon (and are not -necessarily associated with) any particular primitive. - - - -\subsection*{{\cf shader} generic shaders} - -Generic shaders are used for utility code, generic routines that may be -called as individual layers in a shader group. Generic shaders need not -specify a shader type, and therefore may be reused from inside surface, -displacement, or volume shader groups. But as a result, they may -not contain any functionality that cannot be performed from inside all -shader types (for example, they may not alter \P, which can only be done -from within a displacement shader). - - -\section{Shader parameters} -\label{sec:shaderparams} -\index{shader parameters} \index{parameters!shader} - -An individual shader has (optionally) many \emph{parameters} whose -values may be set in a number of ways so that a single shader may have -different behaviors or appearances when used on different objects. - -\subsection{Shader parameter syntax} - -Shader parameters are specified in the shader declaration, in -parentheses after the shader's name. This is much like the parameters -to an OSL function (or a function in C or similar languages), -except that shader parameters must have an \emph{initializer}, giving a -default value for the parameter. Shader parameter default initializers -may be expressions (i.e., may be computed rather than restricted to -numeric constants), and are evaluated in the order that the parameters -are declared, and may include references to previously-declared -parameters. Formally, the grammar for a simple parameter -declaration looks like this: - -\medskip -\spc \emph{type parametername = default-expression} -\medskip - -\noindent where \emph{type} is one of the data types described -in Chapter~\ref{chap:types}, \emph{parametername} is the name of the -parameter, and \emph{default-expression} is a valid expression -(see Section~\ref{sec:expressions}). Multiple parameters are -simply separated by commas: - -\medskip -\spc \emph{type1 ~ parameter1 = expr1} {\cf ,} \emph{type2 ~ parameter2 = expr2} {\cf ,} ... -\medskip - - -Fixed-length, one-dimensional array parameters are declared as follows: - -\medskip -\spc \emph{type parametername} {\cf [ } \emph{array-length} {\cf ] = \{ } \emph{expr0} - {\cf ,} \emph{expr1} ... {\cf \} } -\medskip - -\noindent where \emph{array-length} is a positive integer constant -giving the length of the array, and the initializer is a series of -initializing expressions listed between curly braces. The first -initializing expression provides the initializer for the first element -of the array, the second expression provides the initializer for the -second element of the array, and so on. If the number of initializing -expressions is less than the length of the array, any additional array -elements will have undefined values. - -Arrays may also be declared without a set length: - -\medskip -\spc \emph{type parametername} {\cf [ ] = \{ } \emph{expr0} - {\cf ,} \emph{expr1} ... {\cf \} } -\medskip - -\noindent where no array length is found between the square brackets. -This indicates that the array's length will be determined based on -whatever is passed in --- a connection from the output of another shader -in the group (take on the length of that output), an instance value -(take on the length specified by the declaration of the instance value), -or a primitive variable (length determined by its declaration on the -primitive). If no instance value, primitive value, or connection is -supplied, then the number of initializing expressions will determine the -length, as well as the default values, of the array. - -Structure parameters are also straightforward to declare: - -\medskip -\spc \emph{structure-type parametername} {\cf = \{ } \emph{expr0} - {\cf ,} \emph{expr1} ... {\cf \} } -\medskip - -\noindent where \emph{structure-type} is the name of a -previously-declared {\cf struct} type, and the \emph{expr} initializers -correspond to each respective field within the structure. An -initializer of appropriate type is required for every field of the -structure. - -\subsection{Shader output parameters} -\index{shader output parameters} \index{output parameters!shader} - -Shader parameters are, by default, read-only in the body of the -shader. However, special \emph{output parameters} may be altered -by execution of the shader. Parameters may be designated outputs -by use of the {\cf output} keyword immediately prior to the -type declaration of the parameter: - -\medskip -\spc {\cf output} \emph{type parametername} {\cf = } \emph{expr} -\medskip - -\noindent (Output parameters may be arrays and structures, but we will -omit spelling out the obvious syntax here.) - -Output parameters may be connected to inputs of later-run shader layers -in the shader group, may be queried by later-run shaders in the group -via message passing (i.e., {\cf getmessage()} calls), or used by the -renderer as an output image channel (in a manner described through the -renderer's API). - -\subsection{Shader parameter example} - -Here is an example of a shader declaration, with several parameters: - -\begin{code} - surface wood ( - /* Simple params with constant initializers */ - float Kd = 0.5, - color woodcolor = color (.7, .5, .3), - string texturename = "wood.tx", - /* Computed from an earlier parameter */ - color ringcolor = 0.25 * woodcolor, - /* Fixed-length array */ - color paintcolors[3] = { color(0,.25,0.7), color(1,1,1), - color(0.75,0.5,0.2) }, - /* variable-length array */ - int pattern[] = { 2, 4, 2, 1 }, - /* output parameter */ - output color Cunlit = 0 - ) - { - ... - } -\end{code} - -\subsection{How shader parameters get their values} - -Shader parameters get their values in the following manner, -in order of decreasing priority: - -\begin{itemize} -\item If the parameter has been designated by the renderer to be - connected to an output parameter of a previously-executed shader layer - within the shader group, that is the value it will get. -\item If the parameter matches the name and type of a per-primitive, - per-face, or per-vertex \emph{primitive variable} on the particular - piece of geometry being shaded, the parameter's value will be computed - by interpolating the primitive variable for each position that must be - shaded. -\item If there is no connection or primitive variable, the parameter may - will take on an \emph{instance value}, if that parameter was given an - explicit per-instance value at the time that the renderer referenced - the shader (associating it with an object or set of objects). -\item If none of these overrides is present, the parameter's value will - be determined by executing the parameter initialization code in the - shader. -\end{itemize} - -This triage is performed per parameter, in order of declaration. So, -for example, in the code sample above where the default value for {\cf - ringcolor} is a scaled version of {\cf woodcolor}, this relationship -would hold whether {\cf woodcolor} was the default, an instance value, -an interpolated primitive value, or was connected to another layer's -output. Unless {\cf ringcolor} itself was given an instance, primitive, -or connection value, in which case that's what would be used. - - - -\section{Shader metadata} -\label{sec:metadata} -\index{metadata} \index{shader metadata} - -A shader may optionally include \emph{metadata} (data \emph{about} the -shader, as opposed to data \emph{used by} the shader). Metadata may be -used to annotate the shader or any of its individual parameters with -additional hints or information that will be compiled into the shader -and may be queried by applications. A common use of metadata is to -specify user interface hints about shader parameters --- for example, -that a particular parameter should only take on integer values, should -have an on/off checkbox, is intended to be a filename, etc. - -Metadata is specified inside double brackets {\cf [[} and {\cf ]]} -enclosing a comma-separated list of metadata items. Each metadatum -looks like a parameter declaration --- having a data type, name, and -initializer. However, metadata may only be simple types or arrays -of simple types (not structs or closures) -and their value initializers must be numeric or -string constants (not computed expressions). - -Metadata about the shader as a whole is placed between the shader name -and the parameter list. Metadata about shader parameters are placed -immediately after the parameter's initializing expression, but before -the comma or closing parentheses that terminates the parameter -description. - -Below is an example shader declaration showing the use of shader and -parameter metadata: - -\begin{code} - surface wood - [[ string help = "Realistic wood shader" ]] - ( - float Kd = 0.5 - [[ string help = "Diffuse reflectivity", - float min = 0, float max = 1 ]] , - color woodcolor = color (.7, .5, .3) - [[ string help = "Base color of the wood" ]], - color ringcolor = 0.25 * woodcolor - [[ string help = "Color of the dark rings" ]], - string texturename = "wood.tx" - [[ string help = "Texture map for the grain", - string widget = "filename" ]], - int pattern = 0 - [[ string widget = "mapper", - string options = "oak:0|elm:1|walnut:2" ]] - ) - { - ... - } -\end{code} - -The metadata are not semantically meaningful; that is, the metadata does -not affect the actual execution of the shader. Most metadata exist only -to be embedded in the compiled shader and able to be queried by other -applications, such as to construct user interfaces for shader assignment -that allow usage tips, appropriate kinds of widgets for setting each -parameter, etc. - -The choice of metadata and their meaning is completely up to the shader -writer and/or modeling system. However, we propose some conventions -below. These conventions are not intended to be comprehensive, nor to -meet all your needs --- merely to establish a common nomenclature for -the most common metadata uses. - -The use of metadata is entirely optional on the part of the shader -writer, and any application that queries shader metadata is free to -honor or ignore any metadata it finds. - -\apiitem{string label} -A short label to be displayed in the UI for this parameter. If not -present, the parameter name itself should be used as the widget label. -\apiend - -\apiitem{string help} -Help text that describes the purpose and use of the shader or parameter. -\apiend - -\apiitem{string page} -Helps to group related widgets by ``page.'' -\apiend - -\apiitem{string widget} -The type of widget that should be used to adjust this parameter. -Suggested widget types: - -\apiitem{"number"} -\vspace{12pt} -Provide a slider and/or numeric input. This is the default widget type -for {\cf float} or {\cf int} parameters. Numeric inputs also may be -influenced by the following metadata: \qkw{min}, \qkw{max}, -\qkw{sensitivity}, \qkw{digits}, \qkw{slider}, \qkw{slidermin}, -\qkw{slidermax}, \qkw{slidercenter}, \qkw{sliderexponent}. -\apiend -\vspace{-16pt} - -\apiitem{"string"} -\vspace{12pt} -Provide a text entry widget. This is the default widget type for -{\cf string} parameters. -\apiend -\vspace{-16pt} - -\apiitem{"boolean"} -\vspace{12pt} -Provide a pop-up menu with ``Yes'' and ``No'' options. Works on strings -or numbers. With strings, ``Yes'' and ``No'' values are used, with -numbers, 0 and 1 are used. -\apiend -\vspace{-16pt} - -\apiitem{"checkBox"} -\vspace{12pt} -A boolean widget displayed as a checkbox. Works on strings or -numbers. With strings, ``Yes'' and ``No'' values are used, with numbers, -0 and 1 are used. -\apiend -\vspace{-12pt} - -\apiitem{"popup"} -\vspace{12pt} -A pop-up menu of literal choices. This widget further requires -parameter metadata \qkw{options} (a string listing the supported -menu items, delimited by the `{\cf |}' character), and optionally \qkw{editable} -(an integer, which if nonzero means the widget should allow the -text field should be directly editable). For example: -\begin{code} - string wrap = "default" - [[ string widget = "popup", - string options = "default|black|clamp|periodic|mirror" ]] -\end{code} -\apiend -\vspace{-16pt} - -\apiitem{"mapper"} -\vspace{12pt} -A pop-up with associative choices (an enumerated type, if the values -are integers). This widget further requires -parameter metadata \qkw{options}, a `{\cf |}'-delimited string with -``key:value'' pairs. For example: -\begin{code} - int pattern = 0 - [[ string widget = "mapper", - string options = "oak:0|elm:1|walnut:2" ]] -\end{code} -\apiend -\vspace{-16pt} - -\apiitem{"filename"} -\vspace{12pt} -A file selection dialog. -\apiend -\vspace{-16pt} - -\apiitem{"null"} -\vspace{12pt} -A hidden widget. -\apiend -\vspace{-16pt} - -\apiend - -\apiitem{float min\\ float max \\[0.5ex] int min \\ int max} -The minimum and/or maximum value that the parameter may take on. -\apiend - -\apiitem{float sensitivity \\ int sensitivity} -The precision or step size for incrementing or decrementing the value -(within the appropriate min/max range). -\apiend - -\apiitem{int digits} -The number of digits to show (-1 for full precision). -\apiend - -\apiitem{int slider} -If nonzero, enables display of a slider sub-widget. This also respects -the following additional metadata that control the slider specifically: -\qkw{slidermin} (minimum value for the slider, \qkw{slidermax} (maximum -value for the slider), \qkw{slidercenter} (origin value for -the slider), \qkw{sliderexponent} (nonlinear slider options). -\apiend - -\apiitem{string URL} -Provides a URL for full documentation of the shader or parameter. -\apiend - -\apiitem{string units} -Gives the assumed units, if any, for the parameter (e.g., \qkw{cm}, -\qkw{sec}, \qkw{degrees}). -The compiler or renderer may issue a warning if it detects that this -assumption is being violated (for example, the compiler can warn -if a \qkw{degrees} variable is passed as the argument to {\cf cos}). -\apiend - -%\apiitem{string UIenabler} -%The name of another parameter that, only if nonzero (or the -%non-empty string) unlocks adjustment of this parameter. For example, -%a parameter called \qkw{Kr} (reflectivity) may be en enabler for -%the \qkw{reflectionblur} parameter; zero reflectivity would gray-out -%the blur controls, which would be ignored if there were no reflection. -%\apiend - - - - -\newpage -\section{Public methods} -\label{sec:publicmethods} -\indexapi{public} -\index{public methods} - -Ordinary (non-public) functions inside a shader may be called only from -within the shader; they do not generate entry points that the renderer -is aware of. - -A \emph{public method} is a function that may be directly called by the -renderer. Only top-level local functions of a shader --- that is, -declared within the braces that define the local scope of the shader, -but not within any other such function --- may be public methods. A -function may be designated a public method by using the {\cf public} -keyword immediately before the function declaration: - -\begin{quote} -\em shader-type shader-name ( params ) \\ -{\rm\cf \{} - -\spc {\rm\cf public} \em ~ return-type ~ function-name ~ {\rm \cf (} -optional-parameters {\rm \cf )} \\ -\spc {\rm \cf \{ } \\ -\spc\spc statements \\ -\spc {\rm \cf \} } \\ - -\spc ...\\ -{\rm\cf \}} -\end{quote} - - -% \begin{annotate} -% A given renderer will publish a list of public methods (names, arguments -% expected, and return value) that has particular meaning for that -% renderer. For example, a renderer may honor a public method -% \begin{code} -% public float maxdisplacement () -% \end{code} -% \noindent that computes and returns the maximum distance -% that a displacement shader will move any surface points. - -% At some later point, this spec will recommend several ``standard'' -% public methods that should be honored by most renderers. -% \end{annotate} - - - -\chapter{Data types} -\label{chap:types} -\index{types|(} - -\langname provides several built-in simple data types for performing -computations inside your shader: -\smallskip - -\noindent\begin{tabular}{|p{0.75in}|p{4.75in}|} -\hline -{\cf int} & Integer data \\[1ex] -%\hline -{\cf float} & Scalar floating-point data (numbers) \\[1ex] -%\hline -{\cf point -vector -normal} & Three-dimensional positions, directions, and surface - orientations \\[7ex] -%\hline -{\cf color} & Spectral reflectivities and light energy values \\[1ex] -%\hline -{\cf matrix} & $4 \times 4$ transformation matrices \\[1ex] -%\hline -{\cf string} & Character strings (such as filenames) \\[1ex] -{\cf void} & Indicates functions that do not return a value \\[1ex] -\hline -\end{tabular} - -In addition, you may create arrays and structures (much like C), and -\langname has a new type of data structure called a \emph{closure}. - -The remainder of this chapter will describe the simple and aggregate -data types available in \langname. - -\section{{\cf int}} -\label{sec:types:int} -\indexapi{int} \index{types!{\cf int}} - -The basic type for discrete numeric values is {\cf int}. The size of -the {\cf int} type is renderer-dependent, but is guaranteed to be at -least 32 bits. - -Integer constants are constructed the same way as in C. The following -are examples of {\cf int} constants: {\cf 1}, {\cf -32}, etc. Integer -constants may be specified as hexadecimal, for example: {\cf 0x01cf}. - -Unlike C, no unsigned, bool, char, short, or long types are supplied. -This is to simplify the process of writing shaders (as well as -implementing shading systems). - -The following operators may be used with \inttype values (in order of -decreasing precedence, with each box holding operators of the same -precedence): - -\smallskip - -\noindent \begin{tabular}{|p{1in}|p{0.5in}|p{3.75in}|} -operation & result & ~ \\ -\hline -\inttype\ {\ce ++} & \inttype & post-increment by 1 \\[0.5ex] -\inttype\ {\ce --} & \inttype & post-decrement by 1 \\[0.5ex] -\hline -{\ce ++} \inttype & \inttype & pre-increment by 1 \\[0.5ex] -{\ce --} \inttype & \inttype & pre-decrement by 1 \\[0.5ex] -{\cf {\bfseries -} int} & \inttype & unary negation \\[0.5ex] -{\ce \textasciitilde} {\cf int} & \inttype & bitwise complement (1 and 0 bits flipped) \\[0.5ex] -{\cf {\bfseries !} int} & \inttype & boolean `not' (1 if operand is zero, otherwise 0) \\[0.5ex] -\hline -{\cf int {\bfseries *} int} & \inttype & multiplication \\[0.5ex] -{\cf int {\bfseries /} int} & \inttype & division \\[0.5ex] -{\cf int {\bfseries \%} int} & \inttype & modulus \\[0.5ex] -\hline -{\cf int {\bfseries +} int} & \inttype & addition \\[0.5ex] -{\cf int {\bfseries -} int} & \inttype & subtraction \\[0.5ex] -\hline -{\cf int {\bfseries <<} int} & \inttype & shift left \\[0.5ex] -{\cf int {\bfseries >>} int} & \inttype & shift right \\[0.5ex] -\hline -{\cf int {\bfseries <} int} & \inttype & 1 if the first value is less -than the second, else 0 \\[0.5ex] -{\cf int {\bfseries <=} int} & \inttype & 1 if the first value is less -or equal to the second, else 0 \\[0.5ex] -{\cf int {\bfseries >} int} & \inttype & 1 if the first value is -greater than the second, else 0 \\[0.5ex] -{\cf int {\bfseries >=} int} & \inttype & 1 if the first value is -greater than or equal to the second, else 0 \\[0.5ex] -\hline -{\cf int {\bfseries ==} int} & \inttype & 1 if the two values are equal, -else 0 \\[0.5ex] -{\cf int {\bfseries !=} int} & \inttype & 1 if the two values are different, -else 0 \\[0.5ex] -\hline -{\cf int {\bfseries \&} int} & \inttype & bitwise and \\[0.5ex] -\hline -{\cf int {\bfseries \textasciicircum} int} & \inttype & bitwise exclusive or \\[0.5ex] -\hline -{\cf int {\bfseries |} int} & \inttype & bitwise or \\[0.5ex] -\hline -{\cf int {\bfseries \&\&} int} & \inttype & boolean and (1 if both operands are -nonzero, otherwise 0) \\[0.5ex] -\hline -{\cf int {\bfseries ||} int} & \inttype & boolean or (1 if either operand is -nonzero, otherwise 0) \\[0.5ex] -\hline -\end{tabular} - -\medskip - -\noindent Note that the {\cf not}, {\cf and}, and {\cf or} keywords are -synonyms for {\cf !}, {\cf \&\&}, and {\cf ||}, respectively. - - - -\section{{\cf float}} -\label{sec:types:float} -\indexapi{float} \index{types!{\cf float}} - -The basic type for scalar floating-point numeric values is \float. The -size of the {\cf float} type is renderer-dependent, but is guaranteed to -be at least IEEE 32-bit float (the standard C \float data type). -Individual renderer implementations may choose to implement \float with -even more precision (such as using the C {\cf double} as the underlying -representation). - -Floating-point constants are constructed the same way as in C. -The following are examples of {\cf float} constants: {\cf 1.0}, -{\cf 2.48}, {\cf -4.3e2}. - -An \inttype may be used in place of a \float when used with any valid -\float operator. In such cases, the \inttype will be promoted to a -\float and the resulting expression will be \float. An \inttype may -also be passed to a function that expects a \float parameters, with the -\inttype automatically promoted to \float. - -The following operators may be used with \float values (in order of -decreasing precedence, with each box holding operators of the same -precedence): - -\medskip - -\noindent \begin{tabular}{|p{1.25in}|p{0.5in}|p{3.5in}|} -operation & result & ~ \\ -\hline -\float\ {\ce ++} & \float & post-increment by 1 \\[0.5ex] -\float\ {\ce --} & \float & post-decrement by 1 \\[0.5ex] -\hline -{\ce ++} \float & \float & pre-increment by 1 \\[0.5ex] -{\ce --} \float & \float & pre-decrement by 1 \\[0.5ex] -{\cf {\bfseries -} float} & \float & unary negation \\[0.5ex] -\hline -{\cf float {\bfseries *} float} & \float & multiplication \\[0.5ex] -{\cf float {\bfseries /} float} & \float & division \\[0.5ex] -\hline -{\cf float {\bfseries +} float} & \float & addition \\[0.5ex] -{\cf float {\bfseries -} float} & \float & subtraction \\[0.5ex] -\hline -{\cf float {\bfseries <} float} & \inttype & 1 if the first value is less -than the second, else 0 \\[0.5ex] -{\cf float {\bfseries <=} float} & \inttype & 1 if the first value is less -or equal to the second, else 0 \\[0.5ex] -{\cf float {\bfseries >} float} & \inttype & 1 if the first value is -greater than the second, else 0 \\[0.5ex] -{\cf float {\bfseries >=} float} & \inttype & 1 if the first value is -greater than or equal to the second, else 0 \\[0.5ex] -\hline -{\cf float {\bfseries ==} float} & \inttype & 1 if the two values are equal, -else 0 \\[0.5ex] -{\cf float {\bfseries !=} float} & \inttype & 1 if the two values are different, -else 0 \\[0.5ex] -\hline -\end{tabular} - - - -\section{{\cf color}} -\label{sec:types:color} -\indexapi{color} \index{types!{\cf color}} - -The \color type is used to represent 3-component (RGB) spectral -reflectivities and light energies. You can assemble a -color out of three floats, either representing an RGB triple or some -other color space known to the renderer, as well as from a single -float (replicated for all three channels). Following are some examples: - -\begin{code} - color (0, 0, 0) // black - color ("rgb", .75, .5, .5) // pinkish - color ("hsv", .2, .5, .63) // specify in "hsv" space - color (0.5) // same as color (0.5, 0.5, 0.5) -\end{code} - -All these expressions above return colors in \rgbspace. Even -the third example returns a color in \rgbspace\ --- specifically, the -RGB value of the color that is equivalent to hue 0.2, saturation 0.5, -and value 0.63. In other words, when assembling a color from components -given relative to a specific color space in this manner, there is an -implied transformation to \rgbspace. Table~\ref{tab:colorspacenames} -lists the built-in color spaces. - -\begin{table}[htbp] -\caption{Names of color spaces.}\label{tab:colorspacenames} -\begin{tabular}{|p{0.7in}|p{4.7in}|} -\hline -{\cf "rgb"} & The coordinate system that all colors start out in, and -in which the renderer expects to find colors that are set by -your shader. \\ -\hline -{\cf "hsv"} & hue, saturation, and value. \\ -\hline -{\cf "hsl"} & hue, saturation, and lightness. \\ -\hline -{\cf "YIQ"} & the color space used for the NTSC television standard. \\ -\hline -{\cf "XYZ"} & CIE \emph{XYZ} coordinates. \\ -\hline -{\cf "xyY"} & CIE \emph{xyY} coordinates. \\ -\hline -\end{tabular} -\end{table} - -Colors may be assigned another color or a \float value (which sets -all three components to the value). For example: - -\begin{code} - color C; - C = color (0, 0.3, 0.3); - C = 0.5; // same as C = color (0.5, 0.5, 0.5) -\end{code} - -Colors can have their individual components examined and set using the -{\cf []} array access notation. For example: - -\begin{code} - color C; - float g = C[1]; // get the green component - C[0] = 0.5; // set the red component -\end{code} - -\noindent Components 0, 1, and 2 are red, green, and blue, respectively. -It is an error to access a color component with an index outside the -$[0...2]$ range. - -Color variables may also have their components referenced using -``named components'' that look like accessing structure fields named -{\cf r}, {\cf g}, and {\cf b}, as synonyms for {\cf [0]}, {\cf [1]}, and -{\cf [2]}, respectively: - -\begin{code} - float green = C.g; // get the green component - C.r = 0.5; // set the red component -\end{code} - -The following operators may be used with \color values (in order of -decreasing precedence, with each box holding operators of the same -precedence): - -\medskip - -\noindent \begin{tabular}{|p{1.5in}|p{0.5in}|p{3.25in}|} -operation & result & ~ \\ -\hline -\color\ {\ce [} \inttype {\ce ]} & \float & component access \\[0.5ex] -\hline -{\ce -} \color & \color & unary negation \\[0.5ex] -\hline -\color\ {\ce *} \color & \color & component-wise multiplication \\[0.5ex] -\color\ {\ce *} \float & \color & scaling \\[0.5ex] -\float\ {\ce *} \color & \color & scaling \\[0.5ex] -\color\ {\ce /} \color & \color & component-wise division \\[0.5ex] -\color\ {\ce /} \float & \color & scaling \\[0.5ex] -\float\ {\ce /} \color & \color & scaling \\[0.5ex] -\hline -\color\ {\ce +} \color & \color & component-wise addition \\[0.5ex] -\color\ {\ce -} \color & \color & component-wise subtraction \\[0.5ex] -\hline -\color\ {\ce ==} \color & \inttype & 1 if the two values are equal, -else 0 \\[0.5ex] -\color\ {\ce !=} \color & \inttype & 1 if the two values are different, -else 0 \\[0.5ex] -\hline -\end{tabular} - -All of the binary operators may combine a scalar value (\float or -\inttype) with a \color, treating the scalar if it were a \color with -three identical components. - - -\section{Point-like types: {\cf point}, {\cf vector}, {\cf normal}} -\label{sec:types:point} -\indexapi{point} \indexapi{vector} \indexapi{normal} -\index{types!{\cf point}} \index{types!{\cf vector}} \index{types!{\cf normal}} - -Points, vectors, and normals are similar data types with identical -structures but subtly different semantics. We will frequently refer to -them collectively as the ``point-like'' data types when making -statements that apply to all three types. - -A \point is a position in 3D space. A \vector has a length and -direction, but does not exist in a particular location. A \normal is a -special type of vector that is \emph{perpendicular} to a surface, and -thus describes the surface's orientation. Such a perpendicular vector -uses different transformation rules than ordinary vectors, as we will -describe below. - -All of these point-like types are internally represented by three -floating-point numbers that uniquely describe a position or -direction relative to the three axes of some coordinate system. - -All points, vectors, and normals are described relative to some -coordinate system. All data provided to a shader (surface information, -graphics state, parameters, and vertex data) are relative to one -particular coordinate system that we call the {\cf "common"} coordinate -system. The {\cf "common"} coordinate system is one that is convenient -for the renderer's shading calculations. -\label{sect:commonspace} - -You can ``assemble'' a point-like type out of three floats using a -constructor: - -\begin{code} - point (0, 2.3, 1) - vector (a, b, c) - normal (0, 0, 1) -\end{code} - -\noindent These expressions are interpreted as a point, vector, and normal -whose three components are the floats given, relative to \commonspace\ . - -As with colors, you may also specify the coordinates relative to some other -coordinate system: - -\begin{code} - Q = point ("object", 0, 0, 0); -\end{code} - -This example assigns to {\cf Q} the point at the origin of -\objectspace. However, this statement does \emph{not} set the -components of {\cf Q} to (0,0,0)! Rather, {\cf Q} will contain the -\commonspace\ coordinates of the point that is at the same location as -the origin of \objectspace. In other words, the point constructor that -specifies a space name implicitly specifies a transformation -to \commonspace. This type of constructor also can be used for vectors -and normals. - -The choice of \commonspace is renderer-dependent, though will usually -be equivalent to either \cameraspace or \worldspace. - -Some computations may be easier in a coordinate system other than -\commonspace. For example, it is much more convenient to apply a -``solid texture'' to a moving object in its \objectspace than in -\commonspace. For these reasons, OSL provides a built-in -{\cf transform} function that -allows you to transform points, vectors, and normals -among different coordinate systems (see Section~\ref{sec:stdlib:geom}). Note, -however, that \langname does not keep track of which point variables are -in which coordinate systems. It is the responsibility of the shader -programmer to keep track of this and ensure that, for example, lighting -computations are performed using quantities in \commonspace. - -Several coordinate systems are predefined by name, listed in -Table~\ref{tab:spacenames}. Additionally, a renderer will probably -allow for additional coordinate systems to be named in the scene -description, and these names may also be referenced inside your shader -to designate transformations. - -\begin{table}[htbp] -\caption{Names of predeclared geometric spaces.\label{tab:spacenames}} -\begin{tabular}{|p{0.7in}|p{4.7in}|} -\hline -{\cf "common"} & The coordinate system that all spatial values start out in and -the one in which all lighting calculations are carried out. Note that -the choice of {\cf "common"} space may be different on each renderer. \\ -\hline -{\cf "object"} & The local coordinate system of the graphics primitive (sphere, -patch, etc.) that we are shading. \\ -\hline -{\cf "shader"} & The local coordinate system active at the time that the shader -was instanced. \\ -\hline -{\cf "world"} & The world coordinate system designated in the scene. \\ -\hline -{\cf "camera"} & The coordinate system with its origin at the center of -the camera lens, $x$-axis pointing right, $y$-axis pointing up, and -$z$-axis pointing into the screen. \\ -\hline -{\cf "screen"} & The coordinate system of the camera's image plane -(after perspective transformation, if any). Coordinate (0,0) of {\cf -"screen"} space is looking along the $z$-axis of \cameraspace. \\ -\hline -{\cf "raster"} & 2D pixel coordinates, with (0,0) as the upper-left -corner of the image and (xres, yres) as the lower-right corner. \\ -\hline -{\cf "NDC"} & 2D Normalized Device Coordinates --- like raster space, but -normalized so that $x$ and $y$ both run from 0 to 1 across the whole -image, with (0,0) being at the upper left of the image, and (1,1) being -at the lower right. \\ -\hline -\end{tabular} -\end{table} - -Point types can have their individual components examined and set using -the {\cf []} array access notation. For example: - -\begin{code} - point P; - float y = P[1]; // get the y component - P[0] = 0.5; // set the x component -\end{code} - -\noindent Components 0, 1, and 2 are $x$, $y$, and $z$, respectively. -It is an error to access a point component with an index outside the -$[0...2]$ range. - -Point-like variables may also have their components referenced using -``named components'' that look like accessing structure fields named -{\cf x}, {\cf y}, and {\cf z}, as synonyms for {\cf [0]}, {\cf [1]}, and -{\cf [2]}, respectively: - -\begin{code} - float yval = P.y; // get the [1] or y component - P.x = 0.5; // set the [0] or x component -\end{code} - -The following operators may be used with point-like values (in order of -decreasing precedence, with each box holding operators of the same -precedence): - -\medskip - -\noindent \begin{tabular}{|p{1.5in}|p{0.5in}|p{3.25in}|} -operation & result & ~ \\ -\hline -\emph{ptype}\ {\ce [} \inttype {\ce ]} & \float & component access \\[0.5ex] -\hline -{\ce -} \emph{ptype} & \vector & component-wise unary negation \\[0.5ex] -\hline -\emph{ptype}\ {\ce *} \emph{ptype} & \emph{ptype} & component-wise multiplication \\[0.5ex] -\float\ {\ce *} \emph{ptype} & \emph{ptype} & scaling of all components \\[0.5ex] -\emph{ptype}\ {\ce *} \float & \emph{ptype} & scaling of all components \\[0.5ex] -\emph{ptype}\ {\ce /} \emph{ptype} & \emph{ptype} & component-wise division \\[0.5ex] -\emph{ptype}\ {\ce /} \float & \emph{ptype} & division of all components \\[0.5ex] -\float\ {\ce /} \emph{ptype} & \emph{ptype} & division by all components \\[0.5ex] -\hline -\emph{ptype}\ {\ce +} \emph{ptype} & \emph{ptype} & component-wise addition \\[0.5ex] -\emph{ptype}\ {\ce -} \emph{ptype} & \vector & component-wise subtraction \\[0.5ex] -\hline -\emph{ptype}\ {\ce ==} \emph{ptype} & \inttype & 1 if the two values are equal, -else 0 \\[0.5ex] -\emph{ptype}\ {\ce !=} \emph{ptype} & \inttype & 1 if the two values are different, -else 0 \\[0.5ex] -\hline -\end{tabular} - -\smallskip - -\noindent The generic \emph{ptype} is listed in places where any -of \point, \vector, or \normal may be used. - -All of the binary operators may combine a scalar value (\float or -\inttype) with a point-like type, treating the scalar if it were -point-like with three identical components. - - -\section{{\cf matrix}} -\label{sec:types:matrix} -\indexapi{matrix} \index{types!{\cf matrix}} - -\langname has a \matrix type that represents the transformation matrix -required to transform points and vectors between one coordinate system -and another. Matrices are represented internally by 16 floats (a $4 -\times 4$ homogeneous transformation matrix). - -A \matrix can be constructed from a single float or 16 floats. For -example: - -\begin{code} - matrix zero = 0; // makes a matrix with all 0 components - matrix ident = 1; // makes the identity matrix - - // Construct a matrix from 16 floats - matrix m = matrix (m00, m01, m02, m03, m10, m11, m12, m13, - m20, m21, m22, m23, m30, m31, m32, m33); -\end{code} - -\noindent Assigning a single floating-point number $x$ to a matrix will result -in a matrix with diagonal components all being $x$ and other -components being zero (i.e., $x$ times the identity matrix). -Constructing a matrix with 16 floats will create the matrix whose -components are those floats, in row-major order. - -Similar to point-like types, a {\cf matrix} may be constructed in -reference to a named space: - -\begin{code} - // Construct matrices relative to something other than "common" - matrix q = matrix ("shader", 1); - matrix m = matrix ("world", m00, m01, m02, m03, m10, m11, m12, m13, - m20, m21, m22, m23, m30, m31, m32, m33); -\end{code} - -\noindent The first form creates the matrix that transforms points from -\shaderspace to \commonspace. Transforming points by this matrix -is identical to calling {\cf transform("shader", "common", ...)}. -The second form prepends the current-to-world transformation matrix -onto the $4 \times 4$ matrix with components $m_{0,0} ... m_{3,3}$. -Note that although we have used {\cf "shader"} and {\cf "world"} -space in our examples, any named space is acceptable. - -A matrix may also be constructed from the names of two coordinate -systems, yielding the matrix that transforms coordinates from the -first named space to the second named space: - -\begin{code} - matrix m = matrix ("object", "world"); -\end{code} - -\noindent The example returns the \emph{object-to-world} transformation -matrix. - -Matrix variables can be tested for equality and inequality with the -{\cf ==} and {\cf !=} boolean operators. Also, the {\cf *} operator -between matrices denotes matrix multiplication, while {\cf m1 / m2} -denotes multiplying {\cf m1} by the inverse of matrix {\cf m2}. Thus, -a matrix can be inverted by writing {\cf 1/m}. In addition, some -functions will accept matrix variables as arguments, as described in -Section~\ref{chap:stdlibrary}. - -Individual components of a matrix variable may be set or accessed -using array notation, for example, - -\begin{code} - matrix M; - float x = M[row][col]; - M[row][col] = 1; -\end{code} - -Valid component indices are integers on $[0...3]$. It is an error to -access a matrix component with either a row or column outside this -range. - -The following operators may be used with matrices (in order of -decreasing precedence, with each box holding operators of the same -precedence): - -\medskip -\noindent \begin{tabular}{|p{1.5in}|p{0.5in}|p{3.25in}|} -operation & result & ~ \\ -\hline -\matrix\ {\ce [} \inttype {\ce ][} \inttype {\ce ]} & \float & component -access (row, column) \\[0.5ex] -\hline -{\ce -} \matrix & \matrix & unary negation \\[0.5ex] -\hline -\matrix\ {\ce *} \matrix & \matrix & matrix multiplication \\[0.5ex] -\matrix\ {\ce *} \float & \matrix & component-wise scaling \\[0.5ex] -\float\ {\ce *} \matrix & \matrix & component-wise scaling \\[0.5ex] -\matrix\ {\ce /} \matrix & \matrix & multiply the first matrix by the -\emph{inverse} of the second \\[0.5ex] -\matrix\ {\ce /} \float & \matrix & component-wise division \\[0.5ex] -\float\ {\ce /} \matrix & \matrix & multiply the \float by the -\emph{inverse} of the matrix \\[0.5ex] -\hline -%\matrix\ {\ce +} \matrix & \matrix & component-wise addition \\[0.5ex] -%\matrix\ {\ce -} \matrix & \matrix & component-wise subtraction \\[0.5ex] -%\hline -\matrix\ {\ce ==} \matrix & \inttype & 1 if the two values are equal, -else 0 \\[0.5ex] -\matrix\ {\ce !=} \matrix & \inttype & 1 if the two values are different, -else 0 \\[0.5ex] -\hline -\end{tabular} - - -\section{{\cf string}} -\label{sec:types:string} -\indexapi{string} \index{types!{\cf string}} - -The {\cf string} type may hold character strings. The main application -of strings is to provide the names of files where textures may be -found. Strings can be compared using {\cf ==} and {\cf !=}. - -String constants are denoted by surrounding the characters with double -quotes, as in \qkw{I am a string literal}. As in C programs, string -literals may contain escape sequences such as \verb|\n| (newline), -\verb|\r| (carriage return), \verb|\t| (tab), \verb|\"| (double quote), -\verb|\\| (backslash). - -Two quote-quoted string literals that are separated only by whitespace -(spaces, tabs, or newlines) will be automatically concatenated into a -single string literal. In other words, -\begin{code} - "foo" "bar" -\end{code} -\noindent is exactly equivalent to \qkw{foobar}. - -\section{\void} -\label{sec:types:void} -\indexapi{void} \index{types!{\cf void}} - -The \void type is used to designate a function that does not return -a value. No variable may have type \void. - -\section{Arrays} -\label{sec:types:arrays} -\index{arrays} \index{types!arrays} - -Arrays of any of the basic types are supported, provided that they -are 1D and statically sized, using the usual syntax for C-like languages: - -\begin{code} - float d[10]; // Declare an uninitialized array - float c[3] = { 0.1, 0.2, 3.14 }; // Initialize the array - - float f = c[1]; // Access one element -\end{code} - -The built-in function {\cf arraylength()} returns the number of elements -in an array. For example: - -\begin{code} - float c[3]; - int clen = arraylength(c); // should return 3 -\end{code} - -There are two circumstances when arrays do not need to have a declared -length --- an array parameter to a function, and a shader parameter that -is an array. This is indicated by empty array brackets, as shown in the -following example: - -\begin{code} - float sum (float x[]) - { - float s = 0; - for (int i = 0; i < arraylength(x); ++i) - s += x[i]; - return s; - } -\end{code} - -It is allowed in OSL to copy an entire array at once using the {\cf =} -operator, provided that the arrays contain elements of the same type -and that the destination array is at least as long as the source -array. For example: - -\begin{code} - float array[4], anotherarray[4]; - ... - anotherarray = array; -\end{code} - - -\section{Structures} -\label{sec:types:struct} -\indexapi{struct} \index{types!structures} \index{structures|see{{\cf struct}}} - -Structures are used to group several fields of potentially different -types into a single object that can be referred to by name. You may -then use the structure type name to declare structure variables as you -would for any of the built-in types. Structure elements are accessed -using the `dot' operator. The syntax for declaring and using structures -is similar to C or C++: - -\begin{code} - struct RGBA { // Define a structure type - color rgb; - float alpha; - }; - - RGBA col; // Declare a structure - r.rgb = color (1, 0, 0); // Assign to one field - color c = r.rgb; // Read from a structure field - - RGBA b = { color(.1,.2,.3), 1 }; // Member-by-member initialization -\end{code} - -You can use ``constructor expressions'' for a your struct types much like -you can construct built-in types like \color or \point: - -\vspace{10pt} -\hspace{0.25in} \emph{struct\_name ( first\_member\_value, ... )} -\vspace{10pt} - -\noindent For example, - -\begin{code} - RGBA c = RGBA(col,alpha); // Constructor syntax - - RGBA add (RGBA a, RGBA b) - { - return RGBA (a.rgb+b.rgb, a.a+b.a); // return expression - } - - // pass constructor expression as a parameter: - RGBA d = add (c, RGBA(color(.3,.4,.5), 0)); -\end{code} - -You may also use the \emph{compound initializer list} syntax to construct a -type when it can be deduced from context which compound type is required. -For example, this is equivalent to the preceding example: - -\begin{code} - RGBA c = {col,alpha}; // deduce by what is being assigned to - - RGBA add (RGBA a, RGBA b) - { - return { a.rgb+b.rgb, a.a+b.a }; // deduce by func return type - } - - RGBA d = add (c, {{.3,.4,.5}, 0}); // deduce by expected arg type -\end{code} - -It is permitted to have a structure field that is an array, as well as to -have an array of structures. But it is not currently permitted to ``nest'' -arrays (that is, to have an array of structs which contain members that are -arrays). - -\begin{code} - struct A { - color a; - float b[4]; // Ok: struct may contain an array - }; - - RGBA vals[4]; // Ok: Array of structures - vals[0].a = 0; - - A d[5]; // NO: Array of structures that contain arrays -\end{code} - - -\index{types|)} % end of chapter - - -\section{Closures} -\label{sec:types:closures} - -A \closure is an expression or function call that will be stored, along -with necessary contextual information, to be evaluated at a later time. - -In general, the type ``\closure \emph{gentype}'' behaves exactly like a -\emph{gentype}, except that its numeric values may not be examined or -used for the duration of the shader's execution. For example, a -\colorclosure behaves mostly like a color --- you can multiply it by a -scalar, assign it to a \colorclosure variable, etc. --- but you may not -assign it to an ordinary \color or examine its individual component's -numeric values. - -It is legal to assign {\cf 0} to a closure, which is understood to mean -setting it to a \emph{null closure} (even though in all other -circumstances, assigning a {\cf float} to a \closure would not be -allowed). - -At present, the only type of \closure supported by \langname is the -\colorclosure, and the only allowed operations are those that let you -form a linear combination of \colorclosure's. Additional closure types -and operations are reserved for future use. - -Allowable operations on \colorclosure include: - -\medskip -\noindent \begin{tabular}{|p{2.25in}|p{1.25in}|p{1.75in}|} -operation & result & ~ \\ -\hline -{\ce -} \colorclosure & \colorclosure & unary negation \\[0.5ex] -\hline -\color\ {\ce *} \colorclosure & \colorclosure & component-wise scaling \\[0.5ex] -\colorclosure\ {\ce *} \color & \colorclosure & component-wise scaling \\[0.5ex] -\float\ {\ce *} \colorclosure & \colorclosure & scaling \\[0.5ex] -\colorclosure\ {\ce *} \float & \colorclosure & scaling \\[0.5ex] -\hline -\colorclosure\ {\ce +} \colorclosure & \colorclosure & component-wise addition \\[0.5ex] -% \colorclosure\ {\ce -} \colorclosure & \colorclosure & component-wise subtraction \\[0.5ex] -\hline -\end{tabular} - -\medskip - - - - -\chapter{Language Syntax} -\label{chap:syntax} - -The body of a shader is a sequence of individual \emph{statements}. -This chapter describes the types of statements and control-flow patterns -in \langname. - -Statements in \langname include the following types of constructs: - -\begin{itemize} -\item Scoped statements. -\item Variable declarations. -\item Expressions. -\item Assignments. -\item Control flow: {\cf if, else, while, do, for, break, continue} -\item Function declarations. -\end{itemize} - -\subsection*{Scoping} - -Any place where it is legal to have a statement, it is legal to have -multiple statements enclosed by curly braces {\cf \{ \}}. This is -called a \emph{scope}. Any variables or functions declared -within a scope are only visible within that scope, and only may be used -after their declaration. Variables or functions that are referenced -will always resolve to the matching name in the innermost scope relative -to its use. For example - -\begin{code} - float a = 1; // Call this the "outer" 'a' - float b = 2; - { - float a = 3; // Call this the "inner" 'a' - float c = 1; - b = a; // b gets 3, because a is resolved to the inner scope - } - b += c; // ERROR -- c was only in the inner scope - -\end{code} - - - -\section{Variable declarations and assignments} -\label{sec:vardeclsassignments} - -\subsection{Variable declarations} -\label{sec:vardecls} -\index{variable declarations} - -The syntax for declaring a variable in \langname is: - -\vspace{12pt} -\spc \emph{type} \emph{name} - -\spc \emph{type} \emph{name} = \emph{value} -\vspace{12pt} - -\noindent where - -\begin{itemize} -\item \emph{type} is one of the basic data types, described earlier. -\item \emph{name} is the name of the variable you are declaring. -\item If you wish to initialize your variable an initial value, you may -immediately assign it a \emph{value}, which may be any valid expression. -\end{itemize} - -You may declare several variables of the same type in a single -declaration by separating multiple variable names by commas: - -\vspace{12pt} -\spc \emph{type} \emph{name1} {\cf ,} ~ \emph{name2} ... - -\spc \emph{type} \emph{name1} [ = \emph{value1}] {\cf ,} ~ \emph{name2} [ = - \emph{value2} ] ... -\vspace{12pt} - - -\noindent Some examples of variable declarations are - -\begin{code} - float a; // Declare; current value is undefined - float b = 1; // Declare and assign a constant initializer - float c = a*b; // Computed initializer - float d, e = 2, f; // Declare several variables of the same type -\end{code} - -\subsection{Arrays} -\indexapi{arrays} \index{types!arrays} - -Arrays are also supported, declared as follows: - -\vspace{12pt} -\spc \emph{type} \emph{variablename} - {\cf [} \emph{arraylen} {\cf ]} - -\spc \emph{type} \emph{variablename} - {\cf [} \emph{arraylen} {\cf ]} = {\cf \{ } - \emph{init0}{\cf ,} \emph{init1} ... {\cf \}} -\vspace{12pt} - -\noindent Array variables in \langname must have a constant length -(though function parameters and shader parameters may have undetermined -length). Some examples of array variable declarations are: - -\begin{code} - float d[10]; // Declare an uninitialized array - float c[3] = { 0.1, 0.2, 3.14 }; // Initialize the array -\end{code} - -\subsection{Structures} -\indexapi{struct} - -Structures are used to group several fields of potentially different -types into a single object that can be referred to by name. The syntax -for declaring a structure type is: - -\vspace{12pt} -\spc {\cf struct} \emph{structname} {\cf \{} - -\spc\spc \emph{type1} \emph{fieldname1} {\cf ;} - -\spc\spc ... - -\spc\spc \emph{typeN} \emph{fieldnameN} {\cf ;} - -\spc {\cf \} ;} -\vspace{12pt} - -You may then use the structure type name to declare structure variables -as you would for any of the built-in types: - -\vspace{12pt} -\spc \emph{structname} \emph{variablename} {\cf ;} - -\spc \emph{structname} \emph{variablename} {\cf = \{ } -\emph{initializer1} {\cf ,} ... \emph{initializerN} {\cf \} ;} -\vspace{12pt} - -If initializers are supplied, each field of the structure will be -initialized with the initializer in the corresponding position, which -is expected to be of the appropriate type. - -Structure elements are accessed in the same way as other C-like -languages, using the `dot' operator: - -\vspace{12pt} -\spc \emph{variablename}{\cf .} \emph{fieldname} -\vspace{12pt} - -Examples of declaration and use of structures: - -\begin{code} - struct ray { - point pos; - vector dir; - }; - - ray r; // Declare a structure - ray s = { point(0,0,0), vector(0,0,1) }; // declare and initialize - r.pos = point (1, 0, 0); // Assign to one field -\end{code} - -It is permitted to have a structure field that is an array, as well as -to have an array of structures. But it is not permitted for one -structure to have a field that is another structure. - -Please refer to Section~\ref{sec:types:struct} for more information -on using {\cf struct}. - - -\section{Expressions} -\label{sec:expressions} -\index{expressions} - -The expressions available in \langname include the following: - -\begin{itemize} -\item Constants: integer (e.g., {\cf 1}, {\cf 42}), floating-point - (e.g. {\cf 1.0}, {\cf 3}, {\cf -2.35e4}), or string literals (e.g., {\cf - "hello"}) - -\item point, vector, normal, or matrix constructors, for example: - -\begin{code} - color (1, 0.75, 0.5) - point ("object", 1, 2, 3) -\end{code} - -If all the arguments to a constructor are themselves constants, the -constructed point is treated like a constant and has no runtime cost. -That is, {\cf color(1,2,3)} is treated as a single constant entity, not -assembled bit by bit at runtime. - -\item Variable or parameter references - -\item An individual element of an array (using {\cf [ ] }) - -\item An individual component of a \color, -\point, \vector, \normal (using {\cf [ ]}), -or of a \matrix (using {\cf [][]}) - -\item prefix and postfix increment and decrement operators: - -\begin{tabbing} -\hspace{.25in} \= \hspace{2in} \= (negation) \kill \\ -\> \emph{varref} {\cf ++} \hspace{1in} \= (post-increment) \\ -\> \emph{varref} {\cf --} \hspace{1in} \= (post-decrement) \\ -\> {\cf ++} \emph{varref} \hspace{1in} \= (pre-increment) \\ -\> {\cf --} \emph{varref} \hspace{1in} \= (pre-decrement) \\ -\end{tabbing} - -The post-increment and post-decrement (e.g., {\cf a++}) returns the old -value, then increments or decrements the variable; the pre-increment and -pre-decrement ({\cf ++a}) will first increment or decrement the -variable, then return the new value. - -\item Unary and binary arithmetic operators on other expressions: - -\begin{tabbing} -\hspace{0.25in} {\cf -} \emph{expr} \hspace{1in} \= (negation) \\ -\hspace{0.25in} {\cf \textasciitilde} \emph{expr} \> (bitwise complement) \\ -\hspace{0.25in} \emph{expr} {\cf *} \emph{expr} \> (multiplication) \\ -\hspace{0.25in} \emph{expr} {\cf /} \emph{expr} \> (division) \\ -\hspace{0.25in} \emph{expr} {\cf +} \emph{expr} \> (addition) \\ -\hspace{0.25in} \emph{expr} {\cf -} \emph{expr} \> (subtraction) \\ -\hspace{0.25in} \emph{expr} {\cf \%} \emph{expr} \> (integer modulus) \\ -\hspace{0.25in} \emph{expr} {\cf <<} \emph{expr} \> (integer shift left) \\ -\hspace{0.25in} \emph{expr} {\cf >>} \emph{expr} \> (integer shift right) \\ -\hspace{0.25in} \emph{expr} {\cf \&} \emph{expr} \> (bitwise and) \\ -\hspace{0.25in} \emph{expr} {\cf |} \emph{expr} \> (bitwise or) \\ -\hspace{0.25in} \emph{expr} {\cf \textasciicircum} \emph{expr} \> (bitwise exclusive or) \\ -\end{tabbing} - -The operators {\cf +}, {\cf -}, {\cf *}, {\cf /}, and the unary {\cf -} -(negation) may be used on most of the numeric types. For multicomponent -types (\color, \point, \vector, \normal, \matrix), these operators -combine their arguments on a component-by-component basis. -The only operators that may be applied to the \matrix type are -{\cf *} and {\cf /}, which respectively denote matrix-matrix -multiplication and matrix multiplication by the inverse of another -matrix. - -The integer and bit-wise operators {\cf \%}, {\cf <<}, {\cf >>}, -{\cf \&}, {\cf |}, {\cf \textasciicircum}, and {\cf \textasciitilde} may only be -used with expressions of type \inttype. - -For details on which operators are allowed, please consult the operator -tables for each individual type in Chapter~\ref{chap:types}. - -\item Relational operators (all lower precedence than the arithmetic -operators): - -\begin{tabbing} -\hspace{0.25in} \emph{expr} {\cf ==} \emph{expr} \hspace{1in} \= (equal to) \\ -\hspace{0.25in} \emph{expr} {\cf !=} \emph{expr} \> (not equal to) \\ -\hspace{0.25in} \emph{expr} {\cf <} \emph{expr} \> (less then) \\ -\hspace{0.25in} \emph{expr} {\cf <=} \emph{expr} \> (less than or equal to) \\ -\hspace{0.25in} \emph{expr} {\cf >} \emph{expr} \> (greater than) \\ -\hspace{0.25in} \emph{expr} {\cf >=} \emph{expr} \> (greater than or equal) \\ -\end{tabbing} - -The {\cf ==} and {\cf !=} operators may be performed between any two -values of equal type, and are performed component-by-component for -multi-component types. The {\cf <}, {\cf <=}, {\cf >}, {\cf >=} may not -be used to compare multi-component types. - -An \inttype expression may be compared to a \float (and is treated as if -they are both \float). A \float expression may be compared to a -multi-component type (and is treated as a multi-component type as if -constructed from a single float). - -Relation comparisons produce Boolean (true/false) values. These -are implemented as \inttype values, 0 if false and 1 if true. - -\item Logical unary and binary operators: - -\hspace{0.5in} {\cf !} \emph{expr} - -\hspace{0.5in} \emph{expr1} {\cf \&\&} \emph{expr2} - -\hspace{0.5in} \emph{expr1} {\cf ||} \emph{expr2} - -\noindent Note that the {\cf not}, {\cf and}, and {\cf or} keywords are -synonyms for {\cf !}, {\cf \&\&}, and {\cf ||}, respectively. - -For the logical operators, numeric expressions (\inttype or \float) are -considered \emph{true} if nonzero, \emph{false} if zero. -Multi-component types (such as \color) are considered \emph{true} any -component is nonzero, \emph{false} all components are zero. Strings are -considered \emph{true} if they are nonempty, \emph{false} if they are -the empty string (\qkw{}). - -\item another expression enclosed in parentheses: {\cf ( )}. - Parentheses may be used to guarantee associativity of operations. - -\item Type casts, specified either by having the type name in -parentheses in front of the value to cast (C-style typecasts) -or the type name called as a constructor (C++-style type constructors): -\begin{code} - (vector) P /* cast a point to a vector */ - (point) f /* cast a float to a point */ - (color) P /* cast a point to a color! */ - - vector (P) /* Means the same thing */ - point (f) - color (P) -\end{code} - -The three-component types (\color, \point, \vector, \normal) -may be cast to other three-component types. A \float -may be cast to any of the three-component types (by placing the -float in all three components) or to a {\cf matrix} (which makes a -matrix with all diagonal components being the {\cf float}). -Obviously, there are some type casts that are not allowed because -they make no sense, like casting a {\cf point} to a {\cf float}, or -casting a {\cf string} to a numerical type. - -\item function calls - -\item assignment expressions: -same thing as {\cf var = var OP expr} : - -\begin{tabbing} -\hspace{0.25in} \emph{var} {\cf =} \emph{expr} \hspace{1in} \= (assign) \\ -\hspace{0.25in} \emph{var} {\cf +=} \emph{expr} \> (add) \\ -\hspace{0.25in} \emph{var} {\cf -=} \emph{expr} \> (subtract) \\ -\hspace{0.25in} \emph{var} {\cf *=} \emph{expr} \> (multiply) \\ -\hspace{0.25in} \emph{var} {\cf /=} \emph{expr} \> (divide) \\ -\hspace{0.25in} \emph{int-var} {\cf \&=} \emph{int-expr} \> (bitwise and) \\ -\hspace{0.25in} \emph{int-var} {\cf |=} \emph{int-expr} \> (bitwise or) \\ -\hspace{0.25in} \emph{int-var} \verb|^=| \emph{int-expr} \> (bitwise -exclusive or) \\ -\hspace{0.25in} \emph{int-var} {\cf <<=} \emph{int-expr} \> (integer -shift left) \\ -\hspace{0.25in} \emph{int-var} {\cf >>=} \emph{int-expr} \> (integer -shift right) \\ -\end{tabbing} - -Note that the integer and bit-wise operators are only allowed with -\inttype variables and expressions. In general, {\cf var OP= expr} is -allowed only if {\cf var = var OP expr} is allowed, and means exactly -the same thing. Please consult the operator tables for each individual -type in Chapter~\ref{chap:types}. - -\item ternary operator, just like C: - -\hspace{0.5in} \emph{condition} {\cf ?} \emph{expr1} {\cf :} \emph{expr2} - -This expression takes on the value of \emph{expr1} if \emph{condition} -is true (nonzero), or \emph{expr2} if \emph{condition} is false (zero). - -\end{itemize} - -Please refer to Chapter~\ref{chap:types}, where the section describing -each data type describes the full complement of operators that may be -used with the type. Operator precedence in \langname is identical to -that of C. - - -\section{Control flow: {\cf if, while, do, for}} -\label{sec:controlflow} - -Conditionals in \langname just like in C or C++: -\indexapi{if} - -\begin{tabbing} -\hspace{0.5in} \= \hspace{0.3in} \= \kill -\> {\cf if (} \emph{condition} {\cf )} \\ -\> \> \emph{truestatement} -\end{tabbing} - -\noindent and - -\begin{tabbing} -\hspace{0.5in} \= \hspace{0.3in} \= \kill -\> {\cf if (} \emph{condition} {\cf )} \\ -\> \> \emph{truestatement} \\ -\> {\cf else} \\ -\> \> \emph{falsestatement} -\end{tabbing} - -\noindent The statements can also be entire blocks, surrounded by curly -braces. For example, - -\begin{code} - if (s > 0.5) { - x = s; - y = 1; - } else { - x = s+t; - } -\end{code} - -\noindent The \emph{condition} may be any valid expression, including: - -\begin{itemize} -\item The result of any comparison operator (such as {\cf <}, {\cf ==}, - etc.). -\item Any numeric expression (\inttype, \color, \point, \vector, - \normal, \matrix), which is considered ``true'' if nonzero and - ``false'' if zero. -\item Any string expression, which is considered ``true'' if it is a - nonempty string, ``false'' if it is the empty string (\qkw{}). -\item A \closure, which is considered ``true'' if it's empty (not - assigned, or initialized with {\cf =0}), and ``false'' if anything - else has been assigned to it. -\item A logical combination of expressions using the operators {\cf !} - (not), {\cf \&\&} (logical ``and''), or {\cf ||} (logical ``or''). - Note that {\cf \&\&} and {\cf ||} \emph{short circuit} as in C, - i.e. {\cf A \&\& B} will only evaluate B if A is true, and {\cf A || - B} will only evaluate B if A is false. -\end{itemize} - -Repeated execution of statements for as long as a condition is true is -possible with a {\cf while} statement: -\indexapi{while} - -\begin{tabbing} -\hspace{0.5in} \= \hspace{0.3in} \= \kill -\> {\cf while (} \emph{condition} {\cf )} \\ -\> \> \emph{statement} -\end{tabbing} - -Or the test may happen after the body of the loop, with a {\cf do/while} -loop: -\indexapi{do/while} - -\begin{tabbing} -\hspace{0.5in} \= \hspace{0.3in} \= \kill -\> {\cf do } \\ -\> \> \emph{statement} \\ -\> {\cf while (} \emph{condition} {\cf );} \\ -\end{tabbing} - -\noindent Also, {\cf for} loops are also allowed: - -\begin{tabbing} -\hspace{0.5in} \= \hspace{0.3in} \= \kill -\> {\cf for (} \emph{initialization-statement} {\cf ;} \emph{condition} {\cf ;} \emph{iteration-statement} {\cf )} \\ -\> \> \emph{body} -\end{tabbing} - -\indexapi{for} -As in C++, a {\cf for} loop's initialization may contain variable -declarations and initializations, which are scoped locally to the {\cf for} -loop itself. For example, - -\begin{code} - for (int i = 0; i < 3; ++i) { - ... - } -\end{code} - -As with {\cf if} statements, loop conditions may be relations or -numerical quantities (which are considered ``true'' if nonzero, -``false'' if zero), or strings (considered ``true'' if nonempty, -``false'' if the empty string \qkw{}). - -Inside the body of a loop, the {\cf break} statement terminates the loop -altogether, and the {\cf continue} statement skip to the end of the body -and proceeds to the next iteration of the loop. - -\section{Functions} -\label{sec:functions} - -\subsection{Function definitions} -\label{sec:syntax:functiondefinitions} -\index{functions!definitions} - -You may define functions much like in C or C++. - -\begin{quote} -\em -return-type ~ function-name ~ {\rm\cf (} optional-parameters {\rm\cf )} \\ -\rm -{\cf \{ } \\ -\em -\spc statements - -{\cf \} } -\end{quote} - -Parameters to functions are similar to shader parameters, except that -they do not permit initializers. A function call must pass values for -all formal parameters. Function parameters in \langname are all -\emph{passed by reference}, and are read-only within the body of the -function unless they are also designated as {\cf output} (in the same -manner as output shader parameters). - -Like for shaders, statements inside functions may be actual executions -(assignments, function call, etc.), local variable declarations (visible -only from within the body of the function), or local function -declarations (callable only from within the body of the function). - -The return type may be any simple data type, a {\cf struct}, or a {\cf - closure}. Functions may not return arrays. The return type may be -{\cf void}, indicating that the function does not return a value (and -should not contain a {\cf return} statement). A {\cf return} statement -inside the body of the function will halt execution of the function at -that point, and designates the value that will be returned (if not a -{\cf void} function). - -Functions may be \emph{overloaded}. That is, multiple functions may be -defined to have the same name, as long as they have differently-typed -parameters, so that when the function is called the list of arguments can -select which version of the function is desired. When there are multiple -potential matches, function versions whose argument types match exactly are -favored, followed by those that match with type coercion (for example, -passing an {\cf int} when the function expects a {\cf float}, or passing a -{\cf float} when the function expects a \color), and finally by trying to -match the return value to the type of variable the result is assigned to. - -\subsection{Function calls} -\label{sec:syntax:functioncalls} -\index{function calls} - -Function calls are very similar to C and related programming languages: - -\begin{tabbing} -\hspace{0.5in} \= \hspace{0.3in} \= \kill -\> \emph{functionname} {\cf (} \emph{arg1} {\cf ,} ... {\cf ,} \emph{argn} {\cf )} \\ -\end{tabbing} - -If the function returns a value (not \void), you may use its value as -an expression. It is fine to completely ignore the value of even -a non-\void function. - -In \langname, all arguments are passed by reference. This generally -will not be noticeably different from C-style ``pass by value'' -semantics, except if you pass the same variable as two separate -arguments to a function that modifies an argument's value. - -Certain functions allow optional arguments to be passed. -Optional arguments are key-value pairs with the key passed as an -argument and the associated value passed as the subsequent argument: - -\begin{tabbing} -\hspace{0.5in} \= \hspace{0.3in} \= \kill -\> \emph{functionname} {\cf (} \emph{arg1} {\cf ,} ... {\cf ,} \emph{argn} {\cf ,} \emph{"optionalkey"} {\cf ,} \emph{optionalvalue} {\cf ,} ... {\cf )} \\ -\end{tabbing} - -\subsection{Operator overloading} -\label{sec:syntax:operatoroverloading} -\index{operator overloading} - -OSL permits \emph{operator overloading}, which is the practice of providing -a function that will be called when you use an operator like {\cf +} or -{\cf *}. This is especially handy when you use {\cf struct} to define -mathematical types and wish for the usual math operators to work with them. -Here is a typical example, which also shows the special naming convention -that allows operator overloading: - -\begin{code} - struct vector4 { - float x, y, z, w; - }; - - vector4 __operator__add__ (vector4 a, vector4 b) { - return vector4 (a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w); - } - - shader test () - { - vector4 a = vector4 (.2, .3, .4, .5); - vector4 b = vector4 (1, 2, 3, 4); - - vector4 c = a + b; // Will call __operator__add__(vector4,vector4) - printf ("a+b = %g %g %g %g\n", c.x, c.y, c.z, c.w); - } -\end{code} - -\noindent The full list of these special function names is as follows (in -order of decreasing operator precedence): - -\smallskip - -\begin{tabular}{ p{0.5in} p{2in} p{1.75in}} -%op & overload function name & ~ \\ -%\hline -{\cf \bfseries -} & {\cf __operator__neg__} & unary negation \\ -{\cf \bfseries \textasciitilde} & {\cf __operator__compl__} & unary bitwise complement \\ -{\cf \bfseries !} & {\cf __operator__not__} & unary boolean `not' \\[1.5ex] -{\cf \bfseries *} & {\cf __operator__mul__} & \\ -{\cf \bfseries /} & {\cf __operator__div__} & \\ -{\cf \bfseries \%} & {\cf __operator__mod__} & \\ -{\cf \bfseries +} & {\cf __operator__add__} & \\ -{\cf \bfseries -} & {\cf __operator__sub__} & \\[1.5ex] -{\cf \bfseries <<} & {\cf __operator__shl__} & \\ -{\cf \bfseries >>} & {\cf __operator__shr__} & \\[1.5ex] -{\cf \bfseries <} & {\cf __operator__lt__} & \\ -{\cf \bfseries <=} & {\cf __operator__le__} & \\ -{\cf \bfseries >} & {\cf __operator__gt__} & \\ -{\cf \bfseries >=} & {\cf __operator__ge__} & \\ -{\cf \bfseries ==} & {\cf __operator__eq__} & \\ -{\cf \bfseries !=} & {\cf __operator__neq__} & \\[1.5ex] -{\cf \bfseries \&} & {\cf __operator__bitand__} & \\ -{\cf \bfseries \textasciicircum} & {\cf __operator__xor__} & \\ -{\cf \bfseries |} & {\cf __operator__bitor__} & \\ -%{\cf \bfseries \&\&} & {\cf __operator__and__} & boolean and \\ -%{\cf \bfseries ||} & {\cf __operator__or__} & boolean or \\ -%\hline -\end{tabular} - - -\section{Global variables} -\label{sec:globalvars} -\index{global variables|(} - -\emph{Global variables} (sometimes called \emph{graphics state -variables}) contain the basic information that the renderer knows -about the point being shaded, such as position, surface orientation, and -default surface color. You need not declare these variables; they are -simply available by default in your shader. Global variables available -in shaders are listed in Table~\ref{tab:globalvars}. - -\begin{table}[H] -\begin{tabular}{|p{1.5in}p{4in}|} -\hline -{\bf Variable} & {\bf Description} \\ -\hline -\point\ {\ce P} & Position of the point you are shading. In a -displacement shader, changing this variable displaces the surface. \\ -\hline -\vector\ {\ce I} & The \emph{incident} ray direction, pointing from the - viewing position to the shading position \P. \\ -\hline -\normal\ {\ce N} & The surface ``Shading'' normal of the surface at -\P. Changing \N yields bump mapping. \\ -\hline -\normal\ {\ce Ng} & The true surface normal at {\cf P}. This can differ - from {\cf N}; {\cf N} can be overridden in various ways including bump - mapping and user-provided vertex normals, but {\cf Ng} is always the - true surface geometric normal - of the surface at \P. \\ -\hline -\float\ {\ce u}, {\ce v} & The 2D parametric coordinates of \P (on the - particular geometric primitive you are shading). \\ -\hline -\vector\ {\ce dPdu}, {\ce dPdv} & Partial derivatives $\partial -P/\partial u$ and $\partial P/\partial v$ tangent to the surface at \P. \\ -%\hline -%\vector\ {\ce L} & Direction of incoming light (points from {\cf Ps} to -% {\cf Pl}). \\ -%\hline -%\color\ {\ce Cl} & Incoming light color at P. \\ -\hline -\point\ {\ce Ps} & Position at which the light is being queried - (currently only used for light attenuation shaders) \\ -%\\ -%\hline -%\normal\ {\ce Ns} & Axis about which the light is being queried -% (i.e., the axis passed to \illuminance), or the surface's \N if no -% axis was passed to \illuminance). -%\\ -%\hline -%\point\ {\ce Pl} & Position of the light source. \\ -%\hline -%\normal\ {\ce Nl} & Normal on the light (area light sources only). \\[1ex] -\hline -\float\ {\ce time} & Current shutter time for the point being shaded. \\ -\hline -\float\ {\ce dtime} & The amount of time covered by this shading sample. \\ -\hline -\vector\ {\ce dPdtime} & How the surface position \P is moving per unit time.\\ -\hline -\closurecolor\ {\ce \Ci} & Incident radiance --- a closure representing the color of the light leaving the surface from \P in the direction {\cf -I}. \\ -\hline -%\color\ {\ce \opacity} & Incident ray opacity --- the degree to which the viewer can ``see through'' the surface at \P. \\[1ex] -\end{tabular} -\caption{Global variables available inside shaders. -\label{tab:globalvars}} -\end{table} - - -\begin{comment} % old table -\begin{table} -\begin{tabular}{|p{1in}p{0.75in}p{0.75in}p{0.75in}p{1.7in}|} -\hline -{\bf Variable} & surface & displacement & volume & light \\ -\hline -\P & R & RW & R & R \\ -\I & R & & R & \\ -\N & RW & RW & & \\ -{\cf Ng} & R & R & & \\ -{\cf dPdu} & R & R & & \\ -{\cf dPdv} & R & R & & \\ -{\cf u, v} & R & R & R$^1$ & R$^1$ \\ -{\cf time} & R & R & R & R \\ -{\cf dtime} & R & R & R & R \\ -{\cf dPdtime} & R & R & R & R \\ -\Ci & RW & & RW & \\ -%\Oi & RW & & RW & \\ -%{\cf L} & R$^2$ & & R$^2$ & RW \\ -{\cf L} & & & & RW \\ -%{\cf Cl} & R$^2$ & & R$^2$ & RW \\ -{\cf Cl} & & & & RW \\ -{\cf Ps} & & & & R \\ -{\cf Ns} & & & & R \\ -%{\cf Pl} & & & R$^2$ & R \\ -%{\cf Nl} & & & R$^2$ & R \\ -{\cf Pl} & & & & R \\ -{\cf Nl} & & & & R \\ -\hline -\end{tabular} -\end{table} -\end{comment} - -\begin{table} -\begin{tabular}{|p{1in}p{0.75in}p{0.75in}p{0.75in}|} -\hline -{\bf Variable} & surface & displacement & volume \\ -\hline -\P & R & RW & R \\ -\I & R & & R \\ -\N & RW & RW & \\ -{\cf Ng} & R & R & \\ -{\cf dPdu} & R & R & \\ -{\cf dPdv} & R & R & \\ -{\cf Ps} & & & R \\ -{\cf u, v} & R & R & R \\ -{\cf time} & R & R & R \\ -{\cf dtime} & R & R & R \\ -{\cf dPdtime} & R & R & R \\ -\Ci & RW & & RW \\ -\hline -\end{tabular} - -%$^1$Certain surface variables (including \N, \Ng, \I, etc.) are readable -%in light or volume shaders, but in that case store the values for the -%surface whose shading triggered execution of the shader. Use caution: -%light may be gathered from a completely different place (for example, -%when stepping through a volume). - -%$^2$Light variables may be read in surface and volume shaders, but only -%inside \illuminance loops, and they refer to the current light being -%examined by the loop. - -\caption{Accessibility of variables by shader type -\label{tab:globalvaraccess}} -\end{table} - -\index{global variables|)} - - -\chapter{Standard Library Functions} -\label{chap:stdlibrary} - -%\apiitem{ret {\ce func} (args)} -%\indexapi{func()} -%\endapi - -\def\floatcolorpoint{The \emph{type} may be any of \float, \color, - \point, \vector, or \normal. For \color and \point-like types, the - computations are performed component-by-component (separately for $x$, - $y$, and $z$).\xspace} - -\section{Basic math functions} -\label{sec:stdlib:math} - -\subsection{Mathematical constants} -\index{mathematical constants} - -\langname defines several mathematical constants: - -\medskip - -\begin{tabular}{p{1in} p{3in}} -{\cf M\_PI} & $\pi$ \\[0.5ex] -{\cf M\_PI\_2} & $\pi/2$ \\[0.5ex] -{\cf M\_PI\_4} & $\pi/4$ \\[0.5ex] -{\cf M\_2\_PI} & $2/\pi$ \\[0.5ex] -{\cf M\_2PI} & $2\pi$ \\[0.5ex] -{\cf M\_4PI} & $4\pi$ \\[0.5ex] -{\cf M\_2\_SQRTPI} & $2/\sqrt{\pi}$ \\[0.5ex] -{\cf M\_E} & $e$ \\[0.5ex] -{\cf M\_LN2} & $\ln 2$ \\[0.5ex] -{\cf M\_LN10} & $\ln 10$ \\[0.5ex] -{\cf M\_LOG2E} & $\log_2 e$ \\[0.5ex] -{\cf M\_LOG10E} & $\log_{10} e$ \\[0.5ex] -{\cf M\_SQRT2} & $\sqrt{2}$ \\[0.5ex] -{\cf M\_SQRT1\_2} & $\sqrt{1/2}$ \\[0.5ex] -\end{tabular} - -\subsection{Mathematical functions} -\index{mathematical functions} -\index{functions!mathematical} - -Most of these functions operate on a generic \emph{type} that my be any -of \float, \color, \point, \vector, or \normal. For \color and -\point-like types, the computations are performed component-by-component -(separately for $x$, $y$, and $z$). - -\medskip - -\apiitem{\emph{type} {\ce radians} (\emph{type} deg) \\ -\emph{type} {\ce degrees} (\emph{type} rad)} -\indexapi{radians()} \indexapi{degrees()} -Convert degrees to radians or radians to degrees. -\apiend - -\index{trigonometry} -\index{functions!trigonometric} - -\apiitem{\emph{type} {\ce cos} (\emph{type} x) \\ -\emph{type} {\ce sin} (\emph{type} x) \\ -\emph{type} {\ce tan} (\emph{type} x) } -\indexapi{cos()} \indexapi{sin()} \indexapi{tan()} -Computes the cosine, sine, or tangent of $x$ (measured in radians). -\apiend - -\apiitem{void {\ce sincos} (\emph {type} x, output \emph{type} sinval, output -\emph{type} cosval)} -\indexapi{sincos()} -Computes both the sine and cosine of $x$ (measured in radians). If both -are needed, this function is less expensive than calling {\cf sin()} and -{\cf cos()} separately. -\apiend - -\apiitem{\emph{type} {\ce acos} (\emph{type} x) \\ -\emph{type} {\ce asin} (\emph{type} y) \\ -\emph{type} {\ce atan} (\emph{type} y\_over\_x) \\ -\emph{type} {\ce atan2} (\emph{type} y, \emph{type} x)} -\indexapi{acos()} \indexapi{asin()} \indexapi{atan()} \indexapi{atan2()} -Compute the principal value of the arc cosine, arc sine, and arc -For {\cf acos()} and {\cf asin()}, the value of the argument -will first be clamped to $[-1,1]$ to avoid invalid domain. - -For {\cf acos()}, the result will always be in the range of $[0, \pi]$, -and for {\cf asin()} and {\cf atan()}, the result will always be in the -range of $[-\pi/2, \pi/2]$. For {\cf atan2()}, the signs of both -arguments are used to determine the quadrant of the return value. -\apiend - -\apiitem{\emph{type} {\ce cosh} (\emph{type} x) \\ -\emph{type} {\ce sinh} (\emph{type} x) \\ -\emph{type} {\ce tanh} (\emph{type} x) } -\indexapi{cosh()} \indexapi{sinh()} \indexapi{tanh()} -Computes the hyperbolic cosine, sine, and tangent of $x$ (measured in radians). -\apiend - -\apiitem{\emph{type} {\ce pow} (\emph{type} x, \emph{type} y) \\ -\emph{type} {\ce pow} (\emph{type} x, float y)} -\indexapi{pow()} -Computes $x^y$. This function will return 0 for ``undefined'' -operations, such as {\cf pow(-1,0.5)}. -\apiend - -\apiitem{\emph{type} {\ce exp} (\emph{type} x) \\ -\emph{type} {\ce exp2} (\emph{type} x) \\ -\emph{type} {\ce expm1} (\emph{type} x)} -\indexapi{exp()} \indexapi{exp2()} \indexapi{expm1()} -Computes $e^x$, $2^x$, and $e^x-1$, respectively. Note that -{\cf expm1(x)} is accurate even for very small values of $x$. -\apiend - -\apiitem{\emph{type} {\ce log} (\emph{type} x) \\ -\emph{type} {\ce log2} (\emph{type} x) \\ -\emph{type} {\ce log10} (\emph{type} x) \\ -\emph{type} {\ce log} (\emph{type} x, float b)} -\indexapi{log()} \indexapi{log2()} \indexapi{log10()} -Computes the logarithm of $x$ in base $e$, 2, 10, or arbitrary base $b$, -respectively. -\apiend - -\apiitem{\emph{type} {\ce logb} (\emph{type} x)} -\indexapi{logb()} -Returns the exponent of x, as a floating-point number. -\apiend - -\apiitem{\emph{type} {\ce sqrt} (\emph{type} x) \\ -\emph{type} {\ce inversesqrt} (\emph{type} x)} -\indexapi{sqrt()} \indexapi{inversesqrt()} -Computes $\sqrt{x}$ and $1/\sqrt{x}$. Returns 0 if $x<0$. -\apiend - -\apiitem{\emph{type} {\ce cbrt} (\emph{type} x)} -\indexapi{cbrt()} -Computes $\sqrt[3]{x}$. The sign of the return value will match $x$. -\apiend - -\apiitem{float {\ce hypot} (float x, float y) \\ -float {\ce hypot} (float x, float y, float z)} -\indexapi{hypot()} -Computes $\sqrt{x^2+y^2}$ and $\sqrt{x^2+y^2+z^z}$, respectively. -\apiend - -\apiitem{\emph{type} {\ce abs} (\emph{type} x) \\ -\emph{type} {\ce fabs} (\emph{type} x)} -\indexapi{abs()} \indexapi{fabs()} -Absolute value of $x$. (The two functions are synonyms.) -\apiend - -%\begin{annotate} -%Should we fully return to C conventions, with abs() being for integers -%and fabs being for float? Or should abs() simply be overloaded, like -%you'd do in C++ if we were starting from scratch today? -%\end{annotate} - -\apiitem{\emph{type} {\ce sign} (\emph{type} x)} -\indexapi{sign()} -Returns 1 if $x>0$, -1 if $x<0$, 0 if $x=0$. -\apiend - -\apiitem{\emph{type} {\ce floor} (\emph{type} x) \\ -\emph{type} {\ce ceil} (\emph{type} x) \\ -\emph{type} {\ce round} (\emph{type} x) \\ -\emph{type} {\ce trunc} (\emph{type} x) } -\indexapi{floor()} \indexapi{ceil()} \indexapi{round()} \indexapi{trunc()} - -Various rounding methods: {\cf floor} returns the largest integer less -than or equal to $x$; {\cf ceil} returns the smallest integer greater than -or equal to $x$; {\cf round} returns the closest integer to $x$, in -either direction (rounding away from 0 in cases where $x$ is exactly -half way between integers); and {\cf trunc} returns the integral part of $x$ -(equivalent to {\cf floor} if $x>0$ and {\cf ceil} if $x<0$). -\apiend - -\apiitem{\emph{type} {\ce fmod} (\emph{type} a, \emph{type} b) \\ -\emph{type} {\ce mod} (\emph{type} a, \emph{type} b)} -\indexapi{fmod()} -\indexapi{mod()} - -The {\cf fmod()} function returns the floating-point remainder of $a/b$, -i.e., is the floating-point equivalent of the integer {\cf \%} operator. -It is nearly identical to the C or C++ {\cf fmod} function, except that -in OSL, {\cf fmod(a,0)} returns {\cf 0}, rather than {\cf NaN}. Note -that if $a < 0$, the return value will be negative. - -The {\cf mod()} function returns $a - b*\mbox{floor}(a/b)$, which will -always be a positive number or zero. -As an example, {\cf fmod(-0.25,1.0) = -0.25}, but {\cf mod(-0.25,1.0) = - 0.75}. For positive {\cf a} they return the same value. - -For both functions, the \emph{type} may be any of {\cf float}, \point, -\vector, \normal, or \color. -\apiend - -\apiitem{\emph{type} {\ce min} (\emph{type} a, \emph{type} b) \\ -\emph{type} {\ce max} (\emph{type} a, \emph{type} b) \\ -\emph{type} {\ce clamp} (\emph{type} x, \emph{type} minval, \emph{type} maxval)} -\indexapi{min()} \indexapi{max()} \indexapi{clamp()} -The {\cf min()} and {\cf max()} functions return the minimum or maximum, -respectively, of a list of two or more values. The {\cf clamp} -function returns - -\hspace{2em} {\cf min(max(x,minval),maxval)}, - -\noindent that is, the value $x$ clamped to the specified range. -\apiend - -\apiitem{\emph{type} {\ce mix} (\emph{type} x, \emph{type} y, \emph{type} alpha) \\ -\emph{type} {\ce mix} (\emph{type} x, \emph{type} y, float alpha)} -\indexapi{mix()} -The {\cf mix} function returns a linear blending : -$ x*(1-\alpha) + y*(\alpha) $ -\apiend - -\apiitem{\emph{type} {\ce select} (\emph{type} x, \emph{type} y, \emph{type} cond) \\ -\emph{type} {\ce select} (\emph{type} x, \emph{type} y, float cond) \\ -\emph{type} {\ce select} (\emph{type} x, \emph{type} y, int cond)} -\indexapi{mix()} -The {\cf select} function returns {\cf x} if {\cf cond} is zero, or {\cf y} -if {\cf cond} is nonzero. This is roughly equivalent to {\cf (cond ? y : x)}, -except that if {\cf cond} is a component-based type (such as {\cf color}), -the selection happens on a component-by-component basis. It is presumed -that the underlying implementation is not a true conditional and will not -incur any branching penalty. -\apiend - -\apiitem{int {\ce isnan} (float x) \\ -int {\ce isinf} (float x) \\ -int {\ce isfinite} (float x)} -\indexapi{isnan()} \indexapi{isinf()} \indexapi{isfinite()} -The {\cf isnan()} function returns 1 if $x$ is a not-a-number (NaN) -value, 0 otherwise. The {\cf isinf()} function returns 1 if $x$ is an -infinite (Inf or --Inf) value, 0 otherwise. The {\cf isfinite()} -function returns 1 if $x$ is an ordinary number (neither infinite nor -NaN), 0 otherwise. \apiend - -\apiitem{float {\ce erf} (float x) \\ -float {\ce erfc} (float x)} -\indexapi{erf()} \indexapi{erfc()} -The {\cf erf()} function returns the error function -${\mathrm{erf}(x) = \frac{2}{\sqrt{\pi}} \int_0^x e^{-t^2}} dt$. -The {\cf erfc} returns the complementary error function {\cf 1-erf(x)} -(useful in maintaining precision for large values of $x$). -\apiend - -\section{Geometric functions} -\label{sec:stdlib:geom} -\index{geometric functions} -\index{functions!geometric} - -\apiitem{\emph{ptype} {\ce ptype} (float f) \\ -\emph{ptype} {\ce ptype} (float x, float y, float z)} -\indexapi{point()} -\indexapi{vector()} -\indexapi{normal()} - -Constructs a point-like value (\emph{ptype} may be any of \point, -\vector, or \normal) from individual \float values. If constructed -from a single \float, the value will be replicated for $x$, $y$, and $z$. - -\apiend - -\apiitem{\emph{ptype} {\ce ptype} (string space, f) \\ -\emph{ptype} {\ce ptype} (string space, float x, float y, float z)} -\indexapi{point()} \indexapi{vector()} \indexapi{normal()} -Constructs a point-like value (\emph{ptype} may be any of \point, -\vector, or \normal) from individual \float coordinates, relative -to the named coordinate system. In other words, -\begin{code} - point (space, x, y, z) -\end{code} -\noindent is equivalent to -\begin{code} - transform (space, "common", point(x,y,z)) -\end{code} -(And similarly for \vector/\normal.) -\apiend - -\apiitem{float {\ce dot} (vector A, vector B)} -\indexapi{dot()} -Returns the inner product of the two vectors (or normals), i.e., -$A \cdot B = A_x B_x + A_y B_y + A_z C_z$. -\apiend - -\apiitem{vector {\ce cross} (vector A, vector B)} -\indexapi{cross()} -Returns the cross product of two vectors (or normals), i.e., -$A \times B$. -\apiend - -\apiitem{float {\ce length} (vector V) \\ -float {\ce length} (normal V)} -\indexapi{length()} -Returns the length of a vector or normal. -\apiend - -\apiitem{float {\ce distance} (point P0, point P1)} -\indexapi{distance()} -Returns the distance between two points. -\apiend - -\apiitem{float {\ce distance} (point P0, point P1, point Q)} -\indexapi{distance()} -Returns the distance from {\cf Q} to the closest point on the line -segment joining {\cf P0} and {\cf P1}. -\apiend - -\apiitem{vector {\ce normalize} (vector V) \\ -normal {\ce normalize} (normal V)} -\indexapi{normalize()} -Return a vector in the same direction as $V$ but with length 1, -that is, {\cf V / length(V)} . -\apiend - -\apiitem{vector {\ce faceforward} (vector N, vector I, vector Nref) \\ -vector {\ce faceforward} (vector N, vector I)} -\indexapi{faceforward()} -If {\cf dot (Nref, I)} $<0$, returns {\cf N}, otherwise returns {\cf -N}. -For the version with only two arguments, {\cf Nref} is implicitly {\cf -Ng}, the true surface normal. The point of these routines is to -return a version of {\cf N} that faces towards the camera --- in the -direction ``opposite'' of {\cf I}. - -To further clarify the situation, here is the implementation of -{\cf faceforward} expressed in \langname: - -\begin{code} -vector faceforward (vector N, vector I, vector Nref) -{ - return (I.Nref > 0) ? -N : N; -} - -vector faceforward (vector N, vector I) -{ - return faceforward (N, I, Ng); -} -\end{code} -\apiend - -\apiitem{vector {\ce reflect} (vector I, vector N)} -\indexapi{reflect()} -For incident vector {\cf I} and surface orientation {\cf N}, returns the -reflection direction {\cf R = I - 2*(N.I)*N}. Note that {\cf N} must be -normalized (unit length) for this formula to work properly. -\apiend - -\apiitem{vector {\ce refract} (vector I, vector N, float eta)} -\indexapi{refract()} -For incident vector {\cf I} and surface orientation {\cf N}, -returns the refraction direction using Snell's law. The {\cf eta} -parameter is the ratio of the index of refraction of the volume containing -{\cf I} divided by the index of refraction of the volume being entered. -The result is not necessarily normalized and a zero-length vector is -returned in the case of total internal reflection. -For reference, here is the equivalent \langname of the implementation: - -\begin{code} -vector refract (vector I, vector N, float eta) -{ - float IdotN = dot (I, N); - float k = 1 - eta*eta * (1 - IdotN*IdotN); - return (k < 0) ? vector(0,0,0) : (eta*I - N * (eta*IdotN + sqrt(k))); -} -\end{code} -\apiend - -\apiitem {void {\ce fresnel} (vector I, normal N, float eta, \\ - \mbox{\hspace{1in}} output float Kr, output float Kt, \\ - \mbox{\hspace{1in}} output vector R, output vector T); } -\indexapi{fresnel()} -According to Snell's law and the Fresnel equations, {\cf fresnel} -computes the reflection and transmission direction vectors {\cf R} and -{\cf T}, respectively, as well as the scaling factors for reflected -and transmitted light, {\cf Kr} and {\cf Kt}. The {\cf I} parameter -is the normalized incident ray, {\cf N} is the normalized surface normal, -and {\cf eta} is the ratio of refractive index of the medium -containing {\cf I} to that on the opposite side of the surface. -\apiend - -\apiitem{point {\ce rotate} (point Q, float angle, point P0, point P1) \\ -point {\ce rotate} (point Q, float angle, vector axis)} -\indexapi{rotate()} -Returns the point computed by rotating point {\cf Q} by {\cf angle} -radians about the axis that passes from point {\cf P0} to {\cf P1}, -or about the {\cf axis} vector centered on the origin. -\apiend - -\apiitem{\emph{ptype} {\ce transform} (string tospace, \emph{ptype} p) \\ -\emph{ptype} {\ce transform} (string fromspace, string tospace, \emph{ptype} p) \\ -\emph{ptype} {\ce transform} (matrix Mto, \emph{ptype} p)} -\indexapi{transform()} - -Transform a \point, \vector, or \normal (depending on the type of the -\emph{ptype p} argument) from the coordinate system named by -\emph{fromspace} to the one named by \emph{tospace}. If -\emph{fromspace} is not supplied, $p$ is assumed to be in \commonspace -coordinates, so the transformation will be from \commonspace to -\emph{tospace}. A $4 \times 4$ matrix may be passed directly rather -than specifying coordinate systems by name. - -Depending on the type of the passed point $p$, different transformation -semantics will be used. A \point will transform as a position, a -\vector as a direction without regard to positioning, and a \normal will -transform subtly differently than a \vector in order to preserve -orthogonality to the surface under nonlinear -scaling.\footnote{Technically, what happens is this: The \emph{from} and - \emph{to} spaces determine a $4 \times 4$ matrix. A \point $(x,y,z)$ - will transform the 4-vector $(x,y,z,1)$ by the matrix; a \vector will - transform $(x,y,z,0)$ by the matrix; a \normal will transform - $(x,y,z,0)$ by the inverse of the transpose of the matrix.} - -\apiend - - -\apiitem{float {\ce transformu} (string tounits, float x) \\ -float {\ce transformu} (string fromunits, string tounits, float x)} -\indexapi{transformu()} -\index{units} - -Transform a measurement from \emph{fromunits} to \emph{tounits}. If -\emph{fromunits} is not supplied, $x$ will be assumed to be in -\commonspace units. - -For length conversions, unit names may be any of: \qkw{mm}, \qkw{cm}, -\qkw{m}, \qkw{km}, \qkw{in}, \qkw{ft}, \qkw{mi}, or the name of any -coordinate system, including \qkw{common}, \qkw{world}, \qkw{shader}, or -any other named coordinate system that the renderer knows about. - -For time conversions, units may be any of: \qkw{s}, \qkw{frames}, or -\qkw{common} (which indicates whatever timing units the renderer is -using). - -It is only valid to convert length units to other length units, or time -units to other time units. Attempts to convert length to time or vice -versa will result in an error. Don't even think about trying to convert -monetary units to time. -\apiend - - - -\section{Color functions} -\label{sec:stdlib:color} -\index{color functions} -\index{functions!color} - -\apiitem{color {\ce color} (float f) \\ -color {\ce color} (float r, float g, float b)} -\indexapi{color()} -Constructs a \color from individual \float values. If constructed -from a single \float, the value will be replicated for $r$, $g$, and $b$. -\apiend - -\apiitem{color {\ce color} (string colorspace, f) \\ -color {\ce color} (string colorspace, float r, float g, float b)} -\indexapi{color()} -Constructs an RGB \color that is equivalent to the individual \float values in a -named color space. In other words, -\begin{code} - color (colorspace, r, g, b) -\end{code} -\noindent is equivalent to -\begin{code} - transformc (colorspace, "rgb", color(r, g, b)) -\end{code} -\apiend - -\apiitem{float {\ce luminance} (color rgb)} -\indexapi{luminance()} -Returns the linear luminance of the color \emph{rgb}, which is -implemented per the ITU-R standard as $0.2126 R + 0.7152 G + 0.0722 B$. -\apiend - -\apiitem{color {\ce blackbody} (float temperatureK)} -\indexapi{blackbody()} - -The {\cf blackbody()} function returns the blackbody emission (the -incandescent glow of warm bodies) expected from a material of the given -temperature in Kelvin, in units of $W/m^2$. Note that {\cf emission()} has units -of radiance, so will require a scaling factor of $1/\pi$ on surfaces, and -$1/4\pi$ on volumes to convert to $W/m^2/sr$. -\apiend - -\apiitem{color {\ce wavelength_color} (float wavelength_nm)} -\indexapi{wavelength_color()} -Returns an RGB color corresponding as closely as possible to the -perceived color of a pure spectral color of the given wavelength (in nm). -\apiend - -\apiitem{color {\ce transformc} (string fromspace, string tospace, color Cfrom)\\ -color {\ce transformc} (string tospace, color Cfrom)} -\indexapi{transformc()} -Transforms color \emph{Cfrom} from color space \emph{fromspace} to -color space \emph{tospace}. If \emph{fromspace} is not supplied, -it is assumed to be transforming from \rgbspace. - -%\begin{annotate} -%\QUESTION Should this be renamed `ctransform' to match RMan? -%\end{annotate} -\apiend - - -\section{Matrix functions} -\label{sec:stdlib:matrix} -\index{matrix functions} -\index{functions!matrix} - -\apiitem{matrix {\ce matrix} (float m00, float m01, float m02, float m03, \\ -\bigspc\spc float m10, float m11, float m12, float m13, \\ -\bigspc\spc float m20, float m21, float m22, float m23, \\ -\bigspc\spc float m30, float m31, float m32, float m33)} -\indexapi{matrix()} -Constructs a \matrix from 16 individual \float values, in row-major -order. -\apiend - -\apiitem{matrix {\ce matrix} (float f)} -\indexapi{matrix()} -Constructs a \matrix with $f$ in all diagonal components, 0 in all other -components. In other words, {\cf matrix(1)} is the identity matrix, and -{\cf matrix(f)} is {\cf f*matrix(1)}. -\apiend - -\apiitem{matrix {\ce matrix} (string fromspace, float m00, ..., float m33) \\ -matrix {\ce matrix} (string fromspace, float f)} -\indexapi{matrix()} -Constructs a \matrix relative to the named space, multiplying it by the -{\cf space}-to-{\cf common} transformation matrix. If the coordinate -system name is unknown, it will be assumed to be the identity matrix. - -Note that {\cf matrix (space, 1)} returns the -\emph{space}-to-{\cf common} transformation matrix. If the coordinate -system name is unknown, it will be assumed to be the identity matrix. -\apiend - -\apiitem{matrix {\ce matrix} (string fromspace, string tospace)} -\indexapi{matrix()} -Constructs a \matrix that can be used to transform coordinates from -\emph{fromspace} to \emph{tospace}. If either of the coordinate -system names are unknown, they will be assumed to be the identity matrix. -\apiend - -\apiitem{int {\ce getmatrix} (string fromspace, string tospace, output - matrix M)} -\indexapi{getmatrix()} - -Sets \emph{M} to the \matrix that transforms coordinates from -\emph{fromspace} to \emph{tospace}. Return 1 upon success, or 0 if -either of the coordinate system names are unknown (in which case -\emph{M} will not be modified). This is very similar to the -{\cf matrix(from,to)} constructor, except that {\cf getmatrix} allows -the shader to gracefully handle unknown coordinate system names. -\apiend - -\apiitem{float {\ce determinant} (matrix M)} -\indexapi{determinant()} -Computes the determinant of matrix $M$. -\apiend - -\apiitem{matrix {\ce transpose} (matrix M)} -\indexapi{transpose()} -Computes the transpose of matrix $M$. -\apiend - - - -\section{Pattern generation} -\label{sec:stdlib:pattern} -\index{pattern generation functions} -\index{functions!pattern generation} - -\apiitem{float {\ce step} (float edge, float x) \\ -\emph{type} {\ce step} (\emph{type} edge, \emph{type} x)} -\indexapi{step()} -Returns 0 if $x < {\mathit edge}$ and 1 if $x \ge {\mathit edge}$. - -The \emph{type} may be any of of \float, \color, \point, \vector, or -\normal. For \color and \point-like types, the computations are -performed component-by-component (separately for $x$, $y$, and $z$). -\apiend - -\apiitem{float {\ce linearstep} (float edge0, float edge1, float x) \\ -\emph{type} {\ce linearstep} (\emph{type} edge0, \emph{type} edge1, \emph{type} x)} -\indexapi{linearstep()} -Returns 0 if $x \le {\mathit edge0}$, and 1 if $x \ge {\mathit edge1}$, -and performs a linear -interpolation between 0 and 1 when ${\mathit edge0} < x < {\mathit edge1}$. -This is equivalent to {\cf step(edge0, x)} when {\cf edge0 == edge1}. -For \color and \point-like types, the computations are -performed component-by-component (separately for $x$, $y$, and $z$). -\apiend - -\apiitem{float {\ce smoothstep} (float edge0, float edge1, float x) \\ -\emph{type} {\ce smoothstep} (\emph{type} edge0, \emph{type} edge1, \emph{type} x)} -\indexapi{smoothstep()} -Returns 0 if $x \le {\mathit edge0}$, and 1 if $x \ge {\mathit edge1}$, -and performs a smooth Hermite -interpolation between 0 and 1 when ${\mathit edge0} < x < {\mathit edge1}$. -This is useful in cases where you would want a thresholding function -with a smooth transition. - -The \emph{type} may be any of of \float, \color, \point, \vector, or -\normal. For \color and \point-like types, the computations are -performed component-by-component. -\apiend - -\apiitem{float {\ce smooth_linearstep} (float edge0, float edge1, float x, float eps) \\ -\emph{type} {\ce smooth_linearstep} (\emph{type} edge0, \emph{type} edge1, \emph{type} x, \emph{type} eps)} -\indexapi{smooth_linearstep()} -This function is strictly linear between ${\mathit edge0}+{\mathit eps}$ and ${\mathit edge1}-{\mathit eps}$ -but smoothly ramps to 0 between ${\mathit edge0}-{\mathit eps}$ and ${\mathit edge0}+{\mathit eps}$ -and smoothly ramps to 1 between ${\mathit edge1}-{\mathit eps}$ and ${\mathit edge1}+{\mathit eps}$. -It is 0 when $x \le {\mathit edge0}-{\mathit eps}$, and 1 if $x \ge {\mathit edge1}+{\mathit eps}$, -and performs a linear -interpolation between 0 and 1 when ${\mathit edge0} < x < {\mathit edge1}$. -For \color and \point-like types, the computations are -performed component-by-component. -\apiend - - -%\section{Noise functions} -%\label{sec:stdlib:noise} -% -%Noise functions (sometimes called ``Perlin noise'') - -\apiitem{\emph{type} {\ce noise} (string noisetype, float u, ...) \\ -\emph{type} {\ce noise} (string noisetype, float u, float v, ...) \\ -\emph{type} {\ce noise} (string noisetype, point p, ...) \\ -\emph{type} {\ce noise} (string noisetype, point p, float t, ...) -} -\indexapi{noise()} - -Returns a continuous, pseudo-random (but repeatable) scalar field -defined on a domain of dimension 1 (\float), 2 (2 \float's), 3 (\point), -or 4 (\point and \float), with a return value of either 1D (\float) or 3D -(\color, \point, \vector, or \normal). - -The {\cf noisename} specifies which of a variety of possible noise -functions will be used. - -\apiitem{"perlin", "snoise"} -\vspace{12pt} - -A signed Perlin-like gradient noise with an output range of $[-1,1]$, -approximate average value of $0$, and is exactly $0$ at integer lattice -points. This is equivalent to the {\cf snoise()} function. - -\apiend -\vspace{-16pt} - -\apiitem{"uperlin", "noise"} -\vspace{12pt} -An unsigned Perlin-like gradient noise with an output range of $(0,1)$, -approximate average value of $0.5$, and is exactly $0.5$ at integer -lattice points. This is equivalent to the {\cf noise()} function (the -one that doesn't take a name string). -\apiend -\vspace{-16pt} - -\apiitem{"cell"} -\vspace{12pt} -A discrete function that is constant on $[i,i+1)$ for all integers $i$ -(i.e., {\cf cellnoise(x) == cellnoise(floor(x))}), but has a different -and uncorrelated value at every integer. The range is $[0,1]$, its -large-scale average is 0.5, and its values are evenly distributed over -$[0,1]$. -\apiend - -\apiitem{"hash"} -\vspace{12pt} -A function that returns a different, uncorrelated (but deterministic and -repeatable) value at every real input coordinate. The range is $[0,1]$, its -large-scale average is 0.5, and its values are evenly distributed over -$[0,1]$. -\apiend - -\apiitem{"simplex"} -\vspace{12pt} -A signed simplex noise with an output range of $[-1,1]$, -approximate average value of $0$. -\apiend - -\apiitem{"usimplex"} -\vspace{12pt} -An unsigned simplex noise with an output range of $[0,1]$, -approximate average value of $0.5$. -\apiend - -\apiitem{"gabor"} -\vspace{12pt} -A band-limited, filtered, sparse convolution noise based on the -Gabor impulse function (see Lagae et al., SIGGRAPH 2012). Our Gabor -noise is designed to have somewhat similar frequency content and range -as Perlin noise (range $[-1,1]$, approximately large-scale average of -$0$). It is significantly more expensive than Perlin noise, but its -advantage is that it correctly filters automatically based on the input -derivatives. Gabor noise allows several optional parameters to the -{\cf noise()} call: - -\apiitem{"anisotropic", \\ -"direction", } -\vspace{12pt} -If {\cf anisotropic} is 0 (the default), Gabor noise -will be isotropic. If {\cf anisotropic} is 1, the Gabor noise will -be anisotropic with the 3D frequency given by the {\cf direction} -vector (which defaults to {\cf (1,0,0)}). If {\cf anisotropic} is -2, a hybrid mode will be used which is anisotropic along the -{\cf direction} vector, but radially isotropic perpendicular to that -vector. The {\cf direction} vector is not used if {\cf anisotropic} -is 0. -\apiend -\vspace{-16pt} - -\apiitem{"bandwidth", } -\vspace{12pt} -Controls the bandwidth for Gabor noise. -The default is 1.0. -\apiend -\vspace{-16pt} - -\apiitem{"impulses", } -\vspace{12pt} -Controls the number of impulses per cell for Gabor noise. -The default is 16. -\apiend -\vspace{-16pt} - -\apiitem{"do_filter", } -\vspace{12pt} -If {\cf do_filter} is 0, no filtering/antialiasing will -be performed. The default is 1 (yes, do filtering). There is probably -no good reason to ever turn off the filtering, it is primarily to test -that the filtering is working properly. -\apiend -\vspace{-16pt} - -\apiend - -%\vspace{-16pt} - -Note that some of the noise varieties have an output range of $[-1,1]$ -but others have range $[0,1]$; some may automatically antialias their -output (based on the derivatives of the lookup coordinates) and others -may not, and various other properties may differ. The user should be -aware of which noise varieties are useful in various circumstances. - -A particular renderer's implementation of OSL may supply additional -noise varieties not described here. - -The {\cf noise()} functions take optional arguments after their -coordinates, passed as token/value pairs (similarly to optional texture -arguments). Generally, such arguments are specific to the type of -noise, and are ignored for noise types that don't understand them. - -\apiend - - - -\apiitem{\emph{type} {\ce pnoise} (string noisetype, float u, float uperiod) \\ -\emph{type} {\ce pnoise} (string noisetype, float u, float v, float uperiod, float vperiod) \\ -\emph{type} {\ce pnoise} (string noisetype, point p, point pperiod) \\ -\emph{type} {\ce pnoise} (string noisetype, point p, float t, point pperiod, float tperiod) -} -\indexapi{pnoise()} - -Periodic version of {\cf noise}, in which the domain wraps with the given -period(s). Generally, only integer-valued periods are supported. -\apiend - - - - -\apiitem{\emph{type} {\ce noise} (float u) \\ -\emph{type} {\ce noise} (float u, float v) \\ -\emph{type} {\ce noise} (point p) \\ -\emph{type} {\ce noise} (point p, float t) -\smallskip \\ -\emph{type} {\ce snoise} (float u) \\ -\emph{type} {\ce snoise} (float u, float v) \\ -\emph{type} {\ce snoise} (point p) \\ -\emph{type} {\ce snoise} (point p, float t)} -\indexapi{snoise()} -\indexapi{noise()} - -The old {\cf noise(...coords...)} function is equivalent to -{\cf noise("uperlin",...coords...)} and {\cf snoise(...coords...)} -is equivalent to {\cf noise("perlin",...coords...)}. -\apiend - - -\apiitem{\emph{type} {\ce pnoise} (float u, float uperiod) \\ -\emph{type} {\ce pnoise} (float u, float v, float uperiod, float vperiod) \\ -\emph{type} {\ce pnoise} (point p, point pperiod) \\ -\emph{type} {\ce pnoise} (point p, float t, point pperiod, float tperiod) -\smallskip \\ -\emph{type} {\ce psnoise} (float u, float uperiod) \\ -\emph{type} {\ce psnoise} (float u, float v, float uperiod, float vperiod) \\ -\emph{type} {\ce psnoise} (point p, point pperiod) \\ -\emph{type} {\ce psnoise} (point p, float t, point pperiod, float tperiod)} -\indexapi{pnoise()} -\indexapi{psnoise()} - -The old {\cf pnoise(...coords...)} function is equivalent to -{\cf pnoise("uperlin",...coords...)} and {\cf psnoise(...coords...)} -is equivalent to {\cf pnoise("perlin",...coords...)}. -\apiend - -\apiitem{\emph{type} {\ce cellnoise} (float u) \\ -\emph{type} {\ce cellnoise} (float u, float v) \\ -\emph{type} {\ce cellnoise} (point p) \\ -\emph{type} {\ce cellnoise} (point p, float t)} -\indexapi{cellnoise()} -The old {\cf cellnoise(...coords...)} function is equivalent to -{\cf noise("cell",...coords...)}. -\apiend - -\apiitem{\emph{type} {\ce hashnoise} (float u) \\ -\emph{type} {\ce hashnoise} (float u, float v) \\ -\emph{type} {\ce hashnoise} (point p) \\ -\emph{type} {\ce hashnoise} (point p, float t)} -\indexapi{hashnoise()} -Returns a deterministic, repeatable \emph{hash} of the 1-, 2-, 3-, or -4-D coordinates. The return values will be evenly -distributed on $[0,1]$ and be completely repeatable when passed the same -coordinates again, yet will be uncorrellated to hashes of any other -positions (including nearby points). This is like having a random value -indexed spatially, but that will be repeatable from frame to frame of an -animation (provided its input is \emph{precisely} identical). -\apiend - -\apiitem{int {\ce hash} (float u) \\ -int {\ce hash} (float u, float v) \\ -int {\ce hash} (point p) \\ -int {\ce hash} (point p, float t) \\ -int {\ce hash} (int i)} -\indexapi{hash()} -Returns a deterministic, repeatable integer \emph{hash} of the 1-, 2-, 3-, -or 4-D coordinates. -\apiend - -\apiitem{\emph{type} {\ce spline} (string basis, float x, \emph{type} $\mathtt{y}_0$, \emph{type} $\mathtt{y}_1$, ... \emph{type} $\mathtt{y}_{n-1}$)\\ -\emph{type} {\ce spline} (string basis, float x, \emph{type} y[]) \\ -\emph{type} {\ce spline} (string basis, float x, int nknots, \emph{type} y[])} -\indexapi{spline()} - -As $x$ varies from 0 to 1, {\cf spline} returns the value of a cubic -interpolation of uniformly-spaced knots $y_0$...$y_{n-1}$, or -$y[0]$...$y[n-1]$ for the array version of the call (where $n$ is the -length of the array), or $y[0]$...$y[nknots-1]$ for the version that -explicitly specifies the number of knots (which may be less than the -full array length). The input value $x$ will be clamped to lie -on $[0,1]$. The \emph{type} may be any of \float, \color, -\point, \vector, or \normal; for multi-component types (e.g. \color), -each component will be interpolated separately. - -The type of interpolation is specified by the \emph{basis} name, -\emph{basis} parameter, which may be any of: \qkw{catmull-rom}, -\qkw{bezier}, \qkw{bspline}, \qkw{hermite}, \qkw{linear}, or -\qkw{constant}. Some basis -types require particular numbers of knot values -- Bezier splines -require $3n+1$ values, Hermite splines require $2n+2$ values, and all of -Catmull-Rom, linear, and constant requires $3+n$, where in all cases, -$n \ge 1$ is the number of spline segments. - -To maintain consistency with the other spline types, \qkw{linear} splines will -ignore the first and last data value; interpolating piecewise-linearly -between $y_1$ and $y_{n-2}$, and \qkw{constant} splines ignore the first -and the two last data values. -\apiend - -\apiitem{float {\ce splineinverse} (string basis, float v, float $\mathtt{y}_0$, ... float $\mathtt{y}_{n-1}$)\\ -float {\ce splineinverse} (string basis, float v, float y[]) \\ -float {\ce splineinverse} (string basis, float v, int nknots, float y[])} -\indexapi{splineinverse()} - -Computes the \emph{inverse} of the {\cf spline()} function, i.e., returns -the value $x$ for which \\ - \spc {\cf spline (basis, x, y...)}\\ -would return value -$v$. Results are undefined if the knots do not specify a monotonic -(only increasing or only decreasing) set of values. - -Note that the combination of {\cf spline} and {\cf splineinverse} makes -it possible to compute a full spline-with-nonuniform-abscissae: -\begin{smallcode} - float v = splineinverse (basis, x, nknots, abscissa); - result = spline (basis, v, nknots, value); -\end{smallcode} -\apiend - - -\newpage -\section{Derivatives and area operators} -\label{sec:stdlib:derivs} -\index{derivative functions} -\index{functions!derivatives and area} -\index{derivatives} - -\apiitem{float {\ce Dx} (float a), {\ce Dy} (float a), {\ce Dz} (float a) \\ -vector {\ce Dx} (point a), {\ce Dy} (point a), {\ce Dz} (point a) \\ -vector {\ce Dx} (vector a), {\ce Dy} (vector a), {\ce Dz} (vector a)\\ -color {\ce Dx} (color a), {\ce Dy} (color a), {\ce Dz} (color a)} -\indexapi{Dx()} \indexapi{Dy()} -Compute an approximation to the partial derivatives of $a$ with respect to -each of two principal directions, $\partial a / \partial x$ and -$\partial a / \partial y$. Depending on the renderer -implementation, those directions may be aligned to the image plane, -on the surface of the object, or something else. - -The {\cf Dz()} function is only meaningful for volumetric shading, and -is expected to return {\cf 0} in other contexts. It is also possible -that particular OSL implementations may only return ``correct'' {\cf Dz} -values for particular inputs (such as \P). -\apiend - -\apiitem{float {\ce filterwidth} (float x) \\ -vector {\ce filterwidth} (point x) \\ -vector {\ce filterwidth} (vector x)} -\indexapi{filterwidth()} -Compute differentials of the argument $x$, i.e., the approximate change -in $x$ between adjacent shading samples. -\apiend - - -\apiitem{float {\ce area} (point p)} -\indexapi{area()} -Returns the differential area of position $p$ corresponding to this -shading sample. If $p$ is the actual surface position \P, then -{\ce area(P)} will return the surface area of the section of the -surface that is ``covered'' by this shading sample. -\apiend - -\apiitem{vector {\ce calculatenormal} (point p)} -\indexapi{calculatenormal()} -Returns a vector perpendicular to the surface that is defined by point -$p$ (as $p$ is computed at all points on the currently-shading surface), -taking into account surface orientation. -\apiend - -\apiitem{float {\ce aastep} (float edge, float s) \\ -float {\ce aastep} (float edge, float s, float ds) \\ -float {\ce aastep} (float edge, float s, float dedge, float ds)} -\indexapi{aastep()} -Computes an antialiased step function, similar to {\cf step(edge,s)} but -filtering the edge to take into account how rapidly {\cf s} and {\cf edge} -are changing over the surface. If the differentials {\cf ds} and/or -{\cf dedge} are not passed explicitly, they will be automatically -computed (using {\cf filterwidth()}). -\apiend - - -\section{Displacement functions} -\label{sec:stdlib:displace} -\index{displacement} -\index{bump mapping} -\index{functions!displacement} - -\apiitem{void {\ce displace} (float amp) \\ -void {\ce displace} (string space, float amp) \\ -void {\ce displace} (vector offset)} -\indexapi{displace()} - -Displace the surface in the direction of the shading normal \N by -\emph{amp} units as measured in the named \emph{space} (or \commonspace -if none is specified). Alternately, the surface may be moved by a fully -general \emph{offset}, which does not need to be in the direction of the -surface normal. - -In either case, this function both displaces the surface and adjusts the -shading normal \N to be the new surface normal of the displaced surface -(properly handling both continuously smooth surfaces as well as -interpolated normals on faceted geometry, without introducing faceting -artifacts). -\apiend - -\apiitem{void {\ce bump} (float amp) \\ -void {\ce bump} (string space, float amp) \\ -void {\ce bump} (vector offset)} -\indexapi{bump()} - -Adjust the shading normal \N to be the surface normal as if the -surface had been displaced by the given amount (see the {\cf displace()} -function description), but without actually moving the surface -positions. -\apiend - - -\section{String functions} -\label{sec:stdlib:string} -\index{string functions} -\index{functions!string} - -\apiitem{void {\ce printf} (string fmt, ...)} -\indexapi{printf()} - -Much as in C, {\cf printf()} takes a format string {\cf fmt} and an -argument list, and prints the resulting formatted string to the console. - -Where the {\cf fmt} contains a format string similar to {\cf printf} in -the C language. The {\cf \%d}, {\cf \%i}, {\cf \%o}, and {\cf \%x} -arguments expect an {\cf int} argument. The {\cf \%f}, {\cf \%g}, and -{\cf \%e} expect a \float, \color, point-like, or \matrix argument (for -multi-component types such as \color, the format will be applied to each -of the components). The {\cf \%s} expects a {\cf string} or -{\cf closure} argument. - -All of the substitution commands follow the usual C/C++ formatting rules, -so format commands such as {\cf "\%6.2f"}, etc., should work as -expected. -\apiend - -\apiitem{string {\ce format} (string fmt, ...)} -\indexapi{format()} -The {\cf format} function works similarly to {\cf printf}, except that -instead of printing the results, it returns the formatted text as a -{\cf string}. -\apiend - -\apiitem{void {\ce error} (string fmt, ...) \\ -void {\ce warning} (string fmt, ...)} -\indexapi{error()} \indexapi{warning()} -The {\cf error()} and {\cf warning()} functions work similarly to {\cf printf}, but the -results will be printed as a renderer error or warning message, possibly including -information about the name of the shader and the object being shaded, -and other diagnostic information. -\apiend - -\apiitem{void {\ce fprintf} (string filename, string fmt, ...)} -\indexapi{fprintf()} -The {\cf fprintf()} function works similarly to {\cf printf}, but rather -than printing to the default text output stream, the results will be -concatenated onto the end of the text file named by {\cf filename}. -\apiend - -\apiitem{string {\ce concat} (string s1, ..., string sN)} -\indexapi{concat()} -Concatenates a list of strings, returning the aggregate string. -\apiend - -\apiitem{int {\ce strlen} (string s)} -\indexapi{strlen()} -Return the number of characters in string {\ce s}. -\apiend - -\apiitem{int {\ce startswith} (string s, string prefix)} -\indexapi{startswith()} -Return 1 if string {\cf s} begins with the substring {\cf prefix}, -otherwise return 0. -\apiend - -\apiitem{int {\ce endswith} (string s, string suffix)} -\indexapi{startswith()} -Return 1 if string {\cf s} ends with the substring {\cf suffix}, -otherwise return 0. -\apiend - -\apiitem{int {\ce stoi} (string str)} -\indexapi{stoi()} -Convert/decode the initial part of {\cf str} to an {\cf int} -representation. Base 10 is assumed. -The return value will be {\cf 0} if the string doesn't appear to hold -valid representation of the destination type. -\apiend - -\apiitem{float {\ce stof} (string str)} -\indexapi{stof()} -Convert/decode the initial part of {\cf str} to a {\cf float} representation. -The return value will be {\cf 0} if the string doesn't appear to hold -valid representation of the destination type. -\apiend - -\apiitem{int {\ce split} (string str, output string results[], string sep, int maxsplit) \\ -int {\ce split} (string str, output string results[], string sep) \\ -int {\ce split} (string str, output string results[])} -\indexapi{split()} - -Fills the {\cf result} array with the words in the string {\cf str}, -using {\cf sep} as the delimiter string. If {\cf maxsplit} is supplied, -at most {\cf maxsplit} splits are done. If {\cf sep} is {\cf ""} (or if -not supplied), any whitespace string is a separator. The value returned -is the number of elements (separated strings) written to the {\cf results} -array. -\apiend - -\apiitem{string {\ce substr} (string s, int start, int length)\\ -string {\ce substr} (string s, int start)} -\indexapi{substr()} -Return at most \emph{length} characters from \emph{s}, starting with the -character indexed by \emph{start} (beginning with 0). If \emph{length} -is omitted, return the rest of \emph{s}, starting with \emph{start}. If -\emph{start} is negative, it counts backwards from the end of the string -(for example, {\cf substr(s,-1)} returns just the last character of -\emph{s}). -\apiend - -\apiitem{int {\ce getchar} (string s, int n)} -\indexapi{getchar()} -Returns the numeric value of the $n^{\mathrm{th}}$ character of the string, -or {\cf 0} if {\cf n} does not index a valid character of the string. -\apiend - -\apiitem{int {\ce hash} (string s)} -\indexapi{hash()} -Returns a deterministic, repeatable \emph{hash} of the string. -\apiend - -\apiitem{int {\ce regex_search} (string subject, string regex) \\ -int {\ce regex_search} (string subject, int results[], string regex)} -\indexapi{regex_search()} -Returns 1 if any substring of \emph{subject} matches a standard POSIX -regular expression \emph{regex}, 0 if it does not. - -In the form that also supplies a {\cf results} array, when a match is -found, the array will be filled in as follows: - -\begin{tabular}{p{1.5in} p{3.5in}} -{\cf\small results[0]} & the character index of the start of the - sequence that matched the regular expression. \\ -{\cf\small results[1]} & the character index of the end (i.e., - one past the last matching character) of the sequence that matched the - regular expression. \\ -{\cf\small results[}$2i$ {\cf ]} & the character index of the - start of the sequence that matched sub-expression $i$ of the regular - expression. \\ -{\cf\small results[}$2i+1$ {\cf]} & the character index of the - end (i.e., one past the last matching character) of the sequence that - matched sub-expression $i$ of the regular expression. -\end{tabular} - -\noindent Sub-expressions are denoted by surrounding them in -parentheses. in the regular expression. - -A few examples illustrate regular expression searching: - -\begin{code} - regex_search ("foobar.baz", "bar") = 1 - regex_search ("foobar.baz", "bark") = 0 - - int match[2]; - regex_search ("foobar.baz", match, "[Oo]{2}") = 1 - (match[0] == 1, match[1] == 3) - substr ("foobar.baz", match[0], match[1]-match[0]) = "oo" - - int match[6]; - regex_search ("foobar.baz", match, "(f[Oo]{2}).*(.az)") = 1 - substr ("foobar.baz", match[0], match[1]-match[0]) = "foobar.baz" - substr ("foobar.baz", match[2], match[3]-match[2]) = "foo" - substr ("foobar.baz", match[4], match[5]-match[4]) = "baz" -\end{code} - -\apiend - -\apiitem{int {\ce regex_match} (string subject, string regex) \\ -int {\ce regex_match} (string subject, int results[], string regex)} -\indexapi{regex_match()} -Identical to {\cf regex_search}, except that it must match the -\emph{whole} {\cf subject} string, not merely a substring. -\apiend - - -%\begin{annotate} -%Should we look at Pystring and add useful things here? -%\end{annotate} - - -\section{Texture} -\label{sec:stdlib:texture} -\index{texture functions} -\index{functions!texture} -\index{texture mapping} - -\apiitem{\emph{type} \textbf{texture} (string filename, float s, float t, \pl) \\ -\emph{type} \textbf{texture} (string filename, float s, float t, \\ -\spc\spc\spc float dsdx, float dtdx, float dsdy, float dtdy, \pl)} -\indexapi{texture()} - -Perform a texture lookup of an image file, indexed by 2D coordinates -$(s,t)$, antialiased over a region defined by the differentials -\emph{dsdx, dtdx, dsdy} and \emph{dtdy} (which are computed -automatically from $s$ and $t$, if not supplied). Whether the results -are assigned to a \float or a \color (or type cast to one of those) -determines whether the texture lookup is a single channel or three -channels. - -The 2D lookup coordinate(s) may be followed by optional key-value -arguments (see Section~\ref{sec:syntax:functioncalls}) that control the behavior of {\cf texture()}: - -\apiitem{"blur", } -\vspace{12pt} -Additional blur when looking up the texture value (default: 0). The -blur amount is relative to the size of the texture (i.e., 0.1 blurs by a -kernel that is 10\% of the full width and height of the texture). - -The blur may be specified separately in the $s$ and $t$ directions by -using the \qkw{sblur} and \qkw{tblur} parameters, respectively. -\apiend -\vspace{-16pt} - -\apiitem{"width", } -\vspace{12pt} -Scale (multiply) the size of the filter as defined by the differentials -(or implicitly by the differentials of $s$ and $t$). The default is -{\cf 1}, meaning that no special scaling is performed. A width of -{\cf 0} would effectively turn off texture filtering entirely. - -The width value may be specified separately in the $s$ and $t$ -directions by using the \qkw{swidth} and \qkw{twidth} parameters, -respectively. -\apiend -\vspace{-16pt} - -\apiitem{"wrap", } -\vspace{12pt} - -Specifies how the texture \emph{wraps} coordinates outside the $[0,1]$ -range. Supported wrap modes include: \qkw{black}, \qkw{periodic}, -\qkw{clamp}, \qkw{mirror}, and \qkw{default} (which is the default). A -value of \qkw{default} indicates that the renderer should use any wrap -modes specified in the texture file itself (a non-\qkw{default} value -overrides any wrap mode specified by the file). - -The wrap modes may be specified separately in the $s$ and $t$ directions -by using the \qkw{swrap} and \qkw{twrap} parameters, respectively. -\apiend -\vspace{-16pt} - -\apiitem{"firstchannel", } -\vspace{12pt} -The first channel to look up from the texture map (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"subimage", \\ -"subimage", } -\vspace{12pt} -Specify the subimage (by numerical index, or name) of the subimage -within a multi-image texture file (default: subimage 0). -\apiend -\vspace{-16pt} - -\apiitem{"fill", } -\vspace{12pt} -The value to return for any channels that are requested, -but not present in the texture file (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"missingcolor", , "missingalpha", } -\vspace{12pt} -If present, supplies a missing color (and alpha value) that will -be used for missing or broken textures -- \emph{instead of} treating -it as an error. If you want a missing or broken texture to be reported -as an error, you must not supply the optional \qkw{missingcolor} -parameter. -\apiend -\vspace{-16pt} - -\apiitem{"alpha", } -\vspace{12pt} -The alpha channel (presumed to be the next channel following the -channels returned by the {\cf texture()} call) will be stored in the -variable specified. This allows for RGBA lookups in a single call to -{\cf texture()}. -\apiend -\vspace{-16pt} - -\apiitem{"errormessage", } -\vspace{12pt} -If this option is supplied, any error messages generated by the texture -system will be stored in the specified variable rather than issuing error -calls to the renderer, thus leaving it up to the shader to handle any -errors. The error message stored will be \qkw{} if no error occurred. -\apiend -\vspace{-16pt} - -\apiitem{"interp", } -\vspace{12pt} -Overrides the texture interpolation method: \qkw{smartcubic} (the -default), \qkw{cubic}, \qkw{linear}, or \qkw{closest}. -\apiend -\vspace{-16pt} - -\apiend - -\apiitem{\emph{type} \textbf{texture3d} (string filename, point p, \pl) \\ -\emph{type} \textbf{texture3d} (string filename, point p, vector dpdx, -vector dpdy, \\ \bigspc\bigspc vector dpdz, \pl)} -\indexapi{texture3d()} - -Perform a 3D lookup of a volume texture, indexed by 3D coordinate -$p$, antialiased over a region defined by the differentials -\emph{dpdx, dpdy}, and \emph{dpdz} (which are computed -automatically from $p$, if not supplied). Whether the results -are assigned to a \float or a \color (or type cast to one of those) -determines whether the texture lookup is a single channel or three -channels. - -The {\cf p} coordinate (and {\cf dpdx}, {\cf dpdy}, and {\cf dpdz} -derivatives, if supplied) are assumed to be in \commonspace and will be -automatically transformed into volume local coordinates, if such a -transormation is specified in the volume file itself. - -The 3D lookup coordinate may be followed by optional token/value -arguments that control the behavior of {\cf texture3d()}: - -\apiitem{"blur", } -\vspace{12pt} -Additional blur when looking up the texture value (default: 0). The -blur amount is relative to the size of the texture (i.e., 0.1 blurs by a -kernel that is 10\% of the full width, height, and depth of the texture). - -The blur may be specified separately in the $s$, $t$, and $r$ directions by -using the \qkw{sblur}, \qkw{tblur}, and \qkw{rblur} parameters, respectively. -\apiend -\vspace{-16pt} - -\apiitem{"width", } -\vspace{12pt} -Scale (multiply) the size of the filter as defined by the differentials -(or implicitly by the differentials of $s$, $t$, and $r$). The default is -{\cf 1}, meaning that no special scaling is performed. A width of -{\cf 0} would effectively turn off texture filtering entirely. - -The width value may be specified separately in the $s$, $t$, and $r$ -directions by using the \qkw{swidth}, \qkw{twidth}, and \qkw{rwidth} parameters, -respectively. -\apiend -\vspace{-16pt} - -\apiitem{"wrap", } -\vspace{12pt} - -Specifies how the texture \emph{wraps} coordinates outside the $[0,1]$ -range. Supported wrap modes include: \qkw{black}, \qkw{periodic}, -\qkw{clamp}, \qkw{mirror}, and \qkw{default} (which is the default). A -value of \qkw{default} indicates that the renderer should use any wrap -modes specified in the texture file itself (a non-\qkw{default} value -overrides any wrap mode specified by the file). - -The wrap modes may be specified separately in the $s$, $t$, and $r$ -directions by using the \qkw{swrap}, \qkw{twrap}, and \qkw{rwrap} -parameters, respectively. -\apiend -\vspace{-16pt} - -\apiitem{"firstchannel", } -\vspace{12pt} -The first channel to look up from the texture map (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"subimage", \\ -"subimage", } -\vspace{12pt} -Specify the subimage (by numerical index, or name) of the subimage -within a multi-image texture file (default: subimage 0). -\apiend -\vspace{-16pt} - -\apiitem{"fill", } -\vspace{12pt} -The value to return for any channels that are requested, -but not present in the texture file (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"missingcolor", , "missingalpha", } -\vspace{12pt} -If present, supplies a missing color (and alpha value) that will -be used for missing or broken textures -- \emph{instead of} treating -it as an error. If you want a missing or broken texture to be reported -as an error, you must not supply the optional \qkw{missingcolor} -parameter. -\apiend -\vspace{-16pt} - -\apiitem{"time", } -\vspace{12pt} -A time value to use if the volume texture specifies a time-varying -local transformation (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"alpha", } -\vspace{12pt} -The alpha channel (presumed to be the next channel following the -channels returned by the {\cf texture3d()} call) will be stored in the -variable specified. This allows for RGBA lookups in a single call to -{\cf texture3d()}. -\apiend -\vspace{-16pt} - -\apiitem{"errormessage", } -\vspace{12pt} -If this option is supplied, any error messages generated by the texture -system will be stored in the specified variable rather than issuing error -calls to the renderer, thus leaving it up to the shader to handle any -errors. The error message stored will be \qkw{} if no error occurred. -\apiend -\vspace{-16pt} - -\apiend - -\apiitem{\emph{type} \textbf{environment} (string filename, vector R, \pl) \\ -\emph{type} \textbf{environment} (string filename, vector R, \\ -\bigspc\bigspc vector dRdx, vector dRdy, \pl)} -\indexapi{environment()} - -Perform an environment map lookup of an image file, indexed by direction -$R$, antialiased over a region defined by the differentials -\emph{dRdx, dRdy} (which are computed -automatically from $R$, if not supplied). Whether the results -are assigned to a \float or a \color (or type cast to one of those) -determines whether the texture lookup is a single channel or three -channels. - -The lookup direction (and optional derivatives) may be followed by optional token/value -arguments that control the behavior of {\cf environment()}: - -\apiitem{"blur", } -\vspace{12pt} -Additional blur when looking up the texture value (default: 0). The -blur amount is relative to the size of the texture (i.e., 0.1 blurs by a -kernel that is 10\% of the full width and height of the texture). - -The blur may be specified separately in the $s$ and $t$ directions by -using the \qkw{sblur} and \qkw{tblur} parameters, respectively. -\apiend -\vspace{-16pt} - -\apiitem{"width", } -\vspace{12pt} -Scale (multiply) the size of the filter as defined by the differentials -(or implicitly by the differentials of $s$ and $t$). The default is -{\cf 1}, meaning that no special scaling is performed. A width of -{\cf 0} would effectively turn off texture filtering entirely. - -The width value may be specified separately in the $s$ and $t$ -directions by using the \qkw{swidth} and \qkw{twidth} parameters, -respectively. -\apiend -\vspace{-16pt} - -\apiitem{"firstchannel", } -\vspace{12pt} -The first channel to look up from the texture map (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"fill", } -\vspace{12pt} -The value to return for any channels that are requested, but -not present in the texture file (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"missingcolor", , "missingalpha", } -\vspace{12pt} -If present, supplies a missing color (and alpha value) that will -be used for missing or broken textures -- \emph{instead of} treating -it as an error. If you want a missing or broken texture to be reported -as an error, you must not supply the optional \qkw{missingcolor} -parameter. -\apiend -\vspace{-16pt} - -\apiitem{"alpha", } -\vspace{12pt} -The alpha channel (presumed to be the next channel following the -channels returned by the {\cf environment()} call) will be stored in the -variable specified. This allows for RGBA lookups in a single call to -{\cf environment()}. -\apiend -\vspace{-16pt} - -\apiitem{"errormessage", } -\vspace{12pt} -If this option is supplied, any error messages generated by the texture -system will be stored in the specified variable rather than issuing error -calls to the renderer, thus leaving it up to the shader to handle any -errors. The error message stored will be \qkw{} if no error occurred. -\apiend -\vspace{-16pt} - -\apiend - - -\newpage -\apiitem{int {\ce gettextureinfo} (string texturename, string paramname,\\ -\bigspc\bigspc output \emph{type} destination) \\ -int {\ce gettextureinfo} (string texturename, float s, float t, string paramname,\\ -\bigspc\bigspc output \emph{type} destination) -} -\indexapi{gettextureinfo()} - -Retrieves a parameter from a named texture file. If the file is found, -and has a parameter that matches the name and type specified, its value -will be stored in \emph{destination} and {\cf gettextureinfo} will -return {\cf 1}. If the file is not found, or doesn't have a matching -parameter (including if the type does not match), \emph{destination} -will not be modified and {\cf gettextureinfo} will return {\cf 0}. - -The version of {\cf gettextureinfo} that takes {\cf s} and {\cf t} parameters -retrieves information about the texture file that will be used for those -texture coordinates. This can be useful for UDIM textures that may use -different texture files for different regions, based on the corodinates. For -regular, non-UDIM textures, the coordinates, if supplied, will be ignored. -When UDIM textures are queried without coordinates supplied, it will succeed -and return the texture info only if that parameter is found and has the same -value in all files comprising the UDIM set. (Note: the version with -coordinates was added in OSL 1.12.) - -Valid parameters recognized are listed below: - -\smallskip - -\begin{tabular}{p{1.1in} p{0.5in} p{3.4in}} -{\bf Name} & {\bf Type} & {\bf Description} \\ -\hline - -\qkw{exists} & {\cf int} & Result is 1 if the file exists -and is an texture format that \product can read, or 0 if the file -does not exist, or could not be properly read as a texture. Note that unlike -all other queries, this query will ``succeed'' (return {\cf 1}) if the -file does not exist. \\[0.75ex] - -\qkw{resolution} & {\cf int[2]} & The resolution ($x$ and $y$) of the -highest MIPmap level stored in the texture map. \\[0.75ex] - -\qkw{resolution} & {\cf int[3]} & The resolution ($x$, $y$, and $z$) of -the highest MIPmap level stored in the 3D texture map. If it isn't a -volumetric texture, the third component ($z$ resolution) will be -1.\\[0.75ex] - -\qkw{channels} & \inttype & The number of channels in the texture -map. \\[0.75ex] - -\qkw{type} & {\cf string} & Returns the semantic type of the texture, -one of: \qkws{Plain Texture}, \qkws{Shadow}, \qkws{Environment}, -\qkws{Volume Texture}. \\[0.75ex] - -\qkw{subimages} & {\cf int} & Returns the number of subimages in the -texture file. \\[0.75ex] - -\qkw{textureformat} & {\cf string} & Returns the texture format, one of: -\qkws{Plain Texture}, \qkws{Shadow}, \qkws{CubeFace Shadow}, \qkws{Volume - Shadow}, \qkws{CubeFace Environment}, \qkws{LatLong Environment}, -\qkws{Volume Texture}. Note that this differs from \qkw{type} in that it -specifically distinguishes between the different types of shadows and -environment maps. \\[0.75ex] - -\noindent ...continued... -\end{tabular} - -\begin{tabular}{p{1.1in} p{0.5in} p{3.4in}} -{\bf Name} & {\bf Type} & {\bf Description} \\ -\hline - -\qkw{datawindow} & {\cf int[]} & -Returns the pixel data window of the image. The argument is an {\cf int} -array either of length 4 or 6, in which will be placed the (xmin, ymin, -xmax, ymax) or (xmin, ymin, zmin, xmax, ymax, zmax), respectively. -(N.B. the $z$ values may be useful for 3D/volumetric images; for 2D images -they will be 0). \\[0.75ex] - -\qkw{displaywindow} & {\cf int[]} & -Returns the display (a.k.a.\ full) window of the image. The argument is an {\cf int} -array either of length 4 or 6, in which will be placed the (xmin, ymin, -xmax, ymax) or (xmin, ymin, zmin, xmax, ymax, zmax), respectively. -(N.B. the $z$ values may be useful for 3D/volumetric images; for 2D images -they will be 0). \\[0.75ex] - -\qkw{worldtocamera} & \matrix & If the texture is a rendered image, -retrieves the world-to-camera 3D transformation matrix that was used when it -was created.\\[0.75ex] - -\qkw{worldtoscreen} & \matrix & If the texture is a rendered image, -retrieves the matrix that projected points from world space into a 2D screen -coordinate system where $x$ and $y$ range from $-1$ to $+1$. \\[0.75ex] - -\qkw{averagecolor} & {\cf color} & -Retrieves the average color (first three channels) of the texture. \\[0.75ex] - -\qkw{averagealpha} & {\cf float} & -Retrieves the average alpha (the channel with \qkw{A} name) of the texture. \\[0.75ex] - -\emph{anything else} & \emph{any} & Searches for matching name and -type in the metadata or other header information of the texture file. -%\hline -\end{tabular} -\apiend - - - -\newpage -\apiitem{int {\ce pointcloud_search} (string ptcname, point pos, float radius,\\ -\bigspc\bigspc int maxpoints, [int sort,] - string attr, Type data[],\\ -\bigspc\bigspc ..., string attrN, Type dataN[] )} -\indexapi{pointcloud_search} - -Search the named point cloud for the {\cf maxpoints} closest points to -{\cf pos} within the given {\cf radius}, -returning the values of any named attributes of those points in the the -given {\cf data} arrays. If the optional {\cf sort} parameter is present -and is nonzero, the ordering of the points -found will be sorted by distance from {\cf pos}, from closest to farthest; -otherwise, the results are guaranteed to be the {\cf maxpoints} closest -to {\cf pos}, but not necessarily sorted by distance (this may be -faster for some implementations than when sorted results are -required). The return value is the number of points returned, ranging -from 0 (nothing found in the neighborhood) to the lesser of {\cf maxpoints} -and the actual lengths of the arrays (the arrays will never be written -beyond their actual length). - -These attribute names are reserved: - -\begin{tabular}{p{1.2in} p{0.5in} p{3.2in}} -\qkw{position} & {\cf point} & The position of each point \\ -\qkw{distance} & {\cf float} & The distance between the point and {\cf pos} \\ -\qkw{index} & {\cf int} & The point's unique index within the cloud -\end{tabular} - -Note that the named point cloud will be created, if it does not yet -exist in memory, and that it will be initialized by reading a point -cloud from disk, if there is one matching the name. - -Generally, the element type of the data arrays must match exactly the type -of the point data attribute, or else you will get a runtime error. But there -are two exceptions: (1) ``triple'' types (\color, \point, \vector, \normal) -are considered interchangeable; and (2) it is legal to retrieve {\cf float} -arrays (e.g., a point cloud attribute that is {\cf float[4]}) into a regular -array of {\cf float}, and the results will simply be concatenated into the -larger array (which must still be big enough, in total, to hold {\cf -maxpoints} of the data type in the file). - -\noindent Example: - -\begin{code} - float r = 3.0; - point pos[10]; - color col[10]; - int n = pointcloud_search ("particles.ptc", P, r, 10, - "position", pos, "color", col); - printf ("Found %d particles within radius %f of (%p)\n", r, P); - for (int i = 0; i < n; ++i) - printf (" position (%f) -> color (%g)\n", pos[i], col[i]); -\end{code} - -\apiend - -\apiitem{int {\ce pointcloud_get} (string ptcname, int indices[], \\ -\bigspc\bigspc int count, string attr, \emph{type} data[])} -\indexapi{pointcloud_get} - -Given a point cloud and a list of points {\cf indices[0..count-1]}, -store the attribute named by {\cf attr} for each point, respectively, in -{\cf data[0..count-1]}. Return 1 if successful, 0 for failure, which -could include the attribute not matching the type of {\cf data}, invalid -indices, or an unknown point cloud file. - -This can be used in conjunction with {\cf pointcloud_search()}, as -in the following example: - -\begin{code} - float r = 3.0; - int indices[10]; - int n = pointcloud_search ("particles.ptc", P, r, 10, - "index", indices); - float temp[10]; // presumed to be "float" attribute - float quaternions[40]; // presumed to be "float[4]" attribute - int ok = pointcloud_get ("particles.ptc", indices, n, - "temperature", temp, - "quat", quaternions); -\end{code} - -As with {\cf pointcloud_search}, the element type of the data array must -either be equivalent to the point cloud attribute being retrieved, or else -when retrieving {\cf float} arrays (e.g., a point cloud attribute -that is {\cf float[4]}) into a regular array of {\cf float}, and the -results will simply be concatenated into the larger array (which must -still be big enough, in total, to hold {\cf maxpoints} of the data type -in the file). -\apiend - - - -\apiitem{int {\ce pointcloud_write} (string ptcname, point pos, \\ -\bigspc\bigspc string attr1, \emph{type} data1, ...)} -\indexapi{pointcloud_write} - -Save the tuple (\emph{attr1}, \emph{data1}, ..., \emph{attrN}, -\emph{dataN}) at position \emph{pos} in a named point cloud. The point -cloud will be saved when the frame is finished computing. Return 1 if -successful, 0 for failure, which could include the attributes not -matching names or types at different positions in the point cloud. - -Example: -\begin{code} - color C = ...; - int ok = pointcloud_write ("particles.ptc", P, "normal", N, "color", C); -\end{code} -\apiend - - -\newpage -\section{Material Closures} -\label{sec:stdlib:light} -\label{sec:stdlib:closures} -\index{material closure functions} -\index{functions!closures} - -For \closurecolor functions, the return ``value'' is symbolic and may -be passed to an output variable or assigned to \Ci, to be evaluated at a -later time convenient to the renderer in order to compute the exitant -radiance in the direction {\cf -I}. But the shader itself cannot -examine the numeric values of the \colorclosure. - -The intent of this specification is to give a minimal but useful set of -material closures that you can expect any renderer implementation to -provide. Individual renderers may supply additional closures that are -specific to the workings of that renderer. Additionally, individual -renderers may allow additional parameters or controls on the standard -closures, passed as token/value pairs following the required arguments -(much like the optional arguments to the {\cf texture()} function). -Consult the documentation for your specific renderer for details. - -OSL's standard material closures are by synchronized to match the names and -properties of the physically-based shading nodes of MaterialX v1.38 -(\url{https://www.materialx.org/}). - -\subsection{Surface BSDF closures} - -\apiitem{\closurecolor\ {\ce oren_nayar_diffuse_bsdf}(normal N, color albedo, float roughness, int energy_compensation=0)} -\indexapi{oren_nayar_diffuse_bsdf()} - -Constructs a diffuse reflection BSDF based on the Oren-Nayar reflectance -model. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{albedo} - \vspace{12pt} - Surface albedo. - \apiend - \vspace{-16pt} - - \apiitem{roughness} - \vspace{12pt} - Surface roughness [0,1]. A value of 0.0 gives Lambertian reflectance. - \apiend -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend - - \apiitem{energy_compensation} - \vspace{12pt} - Optional int parameter to select if energy compensation should be applied. - \apiend - -The Oren-Nayar reflection model is described in M.\ Oren and S.\ K.\ -Nayar, ``Generalization of Lambert's Reflectance Model,'' Proceedings of -SIGGRAPH 1994, pp.239-246 (July, 1994). - -The energy compensated model is described in the white paper: ``An energy-preserving Qualitative Oren-Nayar model'' by Jamie Portsmouth. - -\apiend - - -\apiitem{\colorclosure\ {\ce burley_diffuse_bsdf} (normal N, color albedo, float roughness)} -\indexapi{burley_diffuse_bsdf()} - -Constructs a diffuse reflection BSDF based on the corresponding component of -the Disney Principled shading model. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{albedo} - \vspace{12pt} - Surface albedo. - \apiend - \vspace{-16pt} - - \apiitem{roughness} - \vspace{12pt} - Surface roughness [0,1]. A value of 0.0 gives Lambertian reflectance. - \apiend -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend - -\apiend - - -\apiitem{\colorclosure\ {\ce dielectric_bsdf} (normal N, vector U, color reflection_tint, \\ -\spc\spc color transmission_tint, float roughness_x, float roughness_y, \\ -\spc\spc float ior, string distribution)} -\indexapi{dielectric_bsdf()} - -Constructs a reflection and/or transmission BSDF based on a microfacet -reflectance model and a Fresnel curve for dielectrics. The two tint parameters -control the contribution of each reflection/transmission lobe. The tints -should remain 100\% white for a physically correct dielectric, but can be -tweaked for artistic control or set to 0.0 for disabling a lobe. - -The closure may be vertically layered over a base BSDF for the surface beneath -the dielectric layer. This is done using the {\cf layer()} closure. By -chaining multiple {\cf dielectric_bsdf} closures you can describe a surface -with multiple specular lobes. If transmission is enabled (transmission_tint -$>$ 0.0) the closure may be layered over a VDF closure describing the surface -interior to handle absorption and scattering inside the medium. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{U} - \vspace{12pt} - Tangent vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{reflection_tint} - \vspace{12pt} - Weight per color channel for the reflection lobe. Should be (1,1,1) for a physically-correct dielectric surface, but can be tweaked for artistic control. Set to (0,0,0) to disable reflection. - \apiend - \vspace{-16pt} - - \apiitem{transmission_tint} - \vspace{12pt} - Weight per color channel for the transmission lobe. Should be (1,1,1) for a physically-correct dielectric surface, but can be tweaked for artistic control. Set to (0,0,0) to disable transmission. - \apiend - \vspace{-16pt} - - \apiitem{roughness_x} - \vspace{12pt} - Surface roughness in the U direction with a perceptually linear response over its range. - \apiend - \vspace{-16pt} - - \apiitem{roughness_y} - \vspace{12pt} - Surface roughness in the V direction with a perceptually linear response - over its range. - \apiend - \vspace{-16pt} - - \apiitem{ior} - \vspace{12pt} - Refraction index. - \apiend - \vspace{-16pt} - - \apiitem{distribution} - \vspace{12pt} - Microfacet distribution. An implementation is expected to support the - following distributions: \qkw{ggx} - \apiend - \vspace{-16pt} - - \apiitem{thinfilm_thickness} - \vspace{12pt} - Optional float parameter for thickness of an iridescent thin film layer on - top of this BSDF. Given in nanometers. - \apiend - \vspace{-16pt} - - \apiitem{thinfilm_ior} - \vspace{12pt} - Optional float parameter for refraction index of the thin film layer. - \apiend -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend - -\apiend - - -\apiitem{\colorclosure\ {\ce conductor_bsdf} (normal N, vector U, float roughness_x, \\ -\spc\spc float roughness_y, color ior, color extinction, string distribution)} -\indexapi{conductor_bsdf()} - -Constructs a reflection BSDF based on a microfacet reflectance model. Uses a -Fresnel curve with complex refraction index for conductors/metals. If an -artistic parametrization is preferred the {\cf artistic_ior()} utility -function can be used to convert from artistic to physical parameters. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{U} - \vspace{12pt} - Tangent vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{roughness_x} - \vspace{12pt} - Surface roughness in the U direction with a perceptually linear response over its range. - \apiend - \vspace{-16pt} - - \apiitem{roughness_y} - \vspace{12pt} - Surface roughness in the V direction with a perceptually linear response over its range. - \apiend - \vspace{-16pt} - - \apiitem{ior} - \vspace{12pt} - Refraction index. - \apiend - \vspace{-16pt} - - \apiitem{extinction} - \vspace{12pt} - Extinction coefficient. - \apiend - \vspace{-16pt} - - \apiitem{distribution} - \vspace{12pt} - Microfacet distribution. An implementation is expected to support the - following distributions: \qkw{ggx} - \apiend - \vspace{-16pt} - - \apiitem{thinfilm_thickness} - \vspace{12pt} - Optional float parameter for thickness of an iridescent thin film layer on - top of this BSDF. Given in nanometers. - \apiend - \vspace{-16pt} - - \apiitem{thinfilm_ior} - \vspace{12pt} - Optional float parameter for refraction index of the thin film layer. - \apiend -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend - -\apiend - - -\apiitem{\colorclosure\ {\ce generalized_schlick_bsdf} (normal N, vector U, \\ -\spc\spc color reflection_tint, color transmission_tint, \\ -\spc\spc float roughness_x, float roughness_y, color f0, color f90, \\ -\spc\spc float exponent, string distribution)} -\indexapi{generalized_schlick_bsdf()} - -Constructs a reflection and/or transmission BSDF based on a microfacet -reflectance model and a generalized Schlick Fresnel curve. The two tint -parameters control the contribution of each reflection/transmission lobe. - -The closure may be vertically layered over a base BSDF for the surface beneath -the dielectric layer. This is done using the layer() closure. By chaining -multiple {\cf dielectric_bsdf} closures you can describe a surface with multiple -specular lobes. If transmission is enabled (transmission_tint $>$ 0.0) the -closure may be layered over a VDF closure describing the surface interior to -handle absorption and scattering inside the medium. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{U} - \vspace{12pt} - Tangent vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{reflection_tint} - \vspace{12pt} - Weight per color channel for the reflection lobe. Set to (0,0,0) to disable - reflection. - \apiend - \vspace{-16pt} - - \apiitem{transmission_tint} - \vspace{12pt} - Weight per color channel for the transmission lobe. Set to (0,0,0) to - disable transmission. - \apiend - \vspace{-16pt} - - \apiitem{roughness_x} - \vspace{12pt} - Surface roughness in the U direction with a perceptually linear response - over its range. - \apiend - \vspace{-16pt} - - \apiitem{roughness_y} - \vspace{12pt} - Surface roughness in the V direction with a perceptually linear response - over its range. - \apiend - \vspace{-16pt} - - \apiitem{f0} - \vspace{12pt} - Reflectivity per color channel at facing angles. - \apiend - \vspace{-16pt} - - \apiitem{f90} - \vspace{12pt} - Reflectivity per color channel at grazing angles. - \apiend - \vspace{-16pt} - - \apiitem{exponent} - \vspace{12pt} - Variable exponent for the Schlick Fresnel curve, the default value should be - 5. - \apiend - \vspace{-16pt} - - \apiitem{distribution} - \vspace{12pt} - Microfacet distribution. An implementation is expected to support the - following distributions: \qkw{ggx} - \apiend - \vspace{-16pt} - - \apiitem{thinfilm_thickness} - \vspace{12pt} - Optional float parameter for thickness of an iridescent thin film layer on - top of this BSDF. Given in nanometers. - \apiend - \vspace{-16pt} - - \apiitem{thinfilm_ior} - \vspace{12pt} - Optional float parameter for refraction index of the thin film layer. - \apiend -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend - -\apiend - - - -\apiitem{\colorclosure\ {\ce translucent_bsdf} (normal N, color albedo)} -\indexapi{translucent_bsdf()} - -Constructs a translucent (diffuse transmission) BSDF based on the Lambert -reflectance model. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{albedo} - \vspace{12pt} - Surface albedo. - \apiend - \vspace{-16pt} - - \apiitem{roughness} - \vspace{12pt} - Surface roughness [0,1]. A value of 0.0 gives Lambertian reflectance. - \apiend -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend - -\apiend - - -\apiitem{\colorclosure\ {\ce transparent_bsdf} ( )} -\indexapi{transparent_bsdf()} - -Constructs a closure that represents straight transmission through a surface. - -\apiend - - - -\apiitem{\colorclosure\ {\ce subsurface_bssrdf} ( )} -\indexapi{subsurface_bssrdf} -Constructs a BSSRDF for subsurface scattering within a homogeneous medium. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{albedo} - \vspace{12pt} - Effective albedo of the medium (after multiple scattering). The renderer is expected to - invert this color to derive the appropriate single-scattering albedo that will produce - this color for the average random walk. - \apiend - \vspace{-16pt} - - \apiitem{radius} - \vspace{12pt} - Average distance travelled inside the medium per color channel. This is typically taken - to be the mean-free path of the volume. - \apiend - \vspace{-16pt} - - \apiitem{anisotropy} - \vspace{12pt} - Scattering anisotropy [-1,1]. Negative values give backwards scattering, - positive values give forward scattering, and 0.0 gives uniform scattering. - \apiend - -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend -\apiend - - -\apiitem{\colorclosure\ {\ce sheen_bsdf} (normal N, color albedo, float roughness)} -\indexapi{sheen_bsdf()} - -Constructs a microfacet BSDF for the back-scattering properties of cloth-like -materials. This closure may be vertically layered over a base BSDF, where -energy that is not reflected will be transmitted to the base closure. - -\noindent Parameters include: - - \apiitem{N} - \vspace{12pt} - Normal vector of the surface point being shaded. - \apiend - \vspace{-16pt} - - \apiitem{albedo} - \vspace{12pt} - Surface albedo. - \apiend - \vspace{-16pt} - - \apiitem{roughness} - \vspace{12pt} - Surface roughness [0,1]. - \apiend -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend - -\apiend - - - -\subsection{Volumetric material closures} - -\apiitem{\colorclosure\ {\ce anisotropic_vdf} (color albedo, color extinction, float anisotropy)} -\indexapi{anisotropic_vdf} - -Constructs a VDF scattering light for a general participating medium, based on -the Henyey-Greenstein phase function. Forward, backward and uniform scattering -is supported and controlled by the anisotropy input. - -\noindent Parameters include: - - \apiitem{albedo} - \vspace{12pt} - Single-scattering albedo of the medium. - \apiend - \vspace{-16pt} - - \apiitem{extinction} - \vspace{12pt} - Volume extinction coefficient. - \apiend - - \apiitem{anisotropy} - \vspace{12pt} - Scattering anisotropy [-1,1]. Negative values give backwards scattering, - positive values give forward scattering, and 0.0 gives uniform scattering. - \apiend - -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend -\apiend - - -\apiitem{\colorclosure\ {\ce medium_vdf} (color albedo, float transmission_depth, \\ -\spc\spc color transmission_color, float anisotropy, float ior, int priority)} -\indexapi{medium_vdf} - -Constructs a VDF for light passing through a dielectric homogeneous medium, -such as glass or liquids. The parameters {\cf transmission_depth} and -{\cf transmission_color} control the extinction coefficient of the medium in an -artist-friendly way. A priority can be set to determine the ordering of -overlapping media. - -\noindent Parameters include: - - \apiitem{albedo} - \vspace{12pt} - Single-scattering albedo of the medium. - \apiend - \vspace{-16pt} - - \apiitem{transmission_depth} - \vspace{12pt} - Distance travelled inside the medium by white light before its color becomes - transmission_color by Beer's law. Given in scene length units, range - [0,infinity). Together with transmission_color this determines the - extinction coefficient of the medium. - \apiend - \vspace{-16pt} - - \apiitem{transmission_color} - \vspace{12pt} - Desired color resulting from white light transmitted a distance of - 'transmission_depth' through the medium. Together with transmission_depth - this determines the extinction coefficient of the medium. - \apiend - \vspace{-16pt} - - \apiitem{anisotropy} - \vspace{12pt} - Scattering anisotropy [-1,1]. Negative values give backwards scattering, - positive values give forward scattering, and 0.0 gives uniform scattering. - \apiend - - \apiitem{ior} - \vspace{12pt} - Refraction index of the medium. - \apiend - \vspace{-16pt} - - \apiitem{priority} - \vspace{12pt} - Priority of this medium (for nested dielectrics). - \apiend - \vspace{-16pt} - -% \vspace{-16pt} - - % \apiitem{label} - % \vspace{12pt} - % Optional string parameter to name this component. For use in AOVs / LPEs. - % \apiend -\apiend - - -\subsection{Light emission closures} - -\apiitem{\colorclosure\ {\ce uniform_edf} (color emittance)} -\indexapi{uniform_edf} -Constructs an EDF emitting light uniformly in all directions. -This is used to represent a glowing/emissive material. -When called in the context of a surface shader group, it implies that -light is emitted in a full hemisphere centered around the surface -normal. When called in the context of a volume shader group, it implies -that light is emitted evenly in all directions around the point being -shaded. - -The {\cf emittance} parameter is the amount of emission and -has units of radiance (e.g., -$\mathrm{W}\cdot\mathrm{sr}^{-1}\cdot\mathrm{m}^{-2}$). This means that a surface -directly seen by the camera will directly reproduce the closure weight in the -final pixel, regardless of being a surface or a volume. - -For an emissive surface, if you divide the return value of {\cf uniform_edf()} by -{\cf surfacearea() * M_PI}, then you can easily specify the total emissive -power of the light (e.g., $\mathrm{W}$), regardless of its physical size. -\apiend - - -\subsection{Layering and Signaling closures} - -\apiitem{\colorclosure\ {\ce layer} (closure color top, closure color base)} -\indexapi{layer()} -Vertically layer a layerable BSDF such as {\cf dielectric_bsdf}, -{\cf generalized_schlick_bsdf} or {\cf sheen_bsdf} over a BSDF or VDF. The -implementation is target specific, but a standard way of handling this is by -albedo scaling, using {\cf base*(1-reflectance(top)) + top}, where -reflectance() calculates the directional albedo of a given top BSDF. -\apiend - - -\apiitem{\colorclosure\ {\ce holdout} ( )} -\indexapi{holdout()} -Returns a \colorclosure that does not represent any additional light -reflection from the surface, but does signal to the renderer that -the surface is a \emph{holdout object} (appears transparent in -the final output yet hides objects behind it). ``Partial holdouts'' -may be designated by weighting the {\cf holdout()} closure by a -weight that is less than 1.0. -\apiend - - -\apiitem{\colorclosure\ {\ce debug} (string outputname)} -\indexapi{debug()} -Returns a \colorclosure that does not represent any additional light -reflection from the surface, but does signal to the renderer to add -the weight of the closure (which may be a {\cf float} or a \color) -to the named output (i.e., AOV). -\apiend - - -\subsection{Material utility functions} - -\apiitem{void {\ce artistic_ior} (color reflectivity, color edge_tint, \\ -\spc\spc output color ior, output color extinction)} -\indexapi{artistic_ior()} -Converts the artistic parameterization reflectivity and edge_tint to complex IOR values. -To be used with the conductor_bsdf() closure. - -\noindent Parameters include: - -\apiitem{reflectivity} -\vspace{12pt} -Reflectivity per color channel at facing angles (\emph{r} parameter in [OG14]) -\apiend -\vspace{-16pt} - -\apiitem{edge_tint} -\vspace{12pt} -Color bias for grazing angles (\emph{g} parameter in [OG14]). -NOTE: This is not equal to 'f90' in a Schlick Fresnel parameterization. -\apiend -\vspace{-16pt} - -\apiitem{ior} -\vspace{12pt} -Output refraction index. -\apiend -\vspace{-16pt} - -\apiitem{extinction} -\vspace{12pt} -Output extinction coefficient. -\apiend -% \vspace{-16pt} - -Reference: [OG14] Ole Gulbrandsen, "Artist Friendly Metallic Fresnel", Journal -of Computer Graphics Tools 3(4), 2014. -\url{http://jcgt.org/published/0003/04/03/paper.pdf} -\apiend - - -\subsection{Deprecated closures} - -These were described in the original OSL language specification, but -beginning with OSL 1.12, these are considered deprecated. Support for -them will be removed entirely in OSL 2.0. - -\subsubsection{Deprecated Surface closures} - -\apiitem{\colorclosure\ {\ce diffuse} (normal N)} -\indexapi{diffuse()} -Returns a \colorclosure that represents the Lambertian diffuse -reflectance of a smooth surface, -$$ \int_{\Omega}{\frac{1}{\pi} \max(0, N \cdot \omega) Cl(P,\omega) d\omega} $$ -where $N$ is the unit-length forward-facing surface normal at \P, -$\Omega$ is the set of all outgoing directions in the hemisphere -surrounding $N$, and $Cl(P,\omega)$ is the incident radiance at -\P coming from the direction $-\omega$. -\apiend - -\apiitem{\colorclosure\ {\ce phong} (normal N, float exponent)} -\indexapi{phong()} -Returns a \colorclosure that represents specular reflectance of the -surface using the Phong BRDF. The \emph{exponent} parameter -indicates how smooth or rough the material is (higher \emph{exponent} -values indicate a smoother surface). -\apiend - - -\apiitem{\colorclosure\ {\ce oren_nayar} (normal N, float sigma)} -\indexapi{oren_nayar()} - -Returns a \colorclosure that represents the diffuse reflectance of a -rough surface, implementing the Oren-Nayar reflectance formula. The -\emph{sigma} parameter indicates how smooth or rough the -microstructure of the material is, with 0 being perfectly smooth and -giving an appearance identical to {\cf diffuse()}. - -The Oren-Nayar reflection model is described in M.\ Oren and S.\ K.\ -Nayar, ``Generalization of Lambert's Reflectance Model,'' Proceedings of -SIGGRAPH 1994, pp.239-246 (July, 1994). - -\begin{comment} -Like all \closurecolors, the return ``value'' is symbolic and may be -evaluated at a later time convenient to the renderer in order to compute -the exitant radiance in the direction {\cf -I}. But aside from the -fact that the shader cannot examine the numeric values of the -\colorclosure, you may program \emph{as if} {\cf oren_nayar()} was -implemented as follows: - -\begin{code} - normal Nf = faceforward (normalize(N), I); - vector V = -normalize(I); - float sigma2 = sigma * sigma; - float A = 1 - 0.5 * sigma2 / (sigma2 + 0.33); - float B = 0.45 * sigma2 / (sigma2 + 0.09); - float theta_r = acos (dot (V, Nf)); // Angle between V and N - vector V_perp_N = normalize(V-Nf*dot(V,Nf)); // Part of V perpendicular to N - color C = 0; - for all lights within the hemisphere defined by (P, Nf, PI/2) { - /* L is the direction of light i, Cl is its incoming radiance */ - vector LN = normalize(L); - float cos_theta_i = dot(LN, N); - float cos_phi_diff = dot (V_perp_N, normalize(LN - Nf*cos_theta_i)); - float theta_i = acos (cos_theta_i); - float alpha = max (theta_i, theta_r); - float beta = min (theta_i, theta_r); - C += Cl * cos_theta_i * - (A + B * max(0,cos_phi_diff) * sin(alpha) * tan(beta)); - } - return C; -\end{code} -\end{comment} - -\apiend - -\apiitem{\colorclosure\ {\ce ward} (normal N, vector T, - float xrough, float yrough)} -\indexapi{ward()} - -Returns a \colorclosure that represents the anisotropic specular -reflectance of the surface at \P. The \N and {\cf T} vectors, both -presumed to be unit-length, are the surface normal and tangent, used to -establish a local coordinate system for the anisotropic effects. The -\emph{xrough} and \emph{yrough} specify the amount of roughness in the -tangent ({\cf T}) and bitangent ({\cf N} $\times$ {\cf T}) directions, -respectively. - -The Ward BRDF is described in Ward, G., ``Measuring and Modeling -Anisotropic Reflection,'' Proceedings of SIGGRAPH 1992. - -\begin{comment} -Like all \closurecolors, the return ``value'' is symbolic and is may be -evaluated at a later time convenient to the renderer in order to compute -the exitant radiance in the direction {\cf -I}. But aside from the -fact that the shader cannot examine the numeric values of the -\colorclosure, you may program \emph{as if} {\cf ward()} was -implemented as follows: - -\begin{code} - float sqr (float x) { return x*x; } - - vector V = -normalize(I); - float cos_theta_r = clamp (dot(N,V), 0.0001, 1); - vector X = T / xroughness; - vector Y = cross(T,N) / yroughness; - color C = 0; - for all lights within the hemisphere defined by (P, N, PI/2) { - /* L is the direction of light i, Cl is its incoming radiance */ - vector LN = normalize (L); - float cos_theta_i = dot (LN,N); - if (cos_theta_i > 0.0) { - vector H = normalize (V + LN); - float rho = exp (-2 * (sqr(dot(X,H)) + - sqr(dot(Y,H))) / (1 + dot(H,N))) - / sqrt (cos_theta_i * cos_theta_r); - C += Cl * cos_theta_i * rho; - } - } - return C / (4 * xroughness * yroughness); -\end{code} -\end{comment} -\apiend - -\apiitem{\colorclosure\ {\ce microfacet} (string distribution, normal N, -\\ \bigspc\bigspc float alpha, float eta, int refract)} -\indexapi{microfacet()} - -Returns a \colorclosure that represents scattering on the -surface using some microfacet distribution. A simplified isotropic version of -the previous function. - -\apiend - - -\apiitem{\colorclosure\ {\ce reflection} (normal N, float eta)} -\indexapi{reflection()} - -Returns a \colorclosure that represents sharp mirror-like reflection -from the surface. The reflection direction will be automatically computed -based on the incident angle. The {\cf eta} parameter is the index of -refraction of the material. The {\cf reflection} closure behaves -as if it were implemented as follows: - -\begin{code} - vector R = reflect (I, N); - return raytrace (R); -\end{code} - -\apiend - - -\apiitem{\colorclosure\ {\ce refraction} (normal N, float eta)} -\indexapi{refraction()} - -Returns a \colorclosure that represents sharp glass-like refraction of -objects ``behind'' the surface. The \emph{eta} parameter is the ratio -of the index of refraction of the medium on the ``inside'' of the -surface divided by the index of refration of the medium on the -``outside'' of the surface. The ``outside'' direction is the one -specified by \N. -The refraction direction will be automatically computed based on the -incident angle and \emph{eta}, and the radiance returned will be -automatically scaled by the Fresnel factor for dielectrics. -The {\cf refraction} closure behaves as if it were -implemented as follows: - -\begin{code} - float Kr, Kt; - vector R, T; - fresnel (I, N, eta, Kr, Kt, R, T); - return Kt * raytrace (T); -\end{code} -\apiend - -\apiitem{\colorclosure\ {\ce transparent} ( )} -\indexapi{transparent()} - -Returns a \colorclosure that shows the light \emph{behind} the surface -without any refractive bending of the light directions. -The {\cf transparent()} closure behaves as if it were implemented -as follows: - -\begin{code} - return raytrace (I); -\end{code} - -\apiend - -\apiitem{\colorclosure\ {\ce translucent} ( )} -\indexapi{translucent()} - -Returns a \colorclosure that represents the Lambertian diffuse -translucence of a smooth surface, which is much like {\cf diffuse()} -except that it gathers light from the \emph{far} side of the surface. -The {\cf translucent()} closure behaves as if it were implemented -as follows: - -\begin{code} - return diffuse (-N); -\end{code} - -\apiend - - -\begin{comment} -\apiitem{\colorclosure\ {\ce subsurface} ( )} -\indexapi{subsurface} -Returns a \colorclosure that represents the amount of \emph{subsurface -scattering} exhibited by the surface. - -% \begin{annotate} -% We'll determine later what the arguments to {\cf subsurface} need to be. -% FIXME -% \end{annotate} -\apiend -\end{comment} - -\subsubsection{Deprecated Volumetric closures} - -\apiitem{\colorclosure\ {\ce isotropic} ( )} -\indexapi{isotropic} -Returns a \colorclosure that represents the scattering of an isotropic -volumetric material, scattering light evenly in all directions, -regardless of its original direction. -\apiend - -\apiitem{\colorclosure\ {\ce henyey_greenstein} (float g)} -\indexapi{henyey_greenstein} -Returns a \colorclosure that represents the directional volumetric -scattering by small suspended particles. The {\cf g} parameter is the -anisotropy factor, in the range $(-1, 1)$, with positive values -indicating predominantly forward-scattering, negative values indicating -predominantly back-scattering, and value of $g=0$ resulting in isotropic -scattering. -\apiend - -\apiitem{\colorclosure\ {\ce absorption} ( )} -\indexapi{absorption} -Returns a \colorclosure that does not represent any additional -light scattering, but rather signals to the renderer the absorption -represents the scattering of an isotropic -volumetric material, scattering light evenly in all directions, -regardless of its original direction. -\apiend - -\subsubsection{Deprecated Emission closures} - -\apiitem{\colorclosure\ {\ce emission} ( )} -\indexapi{emission} -Returns a \colorclosure that represents a glowing/emissive material. -When called in the context of a surface shader group, it implies that -light is emitted in a full hemisphere centered around the surface -normal. When called in the context of a volume shader group, it implies -that light is emitted evenly in all directions around the point being -shaded. - -The weight of the emission closure has units of radiance (e.g., -$\mathrm{W}\cdot\mathrm{sr}^{-1}\cdot\mathrm{m}^{-2}$). This means that a surface -directly seen by the camera will directly reproduce the closure weight in the -final pixel, regardless of being a surface or a volume. - -For an emissive surface, if you divide the return value of {\cf emission()} by -{\cf surfacearea() * M_PI}, then you can easily specify the total emissive -power of the light (e.g., $\mathrm{W}$), regardless of its physical size. -\apiend - - -\apiitem{\colorclosure\ {\ce background} ( )} -\indexapi{background} -Returns a \colorclosure that represents the radiance of the -``background'' infinitely far away in the view direction. The -implementation is renderer-specific, but often involves looking -up from an HDRI environment map. -\apiend - - -\newpage -\section{Renderer state and message passing} -\label{sec:stdlib:state} -\index{functions!renderer state} -\index{message passing} - -\apiitem{int {\ce getattribute} (string name, output \emph{type} destination) \\ -int {\ce getattribute} (string name, int arrayindex, output \emph{type} -destination)\\ -int {\ce getattribute} (string object, string name, output \emph{type} destination) \\ -int {\ce getattribute} (string object, string name, int arrayindex, \\ -\bigspc\spc\spc output \emph{type} destination)} -\indexapi{getattribute()} -Retrieves a named renderer attribute or the value of an interpolated -geometric variable. -If an object is explicitly named, that is the only place that will be -searched (\qkw{global} means the global scene-wide attributes). For the -forms of the function with no object name, or if the object name is the -empty string \qkw{}, the renderer will first search -per-object attributes on the current object (or interpolated variables -with that name attached to the object), then if not found it will search -global scene-wide attributes. - -If the attribute is found and can be converted to the type of -\emph{destination}, the attribute's value will be stored in -\emph{destination} and {\cf getattribute} will return {\cf 1}. If not -found, or the type cannot be converted, \emph{destination} will not be -modified and {\cf getattribute} will return {\cf 0}. - -The automatic type conversions include those that are allowed by -assignment in OSL source code: {\cf int} to {\cf float}, {\cf float} to -{\cf int} (truncation), {\cf float} (or {\cf int}) to \emph{triple} -(replicating the value), any \emph{triple} to any other \emph{triple}. -Additionally, the following conversions which are not allowed by -assignment in OSL source code will also be performed by this call: -{\cf float} (or {\cf int}) to {\cf float[2]} (replication into both -array elements), {\cf float[2]} to \emph{triple} (setting the third -component to 0). - -The forms of this function that have the the {\cf arrayindex} parameter -will retrieve the individual indexed element of the named array. In this -case, \emph{name} must be an array attribute, the type of -\emph{destination} must be the type of the array element (not the type -of the whole array), and the value of \emph{arrayindex} must be a valid -index given the array's size. - -Tables giving ``standardized'' names for different kinds of attributes may -be found below. All renderers are expected to use the same names for these -attributes, but are free to choose any names for additional attributes they -wish to make queryable. - -\apiend - -\begin{table}[htbp] -\caption{Names of standard attributes that may be retrieved.}\label{tab:stdattributes} -\begin{tabular}{|p{1.8in}|p{0.6in}|p{2.8in}|} -\hline -{\bf Name} & {\bf Type} & {\bf Description} \\ -\hline -{\cf "osl:version"} & {\cf int} & Major*10000 + Minor*100 + patch. \\ -{\cf "shader:shadername"} & {\cf string} & Name of the shader master. \\ -{\cf "shader:layername"} & {\cf string} & Name of the layer instance. \\ -{\cf "shader:groupname"} & {\cf string} & Name of the shader group. \\ -\hline -\end{tabular} -\end{table} - -\begin{table}[htbp] -\caption{Names of standard camera attributes that may be retrieved. -If the {\cf getattribute()} function specifies an {\cf objectname} parameter -and it is the name of a valid camera, the value specific to that camera -is retrieved. If no specific camera is named, the global or default -camera is implied. -}\label{tab:cameraattributes} -\begin{tabular}{|p{1.8in}|p{0.6in}|p{2.8in}|} -\hline -{\bf Name} & {\bf Type} & {\bf Description} \\ -\hline -{\cf "camera:resolution"} & {\cf int[2]} & Image resolution. \\ -{\cf "camera:pixelaspect"} & {\cf float} & Pixel aspect ratio. \\ -{\cf "camera:projection"} & {\cf string} & Projection type (e.g., - \qkw{perspective}, \qkw{orthographic}, etc.) \\ -{\cf "camera:fov"} & {\cf float} & Field of fiew. \\ -{\cf "camera:clip_near"} & {\cf float} & Near clip distance. \\ -{\cf "camera:clip_far"} & {\cf float} & Far clip distance. \\ -{\cf "camera:clip"} & {\cf float[2]} & Near and far clip distances. \\ -{\cf "camera:shutter_open"} & {\cf float} & Shutter open time. \\ -{\cf "camera:shutter_close"} & {\cf float} & Shutter close time. \\ -{\cf "camera:shutter"} & {\cf float[2]} & Shutter open and close times. \\ -{\cf "camera:screen_window"} & {\cf float[4]} & Screen window (xmin, ymin, xmax, ymax). \\ -\hline -\end{tabular} -\end{table} - -\newpage - -\apiitem{void {\ce setmessage} (string name, output \emph{type} value)} -\indexapi{setmessage()} -Store a \emph{name}/\emph{value} pair in an area where it can later be -retrieved by other shaders attached to the same object. If there is -already a message with the same name attached to this shader invocation, -it will be replaced by the new value. -The message \emph{value} may be any basic scalar type, array, or closure, -but may not be a {\cf struct}. -\apiend - -%\apiitem{int {\ce getmessage} (string source, string name, output \emph{type} destination)} -\apiitem{int {\ce getmessage} (string name, output \emph{type} - destination) \\ -int {\ce getmessage} (string source, string name, output \emph{type} destination)} -\indexapi{getmessage()} -\label{sec:getmessage} - -Retrieve a message from another shader attached to the same object. -If a message is found -with the given name, and whose type matches that of \emph{destination}, -the value will be stored in \emph{destination} and {\cf getmessage()} -will return {\cf 1}. If no message is found that matches both the name -and type, \emph{destination} will be unchanged and {\cf getmessage()} -will return {\cf 0}. - -The \emph{source}, if supplied, designates from where the message should -be retrieved, and may have any of the following values: - -\vspace{-8pt} - -%\apiitem{"surface", "displacement", "volume"} -%\vspace{10pt} -%Retrieve the message from the named shader type present on the object -%being shaded. -%\apiend -%\vspace{-20pt} -%\end{comment} - -\apiitem{"trace"} -\vspace{10pt} -Retrieves data about the object hit by the last {\cf trace} call made. -Data recognized include: - -\begin{tabular}{p{0.8in} p{0.5in} p{3.3in}} -\qkw{hit} & {\cf int} & Zero if the ray hit nothing, 1 if it hit. \\ -\qkw{hitdist} & {\cf float} & The distance to the hit. \\ -\qkw{geom:name} & {\cf string} & The name of the object hit. \\ -\emph{other} & & Retrieves the named global (\P, \N, etc.), shader - parameter, or set message of the closest object hit - (only if it was a shaded ray). -\end{tabular} - -Note that which information may be retrieved depends on whether the -ray was traced with the optional \qkw{shade} parameter indicating -whether or not the shader ought to execute on the traced ray. If -\qkw{shade} was 0, you may retrieve ``globals'' (\P, \N, etc.), interpolated -vertex variables, shader instance values, or graphics state -attributes (object name, etc.). But \qkw{shade} must be nonzero to -correctly retrieve shader output variables or messages that are set -by the shader (via {\cf setmessage()}). - -\apiend -\vspace{-20pt} - -%\apiitem{"parent"} -%\vspace{10pt} -%Retrieve the message from the shader (potentially on another object) -%that spawned the ray that caused the current shader to be executed. -%\apiend -%\vspace{-20pt} - -%\apiitem{"primitive"} -%\vspace{10pt} -%Retrieve the value by interpolating the named user variable attached -%to the geometric primitive that is being shaded (regardless of whether -%it is a parameter to the shader). -%\apiend - -%First, {\cf getmessage()} will search the source's message list as set -%by {\cf setmessage()} when that shader ran. If not found, then the -%source's shader parameters will be searched. If multiple shaders of -%the same type are present, they will be searched starting with the -%last one executed, and moving backwards in execution order (in other -%words, later-executed shaders in the network effectively take precedence -%over parameteters or messages from earlier-executed shaders). -%\end{comment} - -\apiend - -\apiitem{float {\ce surfacearea} ()} -\indexapi{surfacearea()} -Returns the surface area of the area light geometry being shaded. This -is meant to be used in conjunction with {\cf emission()} in order to -produce the correct emissive radiance given a user preference for a -total wattage for the area light source. The value of this function -is not expected to be meaningful for non-light shaders. -\apiend - -%\apiitem{int {\ce raylevel} ()} -%\indexapi{raylevel()} -%Returns the \emph{ray level} of the current shading sample --- {\cf 0} -%if the surface is viewed directly by the camera, {\cf 1} if it is a -%first-level reflection or refraction, {\cf 2} if it is a -%reflection/refraction visible in a reflection/refraction, etc. -%\apiend - -\apiitem{int {\ce raytype} (string name)} -\indexapi{raytype()} -Returns {\cf 1} if ray being shaded is of the given type, or {\cf 0} if -the ray is not of that type or if the ray type name is not recognized by -the renderer. - -The set of ray type names is customizeable for renderers supporting -OSL, but is expected to include at a minimum \qkw{camera}, -\qkw{shadow}, \qkw{diffuse}, \qkw{glossy}, \qkw{reflection}, -\qkw{refraction}. They are not necessarily mutually exclusive, with the -exception that camera rays should be of class \qkw{camera} and no other. -\apiend - -\apiitem{int {\ce backfacing} ()} -\indexapi{backfacing()} -Returns 1 if the surface is being sampled as if ``seen'' from the back -of the surface (or the ``inside'' of a closed object). Returns 0 if seen -from the ``front'' or the ``outside'' of a closed object. -\apiend - -\apiitem{int {\ce isconnected} (\emph{type} parameter)} -\indexapi{isconnected()} -Returns {\cf 1} if the argument is a shader parameter and is connected -to an earlier layer in the shader group, -{\cf 2} if the argument is a shader output parameter connected -to a later layer in the shader group, {\cf 3} if connected to both -earlier and later layers, otherwise returns {\cf 0}. -Remember that function arguments in OSL are always pass-by-reference, -so {\cf isconnected()} applied to a function parameter will depend on -what was passed in as the actual parameter. -\apiend - -\apiitem{int {\ce isconstant} (\emph{type} expr)} -\indexapi{isconstant()} -Returns {\cf 1} if the expression can, at runtime (knowing the values of all -the shader group's parameter values and connections), be discerned to be -reducible to a constant value, otherwise returns {\cf 0}. - -This is primarily a debugging aid for advanced shader writers to verify -their assumptions about what expressions can end up being constant-folded -by the runtime optimizer. -\apiend - - -\section{Dictionary Lookups} -\label{sec:stdlib:dictionaries} - -\apiitem{int {\ce dict_find} (string dictionary, string query) \\ -int {\ce dict_find} (int nodeID, string query)} -\indexapi{dict_find()} - Find a node in the dictionary by a query. The {\cf dictionary} is - either a string containing the actual dictionary text, or the name - of a file containing the dictionary. (The system can easily - distinguish between them.) XML dictionaries are currently - supported, and additional formats may be supported in the future. - The query is expressed in ``XPath 1.0'' syntax (or a reasonable subset - therof). - - The return value is a \emph{Node ID}, an opaque integer identifier - that is the handle of a node within the dictionary data. The value - 0 is reserved to mean ``query not found'' and the value -1 indicates - that the dictionary was not a valid syntax (or, if a file, could not - be read). If more than one node within - the dictionary matched the query, the node ID of the first match is - returned, and {\cf dict_next()} may be used to step to the next - matching node. - - The version that takes a nodeID rather than a dictionary string - simply interprets the query as being relative to the node - specified by nodeID, as opposed to relative to the root of the - dictionary. - - All expensive operations (such as reading the dictionary from a file - and the initial parsing of the dictionary) are performed only once, - and subsequent lookups merely copy data and are thus inexpensive. - The {\cf dictionary} string is, therefore, used as a hash into a - cached data structure holding the parsed dictionary database. - Implementations may also cache individual node lookups or type - conversions behind the scenes. -\apiend - -\apiitem{int {\ce dict_next} (int nodeID)} -\indexapi{dict_next()} - Return the node ID of the next node that matched the query that - returned nodeID, or 0 if nodeID was the last matching node for its - query. -\apiend - -\apiitem{int {\ce dict_value} (int nodeID, string attribname, output - \emph{type} value)} -\indexapi{dict_value()} - - Retrieves the named attribute of the given dictionary node, or the - value of the node itself if {\cf attribname} is the empty string - {\cf ""}. If the attribute is found, its value will be stored in - {\cf value} and 1 will be returned. If the requested attribute is - not found on the node, or if the type of {\cf value} does not appear - to match that of the named node, {\cf value} will be unmodified and - 0 will be returned. - - Type conversions are straightforward: anything may be retrieved as a - string; to retrieve as an int or float, the value must parse as a - single integer or floating point value; to retrieve as a point, - vector, normal, color, or matrix (or any array), the value must - parse as the correct number of values, separated by spaces and/or - commas. -\apiend - - -\apiitem{int {\ce trace} (point pos, vector dir, ...)} -%, float mindist, float maxdist, int shade)} -\indexapi{trace} - -Trace a ray from pos in the direction dir. The ray is traced -immediately, and may incur significant expense compared to rays that -might be traced incidentally to evaluating the Ci closure. Also, beware -that this can be easily abused in such a way as to introduce -view-dependence into shaders. -The return value is 0 if the ray missed all geometry, 1 if it hit -anything within the distance range. - -The following optional key-value arguments -(see Section~\ref{sec:syntax:functioncalls}) can be passed: - -\apiitem{"mindist", } -\vspace{12pt} -The minimum hit distance (default: 0). - -The units of the {\cf "mindist"} and {\cf "maxdist"} are determined by the renderer -and are sometimes defined by the dir vector, which can lead to unexpected -behavior. So, generally, clearly written and portable shaders should pass -a unit length (see Section~\ref{sec:stdlib:geom}) dir vector. -\apiend -\vspace{-16pt} - -\apiitem{"maxdist", } -\vspace{12pt} -The maximum hit distance (default: infinite). -\apiend -\vspace{-16pt} - -\apiitem{"shade", } -\vspace{12pt} -Defines whether objects hit will be shaded (default: 0). -\apiend -\vspace{-16pt} - -\apiitem{"traceset", } -\vspace{12pt} -An optional named set of objects to ray trace (if preceded by a `{\cf -}' -character, it means to exclude that set). -\apiend -\vspace{-16pt} - -Information about the closest object hit by the ray may be retrieved -using \\ {\cf getmessage("trace",...)} (see Section~\ref{sec:getmessage}). - -The main purpose of this function is to allow shaders to ``probe'' -nearby geometry, for example to apply a projected texture that can be -blocked by geometry, apply more ``wear'' to exposed geometry, or make -other ambient occlusion-like effects. - -% Any messages set by setmessage() prior to calling trace may be -% retrieved by the shaders running on the object hit by the ray, via -% {\cf getmessage("parent",...)}. - - -\apiend - - -\section{Miscellaneous} -\label{sec:stdlib:misc} - -\apiitem{int {\ce arraylength} (\emph{type} A[])} -\indexapi{arraylength()} -Returns the length of the referenced array, which may be of any type. -\apiend - -\apiitem{void {\ce exit} ()} -\indexapi{exit()} -Exits the shader without further execution. Within the main body of a -shader, this is equivalent to calling {\cf return}, but inside a -function, {\cf exit()} will exit the entire shader, whereas {\cf return} -would only exit the enclosing function. -\apiend - - -\index{standard library functions|)} % end of chapter - - - -\chapter{Formal Language Grammar} -\label{chap:grammar} - -This section gives the complete syntax of \langname. Syntactic -structures that have a name ending in ``-opt'' are optional. Structures -surrounded by curly braces \{ \} may be repeated 0 or more times. Text -in {\cf typewriter} face indicates literal text. The $\epsilon$ -character is used to indicate that it is acceptable for there to be -nothing (empty, no token). - -\setlength{\grammarindent}{2cm} - -\section*{Lexical elements} - -\begin{grammar} - - ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" - - ::= \{ \} - - ::= | "a" | "A" | "b" | "B" | "c" | "C" | "d" | "D" | "e" | "E" | "f" | "F" - - ::= \{ \} - - ::= -\alt "0x" - - ::= -\alt - - ::= `.' \{ \} - - ::= `e' - - ::= `-' | `+' | $\epsilon$ - - ::= -\alt - - ::= \{ \} - - ::= `"' `"' - - ::= \{ \} - -\end{grammar} - -\section*{Overall structure} - -\begin{grammar} - ::= \{ \} - - ::= -\alt -\alt - - ::= \spc \\ - - "(" ")" "{" "}" - - ::= "displacement" | "shader" | "surface" | "volume" - - ::= \{ "," \} - - ::= - -\alt - - - ::= "[[" \{ "," \} "]]" - - ::= - -\end{grammar} - - -\section*{Declarations} -\begin{grammar} - - ::= \spc \\ - "(" ")" "{" "}" - - ::= \{ "," \} - - ::= - - ::= "output" | $\epsilon$ - - ::= "struct" "{" "}" ";" - - ::= \{ \} - - ::= ";" - - ::= \{ "," \} - - ::= - - ::= -\alt - - ::= "[" "]" -\alt "[" "]" - - ::= ";" - - ::= \{ "," \} - - ::= -\alt - - ::= "=" - - ::= "=" - - ::= "{" "}" - - ::= \{ "," \} - - ::= | - - ::= -\alt "closure" -\alt - - ::= -"color" -| "float" -| "matrix" -| "normal" -| "point" -| "string" -| "vector" -| "void" - -\end{grammar} - - -\section*{Statements} -\begin{grammar} - - ::= \{ \} - - ::= - ";" -\alt -\alt -\alt -\alt -\alt -%\alt -\alt - - ::= "{" "}" - - ::= \spc \\ "if" "(" ")" -\alt "if" "(" ")" "else" - - ::= \spc \\ "while" "(" ")" -\alt "do" "while" "(" ")" ";" -\alt "for" "(" ";" - ")" - - ::= \spc \\ ";" -\alt - - ::= "break" ";" -\alt "continue" ";" - -% ::= \spc \\ "emit" "(" ")" -%\alt "lights" "(" ")" -%\alt "trace" "(" ")" - - ::= "return" ";" - -\end{grammar} - - -\section*{Expressions} -\begin{grammar} - - ::= \{ "," \} - - ::= -\alt -\alt -\alt -\alt -\alt -\alt "(" ")" -\alt -\alt -\alt -\alt -\alt -\alt - - ::= \{ "," \} - - ::= -\alt "[" "]" -\alt "." - - ::= - - ::= "[" "]" - - ::= "[" "]" -\alt "." - - ::= "x" | "y" | "z" | "r" | "g" | "b" - - ::= "*" | "/" | "\%" -\alt "+" | "-" -\alt "<<" | ">>" -\alt "<" | "<=" | ">" | ">=" -\alt "==" | "!=" -\alt "&" -\alt "^" -\alt "|" -\alt "&&" | "and" -\alt "||" | "or" - - ::= "-" | "~" | "!" | "not" - - ::= "++" | "--" - - ::= "(" ")" - - ::= "(" ")" - - ::= \{ "," \} - - ::= - - ::= "=" | "*=" | "/=" | "+=" | "-=" | "&=" | "|=" | "^=" | -"<<=" | ">>=" - - ::= "?" ":" - - ::= "(" ")" - -\end{grammar} - - -\chapter{Describing shader groups} -\label{chap:describingshadergroups} -\label{sec:serialize} - -Below, we propose a simple grammar giving a standard way to serialize (i.e., -express as text) a full shader group, including instance values and -connectivity of the shader layers. There are only three -statements/operations: set an instance value, make a shader instance, and -connect two instances. - -\apiitem{{\ce param} {\rm \emph{type} \emph{paramname} \emph{value...}} {\ce ;} \\ -{\ce param} {\rm \emph{type} \emph{paramname} \emph{value...}} {\ce [[}{\rm\emph{metadata...}}{\ce ]] ;} } - -Declare an instance value of a shader parameter to be applied to the next -{\cf shader} statement. We refer to the parameter values set, which have -not yet had their shader declared, as \emph{pending parameters}. - -The \emph{paramname} is the name of the parameter whose instance values are -being specified. - -The \emph{type} is one of the basic numeric or -string data types described in Chapter~\ref{chap:types} ({\cf int}, {\cf -float}, {\cf color}, {\cf point}, {\cf vector}, {\cf normal}, {\cf matrix}, -or {\cf string}), or an array thereof (indicated by the usual notation of -{\cf [{\rm\emph{size}}]}). The \emph{type} must match the declared type -of the parameter in the shader. - -The actual values are listed individually, with multiple values (in the -case of an array or an aggregate such as a \color) simply separated by -whitespace. If fewer values are supplied than the total number of array -elements or aggregate components, the remainder will be understood to be -filled with 0 values. String values must be enclosed in double quotes -({\cf "like this"}). - -The {\cf param} statement is terminated by a semicolon ({\cf ;}). - -Optionally, metadata hints may be supplied enclosed by double brackets, -immediately before the semicolon. -\apiend - - -\apiitem{{\ce shader} {\rm \emph{shadername} \emph{layername}} {\ce ;}} -Declares a shader instance, which will receive any pending parameters that -were declared since the previous {\cf shader} statement (and in the process, -clear the list of pending parameters). - -The {\cf shadername} is an identifier that specifies the name of the shader -to use as the master for this instance. The {\cf layername} is an identifier -that names the layer (e.g., to subsequently specify it as a source or -destination for connections). - -The {\cf shader} statement is terminated by a semicolon ({\cf ;}). -\apiend - - -\apiitem{{\ce connect} {\rm \emph{source_layername}{\ce .}\emph{paramname} ~ - \emph{destination_layername}{\ce .}\emph{paramname}} {\ce ;}} - -Establish a connection between an output parameter of a source layer and an -input parameter of a destination layer, both of which have been previously -declared within this group. The source layer must have preceded the -destination layer when they were declared, and the parameters must exist and -be of a compatible type so that it is meaningful to establish a connection -(for example, you may connect a \color to a \color, but you may not connect -a \color to a \matrix). - -If the named parameters are structures, the two structures must have -identical data layout, and establishing the connection will connect each -corresponding data member. It is also possible to make a connection of just -a single member of a structure by using the usual ``dot'' syntax, for -example, for layers {\cf A} and {\cf B}, \qkw{connect A.c.x B.y} might -connect A's parameter {\cf c}, member {\cf x}, to B's parameter {\cf y} (the -types of {\cf c.x} in A and {\cf y} in B must match). - -The {\cf connect} statement is terminated by a semicolon ({\cf ;}). -\apiend - -\subsection*{Example} - -\begin{tabular}{p{3.25in} p{2.5in}} - {\cf param string name "rings.tx" ; } & \emph{set pending `name'} \\ - {\cf param float scale 3.5 ; } & \emph{set pending `scale'} \\ - {\cf shader "texturemap" "tex1" ; } & \emph{tex1 layer, picks up `name', `scale'} \\ - {\cf param string name "grain.tx" ; } & \\ - {\cf shader "texturemap" "tex2" ; } & \emph{} \\ - {\cf param float gam 2.2 ; } & \emph{} \\ - {\cf shader "gamma" "gam1" ; } & \emph{} \\ - {\cf param float gam 1.0 ; } & \emph{} \\ - {\cf shader "gamma" "gam2" ; } & \emph{} \\ - {\cf param color woodcolor 0.42 0.38 0.22 ; } & \emph{example of a color param} \\ - {\cf shader "wood" "wood1" ; } & \emph{} \\ - {\cf connect tex1.Cout gam1.Cin ; } & \emph{connect tex1's Cout to gam1's Cin} \\ - {\cf connect tex2.Cout gam2.Cin ; } & \emph{} \\ - {\cf connect gam1.Cout wood1.rings ; } & \emph{} \\ - {\cf connect gam2.Cout wood1.grain ; } & \emph{} \\ -\end{tabular} - - -\begin{comment} - -\chapter{Example Shaders} -\label{chap:exampleshaders} - -% \begin{annotate} -% Sorry, I haven't done this yet. Eventually, this chapter will have -% several simple (but useful and fully functional) shaders to illustrate -% how all these concepts fit together. -% \end{annotate} - -\end{comment} - - -\begin{comment} -\chapter{Design Discussion} -\label{chap:discussion} -\begin{annotate} - -In this chapter, we discuss and justify some of the design choices we've -made. This specification is a living document. Nothing is permanently -set in stone. There will someday be a 2.0 spec. It's easier to add -things we left out than to take out things that turned out to be -unnecessary things or a bad idea. - -Right now, this is just a hodge-podge of topics. Some day I will give -it a more coherent form. - -\medskip - -{\bf Meta-discussion: the editing of this chapter has NOT kept pace with - development and solidification of the rest of the spec. It's largely - written as questioning design choices -- questions that were - appropriate in much older versions of this spec, but which now are set - in stone and will not be changed for version 1.0. Some of the - discussion is truly anachronistic, debating ``A versus B'' when we in - fact have long since chosen C. In any case, until I clean this up, - please view this chapter as insight into some of the early design - choices, NOT as a list of actual outstanding issues to be addressed.} - -\section{Variables, Functions, and Scoping} - -\subsection{Separate namespace for functions?} - -RSL and GSL had separate symbol tables for functions and for all other -variables, for example allowing a variable or parameter "foo" and also a -function called "foo". This is not for any principled reason, but just a -historical accident or arbitrary choice. Once you do something like -that, you can never change it, because then you'll break old shaders. - -One of the nice things that came from having separate function and -variable namespaces is that it's perfectly ok to have a shader parameter -that happens to have the same name as a built-in function (for example, -surprisingly many RenderMan shaders have a parameter named -"diffuse"!). If you've ever tried to duplicate a set of shaders from a -3rd party package (such as making a set of shaders that duplicate all -the Maya built-in nodes) you're very happy for separate symbol tables, -so that you can pick param names that are the same as the Maya parameter -names, without regard to whether their names happen to conflict with -your built-in functions, otherwise you need to mangle the symbols -somehow. - -C, C++, and related languages tend to have a single symbol table for -functions and variables. In other words, if you have a function named -"foo", you can't have a variable named "foo" in the same scope, and vice -versa. Part of the reason for this is that these languages can pass -functions as parameters, take their address, etc., so they use a single -namespace (though I think they could have separate namespace and still -disambiguate based on the use). - -So should we have separate function and variable namespaces (similar -to RMan, possibly handy to avoid name clashes, but arbitrarily different -than C's scoping rules), or single namespace (more "standard" in modern -programming language design)? - -\section{Data types} - -\subsection{Should \color be spectral?} - -This spec is written assuming that \color should explicitly be -3-component RGB. Alternately, we could add global \inttype\ {\cf ncomps} that gives the -number of components in a \color, and eliminate any built-in operations -and library functions that seem to require or imply a 3-component color -model (including type casting between \color and the 3-component -\point-like types). - -Spectral color is a nice abstraction. It allows implementations to use -a different number of color components if they choose to. It allows -shaders to potentially be more physically accurate or perform computions -that require more spectral samples. - -On the other hand, \langname is designed for production rendering. -Think about the vast number of things that shaders do that assume a -3-channel model: convert back and forth to HSV, tweak the red channel, -generate {\cf color noise} (that's really 3D noise underneath), read 3 -channels of texture, read channel \#4 and assume it's alpha, etc. There -are no scanners (outside the lab) to capture, and no paint programs to -generate, $n$-channel textures. No compositing software to handle -spectral images. No output media for $n$-channel images. With -3-channel input and 3-channel output, if the only $n$-channel operations -are internal to shaders, users could do it with arrays if they really -wanted to. - -Abstraction is nice, but so is concreteness and explicitness about what -a shader is really doing and how the system really works. If all -implementations are likely to be 3-components underneath, why maintain -the pretense of $n$-components and in the process sacrifice shader -clarity and performance by pretending to support an abstraction that -doesn't really exist? - -RenderMan was specified using spectral colors, but (1) nobody ever -implemented it with ncomps $\ne 3$, and (2) if you really looked hard at -what would be required to do so, you quickly realized that there were -all sorts of ways that a 3-component model crept into other aspects of -the language, the implementation, the renderer APIs, and the shaders -themselves. Actually implementing an $n$-component model would have -been hugely disruptive. When I designed and implemented Gelato's -shading language (GSL), I decided that, after 15 years of RenderMan -never implementing spectral colors nor users requesting it, I should -drop the pretense. So GSL explicitly had a 3-component color model. It -was easier to implement RGB (for example, certain internals that -operated on \point-like types could be reused for \color without -embarrassment), and no user ever complainted. - -It seems to me that after 20 years of RSL having $n$-colors that nobody -has ever used, and 6 years of GSL leaving it out without negative -consequence, we can probably assume that we can live without it for -several more years, if not forever. - -Does anybody want to argue that we should nonetheless specify the -language as $n$-component colors? Should we use it for a while and -later consider a 2.0 revision that either changes the definition of -\color or else adds a new {\cf spectral} type that has a varying -number of components, for those shaders that wish to operate that way? - - -\subsection{4-channel colors, color/alpha combinations} - -Some shading languages have 4-channel colors (RGBA). This spec -(like RSL and GSL before it) does not. - -I strongly disagree with the notion of the basic \color type having an -embedded alpha. It mixes two concepts that don't belong together. The -\color type should be spectral (even if explicitly 3-channel). - -I feel less strongly about having a second type that combines a -\color and an alpha value (for the sake of argument, let's call it -a {\cf colora}). The most important benefit of doing so -would be to simplify the common operation of reading both color and -alpha data from a 4-channel texture, which awkwardly required two -separate texture reads in RenderMan's shading language. Gelato's -shading language avoided this in the same manner as OSL, namely by -having an argument to the texture command that allows you to return -an alpha: - -\begin{code} - float alphavalue; - color C = texture ("name.tx", s, t, "alpha", alphavalue); -\end{code} - -\noindent This is slightly awkward inasmuch as it does not combine -the color and alpha into a single ``return value,'' but at least it -avoids two texture calls, as well as avoiding cluttering the language -with another type that exists just to make this texture call simpler. - -But I can see that others may disagree. Does anybody want to argue -for a {\cf colora} type that explicitly combines color and alpha as a -core type? - - -\subsection{Array operations} - -As written, the only array operations allowed are element access (read -and write), and passing an array by reference to a function. This -roughly corresponds to C's and C++'s array functionality. Does -anybody want to argue for any of the following to be included? - -\begin{itemize} -\item Array assignment: {\cf A = B}, legal as long as {\cf A} and {\cf - B} are the same type and have the same number of elements length? -\item Casting to built-in types: Ability to assign an array of length 3 - to a \color, \point, \vector, or \normal, and vice versa? -\item Array arithmetic: {\cf A + B}, and so on, defined as - element-by-element addition, subtraction, etc., legal as long as the - two arrays are the same type and have the same number of elements? -\item Anything else you feel strongly that arrays should be able to do? -\end{itemize} - - -\subsection{Recursive structures} - -We have defined structures as being allowed to consist only of basic -types and arrays thereof --- not structures of structures. This -restriction makes for a simpler grammar and implementation, simpler -renderer-side APIs for passing data to shaders, and simpler APIs for -libraries that query parameters of compiled shaders. But if people -strongly feel like structures-of-structures is an important feature, we -can consider generalizing in this way. Or, if we discover later that -it's more helpful than we had once thought, we can always add it in -future version of the spec. - - -\section{Syntax} - -\subsection{More C++-like overall syntax} - -I've considered that rather than the RSL-like - -\begin{code} - surface plastic (float Kd = 0.5, float Ks = 0.5) - { - Ci = Kd * diffuse() + Ks * specular(); - } -\end{code} - -\noindent or its method-like equivalent: - -\begin{code} - surface plastic (float Kd = 0.5, float Ks = 0.5) - { - public void main () { - Ci = Kd * diffuse() + Ks * specular(); - } - } -\end{code} - -\noindent that we switch to a syntax that even more closely mimics C++, -such as: - -\begin{code} - class plastic : public surface - { - public: - float Kd = 0.5; - float Ks = 0.5; - - void main (output color Ci) { - Ci = Kd * diffuse() + Ks * specular(); - } - } -\end{code} - -So the idea is that instead of a shader type, you ``inherit'' from the -kind of shader you want; instead of parameters, you have public member -variables; and so on. - -But this is not really clean. Notice that the assignment of default -values to the ``parameters'' (now public data members) is not really -correct C++ syntax. I guess we could move to having a constructor: - -\begin{code} - class plastic : public surface - { - ... - plastic () : Kd(0.5), Ks(0.5) - { - } - ... - } -\end{code} - -But is this really any better? Are we just cluttering things up in a -slavish attempt to exactly replicate C++? And we leave behind the nice -semantics we had before where one parameter's default value could -actually depend on another parameter's actual value. In a number of -ways, OSL is NOT C++, and maybe it makes things more confusing if it -looks just like C++ but doesn't act just like it, or if some things look -just like C++ but others clearly aren't. - -I'm currently inclined to stick to the syntax in this document, and not -to exactly replicate C++'s class structure. But it's something we -could consider for future releases of the spec if people feel strongly -about it. - - -\section{Global variables} - -\subsection{Nomenclature} - -Does anybody have a preference for \dPdu and \dPdv (borrowing the -RenderMan names, but awkward for primitives without a consistent $u,v$ -parameterization?), versus something more generic such as {\cf T} and -{\cf B} (tangent and bitangent, without explicitly saying how they are -allegedly computed)? - -In this document, I'm tentatively using the RenderMan-inspired {\cf Ci} -and for output radiance. (The ``i'' is for -\emph{incident}.) In Gelato, we used {\cf C}, which I -think was slightly less obtuse (though loses the advantage of being -familiar to RenderMan experts). - - -\subsection{Global variables and view-dependence} - -Should we allow access to \I (incident viewing ray) from anyplace except -inside the integrator? - -On one hand, it's just an invitation to inadvertently build -view-dependence into material descriptions. - -On the other hand, view-independence is less important than -light-direction-independence, and we can always warn (or optionally -error, if a compiler flag is set) if view dependence is detected. It's -hard to tell if there are shader effects we will want that can only be -done (or be drastically easier) using old fashioned view-dependent code. -Perhaps we should allow it, and all due caveats and warnings to those -who dare use it instead of the recommended view-independent closures. - -I'm leaning toward allowing \I, for when it's needed, but warning and -making it easy to avoid using it. Anybody want to argue that we should -flat-out ban \I and other view-dependencies? - -\subsection{Normals} - -If you're not supposed to use \I or have explicit view-dependence in the -shaders, then what becomes of {\cf faceforward()}? Do we assume that \N -is already frontfacing by the time the shader runs? Do we add a {\cf - Nf} that's the faceforward-ed version? Do we let \N be the natural -normal and assume models will always be consistently-facing (which has -never worked)? Force the renderer to explicitly mark ``double-sided'' -geometry and potentially double-shade so that normals are always -consistent for each ``side?'' - -\section{Closures and Illumination} - -\subsection{Light loops -- to be, or not to be?} - -With closures, can we remove all facilities for an explicit loop over -lights (i.e., what RenderMan calls {\cf illuminance})? At least, -unless/until we allow people to code integrators in the language itself? - -Or does it makes sense to allow explicit light loops, in case somebody -wants/needs them, but any shader that uses them loses all ability to -cheaply re-evaluate itself under moving cameras or changing lights, and -possibly loses the ability to interact with smart global illumination -integrators that depend on sampling their BRDF's? - -My current inclination is to leave light loops out entirely, and -consider adding them later if it turns out that we've made a mistake. - -\subsection{Integrators and closure implementations -- in the shading language?} - -For now, I'm assuming that the integrator itself, as well as the -implementations of the ``primitive'' closure functions, are a hard-coded -part of the renderer itself, or implemented as plug-ins in a way that's -proprietary to the renderer. - -It's very tempting to extend the language itself to be able to express a -primitive closure function or an integrator. But I fear that (1) this -will be more expensive than we want; and (2) we don't know the best way -to do it yet; (3) it will require a variety of syntaxes, functions, and -complications in the language that would not otherwise be needed. - -So I'm currently leaning toward leaving this out of the language for -now, and considering it for a future revision. Comments? - -\section{Transparency, Opacity, and Holdout mattes} - -Transparency is a tricky subject. There are at least four slightly -different concepts at play here: (1) Gathering illumination from the -back side of a surface; (2) Proper coherent refraction of objects -``behind'' the primitive being shaded (usually employing ray tracing); -(3) Seeing an undistored image (unrefracted) image of what's behind the -primitive, usually employing a ``compositing'' method; (4) making an -object ``disappear'' to form a ``stencil'' effect under shader control. - -It is clear that \#1 and \#2 are properly handled with our usual -material closures ({\cf translucent} and {\cf refraction()}, -respectively). - -The real question is how to handle the kind of compositing opacity of -\#3 and \#4. The ``usual'' way (in renderers I've written before, -anyway), is to have a special variable that holds the opacity of the -surface. In RenderMan, this is called {\cf Oi}, in Gelato it was the -less obscure {\cf opacity}. It defaults to (1,1,1). The shader is -responsible for scaling reflectivities by this amount. The renderer -accumulates this for all subpixel samples, filters it, and reduces this -to a single \emph{alpha} for each pixel (usually by averaging the -channels, or using a luminance transformation). - -There is usually a special case for \emph{holdout mattes} --- objects -that leave a ``hole'' with $\alpha = 0$ in the final image, yet still -hide any in-render objects behind it. In RenderMan and Gelato, objects -were designated as holdouts via the renderer API, not under shader -control (in fact, shaders generally aren't even run on holdout objects). -In PRMan and Entropy, this was extended so that holdout objects would -run their shaders, and the computed opacity (\Oi) was used to control -\emph{partial matteness}, allowing shaders to ``fade'' matteness in, or -use a pattern to programmatically define the matte area in the shader. -It was still really hard to have full shader control over all aspects of -matteing, such as wanting an object to completely block what's behind it -in-scene but leave a non-zero and non-one value in the image's -\emph{alpha} channel, and it still depended on the object being tagged -as ``matte'' through the renderer API (a clever shader couldn't do it on -its own). - -I've under-specified how this should work in this document, presumably -falling back to the RenderMan-like behavior as our default position. -But I want to throw a few additional options out here for debate: - -\begin{itemize} -\item Default / RenderMan way: shader sets \Oi $< 1$ for ``compositing - transparency'', renderer auto-composites objects behind the surface - (without refraction), accumulated opacity directly translates into - alpha channel, holdout mattes designated through renderer API. -\item Separate opacity/alpha controls: \Oi controls compositing - transparency; a separate {\cf alpha} global variable can be set that - becomes the opacity (if not set by the shader, it will be set to the - \Oi result). In other words, a holdout matte could be controlled by - the shader with {\cf Oi=1, alpha=0}, that blocks visibility of - in-render objects, but puts a hole in the output image's alpha - channel. -\item Similar to the last item, but instead of the confusing {\cf Oi, - alpha} nomenclature, use {\cf Oi} and {\cf holdout} (defaulting to 0, - i.e., the object is not a holdout object). Partial holdoutness can be - set. The renderer handles how the holdoutness affects the image - channels and compositing. So a shader would make a holdout matte with - {\cf Oi=1, holdout=1}, transparency with {\cf Oi<1, holdout=0}. -\item No explicit \Oi at all (!), but rather make a material closure - primitive function {\cf transparency()} that the renderer understands. - So compositing transparency could be explicit in the lighting - function: - \begin{code} - opac = ...compute...; - Ci = opac * diffuse() + (1-opac) * transparency(); - \end{code} - Or even, {\cf refraction()} could serve the same purpose, and the - renderer could just know that if the index of refraction is 1, it - should use the compositing trick. - - Holdout mattes don't fall into this scheme especially well, so there's - an orthogonal problem of whether to have a {\cf holdout} variable to - set, or a renderer API function. -\end{itemize} - -What do you guys think? I'm kind of leaning toward the third solution ---- having shaders set {\cf Oi} and {\cf holdout} variables, allowing -full control in the shader. - -\end{annotate} -\end{comment} - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\part*{Appendices} -\begin{appendix} - -\chapter{Glossary} -\label{chap:glossary} - -\begin{description} - -\item[Attribute state.] The set of variables that determines all the - properties (other than shape) of a \emph{geometric primitive} --- such - as its local transformation matrix, the surface, displacement, and - volume shaders to be used, which light sources illuminate objects that - share the attribute state, whether surfaces are one-sided or - two-sided, etc. Basically all of the options that determine the - behavior and appearance of the primitives, that are not determined by - the shape itself or the code of the shaders. A single attribute state - may be shared among multiple geometric primitives. Also sometimes - called \emph{graphics state}. - -\item[BSDF.] Bidirectional scattering distribution function, a - function that describes light scattering properties of a surface. - -\item[Built-in function.] A function callable from within a shader, where - the implementation of the function is provided by the renderer (as - opposed to a function that the shader author writes in \langname - itself). - -\item[Closure.] A symbolic representation of a function to be called, - and values for its parameters, that are packaged up to be evaluated - at a later time to yield a final numeric value. - -\item[Connection.] A routing of the value of an \emph{output parameter} - of one \emph{shader layer} to an \emph{input parameter} of another - shader layer within the same \emph{shader group}. - -\item[Default parameter value.] The initial value of a \emph{shader - parameter}, if the renderer does not override it with an - \emph{instance value}, an interpolated \emph{primitive variable}, or a - \emph{connection} to an output parameter of another \emph{layer} - within the \emph{group}. The default value of a shader parameter - is explicitly given in the code for that shader, and may either be - a constant or a computed expression. - -\item[EDF.] Emission distribution function, a function that describes - the distribution of light emitted by a light source. - -\item[Geometric primitive.] A single shape, such as a NURBS patch, a - polygon or subdivision mesh, a hair primitive, etc. - -\item[Global variables.] The set of ``built-in'' variables describing the - common renderer inputs to all shaders (as opposed to shader-specific - parameters). These include position (\P), surface normal (\N), - surface tangents (\dPdu, \dPdv), as well as standard radiance output (\Ci). - Different \emph{shader types} support - different subsets of the global variables. - -\item[Graphics state.] See \emph{attribute state}. - -\item[Group.] See \emph{shader group}. - -\item[Input parameter.] A read-only \emph{shader parameter} that provides - a value to control a shader's behavior. Can also refer to a read-only - parameter to a \emph{shader function}. - -\item[Instance value.] A constant value that overrides a \emph{default - parameter value} for a particular \emph{shader instance}. Each - instance of a shader may have a completely different set of instance - values for its parameters. - -\item[Layer.] See \emph{shader layer}. - -\item[Output parameter.] A read/write \emph{shader parameter} allows a - shader to provide outputs beyond the \emph{global variables} such as - \Ci. Can also refer to a read/write parameter to a - \emph{shader function}, allowing a function to provide more outputs - than a simple return value. - -\item[Primitive.] Usually refers to a \emph{geometric primitive}. - -\item[Primitive variable.] A named variable, and values, attached to an - individual geometric primitive. Primitive variables may have one of - several \emph{interpolation methods} --- such as a single value for - the whole primitive, a value for each piece or face of the primitive, - or per-vertex values that are smoothly interpolated across the - surface. - -\item[Public method.] A function within a shader that has an entry point - that is visible and directly callable by the renderer, as opposed to - merely being called from other code within the shader. Public methods - must be \emph{top-level} (not defined within other functions) and must - be preceded by the {\cf public} keyword. - -\item[Shader.] A small self-contained program written in \langname, used - to extend the functionality of a renderer with custom behavior of - materials and lights. A particular shader may have multiple - \emph{shader instances} within a scene, each of which has its unique - \emph{instance parameters}, transformation, etc. - -\item[Shader function.] A function written in \langname that may be - called from within a shader. - -\item[Shader group.] An ordered collection of \emph{shader instances} - (individually called the \emph{layers} of a group) that are executed - to collectively determine material properties or displacement of a - geometric primitive, emission of a light source, or scattering - properties of a volume. In addition to executing sequentially, layers - within a group may optionally have any of their input parameters - explicitly connected to output parameters of other layers within the - group in an acyclic manner (thus, sometimes being referred to as a - \emph{shader network}). - -\item[Shader instance.] A particular reference to a \emph{shader}, with - a unique set of {\cf instance values}, transformation, and potentially - other attributes. Each shader instance is a separate entity, despite - their sharing executable code. - -\item[Shader network.] See \emph{shader group}. - -\item[Shader layer.] An individual \emph{shader instance} within a - \emph{shader group}. - -\item[Shader parameter.] A named input or output variable of a shader. - \emph{Input parameters} provide ``knobs'' that control the behavior of - a shader; \emph{output parameters} additional provide a way for - shaders to produce additional output beyond the usual \emph{global - variables}. - -\item[Shading.] The computations within a renderer that implement the - behavior and visual appearance of materials and lights. - -\item[VDF.] Volumetric distribution function, a function that describes - the scattering properties of a volume. - -\end{description} - -\end{appendix} - -\backmatter - -%\bibliographystyle{alpha} %% Select for [FB95] -\bibliographystyle{apalike} %% Select for (Foo and Bar, 1995) -%\addcontentsline{toc}{chapter}{Bibliography} -%\bibliography{mybib} - -\addcontentsline{toc}{chapter}{Index} -\printindex - -\end{document} - - -% Canonical figure -%\begin{figure}[ht] -%\noindent -%\includegraphics[width=5in]{Figures/foo} -%\caption{Caption -%\label{fig:foo}} -%\end{figure} - - -%\apiitem{ret {\ce func} (args)} -%\indexapi{func()} -%\endapi diff --git a/src/doc/macros.tex b/src/doc/macros.tex deleted file mode 100644 index 9e3c720f6c..0000000000 --- a/src/doc/macros.tex +++ /dev/null @@ -1,132 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Larry's favorite LaTeX macros for making technical books. These have -% been refined for years, starting with SIGGRAPH course notes in the -% '90's, further refined for _Advanced RenderMan_. -% -% Please use or modify this at will. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Copyright Contributors to the Open Shading Language project. -% SPDX-License-Identifier: BSD-3-Clause -% https://github.com/AcademySoftwareFoundation/OpenShadingLanguage - - -% -% Define typesetting commands for filenames and code -% -% Just like Advanced RenderMan -- all code in courier, keywords in text -% courier but not bold. -\def\codefont{\ttfamily} % font to use for code -\def\ce{\codefont\bfseries} % emphasize something in code - - -% -% Define typesetting commands for filenames and code -% -\def\cf{\codefont} % abbreviation for \codefont -\def\fn{\codefont} % in-line filenames & unix commands -\def\kw{\codefont} % in-line keyword - -\newcommand{\var}[1]{{\kw \emph{#1}}} % variable -\newcommand{\qkw}[1]{{\kw "#1"}} % quoted keyword -\newcommand{\qkws}[1]{{\small \kw "#1"}} % quoted keyword, small -\newcommand{\qkwf}[1]{{\footnotesize \kw "#1"}} % quoted keyword, tiny - - - -% Define some environments for easy typesetting of small amounts of -% code. These are mostly just wrappers around verbatim, but the -% different varieties also change font sizes. -\newenvironment{code}{\small \verbatimtab}{\endverbatimtab} -\newenvironment{smallcode}{\small \renewcommand{\baselinestretch}{0.8} \verbatimtab}{\endverbatimtab \renewcommand{\baselinestretch}{1}} -\newenvironment{tinycode}{\footnotesize \renewcommand{\baselinestretch}{0.75} \verbatimtab}{\endverbatimtab \renewcommand{\baselinestretch}{1}} - -% \begin{htmlonly} -% \renewenvironment{code}{\begin{verbatim}}{\end{verbatim}} -% \newenvironment{smallcode}{\begin{verbatim}}{\end{verbatim}} -% \newenvironment{tinycode}{\begin{verbatim}}{\end{verbatim}} -% \end{htmlonly} - -\newcommand{\includedcode}[1]{{\small \verbatimtabinput{#1}}} -\newcommand{\smallincludedcode}[1]{{\small \renewcommand{\baselinestretch}{0.8} \verbatimtabinput{#1} \renewcommand{\baselinestretch}{1}}} -\newcommand{\tinyincludedcode}[1]{{\footnotesize \renewcommand{\baselinestretch}{0.75} \verbatimtabinput{#1} \renewcommand{\baselinestretch}{1}}} - - - - - -% Also create a hyphenation list, essentially just to guarantee that -% type names aren't hyphenated -%\hyphenation{Attribute} - -% Handy for parameter lists -\def\pl{{\rm\emph{...params...}\xspace}} -\def\dotdotdot{{\rm\emph{...}\xspace}} -\hyphenation{parameterlist} - - - - -%begin{latexonly} -\newenvironment{apilist}{\begin{list}{}{\medskip \item[]}}{\end{list}} -\newcommand{\apiitem}[1]{\vspace{12pt} \noindent {\bf\tt #1} \vspace{-10pt}\begin{apilist}\nopagebreak[4]} -\newcommand{\apiend}{\end{apilist}\medskip\pagebreak[2]} -\def\bigspc{\makebox[72pt]{}} -\def\spc{\makebox[24pt]{}} -\def\halfspc{\makebox[12pt]{}} -\def\neghalfspc{\hspace{-12pt}} -\def\negspc{\hspace{-24pt}} -\def\chapwidthbegin{} -\def\chapwidthend{} -%end{latexonly} - - -%\begin{htmlonly} -%\newcommand{\apiitem}[1]{\medskip \noindent {\bf #1} \begin{quote}} -%\newcommand{\apiend}{\end{quote}} -%\def\halfspc{\begin{rawhtml}     \end{rawhtml}} -%\def\spc{\halfspc\halfspc} -%\pagecolor[named]{White} -%\def\chapwidthbegin{\begin{rawhtml}

\end{rawhtml}} -%\def\chapwidthend{\begin{rawhtml}
\end{rawhtml}} -%\end{htmlonly} - - -\newcommand{\apibinding}[3]{\apiitem{#1\\[1ex]#2\\[1ex]#3}} - -\newcommand{\CPPBINDING}[1]{\par {\small C++ BINDING:}\par {\spc \codefont #1}} -\newcommand{\PARAMETERS}{\par {\small PARAMETERS:} \par} -\newcommand{\EXAMPLE}{\par {\small EXAMPLE:} \par} -\newcommand{\EXAMPLES}{\par {\small EXAMPLES:} \par} -\newcommand{\SEEALSO}{\par \hspace{-20pt} See Also: \par} - - - -% The \begin{algorithm} \end{algorithm} macros (in algorithm.sty) are -% great for code that can fit all on one page. But when it can't, use -% these macros. The first parameter is the caption, the second is the -% label name. -\newcommand{\longalgorithmbegin}[2]{\noindent\hrulefill \\ - \refstepcounter{algorithm} - \noindent {\bf Listing \arabic{chapter}.\arabic{algorithm}}: #1 \label{#2} \\ - \addcontentsline{loa}{algorithm}{\numberline {\arabic{algorithm}} #1} - \noindent\hrulefill -} -\newcommand{\longalgorithmend}{\noindent\hrulefill \\} - - -\def\NEW{\marginpar[\medskip\hfill~\fbox{\sffamily \Huge NEW!}~]{\medskip~\fbox{\sffamily \Huge NEW!}~}} -\newcommand{\NEWdown}[1]{\marginpar[\vspace{#1}\hfill\fbox{\sffamily \Huge NEW!}]{\vspace{#1}\fbox{\sffamily \Huge NEW!}}} -\def\DEPRECATED{\marginpar[\medskip\hfill~\fbox{\sffamily \Large Deprecated}]{\medskip~\fbox{\sffamily \Large Deprecated}}} -\newcommand{\DEPRECATEDdown}[1]{\marginpar{\vspace{#1}\fbox{\sffamily \Large Deprecated}}} -\def\CHANGED{\marginpar[\medskip\hfill~\fbox{\sffamily \huge CHANGED!}~]{\medskip~\fbox{\sffamily \huge CHANGED!}~}} -\def\ENHANCED{\marginpar[\medskip\hfill~\fbox{\sffamily \huge ENHANCED}~]{\medskip~\fbox{\sffamily \huge ENHANCED}~}} -\def\QUESTION{\marginpar[\medskip\hfill~\fbox{\sffamily \Huge ?}~~~~]{\medskip~\fbox{\sffamily \Huge ?}~~~~}} - - -\newcommand{\indexapi}[1]{\index{#1@\tt#1\rm}} - - - -\newenvironment{annotate}{\medskip\sffamily\em\noindent}{\medskip} -%\newenvironment{annotate}{\begin{comment}}{\end{comment}} diff --git a/src/doc/osl-languagespec.pdf b/src/doc/osl-languagespec.pdf deleted file mode 100644 index fff2878016e8041cca1f1e8ac1fe0f5507352384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418389 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

*gldL4__#(6Cka0FF+&GC941+ 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 wu7y& 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 qS&RV6?Nzb|%Pj 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\relax - \refstepcounter{part}% - \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% - \else - \addcontentsline{toc}{part}{#1}% - \fi - \markboth{}{}% - {\centering - \interlinepenalty \@M - \normalfont - \ifnum \c@secnumdepth >-2\relax -%lg \huge\bfseries \partname~\thepart - \huge\sffamily\bfseries \partname~\thepart %lg - \par - \vskip 20\p@ - \fi - \Huge \bfseries #2\par}% - \@endpart} -\def\@spart#1{% - {\centering - \interlinepenalty \@M - \normalfont -%lg \Huge \bfseries #1\par}% - \Huge \sffamily\bfseries #1\par}% %lg - \@endpart} -\def\@endpart{\vfil\newpage - \if@twoside - \null - \thispagestyle{empty}% - \newpage - \fi - \if@tempswa - \twocolumn - \fi} - -\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi - \thispagestyle{plain}% - \global\@topnum\z@ - \@afterindentfalse - \secdef\@chapter\@schapter} -\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \refstepcounter{chapter}% - \typeout{\@chapapp\space\thechapter.}% - \addcontentsline{toc}{chapter}% - {\protect\numberline{\thechapter}#1}% - \else - \addcontentsline{toc}{chapter}{#1}% - \fi - \else - \addcontentsline{toc}{chapter}{#1}% - \fi - \chaptermark{#1}% - \addtocontents{lof}{\protect\addvspace{10\p@}}% - \addtocontents{lot}{\protect\addvspace{10\p@}}% - \if@twocolumn - \@topnewpage[\@makechapterhead{#2}]% - \else - \@makechapterhead{#2}% - \@afterheading - \fi} -\def\@makechapterhead#1{% - \vspace*{50\p@}% - {\parindent \z@ \raggedright \normalfont - \ifnum \c@secnumdepth >\m@ne - \if@mainmatter -%lg \huge\bfseries \@chapapp\space \thechapter - \Huge \sffamily \bfseries \thechapter \hspace{1em} %lg -%lg \par\nobreak -%lg \vskip 20\p@ - \fi - \fi - \interlinepenalty\@M -%lg \Huge \bfseries #1\par\nobreak - \Huge \sffamily\bfseries #1\par\nobreak %lg - \vskip 40\p@ - }} -\def\@schapter#1{\if@twocolumn - \@topnewpage[\@makeschapterhead{#1}]% - \else - \@makeschapterhead{#1}% - \@afterheading - \fi} -\def\@makeschapterhead#1{% %%% lg this is for chapter* - \vspace*{50\p@}% - {\parindent \z@ \raggedright - \normalfont - \interlinepenalty\@M -%lg \Huge \bfseries #1\par\nobreak - \Huge \sffamily \bfseries #1\par\nobreak %lg - \vskip 40\p@ - }} -\renewcommand\section{\@startsection {section}{1}{\z@}% - {-3.5ex \@plus -1ex \@minus -.2ex}% - {2.3ex \@plus.2ex}% -%lg {\normalfont\Large\bfseries}} - {\normalfont\Large\sffamily\bfseries}} %lg -\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% -%lg {\normalfont\large\bfseries}} - {\normalfont\large\sffamily\bfseries}} %lg -\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% -%lg {\normalfont\normalsize\bfseries}} - {\normalfont\normalsize\sffamily\bfseries}} %lg -\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% - {3.25ex \@plus1ex \@minus.2ex}% - {-1em}% - {\normalfont\normalsize\bfseries}} -\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% - {3.25ex \@plus1ex \@minus .2ex}% - {-1em}% - {\normalfont\normalsize\bfseries}} - - - - -%%%% -% lg - added new environment for descriptions specifically for the glossary -% -\newenvironment{glossarydescription} - {\list{}{\small \setlength{\leftmargin}{0pt} - \setlength{\itemsep}{0pt} - \labelwidth\z@ \itemindent-\leftmargin - \let\makelabel\glossarydescriptionlabel}} - {\endlist} -\newcommand*\glossarydescriptionlabel[1]{\hspace\labelsep - \normalfont\bfseries #1} -% -%%%% - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Modify the bibliography citation style -% I borrowed this from apastyle, then modified it -- lg -%%%%%%%% - -\def\@cite#1#2{(#1\if@tempswa , #2\fi)} -\def\@biblabel#1{} - -\newlength{\bibhang} -\setlength{\bibhang}{0em} - -\@ifundefined{chapter}{\def\thebibliography#1{\section*{\refname\@mkboth - {\sl\uppercase{\refname}}{\sl\uppercase{\refname}}}\list - {\relax}{ - \setlength{\labelsep}{0em} %lg - \setlength{\itemindent}{-\bibhang} - \setlength{\leftmargin}{\bibhang}} - \def\newblock{\hskip .11em plus .33em minus .07em} - \sloppy\clubpenalty4000\widowpenalty4000 - \sfcode`\.=1000\relax}}% -{\def\thebibliography#1{\chapter*{\bibname\@mkboth - {\sl\uppercase{\bibname}}{\sl\uppercase{\bibname}}}\list - {\relax}{\setlength{\labelsep}{0em} - \small \setlength{\itemsep}{0pt} %lg - \setlength{\itemindent}{-\bibhang} - \setlength{\leftmargin}{\bibhang}} - \def\newblock{\hskip .11em plus .33em minus .07em} - \sloppy\clubpenalty4000\widowpenalty4000 - \sfcode`\.=1000\relax}} - -\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi - \def\@citea{}\@cite{\@for\@citeb:=#2\do - {\@citea\def\@citea{; }\@ifundefined - {b@\@citeb}{{\bf ?}\@warning - {Citation `\@citeb' on page \thepage \space undefined}}% -{\csname b@\@citeb\endcsname}}}{#1}} -