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

imported>Administrator
imported>Administrator
編集の要約なし
55行目: 55行目:


==DirectXのシェーダー==
==DirectXのシェーダー==
[[DirectX]]では上位[[シェーダーモデル]]として[[HLSL]](High-Level Shader Language:上位レベルシェーダ言語)が採用されている。
DirectXでは「[[HLSL]]」を用いる。
 
[[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のシェーダー==
==Unityのシェーダー==