SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

MikuMikuEffectで学ぶHLSL入門

3DCGツール「MikuMikuDance」のエフェクトを拡張する「MikuMikuEffect」
専用モデルを利用したエフェクト

MikuMikuEffectで学ぶHLSL入門(6)


頂点シェーダの処理

各点の座標の決定

 現在このエフェクトは、モデルの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);

 図にすると以下のような形になります。

Lerp関数の利用
Lerp関数の利用

 変数C(0.0~1.0)は0~100%でとらえると分かりやすいかと思います。

 これで始点~終点への座標は設定できたので、次はラインの幅を設定していきます。

ラインのビルボード化

 まずビルボード、という単語について解説します。

 ビルボードとは、直訳すると"看板"となりますが、3Dプログラムでは「常にこちらを向き続けるポリゴン」のことを指します。

通常のビルボード
通常のビルボード

 通常のビルボードは、常にカメラ方向を向く挙動を取ります。どの視点から見ても一定の面を見せ続けます。

 パーティクルや太陽など、円に近い物体(どの方向から見ても形状が変化しない物)などに広く利用されています。

今回使用するラインビルボード
今回使用するラインビルボード

 今回は空間に線を引くため、こちらのラインビルボードを使います。ラインビルボードは特定の軸以外の2軸でカメラの方向を向く挙動を取り、木などを大量に配置する場合や、ビームや銃弾などに使われる、ラインエフェクトなどで使用されます。

今回の用途

次のページ

修正履歴

この記事は参考になりましたか?

MikuMikuEffectで学ぶHLSL入門連載記事一覧

もっと読む

この記事の著者

ビームマンP(ビームマンピー)

ニコニコ動画等でMikuMikuEffect用シェーダプログラム開発者として活動。 開発を始めた理由はカッコいいビームやミサイルが作りたかった為。 エフェクト配布用サイト http://www43.atwiki.jp/beamman/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6517 2012/11/13 11:11

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー