CodeZine(コードジン)

特集ページ一覧

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

MikuMikuEffectで学ぶHLSL入門(6)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/11/12 14:00
目次

頂点シェーダの処理

各点の座標の決定

 現在このエフェクトは、モデルの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軸でカメラの方向を向く挙動を取り、木などを大量に配置する場合や、ビームや銃弾などに使われる、ラインエフェクトなどで使用されます。

今回の用途


  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2012/11/13 10:49 Lerp関数の利用 画像のurlを修正

  • 2012/10/18 02:31 記事完成

  • 2012/10/15 23:44 アドバイスに従い間違い修正および文章、画像追加

バックナンバー

連載:MikuMikuEffectで学ぶHLSL入門

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5