CubismJsで視線追従を設定する

今回は Cubism SDK for JavaScript (以下cubism-js)を使って、自分の作成したサンプルの視線をマウスカーソルに追従させる「視線追従」の設定を行います。
cubism-jsはLive2Dの公式(github)からダウンロードすることができます。

※現在(2020/11)は、Cubism SDK for Web に移行したためCubism SDK for JavaScriptをダウンロードすることはできません。Live2DをWebブラウザで動作させる場合には、Cubism SDK for Webを使用してください。

以下の記事で導入までの流れを紹介しています。

Cubism SDK for Web を使ってみる
この記事では Cubism SDK for Web の基本的な動作(モデルの表示とアニメーション)について確認しています。
Cubism SDK for Web
WebGLで実装されたSDKです。
主要なWebブラウザに対応しているため、幅広い環境で動作させることが可能です。
ソースコードはTypeScriptで書かれており、トランスパイルを行うことでJavaScriptから扱うことも可能です。
スポンサーリンク

使用するイラスト

今回の作業で使用するイラストです。

使用するイラスト
© Unity Technologies Japan/UCL

視線追従のための準備

キャラクターをマウスに合わせて視線追従させるためには、いくつかのパラメータが必要になります。cubism-jsに入っていたサンプルの場合では、ParamAngleX、ParamAngleY、ParamBodyAngleX、ParamEyeBallX、ParamEyeBallYの5つを使用していました。
今回の作業では体は動かさないので、ParamAngleX・Y、ParamEyeBallX・Yの4つを準備します。

ParamAngleX・Y

顔の動き(X軸とY軸)のパラメータを準備します。
以前の記事「Live2Dで顔に動きをつける」で作成したパラメータに手を加えていきます。
今回使用しているイラストは、若干顔を傾けた姿で描かれています。そのままの状態でX軸とY軸のパラメータを設定するのは難しいので、顔の傾きを無くした状態でパラメータを調整することにしました。

パラメータ「顔の傾き」 0.0 ~ 5.0 … 回転デフォーマ「顔の回転」

顔の傾き

パラメータ「角度 X」(ID:ParamAngleX)で顔の左右の動きを設定します。顎の位置を基準として各パーツを調整しました。

パラメータ「角度 X」 0.0 ~ 30.0 … ワープデフォーマ「輪郭の曲面」

顔の動き:左

パラメータ「角度 Y」(ID:ParamAngleY)で顔の上下の動きを設定します。パラメータのIDはパレットメニュー「パラメータ設定」から確認することができます。

パラメータ「角度 Y」 0.0 ~ 30.0 … ワープデフォーマ「輪郭の曲面」

顔の動き:上

ParamEyeBallX・Y

瞳の動き(X軸とY軸)のパラメータを準備します。
パラメータ「瞳 X」(ID:ParamEyeBallX)で瞳の左右の動きを設定します。瞳にワープデフォーマを設定して、左右に動かしています。

パラメータ「瞳 X」 0.0 ~ 1.0 … ワープデフォーマ「瞳の曲面」

瞳の動き:左

パラメータ「瞳 Y」(ID:ParamEyeBallY)も同様に作成します。

ファイルの書き出し

cubism-jsで必要なファイルを準備します。
テクスチャ(png)は、前回と同じものを使用します。
組込み用ファイル(moc3)は「ファイル > 組込み用ファイル書き出し > moc3ファイル書き出し」で新しく書き出します。
モーションファイル(json)は、視線追従用にアイドル時のモーションを新規で作成します。

idle.motion3.json

キャラクターが待機している状態のモーションなので、顔や目などに小さめの値でアニメーションを設定しました。

idle時のアニメーション

アイドル時のアニメーションが完成したら「ファイル > 組込み用ファイル書き出し > モーションファイル書き出し」で書き出します。

cubism-jsの設定

必要なファイルがそろったのでcubism-jsの設定を行います。
前回と同様にcubism-jsのexampleフォルダの中にあるwwwrootフォルダで作業を行います。

1. 作成したファイルの配置

組込み用ファイル、モーションファイルをwwwrootのassetsフォルダに配置します。
assetsの中にmouseという名前でフォルダを作成して、組込み用ファイル(mouse.moc3)、モーションファイル(idle.motion3.json)を配置しました。

2. index.htmlの編集

index.htmlのメニューにリストを追加します。下記のように記述しました。

index.html
<li data-src="pixiadd2.html"  onclick="onLinkClick(this);" class=""> Add Data 2 </li>

3. pixiadd2.htmlの作成

examplesフォルダのpixibasic.htmlをコピーして、名前をpixiadd2.htmlとします。
Include exampleの部分を変更します。下記のように記述しました。

pixiadd.html
<script src="../js/pixilookatmouse2.js"></script>

4. pixilookatmouse2.jsの作成

jsフォルダのpixilookatmouse.jsをコピーして、名前をpixilookatmouse2.jsとします。
ファイルの読み込み部分で、今回配置したファイルを読み込みます。

pixilookatmouse2.js
.add('moc', "../assets/mouse/mouse.moc3", { xhrType: PIXI.loaders.Resource.XHR_RESPONSE_TYPE.BUFFER })
.add('motion', "../assets/mouse/idle.motion3.json", { xhrType: PIXI.loaders.Resource.XHR_RESPONSE_TYPE.JSON })

テクスチャは前回使用したものを読み込んでいます。

pixilookatmouse2.js
.add('texture', "../assets/aiueo/aiueo.png")

emptymotion(視線追従時のパラメータを入れる空のモーション)はサンプルに用意されているものをそのまま読み込んでいます。

pixilookatmouse2.js
.add('emptymotion', "../assets/Common/empty.motion3.json", { xhrType: PIXI.loaders.Resource.XHR_RESPONSE_TYPE.JSON })

今回のイラストには物理演算と体の動きを設定していないため、物理演算とParamBodyAngleX関連の記述は削除しました。

視線追従のパラメータ
視線追従のパラメータには、それぞれのパラメータ範囲の最大値がpos_x或いはpos_yに掛けられている。この値を変えることで、マウスを動かしたときのパラメータの変化量を調節することができる。

Cubism 3 JS Sample

今回の作業で作成した視線追従のキャプチャを載せます。Live2Dの画面にマウスカーソルが乗ると、その位置に合わせてキャラクターの視線が動きます。
ブラウザはEdgeで動作を確認しています。

クリックでGIFアニメーションが再生されます
sample_gif

タイトルとURLをコピーしました