Glossary

1. イントロダクション
2. 概要
3. 字句構造
4. 全体的な構文...
5. データ型
6. 言語構文
7. 標準ライブラリ関数
8. 形式言語文法
9. シェーダグループの記述
10. **用語集**
11. Light Path Ex...

## 用語集

**Attribute state(アトリビュート状態)**

**ジオメトリプリミティブ**の(形状以外の)すべてのプロパティを決める変数セット。例えば、ローカル変換マトリックス、使用するサーフェス/ディスプレイスメント/ボリュームのシェーダ、アトリビュート状態を共有したオブジェクトを照明する光源、サーフェスが片面または両面のどちらなのかなど。基本的には、プリミティブの挙動と外観は、それらのオプションすべてによって決まり、形状自体またはシェーダのコードだけで決まるわけではありません。1個のアトリビュート状態を複数のジオメトリプリミティブで共有することができます。**Attribute state:アトリビュート状態**のことを別名**Graphics state:グラフィックス状態**とも言います。
**Built-in funciton(組み込み関数)**

シェーダ内からコール可能な関数。この関数の実装(シェーダ作成者がOpen Shading Languageそのもので書かいた関数とは異なり)は、レンダラー側で用意されています。
**Closure(クロージャ)**

コールされる関数の象徴的表現であり、それらのパラメータ値は、後で評価できるようにパッケージ化して最終的に数値を生成します。
**Connection(コネクション)**

同じ**シェーダグループ**内で、ある**シェーダレイヤー**の**出力パラメータ**の値を別の**シェーダレイヤー**の**入力パラメータ**に接続すること。
**Default parameter value(デフォルトのパラメータ値)**

**シェーダパラメータ**の初期値。レンダラーがそのパラメータを**インスタンス値**、補間**プリミティブ変数**で上書きしなかった場合や**シェーダグループ**内で他の**レイヤー**の出力パラメータに**コネクション**しなかった場合に、その値が使われます。シェーダパラメータのデフォルト値は、そのシェーダのコード内で明示的に記述し、その値には定数または計算されるエクスプレッションのどれかを指定することができます。
**Geometric primitive(ジオメトリプリミティブ)**

NURBSパッチ、ポリゴン、サブディビジョンメッシュ、ヘアープリミティブなどの単一形状。
**Global variables(グローバル変数)**

(シェーダ固有のパラメータとは異なり)どのシェーダでも使用可能なレンダラー入力を表現した**組み込み**変数セット。これらのセットには、位置(**P**),サーフェス法線(**N**)、サーフェス接線(**dPdu**, **dPdv**)、さらに標準ラディアンス出力(**Ci**)を含みます。**シェーダタイプ**が異なれば、対応しているグローバル変数のサブセットも異なります。
**Graphics state(グラフィックス状態)**

**Attribute state(アトリビュート状態)**を参照してください。
**Group(グループ)**

**Shader group(シェーダグループ)**を参照してください。
**Input parameter(入力パラメータ)**

シェーダの挙動を制御する値を備えた読み込み専用**シェーダパラメータ**。これは、**シェーダ関数**の読み込み専用パラメータを参照することもできます。
**Instance value(インスタンス値)**

特定の**シェーダインスタンス**の**デフォルトパラメータ値**を上書きする定数値。シェーダの各インスタンスは、そのパラメータのインスタンス値を全く異なる値に設定することができます。
**Layer(レイヤー)**

**shader layer(シェーダレイヤー)**を参照してください。
**Output parameter(出力パラメータ)**

シェーダが**Ci**などの**グローバル変数**を出力することができる読み込み/書き込可能な**シェーダパラメータ**。これは、**シェーダ関数**の読み込み/書き込み可能なパラメータを参照することで、関数が単一の戻り値以上の出力が可能になります。
**Primitive(プリミティブ)**

通常では**Geometric primitive(ジオメトリプリミティブ)**のことです。
**Primitive variable(プリミティブ変数)**

個々のジオメトリプリミティブに名前が付いた変数と値。プリミティブ変数は、いくつかの**補間法**のいずれかを持つことができます。例えば、プリミティブ全体に対して単一値、プリミティブの部分毎またはフェース毎の値、サーフェス上を滑らかに補間する頂点毎の値。
**Public method(パブリックメソッド)**

シェーダ内でしか他のコードをコールできない関数とは違い、レンダラー側で可視で直接コール可能なエントリーポイントを持ったシェーダ内の関数。パブリックメソッドは、**トップレベル**(他の関数内で定義されていない)でなければならず、関数名の頭に**public**キーワードが付いていなければなりません。
**Shader(シェーダ)**

Open Shading Languageで記述された小さい自己完結型プログラム。これは、マテリアルやライトの挙動をカスタマイズして、レンダラーの機能を拡張するために使用します。特定のシェーダでは、シーン内に複数の**シェーダインスタンス**を持つことができ、それぞれのシェーダが固有の**インスタンスパラメータ**、トランスフォームなどを持ちます。
**Shader function(シェーダ関数)**

シェーダ内からコール可能なOpen Shading Languageで記述された関数。
**Shader group(シェーダグループ)**

順番が定義された**シェーダインスタンス**の集合体(個々のシェーダインスタンスをグループの**レイヤー**と呼びます)。シェーダグループを実行することで、マテリアルの特性、ジオメトリプリミティブのディスプレイスメント、光源の発光量、ボリュームの散乱特性を総合的に決定します。順々にシェーダインスタンスを実行するだけでなく、シェーダグループ内のレイヤーは、その入力パラメータのどれかを任意でそのグループ内の他のレイヤーの出力パラメータに非循環な方法で明示的に接続することができます(そのため、シェーダグループのことを**シェーダネットワーク**と呼ぶことがあります)。
**Shader instance(シェーダインスタンス)**

特定の**シェーダ**の参照のことで、固有のインスタンス値、トランスフォーム、さらには他のアトリビュートを持たせることができます。各シェーダインスタンスは、実行コードを共有していますが別々の実体になっています。
**Shader network(シェーダネットワーク)**

**Shader group(シェーダグループ)**を参照してください。
**Shader layer(シェーダレイヤー)**

**シェーダグループ**内の個々の**シェーダインスタンス**。
**Shader parameter(シェーダパラメータ)**

シェーダの入力または出力の名前付き変数。**入力パラメータ**には、シェーダの挙動を制御する**ノブ**が備わっています。さらに、**出力パラメータ**は、シェーダが通常の**グローバル変数**だけでなく、さらに出力を生成することができます。
**Shading(シェーディング)**

マテリアルやライトの挙動と外観を実装するためのレンダラー内の計算。