はじめに
MikuMikuDance(以降MMD)は、樋口優氏によって開発された、3DCG作成ツールです(参考資料1)。
MMDは、ニコニコ動画などの動画投稿サイトにおける3DPV作成ツールとして人気が高く、ニコニコ動画には、MMDを使用した動画や、有志によって作成されたMMD用3Dモデルデータが数多く公開されています。
本連載で紹介するMikuMikuEffect(以降MME)は、そんなMMDを拡張し、エフェクトファイルと呼ばれる、HLSLで記述されたシェーダプログラムをMMD上で実行できるようにするための拡張ツールです。
本連載では、このMMEで動作するエフェクトファイルの使用方法と、エフェクトを構成するHLSLコードについて、6回に渡り解説していきます。
第1回目となる今回は、MMEの紹介と導入方法を解説します。
対象読者
- MMDを使っていて、エフェクトファイルの中身に興味のある方
- HLSLのコーディングに興味のある方
MMEの紹介
MMEとは
MME(MikuMikuEffect)は、筆者が開発した、MMDでエフェクトファイルを読み込めるようにするための拡張ツールです。
ただし、MMDは一般的なプラグイン形式の拡張機能を持っていないため、MMEでは、API Hookという手法を使用して、MMDの描画処理に割り込むというかなり強引な方法をとっています。
MME用のエフェクトファイルの作成は、主にニコニコ動画を中心とした有志によって行われており、すでに多数のエフェクトファイルが公開されています(参考資料3)。
エフェクトファイルとは
エフェクトファイル(*.fx)とは、DirectXがサポートするシェーダプログラムファイルです。HLSL(High Level Shading Language)というプログラミング言語で記述されます。
描画処理を行うシェーダの動作をプログラムすることによって、さまざまなエフェクトを3Dオブジェト描画の際に行うことができます。
HLSLには、使用可能な機能に応じて複数のバージョンが存在しますが、MMEではShader Model 3.0までのHLSLに対応します(MMDがDirectX 9.0c上で動作するため)。
MMEの特徴
MMEは、DirectXを使用してエフェクトを処理するため、描画結果をリアルタイムで得られるのが大きな特徴です。動画にエフェクトを追加するソフトウエアは、有償・無償を含め、さまざまなものが存在していますが、MME上で動作するエフェクトには、MMDの画面上で即座にエフェクト結果が得られるという利点があります。
また、エフェクトファイルの編集を効果を確認しながら行えるよう、MMD上で使用中のエフェクトファイルを外部エディタで編集すると、自動的に再読み込みされて、結果が即座にMMD画面に反映される仕組みになっています。
注意点
MMEのエフェクトは、GPU上で処理されるため、使用しているビデオカードの種類によっては、一部のエフェクトが実行できない場合があります。
また、処理負荷の高いエフェクトを使用すれば、その分、MMD全体の描画速度が低下することになります。
筆者は、MMEの前に「MikuMikuTransborder」というツールを作っていました。これは、MMDの3Dオブジェクトを別に任意のDirectXアプリの3D空間上に"出現"させる、というもので、その応用例として、自作DirectXアプリの3DオブジェクトをMMD上に出現させるという使い方がありました。MMEは、この機能をMMDの拡張に特化させてみようという発想から生まれました。
といっても、開発当初はエフェクト用のツールではなく、単に、MMDの描画処理に割り込んで自作プログラムを実行させる、程度のものを想定していました。
当時は、エフェクトファイルのことはよく知らず、特に組み込むことは考えていなかったのですが、その後、プログラムファイルを外部から与えて実行できることや、パーティクルなどの思った以上のさまざまな処理をこなせることを知り、MMDのオブジェクト描画にエフェクトファイルを適用するという、現在のMMEの形ができ上がりました。