このサイトはダイキン工業が運営するCG業界ニュースサイトです。
お問い合わせ

オンラインセミナー『ShaderFXを使った画像表現セミナー』(3)

シェーダーの基礎知識

リアルタイムシェーダーで基本的なシェーダーを表現するためには、

  • Vertex Shader(頂点シェーダー)
  • Pixel Shader(ピクセルシェーダー)

の2つのシェーダーがあり、処理が決まった約束で1方向に流れているというのを理解しておきたい(ジオメトリシェーダーというものもあるが、今回は省略)。

Vertex Shaderは、オブジェクトを構成する頂点の集合(頂点配列、頂点バッファー)に対してのみ作用する。3次元空間におけるxyz位置座標や法線ベクトル、色、テクスチャマッピング座標(uv座標等)といった頂点の属性だけを参照、変換するものだ。

Pixel Shaderは、ピクセル単位のライティングやポストプロセス(後処理)を行なうための機能。ラスタライズされるプリミティブの各ピクセルに影響する。
また、Pixel Shaderにテクスチャーを参照することで、バンプマッピングやフォグ、シャドウ、ブルームといったエフェクトを最終レンダリング結果に適用できる。

処理の流れ

最初は、Vertex Shaderで計算された頂点情報をGeometry ShaderがPixel Shaderに渡す。Pixel ShaderはVertex Shaderからデータを取得し、それらをピクセル単位で計算してマテリアルの最終的な画像として出力する。
なお、OpenGLではFragment ShaderがPixel Shaderと同様の役割を果たす。

Vertex ShaderとPixel Shaderの処理をまとめるのがTechniqueで、Vertex ShaderとPixel ShaderはそれぞれPassを作成し処理を行なえる。
この処理については、デフォルトのMaterialグループノードを参考にしてみるとよいだろう。

DirextX11ファイルへの書き出し

作成したシェーダーは、ShaderFX(.sfx)だけでなくDirect3D(HLSL_5)エフェクトファイル(.fx)にも書き出しが可能となっている。

アトリビュートエディタでAttributesの「Shader Config」で「HLSL_5」を指定し、ハイパーシェードでDirectX 11 Shaderを作成する。シェーダーをSphereに設定してシェーダーファイルで.fxシェーダーを適用すると、ビューポート上でもDirectX 11 Shaderが反映される。

Dx11ファイル(.fx)で注目してほしい部分

Shaderfx_base.fxをテキストで開くと、

//-technique TO

と書かれている部分にパスとVertexShader、Pixel Shaderが記述されており、

//–ShaderPixel
//–ShaderVertex

と書かれている部分にそれぞれのShaderFXノードで設定した接続がテキストで記されている。

また、サンプルのHLSL11シェーダーは

<maya directory>\presets\HLSL11\examples\

に用意されている。