RenderMan Shading Language(RSL)は、
RenderManインターフェース仕様の一部として、3Dグラフィックスにおける
シェーダーの定義に特化したプログラミング言語です。その構文は
C言語に似ており、プログラマーにとって比較的習得しやすい構造を持っています。
RSLで記述された
シェーダーは、PixarのPhotoRealistic
RenderMan、DNA Researchの
3Delight、SitexgraphicsのAirといった商用レンダラーから、PixieやAqsisのようなオープンソースレンダラーまで、
RenderMan仕様に準拠した幅広いレンダラーで、ほぼ変更を加えることなく利用できるという大きなメリットがあります。これにより、開発者は特定のレンダラーに依存することなく、作成した
シェーダーを様々な環境で活用することができます。
RSLでは、独立した関数に加えて、5つの主要な
シェーダー型が定義されています。具体的には、以下の通りです。
サーフェスシェーダー: オブジェクトの表面の質感や色、反射などを定義します。金属や木材、ガラスなど、様々な材質の表現に用いられます。
ライトシェーダー: シーン内の光源の特性を定義します。光の色、強度、減衰などを制御することで、よりリアルなライティング効果を作り出すことができます。
ボリュームシェーダー: 煙や霧、雲などのボリューム状のオブジェクトを定義します。密度や色、透明度などを調整することで、様々な雰囲気のボリューム表現が可能です。
イメージャーシェーダー: レンダーされた画像に対して、色調整やフィルター処理などのエフェクトを適用します。ポストプロセッシングに相当する処理を行うことができます。
ディスプレイスメントシェーダー: オブジェクトの形状を変形させます。表面の凹凸やひび割れなどを表現する際に用いられ、より複雑でリアルなジオメトリを生成することができます。
これらのシェーダーは、Cs(表面色)、N(法線ベクトル)、Ci(最終的な表面色)といった特殊な変数への読み書きを通して、その動作を定義します。シェーダーの引数は、モデルの複数のオブジェクトに適用可能な大域パラメータとして機能します。つまり、一度作成したシェーダーを、異なるオブジェクトに対して再利用することができます。例えば、1つの金属シェーダーを作成し、それを異なる形状や大きさの金属オブジェクトに適用することが可能です。
シェーダー自体は戻り値を持ちませんが、関数を定義することで、引数を受け取り、値を返す処理を実現できます。これにより、複雑な計算処理を関数としてモジュール化し、シェーダーの可読性と再利用性を高めることができます。例えば、ベクトルの長さを計算する関数は、ドット積演算子を利用して以下のように定義できます。
rsl
float vectorLength(vector v)
{
return sqrt(v . v);
}
この関数は、引数としてベクトルを受け取り、その長さ(スカラー値)を返します。このように、RSLは柔軟なプログラミングモデルを提供しており、複雑なシェーダーの定義も効率的に行うことができます。
参考文献
Upstill, Steve (1990).
The RenderMan companion : a programmer's guide to realistic computer graphics. Reading, Mass: Addison-Wesley.
ISBN 0-201-50868-0.
Apodaca, Anthony; Gritz, Larry (1999). Advanced
RenderMan : creating CGI for motion pictures
. San Francisco: Morgan Kaufmann. ISBN 1-55860-618-1.
Cortes, Rudy; Raghavachary, Saty (2008).
The RenderMan shading language guide. Boston, Mass: Thomson Course Technology.
ISBN 1-59863-286-8
外部リンク
*
Shading Language (RSL)のドキュメント