コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
シェーダー
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
2019年8月23日 (金) 07:40時点における
imported>Administrator
による版
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''シェーダー'''([[英語]]:shader)とは、本来は3DCGで「陰影処理を」行うことをいう。現在では主に[[GPU]]で行う様々な処理の総称となっている。 ==概要== シェーダーは大きくわけて[[GPU]]が固定機能として持つ「[[固定シェーダー]]」と、[[プログラマ]]が独自の処理を記述できる「[[プログラマブルシェーダー]]」に分けられる。 現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品は[[ニンテンドー3DS]]くらいである。 また、ほとんどの[[ゲームフレームワーク]]や[[ゲームエンジン]]では無駄に[[プログラミング]]しなくても定番のレンダリング処理はあらかじめ[[固定シェーダー]]として用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。 最近は[[人工知能]]だ[[ブロックチェーン]]だと[[GPGPU]]の絡みで普通の計算もし易い仕様のプログラミング言語も増えている。 ==DXライブラリのシェーダー== [[DXライブラリ]]においては、シェーダーを[[C言語]]っぽい言語で書き、付属のツールで[[コンパイル]]することができる。 ===頂点シェーダー=== 未稿 ===ピクセルシェーダー=== バイナリの主な[[拡張子]]は".pso"すなわち「[[ファンタジースターオンライン|ぷそ]]」である。 [[テクスチャ]]([[プログラム]]で指定した画像)上の位置(左上を(0.0,0.0)、右下を(1.0,1.0)とする)などのパラメータが渡され、 その位置に書き込みたい色の[[データ]]を返す。色のデータは、[[RGBA]]の各要素をそれぞれ0.0~1.0の実数で表す形式で入出力する。 例:[[グレースケール]]化 <pre>//おまじない 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; }</pre> 一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。 ==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のシェーダー== 未稿 == Metalのシェーダー == * [[Metal Shading Language]] ==関連項目== *[[画像処理]] *[[シェーディング言語]] *[[MonoGameでシェーダーを使う]] [[category: コンピューター・グラフィックス]] [[category: 3DCG]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化