「シェーダー」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Fallout New Tokyo
imported>Katariya
47行目: 47行目:
  
 
==[[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を使用するための機能として提供されている。
  
 
==[[Unity]]のシェーダー==
 
==[[Unity]]のシェーダー==

2014年10月2日 (木) 14:49時点における版

シェーダー英語:shader)とは、画像を描画時に加工する機能である。

DXライブラリのシェーダー

DXライブラリにおいては、シェーダーをC言語っぽい言語で書き、付属のツールでコンパイルすることができる。

頂点シェーダー

未稿

ピクセルシェーダー

バイナリの主な拡張子は".pso"すなわち「ぷそ」である。

テクスチャ(プログラムで指定した画像)上の位置(左上を(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のシェーダー

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を使用するための機能として提供されている。

Unityのシェーダー

未稿

OpenGLのシェーダー

未稿

関連項目