あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

MMD4MecanimはUnityでMMDを扱うためのアセットです。
http://stereoarts.jp/

今回はこのMMD4Mecanimを使って、俺妹iP的なものを作ってみました。
画面上のキャラクタに触れると反応を返します。
https://twitter.com/kano_sawa/status/726865536282284032?lang=ja

MMDモデルとモーションは以下のものをお借りしました。
http://www.nicovideo.jp/watch/sm25194175
http://www.nicovideo.jp/watch/sm18000763
http://www.nicovideo.jp/watch/sm21073414

まずは公式のチュートリアルを参考にMMDモデルとモーションをFBXファイルに変換し、Animator Controllerを登録します。
http://stereoarts.jp/MMD4Mecanim%20%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%88%E5%9F%BA%E6%9C%AC%E7%B7%A8%EF%BC%89.pdf

ここで、Animator Controllerは以下のように、触れていない時のモーションが無限ループされるようにしておきます。
Animator

次に、以下のサイトの"モデルのボーンに対してUnityの剛体を追加する"を参考に、Colliderを追加します。
http://qiita.com/mkt_/items/638516e12eec2e5419fd

そして、触れた箇所を判定して個別の反応(モーション)を返すために、Colliderにタグを設定します。
下図では頭部のColliderにHeadタグを設定しています。
タグ

同様に、胸部のColliderにBreastタグを設定します。
タグ2

続いて、ユーザーが触れた部位に応じてアニメーションを切り替えるスクリプトを作成します。
スクリプトは以下のサイトを参考に作成しました。
http://qiita.com/mkt_/items/638516e12eec2e5419fd
using UnityEngine;
using System.Collections;

public class Tap : MonoBehaviour {

float timer = 0.0f; // 元のアニメーションに戻すためのタイマー
const float distance = 1000.0f; // 光線を飛ばす距離
MMD4MecanimModel model = null;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

// 元のアニメーションに戻すためのタイマー
if (timer > 0.0f)
{
timer -= Time.deltaTime;
if (timer < 0.0f)
{
timer = 0.0f;
model.GetComponent<Animator>().CrossFade("立01表情無し.vmd", 0.1f);
}
}

if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;

// 光線がヒットしたら
if (Physics.Raycast(ray, out hit, distance))
{
// MMDのアニメーションを取得する
Collider collider = hit.collider;
model = collider.GetComponentInParent<MMD4MecanimModel>();

// 触れた部位によって設定するvmdファイルを切り替える
switch (collider.tag)
{
case "Head":
SetCrossFade(model, "えへへへへ_.vmd");
break;
case "Breast":
SetCrossFade(model, "ふんっ!_ikari08.vmd");
break;
default:
break;
}
}
}
}

void SetCrossFade(MMD4MecanimModel model, string vmdName)
{
model.GetComponent<Animator>().CrossFade(vmdName, 0.1f);
timer = 3.0f;
}
}
以上で完成です。
以下、補足です。

・補足1
2016/05/06現在のMMD4Mecanim最新版であるBeta_20150821はモバイルに対応していません。
またMMD4Mecanim公式サイトで旧版の配布は行っていません。
スマホなどで動かしたい場合は書籍についてくる旧版などを利用する必要があります。

・補足2
今回利用させていただいたモーションは、0フレーム目に棒立ちのポーズが入っているため、
そのまま使うと、一瞬だけ棒立ちになってからモーションを開始して不自然に見えます。
自然に見せるためには、VMD Editorなどを使って事前にモーションを編集しておく必要があります。

「カメラ位置姿勢」と言った場合、普通は「世界座標系におけるカメラの位置と姿勢」のことを指す。

・カメラ姿勢とビュー変換
カメラ姿勢は、姿勢行列で表す場合と回転軸+回転角で表す場合とがある。
姿勢行列で表す場合、ビュー変換は、姿勢行列の逆行列をかけることで成される。
回転軸+回転角で表す場合、ビュー変換は、回転軸の周りを"マイナス回転角"することで成される。

・透視投影の式Xc=RXw+Tについて
回転行列Rは姿勢行列ではなく、姿勢行列の逆行列である。
Tは世界座標系におけるカメラ位置ではなく、ビュー座標系におけるカメラ位置であり、世界座標系におけるカメラ位置に対してRをかけた結果である。

・基底変換との関係
回転行列Rは、各行にビュー座標系の基底行列を並べたものと解釈できる。
上記同様、これは姿勢行列ではなく、姿勢行列の逆行列である。

・OpenGLによる変換
glRotate();glTranslate();の順番で変換する。
OpenGLの処理はスタックで実現されるので、glTranslate(世界座標系におけるカメラ位置)→glRotate()の順で実行される。
この順番で実行しないと、世界座標系におけるカメラ位置に対して回転行列Rがかけられない。

・glGetFloatv()による確認
glRotatef(-90, 0, 1, 0); glTranslatef(-3, 0, 0);だと、Tは(0, 0, -3, 1)になる。
glRotatef(180, 0, 1, 0); glTranslatef(-3, 0, 0);だと、Tは(3, 0, 0, 1)になる。
同じglTranslatef(-3, 0, 0)でも、Tは異なる。

中野京子著『印象派で「近代」を読む』の感想と要約です。

サクラノ詩の影響で読みました。
「サクラノ詩の制作で参考にしたのかな?」と思うほど内容に重複があり、かつ、背景を補完してくれる良書でした。

本の主題は「印象派の絵から近代を読み解く」という内容でしたが、
以下では、サクラノ詩と関連が深い項目を中心に要約を書きます。

・印象派の特徴は、主題より感覚、形態より印象を重視すること。
・印象派は、既存の権威に反逆し、新時代の「前衛運動」をめざし、ついには世界の美術市場を激変させた、芸術上の革命家たちだった。
・印象派は、サロンに入選できなかった画家が活路を見いだすために自作を持ち寄って展覧したことが始まり。
・「印象派」という名前は、バロック(歪んだ真珠)と同じく、モネの『印象-日の出』に対する嘲りから始まっている。
・「印象派の父」と呼ばれるマネが、ルネサンス以来の明暗法と遠近法を捨て去った作品を発表したことにはじまっており、その作風は浮世絵からの影響を受けている。
・「オランピア」で描かれるヌードは、神々やら遠い歴史上の人物というエクスキューズがない限り許されないものだった。
・印象派以前は、絵はどうやって鑑賞すべきかを、専門家たるアカデミーに教えてもらわねばならなかった。
・ピグマリオンとガラテア(非印象派)では、女性の肉体はピカピカつるつる、神話の知識がないと意味が分からない。
・チューブ入り絵の具は、画家になれなかった人たちが創作を断念して作った。
・写真は、これまでに無かった新鮮な視覚であり、印象派の画家たちに大きなインスピレーションを与えた。
・カメラがあるのになお絵を描く、というからには、見る者を深く納得させるプラスアルファが必要。
・マネの「ナナ」はドゥミ・モンディーヌ(半社交界に生きる女性)であり、溌剌とした姿が描かれている。そこになんら社会構造の矛盾もそれに対する批判もない。マネの視線は、パトロンと同じもの。
・紳士と貧困女性の接点は「性」だった。
・ゴッホは、下手くそだったが、田舎アルルでメタモルフォーゼ。
・「ジャポニズム」がヨーロッパを席巻したのは、日本が開国し、パリ万博に浮世絵や工芸品を出品したのが機。
・印象派は、絵画が商業利用される幕開けの申し子。
・背景が思いもよらないものであっても価値が変わらないものが真の芸術作品のはず。

↑このページのトップヘ