この記事には複数の問題があります。改善
やノートページでの議論にご協力ください。シェーディング言語(英: shading language)は、プログラマブルシェーダー向けのプログラミング言語のこと。この種の言語は色や法線のような特別なデータ型を持っている。C言語やJavaのような汎用言語とは異なり、標準入出力機能を持たないなど、特定領域に特化したドメイン固有言語の一種である。3次元コンピュータグラフィックスの様々な市場に対応するため、複数の異なる言語が開発されている。以下にその概略を述べる。 この種のシェーディング言語は最高画質を目指して開発されている。材質特性は全体的に抽象的で、プログラミングスキルはほとんど要らないし、ハードウェアの知識は全く必要ない。この種のシェーダーは、アーティスト達がテクスチャマッピングやライティング、その他の作業を行って見たそのままに得られるように開発されている。 この種のシェーダーの処理は、たいてい時間がかかる。シェーダーが行う処理に必要な計算能力は、写実的な結果を得るためにより高価になり得る。大部分は巨大なコンピュータクラスター上で実行される(グリッド・コンピューティング、分散コンピューティング)。例えばShadeではShadeGridと呼ばれるネットワークレンダリングシステムを備えている[1]。 RenderManシェーディング言語 (しばしばRSLないしSLと省略される) は、RenderManインタフェース仕様で定義されており、プロダクションレンダリングを行うのに最もよく使われているシェーディング言語である。また、この言語は最初に実装されたシェーディング言語でもある。 この言語は6つの主要なシェーダーのタイプを定義している。 Houdini VEX (Vector Expressions) シェーディング言語 (略してVEXと呼ばれる) は、RenderManシェーディング言語に非常に似たものとして作られている。この言語は完全な3Dグラフィックスのパッケージ製品とに統合されているけれども、シェーダー開発者は、普通はレンダリング処理上不可能なシェーダ内部の情報へアクセスすることができる。RSLとVEXの間の言語の違いは主に構文の違いである。2、3のシェーダー命令の名前が異なっている。 Gelatoのシェーディング言語はHoudiniのVEXのように、RenderManシェーディング言語に非常に似たものに作られている。Gelatoシェーディング言語とRSLの違いは主に構文の違いである。Gelatoは関数定義中の引数を区切る方法としてカンマの代わりにセミコロンを使用している。また2、3のシェーダー命令の名前とパラメータが異なっている。 @media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}近年[いつ?]まで、開発者は複数のビデオカードのグラフィックスパイプラインからの出力を同じレイヤで制御することができていなかったが、今やリアルタイムレンダリングにシェーディング言語を用いる方法が広く使われている。このことにより、以前のハードコードされた変形方式やシェーディング方程式を用いた方法と比較して、ハードウェアの抽象度を高めつつより柔軟なプログラミングモデルを取ることができるようになった。この結果、プログラマはレンダリング処理全体をより詳細に制御することができるようになり、小さなオーバーヘッドでより高品質なコンテンツを開発することができるようになった。 驚くべきことに、これらのシェーダーは最高のパフォーマンスを得るために、パイプライン上の適切な時点においてGPU上で直接実行されるように設計されており、またそのストリームプログラミングモデルのため、汎用処理(GPGPUなど)においても成功を収めている。 この種のシェーディング言語は通常グラフィックスAPI向けであるが、いくつかのアプリケーションでは機能制限付きではあるもののエンドユーザー向けの組み込みシェーディング言語として提供されている。 OpenGL Architecture Review Board ローディングと実行を行うために、高レベルOpenGLシェーディング言語はARBにコンパイルされる。高レベルシェーディング言語とは違い、ARBアセンブリはフロー制御や分岐をサポートしていない。しかしながらその移植性の高さから様々なGPUで使われ続けている。 GLSL、glslangとしても知られている。言語文法はC言語がベースとなっている。これはOpenGL API用の高レベルシェーディング言語として、まずバージョン1.5の拡張機能として導入された[2]のち、バージョン2.0にて標準化された。本家OpenGLの他、OpenGL ES、WebGLといったサブセットや派生規格でもサポートされている。この言語は単一命令セットで頂点処理とフラグメント処理を統合し、条件ループと(より一般的な)分岐をサポートしている。歴史的に、GLSLの機能は ⇒ARB_vertex_programや ⇒ARB_fragment_programのような様々なOpenGL拡張によって先行して開発されてきた。これらの拡張には制限があったり、低レベルであったり、アセンブリのような言語であって、それらの使い勝手は今やよくない。これらの拡張自身も今や新しいバージョンには生き残っていない他の拡張提案によって先行開発されてきた。 Direct3D 8で初めて搭載された。アセンブリ言語とはいえ、ハードウェア非依存の中間バイトコードにアセンブルされるため、Direct3D対応であれば実行ハードウェアを問わない。Direct3D 9でもこのアセンブリ言語は使用可能だが、Direct3D 10以降は使用できない[3]。 正式名称はHigh Level Shading Languageだが、HLSLの略称で呼ばれる。Direct3D 9で初めて搭載された。言語文法はC言語およびC++がベースとなっている。これはおそらく今日で最も成功した言語である[要出典]。主にマイクロソフトからの多大なサポートによる所もあるが、それと同時にリアルタイムレンダリング用途として最初のCスタイルシェーディング言語でもある。HLSLは以前は主にGLSLの競合としてリリースされた[要出典]が、その機能はGLSLの機能と合わせるために異なるリビジョンが後にリリースされた。
プロダクションでのレンダリング
RenderMan Shading Language詳細は「RenderMan Shading Language」を参照
Light source shaders 光源上の点から照射面上の点への光の色を計算する。
Surface shaders 照射されるオブジェクトの光学的特性モデル。入射光と物体の物理的特性を考慮することにより、照射点における最終的な色と位置を計算する。
Displacement shaders は表面の図形をその地点の色に独立して操作する。
Deformation shaders 全体の空間をある定義された図形に変換する。唯一RenderManにのみ実装されているAIR rendererは実際にこのタイプのシェーダーを実装している。
Volume shaders ボリュームを通して際の光の色を操作する。これらはフォグのような効果を生み出す。
Imager shaders 色を最終画素値に変形する。これはイメージフィルタ
Houdini VEX Shading Language
Gelato Shading Language
リアルタイムレンダリング
ARB 低レベルアセンブリ言語
OpenGL シェーディング言語詳細は「GLSL」を参照
DirectX アセンブリ言語
DirectX 高レベルシェーディング言語詳細は「High Level Shading Language」を参照
Size:27 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef