メインメニューを開く

差分

シェーダー

2,543 バイト除去, 2023年10月26日 (木) 07:05
編集の要約なし
'''シェーダー'''([[英語]]:shader)とは、本来は3DCGで陰影処理を行うことをいう。現在では主に:shader)とは、本来は3DCGにおいて「陰影処理を行うこと」をいう。現在では「[[GPU]]で行う処理の総称となっている。で行う様々な処理の総称」となっている。
==概要==
シェーダーは大きくわけて[[GPU]]が固定機能として持つ「[[固定シェーダー]]」と、[[プログラマー]]が独自の処理を記述できる「[[プログラマブルシェーダー]]」に分けられる。
== 概要 ==シェーダーは大きくわけてGPUが固定機能として持つ「固定シェーダー」と、プログラマが独自の処理を記述できる「現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品は[[プログラマブルシェーダーニンテンドー3DS]]」に分けられる。くらいである。
現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品はニンテンドー3DSくらいである。また、ほとんどの[[ゲームフレームワーク]]や[[ゲームエンジン]]では無駄に[[プログラミング]]しなくても定番のレンダリング処理はあらかじめ[[固定シェーダー]]として用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。
また、ほとんどの最近は[[ゲームフレームワーク人工知能]][[ゲームエンジンブロックチェーン]]では無駄にだと[[プログラミングGPGPU]]しなくても定番のレンダリング処理はあらかじめの絡みで普通の計算もし易い仕様の[[固定シェーダープログラミング言語]]として用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。も増えている。
最近は[[人工知能]]だ[[ブロックチェーン]]だと[[GPGPU]]の絡みで普通の計算もし易い仕様のプログラミング言語も増えている。
== DXライブラリのシェーダー ==
[[DXライブラリ]]においては、シェーダーを[[C言語]]っぽい言語で書き、付属のツールで[[コンパイル]]することができる。
=== 頂点シェーダー ===
未稿
=== ピクセルシェーダー ===
バイナリの主な[[拡張子]]は".pso"すなわち「[[ファンタジースターオンライン|ぷそ]]」である。
[[テクスチャ]]([[プログラム]]で指定した画像)上の位置(左上を(0.0,0.0)、右下を(1.0,1.0)とする)などのパラメータが渡され、
その位置に書き込みたい色の[[データ]]を返す。色のデータは、を返す。色のデータは、[[RGBA]]の各要素をそれぞれ0.0~1.0の実数で表す形式で入出力する。
例:[[グレースケール]]化
一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。
== 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;Unityのシェーダー==};Unityでは「[[CG言語]]」を用いる。
//頂点シェーダからピクセルシェーダーに渡す構造体==OpenGLのシェーダー==struct VertexShaderResult{ float4 Position : POSITION; float2 TexCoord : TEXCOORD0;};[[OpenGL]]および[[OpenGL ES]]は「[[GLSL]]」を用いる。
//頂点シェーダVertexShaderResult VS( float4 _pos:POSITION, float2 _texCoord:TEXCOORD){ VertexShaderResult Out = (VertexShaderResult )0;//出力データ Out.Position = mul(_pos, worldViewProjMat);//位置座標 Out.TexCoord Metalのシェーダー== _texCoord;//テクスチャ座標 return Out;}Metalでは「[[Metal Shading Language]]」を用いる。
//ピクセルシェーダ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のシェーダー Vulkanのシェーダー ==未稿[[Vulkan]]では「[[GLSL]]」および「[[HLSL]]」の2種類が利用可能となった。
== 関連項目 ==* [[画像処理]]* [[シェーディング言語]]* [[MonoGameでシェーダーを使う]]
[[category: コンピューター・グラフィックス]]
[[category: 3DCG]]
[[category: GPU]]