検索に移動CgはNVIDIAが開発していた、リアルタイム3次元コンピュータグラフィックスにおけるプログラマブルシェーダーのためのシェーディング言語である。2012年を最後にバージョンアップは終了している。GPUプログラミングのために特化・最適化されており、CG描画に向いている。ベースとした文法を持つ。C++言語の類似機能も一部取り入れている。外部リンク背景[編集]GPUの技術的な発展にともない、アプリケーションソフトウェアのプログラマーが陰影計算処理(シェーディング)をプログラミング可能なハードウェアが開発されるようになった。最初期のGPUプログラミングはアセンブラをベースとしたもので、開発が難しく生産性や可搬性も低かった。そのため、GPU向けの高級言語が必要とされるようになり、Cgが開発された。類似のGPU用高級言語として、OpenGLネイティブのGLSLおよびDirectX(Direct3D)ネイティブのHLSLが存在するが、Cgはどちらかというと(マイクロソフトとNVIDIAが共同開発した)HLSLにより近い文法となっている。GLSLはOpenGL専用であり、またHLSLはDirect3D専用であるが、Cg言語およびCgランタイムライブラリは両方のAPIに対応しているという特徴を持っている。OpenGLおよびDirect3Dの両方を、Cgシェーダープログラムを実行する基盤として利用することができる。NVIDIAのGPGPU開発・実行環境であるCUDA用に拡張されたC/C++では、Cgによく似たデータ型や組み込み関数が実装されているなど、Cgは後発の言語にも影響を及ぼしている。詳細[編集]データ型[編集]Cgは6つの基本データ型を持っている。テクスチャオブジェクト型Cgにはその他にも、float3やfloat4x4のように、ベクトルや行列そのものを扱う型がある。これらは3次元のコンピュータグラフィックス計算において多用される型である。配列や構造体も用意されている。ポインタをサポートしない代わりに、配列は第一級オブジェクトである[1]。演算子[編集]CgはC言語で用いられる算術演算子や論理演算子をサポートしている。算術演算子はベクトル型や行列型にも適用できるものがあり、(C++言語の演算子オーバーロードのように)プログラムの可読性を高め、直感的に理解しやすいグラフィックスプログラムを書くことができるようになっている。関数と制御構造[編集]CgはC言語と同様の制御構造を記述するための構文を持つ。関数を定義することもできる。パラメータは既定で値渡しであり、in/out/inout/uniformの修飾子を指定することもできる。標準ライブラリ[編集]C言語と同様に、CgにはGPUプログラミングのための標準ライブラリがある。abs()やsin()など、C言語の標準ライブラリと共通の数学関数がある一方で、テクスチャマッピングのためのtex1D()やtex2D()など、GPUプログラミングに特化した関数も用意されている[2]。ランタイムライブラリ[編集]Cgによるプログラムは基本的に頂点やピクセルのシェーディングを行うためのものであり、そのほかのレンダリングプロセスや入出力を扱うためのC/C++ホストプログラムを必要とする。CgはOpenGLやDirectXのAPI基盤上で動作させることができるが、Cgシェーダープログラムを各APIと連携・バインドさせるためのライブラリがNVIDIAから提供されている。3.1時点では、リファレンスマニュアルによると下記のようになっている。Shaderを導入しているが、Cgはバージョン3.1時点ではまだそれらに対応していない。CgFX[編集]Cg言語は複数のシェーダープログラムを組み合わせた一連の処理パイプライン(Pass)およびそれらの入出力をまとめてひとつの「Technique」として管理することのできるEffectフレームワーク「CgFX」も同時に備えている。10のコアライブラリでサポートされているEffectフレームワークとよく似ており、個別にパイプラインステージごとのシェーダープログラムおよびその入出力を管理するよりもずっとシェーダープログラムのパイプラインを構築しやすくなる。Effectには複数のTechniqueを含むことができ、Techniqueには複数のPassを含むことができる。10に対応するv2.5を最後に開発が終了している[3]。nvFX[編集]Cgは2012年4月リリースのバージョン3.1.0013を最後に更新がなされておらず、開発が終了している。開発者へのCgランタイム自体の提供自体は継続されるものの、将来の新しいハードウェア機能をサポートしないため、新規開発での採用は推奨されていない[4]。ESもサポートし、モバイルなどの組み込み機器もターゲットとなる。LightWaveはバージョン11.6でCgFXを採用している。CgFXによってリアルタイムプレビュー時の法線マッピング機能などが追加されるほか、ユーザーが独自のカスタムシェーダーを実装して利用することができるようになる[7]。2.0.0015が同梱されている。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。