「シェーダー」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | '''シェーダー'''([[英語]] | + | '''シェーダー'''([[英語]]:shader)とは、画像を描画時に加工する機能である。 |
− | == | + | ==[[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の実数で表す形式で入出力する。 | ||
例:[[グレースケール]]化 | 例:[[グレースケール]]化 | ||
56行目: | 46行目: | ||
一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。 | 一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。 | ||
− | == | + | ==[[DirectX]]のシェーダー== |
− | [[DirectX]] | + | DirectXでは上位シェーダーモデルとして'''HLSL(High-Level Shader Language:上位レベルシェーダ言語)'''が採用されている。 |
+ | 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; //射影変換用行列 | ||
+ | |||
+ | //テクスチャ | ||
+ | texture modelTexture; // テクスチャ情報の格納 | ||
+ | |||
+ | // サンプラー(テクスチャの状態を規定する構造体) | ||
+ | sampler texSampler = sampler_state | ||
+ | { | ||
+ | Texture =<modelTexture>; | ||
+ | MinFilter =LINEAR; | ||
+ | MagFilter =LINEAR; | ||
+ | MipFilter =NONE; | ||
+ | |||
+ | AddressU =Clamp; | ||
+ | AddressV =Clamp; | ||
+ | }; | ||
+ | |||
+ | //頂点シェーダからピクセルシェーダーに渡す構造体 | ||
+ | struct VertexShaderResult | ||
+ | { | ||
+ | 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]]のシェーダー== | ||
+ | 未稿 | ||
==関連項目== | ==関連項目== | ||
− | *[[画像処理]] | + | * [[画像処理]] |
− | *[[シェーディング言語 | + | * [[シェーディング言語]] |
− | |||
− | + | {{stub}} | |
− | |||
− |