Cg (プログラミング言語)
Cgによるプログラムは基本的に頂点やピクセルのシェーディングを行うためのものであり、そのほかのレンダリングプロセスや入出力を扱うためのC/C++ホストプログラムを必要とする。CgはOpenGLやDirectXのAPI基盤上で動作させることができるが、Cgシェーダープログラムを各APIと連携・バインドさせるためのライブラリがNVIDIAから提供されている。
LightWave - LightWaveはバージョン11.6でCgFXを採用している。CgFXによってリアルタイムプレビュー時の法線マッピング機能などが追加されるほか、ユーザーが独自のカスタムシェーダーを実装して利用することができるようになる。
Maya
PlayStation 3
Adobe Photoshop
Unity (ゲームエンジン)
Far Cry
GPUの技術的な発展にともない、アプリケーションソフトウェアのプログラマーが陰影計算処理(シェーディング)をプログラミング可能なハードウェアが開発・提供されるようになった。しかしDirect3D 8.xやOpenGL ARB拡張における最初期のGPUプログラミングは低水準言語(アセンブリ言語)をベースとしたもので、APIの実装が提供するランタイムライブラリおよびデバイスドライバーに含まれるアセンブラが解釈可能なニーモニックを利用してプログラムを記述する必要があったため、開発が難しく生産性や可搬性も低かった。そのため、GPU向けの高水準言語が必要とされるようになり、Cgが開発された。Cg Toolkit 1.0のベータ版は2002年6月に公開された。
なお、類似のGPU用高水準言語として、OpenGLネイティブのGLSL(2003年にOpenGL 1.5の拡張機能としてリリース)およびDirectX(Direct3D)ネイティブのHLSL(2002年末にDirectX 9.0の標準機能としてリリース)が存在するが、Cgはどちらかというと(マイクロソフトとNVIDIAが共同開発した)HLSLにより近い文法となっている。
GLSLはOpenGL専用であり、またHLSLはDirect3D専用であるが、Cg言語およびCgランタイムライブラリは両方のAPIに対応しているという特徴を持っている。つまり、OpenGLおよびDirect3Dの両方を、Cgシェーダープログラムを実行する基盤として利用することができる。
NVIDIAのGPGPU開発・実行環境であるCUDA用に拡張されたC/C++では、Cgによく似たデータ型や組み込み関数が実装されているなど、Cgは後発の言語にも影響を及ぼしている。
CgはNVIDIAが開発していた、リアルタイム3次元コンピュータグラフィックス(3DCG)におけるプログラマブルシェーダーのためのシェーディング言語である。2012年を最後にバージョンアップは終了している。GPUプログラミングのために特化・最適化されており、CG描画に向いている。この言語名の由来は「グラフィックスのためのC言語」(C for Graphics) であり、C言語 (ANSI C) をベースとした文法を持つ。また、C++言語の類似機能も一部取り入れている。
Cgはいくつかの基本データ型を持っている。
float - IEEE 754準拠の32ビット単精度浮動小数点数型
half - 16ビット半精度浮動小数点数型
int - 2の補数による符号付き32ビット整数型
intのサポートは任意であり、プロファイルによってはfloatとして扱うこともある。
各整数型にはunsignedを付けることで符号無し整数型とすることができる。 以下の関係を満たす整数型char、short、long sizeof(char) < sizeof(short) < sizeof(int) <= sizeof(long)
fixed - 12ビット固定小数点数型
bool - 論理型
sampler* - テクスチャオブジェクト型
Cgは配列(固定長配列)や構造体もサポートする。ポインタをサポートしない代わりに、配列は第一級オブジェクトである。また、配列にpacked型修飾子を指定することで、packed array型を定義することができる。基本数値型に関して、例えばfloat4やfloat4x4のように、4次元までのベクトル型と4×4次元までの行列型のエイリアスがあらかじめ定義されている。これらはベクトルや行列そのものを扱う型として、3次元のコンピュータグラフィックス計算において多用される型である。