|
|
| 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のシェーダー== |