講演ファイル(2)のダウンロード(PDF)

Live2Dを使ったアプリ開発
Unite2014 2日目
自己紹介
• 嶋崎一成(0x14歳)
– 学生
– サイバーノイズで修行中
– 普段はアプリ開発とか
内容
– 僕とリンとLive2D
– UnityでLive2Dを使ったアプリを開発する
– まとめ
全てはここから始まった
僕とリンとLive2D
ある日スマホでアプリを起動
動いたっ!
早かった?
Live2Dって言うらしい…
↑運命の出会い
• アプリ博でLive2Dのブースを見かける
• プログラマ募集中だったので応募
• Live2Dのアプリとか作ってる
←いまここ
ところで
Q.リンちゃんは好きですか?
好きですよね!!
好きなはずです!!
リンちゃんなう!
聴きながら寝たつもりが
朝になってた
あのリボンを見ると
昼食後の眠気が吹っ飛ぶ
というか
生まれ変わるなら
リボンになりたい
あの
好きすぎてrin言語とか作る
RとIとNだけでいろんなものを表現しようとした結果(一例
職場の方から一言
「リン廃だったのかw」
※リン廃=重度の鏡音リン依存症もしくは鏡音リン中毒の人を指す言葉である。
(ニコニコ大百科より
最近気づいたけど(1)
「あ、そうかリンちゃんも
動くようになるのか…」
最近気づいたけど(1)
「動くようになるのか…」
Σ(゚Д゚)
最近気づいたけど(1)
自分の好きなキャラが動く!!
最近気づいたけど(2)
【悲報】俺氏絵が描けない
最近気づいたけど(2)
参考に動画サイトとかまわってた
最近気づいたけど(3)
気づいたらミクも好きになってた
最近気づいたけど(3)
本屋さんでボカロ専門コーナーへ…
Σ(゚Д゚)
最近気づいたけど(4)
「こんな本を
見かけちゃうと
つい手に取ってしまう。
やるしかないよね!?」
• モデルを作ったりとか
その間に挫折したりとかいろいろ…
(略
このスライドには「リン」という単語が多
く含まれますが、「自分の嫁」に変換して
ご覧ください
思ったより簡単に作れる
UnityでLive2Dを使ったアプリを
開発する
Unity × Live2D
– Live2D LIVEを作ってみた
– UnityでLive2Dを動かしてみる
– Unity × Live2D × いろんなデバイス
Live2D LIVEを作ってみた
Live2D LIVEを作ってみた – 概要
• イベントや生放送で使える
リアルタイムコントロールシステム
Live2D LIVEを作ってみた – 概要
• リアルタイムで
自分の声と動きを
キャラに反映させる
Live2D LIVEを作ってみた – 概要
• 自分のなりたい
キャラになれる
Live2D LIVEを作ってみた – 概要
DEMO
ミク(Kinect)
チトセ(マイク)
Live2D LIVEを作ってみた – 実績
• コードギアス
©SUNRISE/PROJECT GEASS Character Design (c)2006-2008 CLAMP・ST
Live2D LIVEを作ってみた – 実績
• GDC(Game Developers Conference)
Live2D LIVEを作ってみた – 実績
• AnimeJapan2014
Live2D LIVEを作ってみた – 構成
ネットワーク
クライアントA
サーバ
クライアントB
Unity × Live2D
– Live2D LIVEを作ってみた
– UnityでLive2Dを動かしてみる
– Unity × Live2D × いろんなデバイス
UnityでLive2Dを動かしてみる
UnityでLive2Dを動かしてみる
• 用意するもの
– Live2D ライブラリ(.dll)
– Live2D のリソース
• モデルファイル(.moc)
• モーションファイル(.mtn)
• テクスチャ(.png)
UnityでLive2Dを動かしてみる
•
Live2Dモデルを表示するまでの基本的な流れ
– 初期化
• インスタンスの作成
• テクスチャの関連付け
• 表示位置と大きさの指定
初期化
– 更新
• 頂点の更新
• 描画
更新
UnityでLive2Dを動かしてみる
•
Live2D モデルの初期化
void Start () {
Live2D.init (); // 初期化
live2DModel = Live2DModelUnity.loadModel(mocFile.bytes); // mocの読み込み
for(int i = 0; i<textures.Length; i++)
{
live2DModel.setTexture(i, textures[i]); // テクスチャを設定
}
}
UnityでLive2Dを動かしてみる
•
Live2D モデルの位置やサイズ設定、更新・描画
void OnRenderObject()
{
Matrix4x4 m1=Matrix4x4.Ortho(0, モデルのサイズ, モデルのサイズ, 0, -1, 1);
Matrix4x4 m2 = transform.localToWorldMatrix;
Matrix4x4 m3 = m2*m1;
live2DModel.setMatrix(m3); // 位置の設定
live2DModel.update();
// 頂点の更新
live2DModel.draw();
// 描画
}
• 実際にミクを表示してみる
Unity × Live2D
– UnityでLive2Dを動かしてみる
– Live2D LIVEを作ってみた
– Unity × Live2D × いろんなデバイスを組み合わせてみる
Unity × Live2D × いろんなデバイス
– Unity × Live2D × ???
–
–
–
–
–
キャラを動かす
リップシンク(口パク)
キャラになってみる
指先で触れる
視線で通じ合う
:ゲームパッド
:マイク
:Kinect
:Leap Motion
:The Eye Tribe
Unity × Live2D × いろんなデバイス
– Unity × Live2D × ???
–
–
–
–
–
キャラを動かす
リップシンク(口パク)
キャラになってみる
指先で触れる
視線で通じ合う
:ゲームパッド
:マイク
:Kinect
:Leap Motion
:The Eye Tribe
Unity × Live2D × ゲームパッド
Unity × Live2D × ゲームパッド
自分の好きなタイミングで
リンちゃんに
お気に入りのポーズをとってもらいたい!
Unity × Live2D × ゲームパッド
「ゲームパッドでモーション再生」
– Live2Dでモーションを再生してみる
– ゲームパッドで操作してみる
•
Live2Dモデルのモーションを再生する
– モーションクラス
• インスタンスの作成
• 設定
モーション設定
– モーション管理クラス
•
•
•
•
インスタンスの作成
モーション再生
モデルの更新
モーションの終了
更新
モーション反映
•
ゲームパッドで操作してみる
– UnityのInputManagerで確認
– 入力に反応する
Void Update(){
if( Input.GetButtonDown( "Fire1" ) ) {
//Fire1が押された時の処理
}
}
• 重要なのはたった3行くらい
実際にUnityで確認
Unity × Live2D × いろんなデバイス
– Unity × Live2D × ???
–
–
–
–
–
キャラを動かす
リップシンク(口パク)
キャラになってみる
指先で触れる
視線で通じ合う
:ゲームパッド
:マイク
:Kinect
:Leap Motion
:The Eye Tribe
Unity × Live2D × マイク
Unity × Live2D × マイク
Unity × Live2D × マイク
リンちゃんが
しゃべってるように
見せたい
Unity × Live2D × マイク
「Live2Dモデルに口パクを実装する」
– マイクの音量を取得する
– 音量をモデルに最適化してセット
Unity × Live2D × マイク
• マイクの値を取得する
– Microphoneクラスを使ってマイクの値を取得する
•
Live2Dモデルにパラメータを設定する
– 値を上書きする
//PARAM_ANGLE_Xを30に設定
live2DModel.setParamFloat( "PARAM_ANGLE_X", 30 ,1 );
• 重要なのはたった1行くらい
実際にUnityで確認
Unity × Live2D × いろんなデバイス
– Unity × Live2D × ???
–
–
–
–
–
キャラを動かす
リップシンク(口パク)
キャラになってみる
指先で触れる
視線で通じ合う
:ゲームパッド
:マイク
:Kinect
:Leap Motion
:The Eye Tribe
Unity × Live2D × Kinect
Unity × Live2D × Kinect
リンちゃんに
Unity × Live2D × Kinect
なりたい!
Unity × Live2D × Kinect
「Live2Dモデルに体の情報を反映させる」
– Kinectと接続する
– Kinectから取得した値をモデルに最適化してセット
• Kinectと接続する
–
–
–
–
–
TCP/IPで通信
Unityをサーバ、Kinectをクライアントとして扱う
Unityにサーバの機能を追加
Kinectクライアントとしてアプリを作成
お互いを接続
クライアントA
ネットワーク
サーバ
クライアントB
• 重要なのはたった…
ここまでの知識でいける!
実際にUnityで確認
Unity × Live2D × いろんなデバイス
– Unity × Live2D × ???
–
–
–
–
–
キャラを動かす
リップシンク(口パク)
キャラになってみる
指先で触れる
視線で通じ合う
:ゲームパッド
:マイク
:Kinect
:Leap Motion
:The Eye Tribe
UnityとLive2DとLeap Motionを組み合わせてみた
•
仕組み
–
–
–
–
SDKのサンプルを改造
Unityを使ったら簡単に表示できました
Leap Motionで取れる値を利用してモデルを操作している
ジェスチャーを認識して表情の切り替えやモーションを再生
• 1時間ぐらいでできた
Unity × Live2D × いろんなデバイス
– Unity × Live2D × ???
–
–
–
–
–
キャラを動かす
リップシンク(口パク)
キャラになってみる
指先で触れる
視線で通じ合う
:ゲームパッド
:マイク
:Kinect
:Leap Motion
:The Eye Tribe
Live2D と The Eye Tribeを組み合わせてみた
•
仕組み
–
–
–
–
SDKのサンプルを改造
Unityを使ったら簡単に表示できました
The Eye Tribeで取れる値を利用してモデルを操作している
顔のあたりに視線が行くとモーションを再生
• 2時間ぐらいでできた
•
センサデバイスと組み合わせる
–
–
–
•
センサデバイスから値を取得
Live2Dモデルに最適な値に変換
setParamFloat()で値を設定
センサデバイスの面白い、良いところ
–
–
–
サーバとクライアントっていう考え方
もともとの数値情報を意味あるものとして利用しやすい
ジェスチャが使えれば、イベントが発生とかできる
(例 Kinectでは手を振るとモデルの手を振るモーションを再生などができた
–
SDKでUnityのサンプルがあることが多く、Unityですぐに試すことができる
•
センサデバイスで考えること
–
–
センサデバイスの特性(限界、スイートスポット)
センサの値を安定させる方法
• Live2Dは思ったより
簡単
今とこれからのこと
まとめ
• なぜLive2Dを使うのか
– 原画をそのままに動かすことができる
– 原画の良さを生かしたまま作品を作ることができる
(世界観を壊さない)
– モデルを作れば多くのプラットフォームに展開できる
• 2次元のキャラを原画そのままに、
リアルタイムでインタラクティブに
表現できるようになった
革命
•
•
•
•
•
自分の好きなキャラがデスクトップで微笑んだり
スマートフォンの中でナビゲーションしてくれたり
PVでアクションさせたり
人工知能などが発達した時キャラを表現する器にもなる
ギャルゲーとかエ■ゲーとかでも…
かつてないほどに、キャラクターたちが活き活きとする
可能性
•
•
•
•
•
Live2Dは教育機関でも採用され始めている
無料版や学生版がある
SDKも幅広く対応
モデルのサンプルもある
公式フォーラムで情報がやりとりできる
• 作品のコンテストもやってる
理由をお探しのあなたへ
• すぐに始められる
• 流行り始めた今だから学ぶ価値がある
• 愛する嫁のためならやらない理由がない
僕自身が思ったこと
Live2Dのキャラを動かすのは
簡単で楽しい
想像
してみてください
• 自分の描いた絵が活き活きと
動き出す
• 自分の好きなキャラが
自分のデスクトップで微笑む姿
• 声優さんが
リアルタイムにキャラを演じる
イベント
日本で生まれた
新しい表現方法で
世界を驚かせましょう
ご清聴ありがとうございました