「シェーダー」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
|||
| (2人の利用者による、間の6版が非表示) | |||
| 1行目: | 1行目: | ||
'''シェーダー'''([[英語]] | '''シェーダー'''([[英語]]:shader)とは、本来は3DCGにおいて「陰影処理を行うこと」をいう。現在では「[[GPU]]で行う様々な処理の総称」となっている。 | ||
== 概要 == | ==概要== | ||
[[GPU]] | シェーダーは大きくわけて[[GPU]]が固定機能として持つ「[[固定シェーダー]]」と、[[プログラマー]]が独自の処理を記述できる「[[プログラマブルシェーダー]]」に分けられる。 | ||
現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品は[[ニンテンドー3DS]]くらいである。 | |||
== DXライブラリのシェーダー == | また、ほとんどの[[ゲームフレームワーク]]や[[ゲームエンジン]]では無駄に[[プログラミング]]しなくても定番のレンダリング処理はあらかじめ[[固定シェーダー]]として用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。 | ||
最近は[[人工知能]]だ[[ブロックチェーン]]だと[[GPGPU]]の絡みで普通の計算もし易い仕様の[[プログラミング言語]]も増えている。 | |||
==DXライブラリのシェーダー== | |||
[[DXライブラリ]]においては、シェーダーを[[C言語]]っぽい言語で書き、付属のツールで[[コンパイル]]することができる。 | [[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の実数で表す形式で入出力する。 | ||
例:[[グレースケール]]化 | 例:[[グレースケール]]化 | ||
| 53行目: | 56行目: | ||
一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。 | 一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。 | ||
== DirectXのシェーダー== | ==DirectXのシェーダー== | ||
[[DirectX]] | [[DirectX]]では「[[HLSL]]」を用いる。 | ||
[[ | ==Unityのシェーダー== | ||
Unityでは「[[CG言語]]」を用いる。 | |||
==OpenGLのシェーダー== | |||
[[OpenGL]]および[[OpenGL ES]]は「[[GLSL]]」を用いる。 | |||
== | ==Metalのシェーダー== | ||
Metalでは「[[Metal Shading Language]]」を用いる。 | |||
== | == Vulkanのシェーダー == | ||
[[Vulkan]]では「[[GLSL]]」および「[[HLSL]]」の2種類が利用可能となった。 | |||
==関連項目== | |||
*[[画像処理]] | |||
*[[シェーディング言語]] | |||
*[[MonoGameでシェーダーを使う]] | |||
[[category: コンピューター・グラフィックス]] | [[category: コンピューター・グラフィックス]] | ||
[[category: 3DCG]] | |||
[[category: GPU]] | |||
2023年10月26日 (木) 07:05時点における最新版
シェーダー(英語:shader)とは、本来は3DCGにおいて「陰影処理を行うこと」をいう。現在では「GPUで行う様々な処理の総称」となっている。
概要[編集 | ソースを編集]
シェーダーは大きくわけてGPUが固定機能として持つ「固定シェーダー」と、プログラマーが独自の処理を記述できる「プログラマブルシェーダー」に分けられる。
現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品はニンテンドー3DSくらいである。
また、ほとんどのゲームフレームワークやゲームエンジンでは無駄にプログラミングしなくても定番のレンダリング処理はあらかじめ固定シェーダーとして用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。
最近は人工知能だブロックチェーンだとGPGPUの絡みで普通の計算もし易い仕様のプログラミング言語も増えている。
DXライブラリのシェーダー[編集 | ソースを編集]
DXライブラリにおいては、シェーダーをC言語っぽい言語で書き、付属のツールでコンパイルすることができる。
頂点シェーダー[編集 | ソースを編集]
未稿
ピクセルシェーダー[編集 | ソースを編集]
テクスチャ(プログラムで指定した画像)上の位置(左上を(0.0,0.0)、右下を(1.0,1.0)とする)などのパラメータが渡され、 その位置に書き込みたい色のデータを返す。色のデータは、RGBAの各要素をそれぞれ0.0~1.0の実数で表す形式で入出力する。
例:グレースケール化
//おまじない
struct PS_INPUT {
float4 DiffuseColor : COLOR0;
float4 SpecularColor : COLOR1;
float2 TextureCoord0 : TEXCOORD0;
float2 TextureCoord1 : TEXCOORD1;
};
struct PS_OUTPUT {
float4 Output : COLOR0;
};
sampler DiffuseMapTexture : register(s0);
//メインのプログラムを書く
PS_OUTPUT main(PS_INPUT PSInput) {
PS_OUTPUT PSOutput;
float4 nowColor;
//指定された場所のテクスチャの色を取得するおまじない
nowColor=tex2D(DiffuseMapTexture,PSInput.TextureCoord0);
//グレースケールにする計算
PSOutput.Output.r=0.298912f*nowColor.r+0.586611f*nowColor.g+0.114478f*nowColor.b;
PSOutput.Output.g=PSOutput.Output.r;
PSOutput.Output.b=PSOutput.Output.r;
PSOutput.Output.a=nowColor.a;
//計算結果を返す
return PSOutput;
}
一応行列の積などの計算もできそうだが、普通に計算したほうが速いし正確。
DirectXのシェーダー[編集 | ソースを編集]
Unityのシェーダー[編集 | ソースを編集]
Unityでは「CG言語」を用いる。
OpenGLのシェーダー[編集 | ソースを編集]
OpenGLおよびOpenGL ESは「GLSL」を用いる。
Metalのシェーダー[編集 | ソースを編集]
Metalでは「Metal Shading Language」を用いる。
Vulkanのシェーダー[編集 | ソースを編集]
Vulkanでは「GLSL」および「HLSL」の2種類が利用可能となった。