ダウンロード simple.zip (1.6 KB)
本連載では、3DCG作成ツール「MikuMikuDance」(以下MMD)にエフェクトを追加する「MikuMikuEffect」(以下MME)の使用方法と、エフェクトを構成するHLSLコードについて、6回に渡り解説していきます。第3回目となる今回は、エフェクトファイルの内部構成と、シェーダコードの簡単な改変について解説します。
エフェクトファイルの構成
エフェクトファイルの典型的な構成は、以下のようになっています。
パラメータ定義
シェーダコードから参照する各種パラメータ(グローバル変数)を定義します。これらには、第2回で紹介したような、ユーザが値を直接指定するパラメータの他、MMEによって自動的に値が設定されるパラメータが存在します。
シェーダコード
3Dオブジェクトの描画の仕方を記述した、GPU用のプログラムコードをここで記述します。
シェーダは、「頂点シェーダ」と「ピクセルシェーダ」の2種類1組からなります。これらの役割の違いを、強引に現実の絵画に例えるならば、
- 頂点シェーダ: 物体をキャンパス上に配置する位置・構図を決める
- ピクセルシェーダ: 物体を塗る色を決める
に対応します。
頂点シェーダ
頂点シェーダでは、オブジェクトの各頂点のスクリーン上の座標を計算します。また、色計算に必要な頂点情報をピクセルシェーダに渡すことも行います。
ピクセルシェーダ
ピクセルシェーダでは、スクリーン上に展開されたオブジェクトの、各ピクセルの色を計算します。
テクニック定義
描画に使用する、頂点シェーダ・ピクセルシェーダの組み合わせを指定します(補足1)。
頂点シェーダとピクセルシェーダの組み合わせを定義したものをパスと呼びます。1つのパスは、1回のレンダリング処理に対応します。1つ以上のパスをグループ化したものをテクニックと呼びます。
描画対象の種類(オブジェクト本体・影・輪郭)や材質等によって、描画に使用するシェーダを切り替えるには、複数のテクニックを定義します。
シェーダ周りのデータの流れを簡単に表すと、以下のようになります。
頂点シェーダは頂点単位で実行され、入力はオブジェクトの頂点情報(ボーン・モーフによる変形処理後のもの)、出力は頂点のスクリーン上の座標+ピクセルシェーダに渡す頂点情報です。
ピクセルシェーダはピクセル単位で実行され、入力は頂点シェーダから渡された頂点情報、出力はそのピクセルの色情報です。
頂点シェーダとピクセルシェーダの間には、ラスタライズという処理が入り、ここで、スクリーン上の頂点座標の並びから、ポリゴンが実際にスクリーン上に占めるピクセルの並びへと変換されます。このとき、頂点シェーダが出力した頂点情報は、各ピクセルへと展開され、ピクセルシェーダへと渡されます。
なお、ここで解説した構成は、MMEがサポートするSM3.0のもので、SM4.0以降では、より多くのシェーダのバリエーションが存在します。
- 修正履歴
-
- 2011/08/23 03:22 執筆完了
この記事は参考になりましたか?
- この記事の著者
-
舞力介入P(ブリョクカイニュウピー)
ニコニコ動画でMMD関連のツール開発者として活動中。代表作は「MikuMikuEffect」。我流のAPI Hookを常套手段とする、邪道プログラマです。ニコニコ動画マイリスト
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
