3DCGツール「MikuMikuDance」のエフェクトを拡張する「MikuMikuEffect」
専用モデルを利用したエフェクト
MikuMikuEffectで学ぶHLSL入門(6)
ダウンロード サンプルファイル (86.9 KB)
頂点シェーダの処理
各点の座標の決定
現在このエフェクトは、モデルの0点(読み込み直後ではX:0 Y:0 Z:0)からプログラムで指定する座標に向かいラインを伸ばしています。この、ラインを伸ばす座標を、コード中では「TargetPos」という変数で制御しています。
//ターゲット用座標 float3 TargetPos = float3(0,0,100);
ある点からある点にラインを伸ばす
このような、ある点からある点の座標が必要な時には、HLSL標準関数の一つ、「lerp」を使用します。
lerp(a,b,c); lerp関数は、変数a~変数bまでの値を線形補間し、c(0.0~1.0)の位置の値を返します。
float型、matrix型(行列型)などの各種型が使用できる非常に汎用性の高い関数なのでぜひとも覚えておいてください。
今回のエフェクトでは、元モデルのZ座標をlerpの第三引数に使っています。
float3 NowPos = lerp(ZeroPos,TargetPos,Pos.z);
図にすると以下のような形になります。
変数C(0.0~1.0)は0~100%でとらえると分かりやすいかと思います。
これで始点~終点への座標は設定できたので、次はラインの幅を設定していきます。
ラインのビルボード化
まずビルボード、という単語について解説します。
ビルボードとは、直訳すると"看板"となりますが、3Dプログラムでは「常にこちらを向き続けるポリゴン」のことを指します。
通常のビルボードは、常にカメラ方向を向く挙動を取ります。どの視点から見ても一定の面を見せ続けます。
パーティクルや太陽など、円に近い物体(どの方向から見ても形状が変化しない物)などに広く利用されています。
今回は空間に線を引くため、こちらのラインビルボードを使います。ラインビルボードは特定の軸以外の2軸でカメラの方向を向く挙動を取り、木などを大量に配置する場合や、ビームや銃弾などに使われる、ラインエフェクトなどで使用されます。

- 修正履歴
-
- 2012/11/13 10:49 Lerp関数の利用 画像のurlを修正
- 2012/10/18 02:31 記事完成
- 2012/10/15 23:44 アドバイスに従い間違い修正および文章、画像追加
この記事は参考になりましたか?
- MikuMikuEffectで学ぶHLSL入門連載記事一覧
-
- 3DCGツール「MikuMikuDance」のエフェクトを拡張する「MikuMikuEff...
- 3DCGツール「MikuMikuDance」のエフェクトを拡張する「MikuMikuEff...
- 3DCGツール「MikuMikuDance」のエフェクトを拡張する「MikuMikuEff...
- この記事の著者
-
ビームマンP(ビームマンピー)
ニコニコ動画等でMikuMikuEffect用シェーダプログラム開発者として活動。 開発を始めた理由はカッコいいビームやミサイルが作りたかった為。 エフェクト配布用サイト http://www43.atwiki.jp/beamman/
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
