SHOEISHA iD

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

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

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

jQueryの記法でWebGLを操作できるライブラリ「jThree」の活用

表現の幅を広げるWebGLライブラリ「jThree」の公式プラグイン

jQueryの記法でWebGLを操作できるライブラリ「jThree」の活用 第5回

MMDのモデルとモーションデータを読み込む

 jThree.MMD.jsを読み込むとMMDのモデルデータ(PMX形式)とモーションデータ(VMD形式)をWebGLで利用できるようになります。

 MMD(MikuMikuDance)とは樋口優氏が個人で作成したフリーの3DCGムービー制作ツールです。

 無償ながら初心者でも扱いやすく低スペックなPCでも動作するほど軽快なため、個人ユーザーを中心に絶大な支持を得ているソフトです。VPVPでダウンロードできます。

 MMDのデータをjThreeで扱うにはjThree本体→物理エンジンライブラリammo.js→jThree.MMD.jsの順でスクリプトファイルを読み込む必要があります。GOMLファイル内で「model」「motion」「mmd」要素が有効になり、「mmd」「camera」「light」要素にmotion属性を指定できるようになります。

model要素

 head要素内でのみ有効なモデルデータを保持する要素です。src属性でファイルのURLを指定します。現時点ではPMX形式のファイルにのみ対応しています。

<model src="model/miku.pmx" />
motion要素

 head要素内でのみ有効なモーションデータを保持する要素です。src属性でファイルのURLを指定します。現時点ではVMD形式のファイルにのみ対応しています。モデル用VMDファイルの他、カメラ・ライト用VMDファイルも読み込めます。

<motion id="model_motion" src="motion/model_motion.vmd" />
<motion id="camera_motion" src="motion/camera_motion.vmd" />
mmd要素

 scene要素内でのみ有効なMMDモデルを表示するための3Dオブジェクト要素です。model属性に表示したいmodel要素のCSSセレクタを指定します。同時にmotion属性にモデル用VMDファイルを保持したmotion要素のCSSセレクタを指定するとモデルにモーションが適用されます。

<mmd model="model" motion="#model_motion" />
motion属性

 mmd要素だけでなくcameraとlight要素にもmotion属性でモーションを適用することができます。カメラ・ライト用VMDファイルのデータを保持したmotion要素のCSSセレクタを指定します。

<camera motion="#camera_motion" />

 実際にモデルやカメラを動かす方法は次の章で解説します。まずは前回までのサンプルファイルに追記して画面上にモデルを表示させてみましょう。あらかじめプラグインのファイル(ammo.js、jThree.MMD.js)とモデルデータとモーションデータのファイルをサーバーにアップしておく必要があります。

モデル表示のサンプル(index.html)
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>jThreeサンプル</title>
        <style>
        body {
            position: fixed;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }
        </style>
        <!-- jThreeの前に必ずjQueryを読み込んでください -->
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
        <script src="script/jThree.js"></script>

        <!--MMDを利用する場合はammo.jsの読み込みを必ず行ってください-->
        <script src="script/ammo.js"></script>
        <script src="script/jThree.MMD.js"></script>

        <script src="script/jThree.Trackball.js"></script>
        <script src="index.js"></script>
    </head>
    <body>
        <!-- ココにcanvasタグが自動生成されます -->
    </body>
</html>
モデル表示のサンプル(index.goml)
<?xml version="1.0" encoding="UTF-8"?>
<goml>
    <head>
        <txr id="blueSky" src="img/sky.png" />

        <!--canvasコンテキスト(変数a)を操作するdrawFloor関数はJSファイルで定義します-->
        <txr type="canvas" id="floorTxr" param="width: 32; height: 32; repeat: 10; wrap: 0;" draw="drawFloor( a );" />

        <gmt type="Sphere" id="skyGmt" param="450 32 16" />
        <gmt type="Plane" id="floorGmt" param="60 60" />

        <!--箱庭(スカイドーム)は内側(裏面)から見るためsideプロパティを1に設定します-->
        <mtr type="MeshPhong" id="skyMtr" param="side:1;ambient: #fff; map:#blueSky;"/>

        <!--床は両面描画するためsideプロパティを2に設定します-->
        <mtr type="MeshPhong" id="floorMtr" param="side:2; map: #floorTxr;" />

        <!--HTMLのbody要素をフレームにするのでframe属性を省略します-->
        <rdr param="antialias: true;" />

        <!--MMDのモデルデータを取得します-->
        <model src="model/miku.pmx" />

        <!--MMDのモーションデータを取得します-->
        <motion id="model_motion" src="motion/model_motion.vmd" />
        <motion id="camera_motion" src="motion/camera_motion.vmd" />

    </head>
    <body>
        <scene>
            <!--スカイドームを設置-->
            <mesh gmt="#skyGmt" mtr="#skyMtr" />
            <!--床を設置-->
            <mesh gmt="#floorGmt" mtr="#floorMtr" style="rotate:1.57 0 -0.785;"/>

            <!--環境光を設置-->
            <light type="Amb" />
            <!--太陽光を画面左上手前に設置-->
            <light type="Dir" style="light-color: #9f9f9f; position: -14 28 24.5;" />

            <!--カメラを画面手前上部に設置してMMDのモーションを適用-->
            <camera motion="#camera_motion" style="position: 0 10 30; lookAtY: 10;" />

            <!--MMDのモデルを表示-->
            <mmd model="model" motion="#model_motion" />
        </scene>
    </body>
</goml>

次のページ
オーディオタグとMMDアニメーションを連携させる

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

jQueryの記法でWebGLを操作できるライブラリ「jThree」の活用連載記事一覧

もっと読む

この記事の著者

松田 光秀(jThree合同会社)(マツダ ミツヒデ)

jQueryの記法で操作できるWebGLライブラリ「jThree」の開発者でjThree合同会社の代表。JavaScriptのスキルのみで平成26年2月に1人で起業する。平成元年生まれの24歳で現役高校生(平成26年5月時点)。

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7826 2014/06/30 14:00

イベント

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

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

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

メールバックナンバー