(Translated by https://www.hiragana.jp/)
シェーダー - Wikipedia コンテンツにスキップ

シェーダー

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

シェーダーえい: shader)はグラフィックスパイプライン構成こうせいするかくステージの挙動きょどう記述きじゅつしたプログラムである[1][2]

また狭義きょうぎにはグラフィックスパイプラインちゅうシェーディング陰影いんえい処理しょり)にかんする挙動きょどう記述きじゅつしたプログラムを[3]

概要がいよう

[編集へんしゅう]

3DCG様々さまざま要素ようそ技術ぎじゅつあつまりである。物体ぶったい三角形さんかっけい集合しゅうごう表現ひょうげんするモデリングうごきを計算けいさんするアニメーション・物理ぶつり演算えんざん生成せいせいするレンダリングなどである。レンダリングは複数ふくすう段階だんかいからなるパイプライン(レンダリングパイプライン)でっており、現代げんだいのレンダリングパイプラインはプログラム可能かのうなステージを多数たすうふくんでいる。これにより柔軟じゅうなんなグラフィックスが実現じつげん可能かのうになっている。

このプログラム可能かのうなステージの挙動きょどう記述きじゅつしたスクリプトがシェーダーである[1]実現じつげんしたいグラフィックスにわせてかくステージの挙動きょどう専用せんようシェーディング言語げんご記述きじゅつし、このプログラムを実行じっこうにGPUとうのハードウェアへわたすことで、レンダリングパイプラインが頂点ちょうてんぐんやフラグメントぐんたいしてこれら指示しじ実行じっこうし3DCGの生成せいせいされる。

シェーダーで可能かのう処理しょりはハードウェアあるいはそれを抽象ちゅうしょうしたグラフィックスAPIに規定きていされる。基本きほんてきにはかくステージであつか対象たいしょうさだめられており[1]#分類ぶんるい)、またステージにおうじて典型てんけいてき処理しょり様々さまざま存在そんざいする(れい: カメラを起点きてんとした座標ざひょう変換へんかん、テクスチャマッピング、ライティング)。他方たほう現代げんだいのシェーダーはかなり自由じゆうたかく、たとえばピクセルシェーダーにおいて入力にゅうりょくふくまれているいろ情報じょうほうをすべてってくろなピクセルを出力しゅつりょくすることも可能かのうであるし、最新さいしん研究けんきゅうもとづいたあたらしいライティングアルゴリズムを記述きじゅつすることもできる。

現代げんだいのグラフィックスパイプラインはプログラム可能かのうなステージがおお柔軟じゅうなんせいたか反面はんめん基本きほんてき処理しょりふくめてシェーダーに記述きじゅつする必要ひつようがあり手間てまがかかる。ゲームエンジンひとしのミドルウェアがこれを簡略かんりゃくする役割やくわりになうことがある。その場合ばあい、エンジンがレンダリングパイプラインの一部いちぶのみをプログラマに公開こうかいする。すなわちエンジンがパイプラインを内部ないぶてきちエンジンがわ典型てんけいてき処理しょり用意よういする。これにより簡略かんりゃくしつつ、かくステージないでプログラマがよく関与かんよする部分ぶぶんかんしてのみ追加ついかでシェーダーをめるようにする。これにより典型てんけいてき処理しょり記述きじゅつけつつ柔軟じゅうなんせい確保かくほできる。可能かのう領域りょういきシェーディング陰影いんえい処理しょり)である場合ばあいおおいため、「シェーダー」というかたりを「陰影いんえい処理しょりかんする挙動きょどう記述きじゅつしたプログラム」という意味いみあつか場合ばあいもある[3]

shade」とは「次第しだい変化へんかさせる」「陰影いんえいグラデーションける」という意味いみで、「shader」は頂点ちょうてんしょくやピクセルしょくなどを次々つぎつぎ変化へんかさせるもの(より具体ぐたいてきに、狭義きょうぎ意味いみえば関数かんすう)を意味いみする。

シェーダーは膨大ぼうだい要素ようそ集合しゅうごうたいして変換へんかん処理しょり同時どうじ適用てきようするように記述きじゅつされる。たとえばモデルないすべての頂点ちょうてん一様いちよう平行へいこう移動いどう回転かいてん拡大かくだい縮小しゅくしょうしたり、スクリーン(2次元じげん画像がぞうバッファ)の特定とくてい範囲はんいないかくピクセルにたいして一様いちようにフィルタリング・輝度きど変換へんかんなどを実行じっこうしたりする、などである。これらの処理しょり対象たいしょうとなるぜん要素ようそひとしく適用てきようされる。これは並列へいれつ処理しょり非常ひじょうてきしており、しばしばGPUをもちいて処理しょりされる。たとえばBlenderのCyclesエンジンやV-Ray RTはCUDAやOpenCLを経由けいゆしてプロダクションレンダリングにGPUを活用かつようする。

用途ようと使つか

[編集へんしゅう]

シェーダーない実装じっそうされるグラフィックスアルゴリズムは用途ようとおうじて使つかけられる。

映画えいがなどのプロダクション用途ようとのシェーダーでは、時間じかんはかかるがこう品質ひんしつでリアリティのたか結果けっか生成せいせいする。レンダリング方程式ほうていしき英語えいごばんもとづくレイトレーシングラジオシティフォトンマッピングなど、より厳密げんみつ大域たいいき照明しょうめいグローバルイルミネーション)ベース・物理ぶつりベースの陰影いんえい計算けいさんモデルがもちいられる。たとえば、PIXARRenderManはグローバルイルミネーションをサポートしている[4]

ゲームなどのリアルタイム用途ようとのシェーダーは、たとえば60FPSの場合ばあい1フレームの描画びょうがにかけられる時間じかん最大さいだいでもわずか16じゅうろくミリびょう程度ていどであり、また頂点ちょうてん情報じょうほうやテクスチャデータの格納かくのう参照さんしょう使用しようできるビデオメモリの容量ようりょうといった制約せいやく条件じょうけんおお[5]。そのため、リアルタイム用途ようとのシェーダーでは品質ひんしつ速度そくどのトレードオフが重視じゅうしされる。相互そうご反射はんしゃなどを考慮こうりょしない簡素かんそ高速こうそく局所きょくしょ照明しょうめい(ローカルイルミネーション)ベースの陰影いんえい計算けいさんモデルやZバッファ技法ぎほうもちいられることがだい多数たすうである。GPUの進化しんかとリアルタイムようプログラマブルシェーダーの発展はってんけて、アルゴリズムやデータ構造こうぞう工夫くふうしてグローバルイルミネーションをリアルタイム実装じっそうしているれい(PRT[6]、ライトフィールド[7]、ISPM[8]、SVO-GIほう[9]NVIDIA GI WorksのCLIPMAPほう[10]など)もてきているが、高性能こうせいのうなハードウェアを要求ようきゅうするなど、2018ねん時点じてんでもいま発展はってん途上とじょう技術ぎじゅつである。シャドウや光源こうげん環境かんきょうのライティングにかんしても、CSM[11]/PSSM[12]といった種々しゅじゅのシャドウマップ派生はせい技術ぎじゅつ、および遅延ちえんシェーディング遅延ちえんライティングなどが考案こうあんされ、制約せいやくない品質ひんしつたかめるアルゴリズムが追求ついきゅうされている。

リアルタイム用途ようとのシェーダーはCGプロダクションソフトウェアのプレビューにももちいられる。プロダクションようシェーダーのわりにリアルタイムようシェーダーをもちいることで素早すばやいプレビューが可能かのうになる。たとえばAutodesk 3ds MaxAutodesk MayaAutodesk Softimage、およびNewTek LightWave 3Dがプレビュー機能きのう提供ていきょうしている。

2DCGソフトウェアにもアクセラレータとしてしばしば導入どうにゅうされる(れい: Adobe PhotoshopAdobe Flash)。GUIベースオペレーティングシステム (OS) のデスクトップ合成ごうせいエンジンや標準ひょうじゅん2DグラフィックスAPI、具体ぐたいてきにはWindows Aero/Direct2D (Windows) やQuartz Extreme/Core Image (macOS) がそのいちれいである。

分類ぶんるい

[編集へんしゅう]

シェーダーは対応たいおうするステージによって入出力にゅうしゅつりょく利用りよう可能かのう機能きのうことなる。これにもとづいてシェーダーは以下いかのように分類ぶんるいできる。なお、かくシェーダーの具体ぐたいてき仕様しよう制約せいやくはグラフィックスAPI/ハードウェアごとにことなるため、ここで紹介しょうかいするのは Direct3D / OpenGL / Vulkan におおよそ共通きょうつうするいにまる(詳細しょうさいかく仕様しよう記事きじ参照さんしょう)。

シェーダーステージ

[編集へんしゅう]

おおくのリアルタイム用途ようとグラフィックスパイプラインは複数ふくすうだんのプログラマブルシェーダーと固定こてい処理しょりからなっている。プログラム可能かのうな1つの段階だんかい(シェーダー)はシェーダーステージばれる[13]以下いか典型てんけいてきなシェーダーステージである。

ひょう: シェーダーステージ
ステージめい 入力にゅうりょく 出力しゅつりょく 注記ちゅうき
頂点ちょうてんシェーダー 頂点ちょうてん 頂点ちょうてん
テッセレーション[14] プリミティブ プリミティブ しばしば "制御せいぎょシェーダー" + "テッセレーション固定こてい機能きのう"
ジオメトリシェーダー[15] プリミティブ プリミティブ
(ラスタライズ) プリミティブ フラグメント 固定こてい機能きのう
フラグメントシェーダー フラグメント フラグメント

OpenGL 3.2以降いこうとDirect3D 10[16]以降いこうでは3種類しゅるいのシェーダーを使用しようできる。シェーダーあいだ入出力にゅうしゅつりょく関係かんけいグラフィックスパイプライン#ステージ参照さんしょう

頂点ちょうてんシェーダー

[編集へんしゅう]

頂点ちょうてんシェーダーえい: Vertex Shader)はかく頂点ちょうてん処理しょりするシェーダーである[17]バーテックスシェーダーとも。

頂点ちょうてんシェーダーはオブジェクトを構成こうせいする頂点ちょうてん入力にゅうりょくとし、様々さまざま処理しょりおこない、頂点ちょうてん出力しゅつりょくする[17]たとえば3次元じげん空間くうかん座標ざひょう法線ほうせんベクトル・いろテクスチャマッピング座標ざひょう入力にゅうりょくとしてける。グラフィックスAPIによってはテクスチャへの副次的ふくじてきアクセスが用意よういされている。処理しょりとして典型てんけいてきにはモデル変換へんかんビュー変換へんかん投影とうえい変換へんかんをおこない[18]古典こてんてきには頂点ちょうてん単位たんいのライティングもおこなう。

ジオメトリシェーダー

[編集へんしゅう]

ジオメトリシェーダーえい: Geometry Shader, GS)はピクセルシェーダーにわたされるオブジェクトない頂点ちょうてん集合しゅうごう加工かこうするために使用しようされる。ジオメトリシェーダーにより、実行じっこう頂点ちょうてんすう増減ぞうげんさせたり、プリミティブ種類しゅるい変更へんこうしたりすることが可能かのうとなる。OpenGLではプリミティブシェーダーともばれる。

ジオメトリシェーダーはポイント、ライン、トライアングルといった既存きそんのプリミティブからあたらしいプリミティブを生成せいせいできる。

ジオメトリシェーダーは頂点ちょうてんシェーダーののち実行じっこうされ、プリミティブ全体ぜんたいまたは隣接りんせつしたプリミティブの情報じょうほうつプリミティブを入力にゅうりょくする。たとえばトライアングルを処理しょりするとき、3つの頂点ちょうてんがジオメトリシェーダーの入力にゅうりょくとなる。ジオメトリシェーダーはラスタライズされるプリミティブを出力しゅつりょくでき、そのフラグメントは最終さいしゅうてきにピクセルシェーダーにわたされる。またプリミティブを出力しゅつりょくせずにキャンセルすることもできる。

ジオメトリシェーダーのよくある使つかかたとしては、ポイントスプライトの生成せいせい、ジオメトリテセレーション、シャドウボリュームのし、キューブマップあるいはテクスチャ配列はいれつへのシングルパスレンダリングなどがある。

ピクセルシェーダー

[編集へんしゅう]

ピクセルシェーダーえい: Pixel Shader, PS)はピクセル単位たんいのライティングやポストプロセス(後処理あとしょり)をおこなうための機能きのうである。ピクセルシェーダーはラスタライズされるプリミティブのかくピクセルに影響えいきょうする。また、ピクセルシェーダーにてテクスチャ参照さんしょうすることでバンプマッピングフォグ、シャドウ、ブルームといったエフェクト最終さいしゅうレンダリング結果けっか適用てきようすることもできる。OpenGLではフラグメントシェーダー(えい: Fragment Shader, FS)とばれる(Fragment: 断片だんぺん)。

ピクセルシェーダーはピクセルを操作そうさする機能きのうであり、頂点ちょうてんシェーダーもしくはジオメトリシェーダーから入力にゅうりょくされた情報じょうほうもとにテクスチャを合成ごうせいしたり表面ひょうめんしょく適用てきようしたりする。ピクセルを操作そうさする処理しょりにかかる時間じかん入力にゅうりょくプリミティブのラスタライズのピクセルすう出力しゅつりょく解像度かいぞうど左右さゆうされるため、通例つうれい頂点ちょうてん単位たんい処理しょり比較ひかくしてこう負荷ふかである。これをピクセルシェーダープログラムとしてプログラミングし、たか並列へいれつ処理しょり性能せいのうつGPUで実行じっこうすることにより、バンプマッピングとうのより高度こうどなエフェクトをCPUですべて実行じっこうするよりもはるかにたかいパフォーマンスで実現じつげんできる。なお、通常つうじょうのレンダーターゲットを使つかったピクセルシェーダーでは、アルファブレンド(アルファ合成ごうせい処理しょり詳細しょうさいをプログラムすることはできない。

ピクセルシェーダーは深度しんど奥行おくゆき)も操作そうさできる。深度しんど操作そうさはレンダリングパイプラインの最適さいてき影響えいきょうする(れい: 深度しんどテスト実行じっこうタイミングを左右さゆうする)ため、シェーディング言語げんご/グラフィックスAPIによってはフラグの明示めいじもとめられる(れい: SPIR-V/Vulkan[19])。

テッセレーションシェーダー

[編集へんしゅう]

OpenGL 4.0以降いこうとDirect3D 11以降いこうではさらにテッセレーションシェーダーをオプションとして使用しようできる。

コンピュートシェーダー

[編集へんしゅう]

コンピュートシェーダーえい: Compute shader)はコンピュートパイプラインを構成こうせいするかくステージの挙動きょどう記述きじゅつしたプログラムである[1]

コンピュートシェーダーは汎用はんよう並列へいれつ処理しょりGPGPU)を目的もくてきとしており、計算けいさん入出力にゅうしゅつりょくグラフィックスパイプライン共有きょうゆうする場合ばあいもある。あくまでシェーダーの一種いっしゅでありシェーディング言語げんご記述きじゅつされる。APIとしては OpenGL 4.3以降いこうOpenGL ES 3.1以降いこう、およびDirect3D 11以降いこう提供ていきょうされる。Direct3DではDirect3D APIをふくめた総称そうしょうとしてDirectComputeばれている。

GPGPU専用せんようのAPI・言語げんごとしてはCUDAOpenCLがよくられている。

歴史れきし

[編集へんしゅう]

RenderMan Shading Language代表だいひょうされるように、プロダクションけの3次元じげんコンピュータグラフィックスのレンダリングではふるくからシェーディング処理しょりをプログラムで記述きじゅつしてカスタマイズし、こう品質ひんしつ映像えいぞうつくすといったことはたりまえのようにおこなわれてきた。一方いっぽうCADきゃどソフトやゲームなどのリアルタイム 2D/3Dグラフィックス アプリケーション開発かいはつしゃは、ソフトウェア(CPU)による定形ていけい簡易かんいシェーディングあるいはグラフィックスハードウェア(グラフィックスカードにおけるGPU)に固定こてい機能きのうとして実装じっそうされていた頂点ちょうてん変換へんかん・シェーディング機能きのう(ハードウェアT&L)すなわち「定形ていけいパイプライン」(固定こてい機能きのうパイプライン)を使用しようしてグラフィック表示ひょうじおこなっていた[20]

しかし、多数たすうのグラフィック表現ひょうげん技術ぎじゅつ次々つぎつぎ開発かいはつされていくなかで、それらの技術ぎじゅつをGPUメーカーが逐一ちくいちハードウェアに機能きのうとして実装じっそうしていく形態けいたい効率こうりつであり、またユーザープログラマーがあたらしい技術ぎじゅつためすにはメーカーの対応たいおうたねばならなかった。この問題もんだい解決かいけつするアイディアとして、GPUのパイプラインをソフトウェアプログラムによりてる「プログラマブル パイプライン」とばれるアーキテクチャが構築こうちくされることになる。以前いぜん完全かんぜんブラックボックスだったグラフィックスパイプラインがユーザープログラマーにたいして開放かいほうされることで、あらたな陰影いんえい処理しょり技法ぎほう各種かくしゅエフェクト画面がめん効果こうか)を試験しけんてき実装じっそうしてGPUじょうはしらせることが容易よういになり、先進せんしんてきなGPUの機能きのう利用りようするすぐれた柔軟じゅうなんせいと、表現ひょうげんりょく爆発ばくはつてき向上こうじょうがもたらされた。

当時とうじのOpenGL・DirectX (Direct3D) のAPIによってブラックボックスとして提供ていきょうされていたシェーダーは固定こてい機能きのうシェーダーばれ、プログラマブルシェーダーと区別くべつされる。OpenGLにおいてはバージョン1.5からプログラマブルシェーダーが拡張かくちょうとして導入どうにゅうされ、バージョン2.0からは標準ひょうじゅんされた。Direct3Dにおいてはバージョン8からプログラマブルシェーダーが導入どうにゅうされた[21]。OpenGL 3.1、OpenGL ES 2.0、およびDirect3D 10以降いこう固定こてい機能きのうシェーダーが廃止はいしされ、グラフィックスパイプラインはプログラマブルシェーダーによって記述きじゅつされる。現在げんざいではリアルタイム処理しょりけいにおいて「シェーダー」といえばプログラマブルシェーダーを[22] [23]。また、Direct3D 9世代せだいまでは、頂点ちょうてんシェーダーとピクセルシェーダーの処理しょり担当たんとうするGPUないのハードウェア演算えんざんユニット(演算えんざん)は完全かんぜんかれており、それぞれの演算えんざんユニットのことを「シェーダー」とんでいた。そのため、かつてはグラフィックスカードのハードウェア性能せいのう指標しひょうとして演算えんざんユニットすうあらわすために「シェーダーすう」という言葉ことば使つかわれていたが、統合とうごうがたシェーダーアーキテクチャ採用さいようしたDirect3D 10世代せだい以降いこうは「ストリームプロセッサすう(SPすう)」あるいは「CUDAコアすう」という言葉ことばもちいられるようになっている[24] [25] [26] [27] [28]

かくシェーダーステージがあつかえるリソースの範囲はんい時代じだいとともに拡大かくだいしている。シェーダーモデル3.0(DirectX 9.0c、OpenGL 2.x世代せだい)で導入どうにゅうされたVertex Texture Fetch (VTF) [29]により、頂点ちょうてんシェーダーステージでテクスチャデータを参照さんしょうできるようになった。シェーダーモデル4.0(DirectX 10世代せだい以降いこうでは、VTFはバッファデータの参照さんしょうとともに標準ひょうじゅんされた[30](OpenGLは3.1でVTFを標準ひょうじゅんし、頂点ちょうてんシェーダーですくなくとも16のTIUを使つかえるようになった)。さらに、OpenGL 4.2ではすべてのシェーダーステージにおいてイメージオブジェクトにたいするロード/ストアを可能かのうにする機能きのう標準ひょうじゅんされた[31]。DirectXにおいても、バージョン11.1にて、ピクセルシェーダーやコンピュートシェーダーだけでなく、すべてのシェーダーステージにおいて各種かくしゅリソースにたいするみが可能かのうになった[32]

関連かんれん項目こうもく

[編集へんしゅう]

脚注きゃくちゅう

[編集へんしゅう]
  1. ^ a b c d "A shader specifies programmable operations that execute for each vertex, control point, tessellated vertex, primitive, fragment, or workgroup in the corresponding stage(s) of the graphics and compute pipelines." 以下いかより引用いんよう。Khronos. Vulkan Specification - Shaders. Vulkan Documentation. 2024-08-11閲覧えつらん.
  2. ^ "A shader program, commonly referred to as a shader, is a program that runs on a GPU." 以下いかより引用いんよう。Unity. Graphics - Shaders - Shaders core concepts - Shaders introduction. Unity Documentation, version 2022.3. 2024-08-11閲覧えつらん.
  3. ^ a b "shaders are divided into three broad categories. ... Shaders that are part of the graphics pipeline ... They perform calculations that determine the color of pixels on the screen." 以下いかより引用いんよう。Unity. Graphics - Shaders - Shaders core concepts - Shaders introduction. Unity Documentation, version 2022.3. 2024-08-11閲覧えつらん.
  4. ^ What is RenderMan?
  5. ^ 衝突しょうとつ判定はんていなど、ユーザーとのインタラクション処理しょりようする時間じかん加味かみすると、実際じっさい描画びょうが処理しょり使つかえる時間じかんはさらにみじかくなる。そのため性能せいのうひくいモバイル機器ききなどでは30FPSが目標もくひょうとされることもある。一方いっぽうVR場合ばあい通例つうれい3Dけるために最低さいていフレームレート要件ようけんげられる。
  6. ^ 3Dグラフィックス・マニアックス (65) 事前じぜん計算けいさん放射ほうしゃ輝度きど伝搬でんぱん(PRT)~PRTとは? | マイナビニュース
  7. ^ 西川にしかわよしの3Dゲームファンのための「ソニック・ワールド・アドベンチャー」グラフィックス講座こうざ -GAME Watch
  8. ^ Hardware-Accelerated Global Illumination by Image Space Photon Mapping
  9. ^ 4Gamer.net ― NVIDIAとEpicが「Unreal Engine 4」で採用さいようされたしん世代せだいグローバルイルミネーション技法ぎほう解説かいせつ。その威力いりょくじきりムービーでチェックする
  10. ^ [SIGGRAPH 2014]NVIDIAがゲームけのリアルタイム大局たいきょく照明しょうめい,IntelはHaswellようDX12ドライバのデモを一般いっぱん展示てんじセクションで披露ひろう - 4Gamer.net
  11. ^ カスケード シャドウ マップ
  12. ^ GPU Gems 3 - Chapter 10. Parallel-Split Shadow Maps on Programmable GPUs
  13. ^ A shader object corresponds to a stage in the rendering pipeline referred to as its shader stage or shader type OpenGL 4.6 specification
  14. ^ Tessellation is a process that reads a patch primitive and generates new primitives used by subsequent pipeline stages. OpenGL 4.6 specification
  15. ^ Geometry shaders operate on a single primitive at a time and emit one or more output primitives OpenGL 4.6 specification
  16. ^ シェーダー ステージ (Direct3D 10)
  17. ^ a b "Each vertex shader invocation operates on one vertex and its associated vertex attribute data, and outputs one vertex and associated data." 以下いかより引用いんよう。Khronos. Vulkan Specification - Shaders. Vulkan Documentation. 2024-08-11閲覧えつらん.
  18. ^ "頂点ちょうてんシェーダー は、3D モデルのかく頂点ちょうてん実行じっこうされるプログラムです。おおくの場合ばあい、それはとくなにもしません。ここでは、頂点ちょうてん位置いちをオブジェクト空間くうかんからいわゆる「クリップスペース」に変換へんかんするだけです。... また、入力にゅうりょくテクスチャ座標ざひょう変更へんこうしないでわたします。" 以下いかより引用いんよう。Unity. 頂点ちょうてんシェーダーとフラグメントシェーダーのれい. Unity ユーザーマニュアル 2019.4 LTS. 2024-08-11閲覧えつらん.
  19. ^ " If the shader dynamically writes to FragDepth, the DepthReplacing Execution Mode must be declared (This is done in tools such as glslang)." 以下いかより引用いんよう。Khronos. Vulkan Guide - Using Vulkan - Depth. Vulkan Documentation. 2024-08-17閲覧えつらん.
  20. ^ DirectX 7 の Direct3D におけるライト
  21. ^ Shader Models vs Shader Profiles - MSDN
  22. ^ シェーダーの操作そうさ:「シェーダーとは、頂点ちょうてん変換へんかんやピクセルの色付いろづけなど、グラフィックス計算けいさん実行じっこうするコンピューター プログラムで、通常つうじょう CPU のわりにグラフィックス処理しょり装置そうち (GPU) で実行じっこうされます。」
  23. ^ Working with Shaders: "A shader is a computer program that performs graphics calculations—for example, vertex transformations or pixel coloring—and typically runs on a graphics processing unit (GPU) instead of the CPU."
  24. ^ 4Gamer.net
  25. ^ SAPPHIRE X1950 PRO
  26. ^ SAPPHIRE Ultimate HD 4670 512MB GDDR3 PCI-E
  27. ^ GeForce 8800
  28. ^ GeForce GTX 680 | NVIDIA
  29. ^ Vertex Texture Fetch - OpenGL.org
  30. ^ Load (DirectX HLSL Texture Object) (Windows)
  31. ^ GL_ARB_shader_image_load_store
  32. ^ Direct3D 11.1 Features (Windows)