SHOEISHA iD

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

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

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

MikuMikuEffectで学ぶHLSL入門

3DCGツール「MikuMikuDance」のエフェクトを拡張する「MikuMikuEffect」
はじめてのエフェクト制作

MikuMikuEffectで学ぶHLSL入門(4)

エフェクト動作テスト

 では背景用アクセサリを読み込み、テストしてみましょう。

使用テクスチャ
使用テクスチャ

 エフェクトファイルを更新した後、stage.xを読み込んだ状態です。一見何も表示されていないように見えれば成功です。背景画像がぴったりモデルに張りつけられているため、姿が消えているように見えるのです。

 正しい意味ではこれで完璧な光学迷彩の完成ですが、これではモデルを非表示にしているのと大差ありません。なので先ほどの「歪み量」を使い、スクリーン座標を歪ませます。

//ピクセルシェーダ本体
float4 TestShader_PS(OutVS IN) : COLOR
{
    //出力色
    float4 Color;
    
    //歪ませる量を計算
    //法線が視点方向からずれている程歪む
    float add = (1-dot(normalize(IN.Eye),normalize(IN.Normal)));
    
    //---追加---//
    
    //スクリーン座標を歪み値でずらす
    IN.ScreenTex += add;
    
    //----------//
    
    //テスト用テクスチャを使ってスクリーン座標をチェックする
    Color = tex2D(BackSampler,IN.ScreenTex);
    
    //色を出力
    return Color;
}

 単純にスクリーン座標に歪み量を加算しています。この変更を反映すると次のようになります。

使用テクスチャ
使用テクスチャ

 概ね予定通りの結果が得られていますが、addの中身に大きすぎる数値が入っているため、変化が急すぎて模様のようになっています。これを軽減するためにaddを小さくしてみましょう。

//スクリーン座標を歪み値でずらす
IN.ScreenTex += add*0.1;
使用テクスチャ
使用テクスチャ

 ちょうど良くなったでしょうか? 後は自分が気に入る程度まで数値を調節してみてください。これで今回のエフェクトは完成です。

コラム:MMDで動作チェック

 せっかくエフェクトを作ったのならば、動いている所を見たくなる物です。なので試しにサンプルデータに適用して躍らせてみましょう。

 

 MMDで[ファイル]→[開く]→「UserFile/サンプル(きしめん).pmd」 を読み込んだ後、[エフェクト割当]から「初音ミクmetal.pmd」に今回作成したエフェクトを適用してみます。

 

サンプル適用
サンプル適用

 再生ボタンを押すとアニメーションを開始します。静止画像ではなく、実際に動く物を見ると感動もひとしおです。ぜひお試しください。

最後に

HLSLは難しくない!

 一見難しく見えるHLSLですが、Cなどの高級言語と比べると良くも悪くもできることが少なく、ほとんどのエフェクトが単純なコードであることがほとんどです。何か新しいエフェクトを作ろうとした時でも、配布されているエフェクトなどに処理の参考になる部分が見つかることも少なくありません。

まとめ

 今回は、オブジェクトに適用する種類のエフェクトを作例に合わせて解説しました。次回からはポストエフェクトなど別の種類のエフェクトを作例と共に解説していきます。

参考資料

  1. wikipedia『光学迷彩
  2. MSDNライブラリ 『HLSL のリファレンス
修正履歴

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
MikuMikuEffectで学ぶHLSL入門連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6192 2011/10/19 14:00

イベント

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

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

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

メールバックナンバー