|
|
| (4人の利用者による、間の11版が非表示) |
| 1行目: |
1行目: |
| '''シェーダー'''([[英語]]:shader)とは、画像を描画時に加工する機能である。 | | '''シェーダー'''([[英語]]:shader)とは、本来は3DCGにおいて「陰影処理を行うこと」をいう。現在では「[[GPU]]で行う様々な処理の総称」となっている。 |
|
| |
|
| ==[[DXライブラリ]]のシェーダー== | | ==概要== |
| DXライブラリにおいては、シェーダーを[[C言語]]っぽい言語で書き、付属のツールで[[コンパイル]]することができる。
| | シェーダーは大きくわけて[[GPU]]が固定機能として持つ「[[固定シェーダー]]」と、[[プログラマー]]が独自の処理を記述できる「[[プログラマブルシェーダー]]」に分けられる。 |
| | |
| | 現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品は[[ニンテンドー3DS]]くらいである。 |
| | |
| | また、ほとんどの[[ゲームフレームワーク]]や[[ゲームエンジン]]では無駄に[[プログラミング]]しなくても定番のレンダリング処理はあらかじめ[[固定シェーダー]]として用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。 |
| | |
| | 最近は[[人工知能]]だ[[ブロックチェーン]]だと[[GPGPU]]の絡みで普通の計算もし易い仕様の[[プログラミング言語]]も増えている。 |
| | |
| | |
| | ==DXライブラリのシェーダー== |
| | [[DXライブラリ]]においては、シェーダーを[[C言語]]っぽい言語で書き、付属のツールで[[コンパイル]]することができる。 |
|
| |
|
| ===頂点シェーダー=== | | ===頂点シェーダー=== |
| 未稿 | | 未稿 |
| | |
| ===ピクセルシェーダー=== | | ===ピクセルシェーダー=== |
| バイナリの主な[[拡張子]]は".pso"すなわち「[[ファンタジースターオンライン|ぷそ]]」である。 | | バイナリの主な[[拡張子]]は".pso"すなわち「[[ファンタジースターオンライン|ぷそ]]」である。 |
|
| |
|
| [[テクスチャ]]([[プログラム]]で指定した画像)上の位置(左上を(0.0,0.0)、右下を(1.0,1.0)とする)などのパラメータが渡され、 | | [[テクスチャ]]([[プログラム]]で指定した画像)上の位置(左上を(0.0,0.0)、右下を(1.0,1.0)とする)などのパラメータが渡され、 |
| その位置に書き込みたい色のデータを返す。
| | その位置に書き込みたい色の[[データ]]を返す。色のデータは、[[RGBA]]の各要素をそれぞれ0.0~1.0の実数で表す形式で入出力する。 |
| 色のデータは、RGBAの各要素をそれぞれ0.0~1.0の実数で表す形式で入出力する。
| |
|
| |
|
| 例:[[グレースケール]]化 | | 例:[[グレースケール]]化 |
| 46行目: |
56行目: |
| 一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。 | | 一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。 |
|
| |
|
| ==[[DirectX]]のシェーダー== | | ==DirectXのシェーダー== |
| [[DirectX]]では上位シェーダーモデルとして'''HLSL(High-Level Shader Language:上位レベルシェーダ言語)'''が採用されている。 | | [[DirectX]]では「[[HLSL]]」を用いる。 |
| | |
| HLSLはDirectX9から実装された高級シェーダー言語であり、C言語風な書き方ができるようになっている。
| |
| | |
| 現在、シェーダーモデル1~5までが存在しており、それぞれでの使える機能・対応する[[DirectX]]自体のバージョンが違うため、注意が必要となる
| |
| | |
| Direct3D 9の場合(シェーダーモデル1.x~3.0)は、頂点シェーダーとピクセルシェーダーの二つが提供されていた。
| |
| | |
| Direct3D 10.xの場合(シェーダーモデル4.x)は、そこにジオメトリシェーダーが追加。
| |
| | |
| Direct3D 11.xの場合(シェーダーモデル5.0)では、ハルシェーダー、ドメインシェーダー、コンピュートシェーダー(計算シェーダー、演算シェーダー)が追加となった。
| |
| | |
| ただし、コンピュートシェーダーに関してはグラフィックパイプラインの機能ではなく、物理衝突演算やアニメーション計算などの計算時に[[GPU]]を使用するための機能として提供されている。
| |
| | |
| なお、ファイルの[[拡張子]]は'''''.fx'''''となっている
| |
| | |
| ----
| |
| | |
| 例:HLSLによる単純な3Dポリゴンの描画(バージョンはvs2.0,ps2.0)
| |
| <pre>
| |
| | |
| //グローバル変数
| |
| float4x4 worldViewProjMat; //射影変換用行列
| |
|
| |
|
| //テクスチャ
| | ==Unityのシェーダー== |
| texture modelTexture; // テクスチャ情報の格納
| | Unityでは「[[CG言語]]」を用いる。 |
|
| |
|
| // サンプラー(テクスチャの状態を規定する構造体)
| | ==OpenGLのシェーダー== |
| sampler texSampler = sampler_state
| | [[OpenGL]]および[[OpenGL ES]]は「[[GLSL]]」を用いる。 |
| {
| |
| Texture =<modelTexture>;
| |
| MinFilter =LINEAR;
| |
| MagFilter =LINEAR;
| |
| MipFilter =NONE;
| |
|
| |
|
| AddressU =Clamp;
| | ==Metalのシェーダー== |
| AddressV =Clamp;
| | Metalでは「[[Metal Shading Language]]」を用いる。 |
| };
| |
|
| |
|
| //頂点シェーダからピクセルシェーダーに渡す構造体
| | == Vulkanのシェーダー == |
| struct VertexShaderResult
| | [[Vulkan]]では「[[GLSL]]」および「[[HLSL]]」の2種類が利用可能となった。 |
| {
| |
| float4 Position : POSITION;
| |
| float2 TexCoord : TEXCOORD0;
| |
| };
| |
| | |
| //頂点シェーダ
| |
| VertexShaderResult VS( float4 _pos:POSITION, float2 _texCoord:TEXCOORD)
| |
| {
| |
| VertexShaderResult Out = (VertexShaderResult )0;//出力データ
| |
| Out.Position = mul(_pos, worldViewProjMat);//位置座標
| |
| Out.TexCoord = _texCoord;//テクスチャ座標
| |
| return Out;
| |
| }
| |
| | |
| //ピクセルシェーダ
| |
| float4 PS( VertexShaderResult _vertexResult ):COLOR
| |
| {
| |
| // テクスチャの貼り付け
| |
| return tex2D( texSampler , _vertexResult.TexCoord );
| |
| }
| |
| | |
| // テクニック
| |
| // DirectX側でこのテクニックを指定することで
| |
| // このテクニックで指定した頂点シェーダーとピクセルシェーダーで描画を行う
| |
| technique SampleShader
| |
| {
| |
| pass P0
| |
| {
| |
| VertexShader = compile vs_2_0 VS(); // 頂点シェーダーを2.0のシェーダーモデルで描画
| |
| PixelShader = compile ps_2_0 PS(); // ピクセルシェーダーを2.0のシェーダーモデルで描画
| |
| }
| |
| }
| |
| | |
| </pre>
| |
| | |
| ==[[Unity]]のシェーダー==
| |
| 未稿
| |
| | |
| ==[[OpenGL]]のシェーダー==
| |
| 未稿
| |
|
| |
|
| ==関連項目== | | ==関連項目== |
| * [[画像処理]] | | *[[画像処理]] |
| * [[シェーディング言語]] | | *[[シェーディング言語]] |
| | *[[MonoGameでシェーダーを使う]] |
|
| |
|
| {{stub}}
| | [[category: コンピューター・グラフィックス]] |
| | [[category: 3DCG]] |
| | [[category: GPU]] |