Your SlideShare is downloading. ×
表情アニメーションAiインタフェース案
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

表情アニメーションAiインタフェース案

1,621
views

Published on

『涼宮ハルヒの約束』SOS会話、『とらドラ・ポータブル!』TORASystemの元になったアイディアメモです。 …

『涼宮ハルヒの約束』SOS会話、『とらドラ・ポータブル!』TORASystemの元になったアイディアメモです。
実際の実装に当たっては、「話題と表情を有限状態マシンクラスで管理する」という発想を押し進めて実装へと至りました。(※アップデートしました『ゲームシナリオ構成論』のP29に『とらドラ・ポータブル!』での実装例が1キャラ分載せてあります。)
またその設計に応じて、必要な表情パターンを呼び出すための各種APIを、シリコンスタジオ様にモーションポートレートのエンジンに組み込んでもらったという経緯があります。
アイディア自体は2005年にはあったのですが、実際に『約束』で実現したのは2007年ですから、丸々2年ほど温めていたことになります。

Published in: Entertainment & Humor

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,621
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 表情アニメーションAI インタフェース案 2005/7/14 N.Kobayashi
  • 2. 表情アニメーションAI インタフェース案○基本発想 表情アニメーションエンジンを、 有限状態マシンクラス(FSMclass)を搭載したAIで管理する。 その結果、 プレイヤーのリアルタイムな入力に対し、 表情の面で今までにないほどの複雑なリアクション を返すキャラを作成することができるようになる。 またそれに応じた演出を組めるようなインタフェースを作成する。○AI 管理の手順と実装、 応用 AI による表情管理をする為には、 まず表情をもたらす根本である感情をなんらかの形で数値化し、 同 時に表情に結びつける必要がある。 表情アニメーションエンジン上では、 各表情はそのキャラに特長 的な表情の間でモーフィングするので、 感情もある程度、 連続的な数値として表現される必要がある。【  STEP-1  キャラ感情変化の座標化 】1. 各表情オブジェクト( 目、 瞳、 眉、 口の形状、 視線、 首の傾き) の組み合わせのうち、 そのキャラに  特長的な表情( ※これが元絵となる) を大きく《 喜》《 怒》《 悲》 の3 つの表情に分類し、 各々 レベル  付けをする( 分類と数値化)。  ( ※もちろん一番極端な表情が、 その表情が表す感情のMax 値と対応する) 2. ここで( 喜,怒,悲)=(x ,y ,z) とする3 次元空間を考える。 これを感情空間Εと仮に名付けると、   1 で定義したキャラに特長的な表情は、 すべて感情空間Ε上の各々 の軸のどこかに置かれる   ことになる。   またここで原点0 に、 そのキャラの《 平常状態》 の表情を置くことにする。 y怒 a e z悲 v~ 1 e a 0 a x喜 感情空間Ε ページ 2
  • 3. 表情アニメーションAIインタフェース案表情オブジェクトと表情の関係 平常状態 表情を構成する各オブジェクトの重心は ほぼ円の中心にある。 笑い(喜び) 眉がゆるやかにカーブ、目が細くなり、両端が下がる。 唇の両端があがる。 表情オブジェクトの重心は平常状態と同じ。 怒り 眉がつり上がり、眉の間にしわが現れる。 目の両端が上がる。 口元を食いしばったり、大きく開けたりする。 各オブジェクトが平常状態よりも重心に寄る。 (中央に集まるイメージ) 悲しみ 眉の端が下がり、眉の間にしわが現れる。 目の両端が下がり、視線も下向き気味になる。 口元が力なく開き気味になったりする。 表情オブジェクトの重心が平常状態よりも下方に移動する。 (うなだれ気味になるため) 驚き ショックの表情。 眉が上がり、目を見開く。瞳も小さくなる。 口元は小山のように開く。 表情オブジェクトの重心が平常状態よりも上方に移動する。 ページ 3
  • 4. 表情アニメーションAIインタフェース案3.2 のように感情空間Εを定義すると、 キャラがある感情状態εにある時、その  表情点e は、 感情空間Ε上のいずれかにあることになる。 この時原点0 と表情点e v ~  を結ぶベクトルを表情ベクトル    と名付ける。 e v ~ |v | ~   定義: 表情ベクトル   の大きさ    は一定時間で、 必ず         となる e e e |v | = 0 ~      ものとする。      ( ※ある表情は、 一定時間が経つと平常状態に戻る) v~ 14. 今、 ある表情点e 1からe 2 へと表情が変化した時、 ベクトル    とベクトル e v~ 2 e  の外積の大きさの絶対値の1 /2 を、《 驚き》( 感情の突然の起伏= ショック) の  大きさと定義する。 v v ~ ~  ( ※ベクトル   と   で作る三角形の面積が、《 驚き》 の大きさ) e2 e1   一定以上の大きさの《 驚き》 を受けた時には、 一定時間、《 ショック表情》を外挿   する。   《 驚き》 の大きさは時間経過と共に減衰し、 最終的にはベクトル   の表情で e2 v~   安定するものとする。5. 以上のように整理すると、 あるキャラの感情変化は、 感情空間Ε上に存在する v ~  表情ベクトル   の頂点座標移動( ベクトルの回転& 拡縮変換) に置き換えることが e  できる。 v ~  従って感情の時系列変化は、 表情ベクトル   の頂点移動補間として計算できること e  になる。  ( ※これはボーンの頂点移動補間と同じノウハウが使えるということである!) y怒 怒りa e2 z悲 e1 v~ 2 驚き e v~ 1 a 悲しみ e 0 a x喜 平常 喜び ページ 4
  • 5. 表情アニメーションAIインタフェース案 以上をもって感情の時系列変化の数値化が終わったので、 次にキャラの感情および 表情を管理するAI を有限状態マシンクラスで定義する。【  STEP-2  有限状態マシンクラス( FSMClass) によるキャラクターAI の作成 】 有限状態マシンクラスとは、 有限個の《 状態》 を持ったクラスオブジェクトで、 ある《入力》 を 外部から受け取り、 それに対して一定の《 出力》( リアクション) を返すのと同時に、 変化し た《 状態》 を内部で保持する。 これをキャラクターで言い換えれば、  ○対象キャラの現在の感情 →  《 状態》  ○プレイヤーのアクション、 選択した会話・話題…    他キャラクターからの連鎖リアクション…等 →  《 入力》  ○対象キャラのリアクション、 表情変化 →  《 出力》 にあたる。 つまり「 キャラを一人設定する」 ことは、「 ひとつの有限状態マシンクラスを設定する」 ことに 置き換えることができる。 ( ※このキャラ管理の方式だが、『 ガンパレードマーチ』 のキャラAI が同じことをやっている) 上のような方法でキャラの感情や表情を管理している有限状態マシンクラスを今、 表情変化AI クラスと名付けることにしよう。 ここで例えば、 プレイヤーとヒロインの会話において、 プレイヤーがとりうる行動が7 つあり、 ヒロインの表情状態が7 つあるものとし、 プレイヤーの行動とヒロインの表情の間に以下の ような状態遷移表が成立するものとする。 ( ※表における表情状態、 入力の例はサンプルであり、 これ以外もありうることに注意) プレイヤーの行動 ヒロインの表情状態 会話に誘う 平静 当たり障りのない話題を振る 微笑 ヒロインの好きな話題を振る 笑い ヒロインの嫌いな話題を振る 不機嫌 ヒロインに関する事を尋ねる 怒り プレゼントをする 不安 会話を切り上げる 泣き ページ 5
  • 6. 表情アニメーションAIインタフェース案 プレイヤー~ヒロイン間の会話におけるヒロインの状態遷移表 No. 現在の状態 入力 出力状態 1 平静 会話に誘う 微笑 2 平静 当たり障りのない話題を振る 微笑 3 微笑 当たり障りのない話題を振る 平静 4 笑い 当たり障りのない話題を振る 微笑 5 不機嫌 当たり障りのない話題を振る 平静 6 怒り 当たり障りのない話題を振る 不機嫌 7 不安 当たり障りのない話題を振る 平静 8 泣き 当たり障りのない話題を振る 不機嫌 9 平静 ヒロインの好きな話題を振る 微笑 10 微笑 ヒロインの好きな話題を振る 笑い 11 笑い ヒロインの好きな話題を振る 微笑 12 不機嫌 ヒロインの好きな話題を振る 微笑 13 怒り ヒロインの好きな話題を振る 不機嫌 14 不安 ヒロインの好きな話題を振る 微笑 15 泣き ヒロインの好きな話題を振る 微笑 16 平静 ヒロインの嫌いな話題を振る 不機嫌 17 微笑 ヒロインの嫌いな話題を振る 不機嫌 18 笑い ヒロインの嫌いな話題を振る 不機嫌 19 不機嫌 ヒロインの嫌いな話題を振る 怒り 20 怒り ヒロインの嫌いな話題を振る 不安 21 不安 ヒロインの嫌いな話題を振る 泣き 22 泣き ヒロインの嫌いな話題を振る 怒り 23 平静 ヒロインに関する事を尋ねる 不機嫌 24 微笑 ヒロインに関する事を尋ねる 笑い 25 笑い ヒロインに関する事を尋ねる 微笑 26 不機嫌 ヒロインに関する事を尋ねる 不安 27 怒り ヒロインに関する事を尋ねる 不機嫌 28 不安 ヒロインに関する事を尋ねる 不機嫌 29 泣き ヒロインに関する事を尋ねる 不安 30 平静 プレゼントをする 微笑 31 微笑 プレゼントをする 笑い 32 笑い プレゼントをする 微笑 33 不機嫌 プレゼントをする 平静 34 怒り プレゼントをする 不機嫌 35 不安 プレゼントをする 微笑 36 泣き プレゼントをする 不機嫌 37 平静 会話を切り上げる 不機嫌 38 微笑 会話を切り上げる 平静 39 笑い 会話を切り上げる 微笑 40 不機嫌 会話を切り上げる 平静 41 怒り 会話を切り上げる 不機嫌 42 不安 会話を切り上げる 平静 43 泣き 会話を切り上げる 不機嫌状態遷移表は、 ある意味キャラの性格を表している。 従ってこの状態遷移表のバリエーションを設定することが、 キャラのバリエーションを創り出すこととなる。( ※ただし、 ここでゼロ遷移( 状態の変化なし) はないものとする) ページ 6
  • 7. 表情アニメーションAIインタフェース案 さて、 ここで【 STEP-1】によれば、 キャラがある感情状態εにある時、 その感情 v ~ に対応する表情は、 表情ベクトル   によって3 次元のベクトルとして表すことができる。 e これは状態遷移表上の各表情を3次元のベクトルとして設定できるということだから、 (x ,y ,z)=( 喜,怒,悲)  とすれば、 感情空間Εにおける各表情のサンプル数値化 表情 サンプル数値(喜, 怒, 悲) 平静 (0,0,0) 微笑 (1,0,0) 笑い (2,0,0) 不機嫌 (0,1,0) 怒り (0,2,0) 不安 (0,0,1) 泣き (0,0,2) のように表現できる。 従って、 状態遷移表によって定義される表情変化AI クラスの出力状態 の変化から、【 STEP-1】 の方式で表情変化を管理をすることができる。 ( ※サンプル数値は、 原点中心半径1 の球の範囲内に入るように正規化したほうが、   表情の補間計算の時に便利かもしれない) 具体的にはゲーム中でプレイヤーからの入力を受けた際に、 入力値を表情変化AI クラスに 引き渡す。 そして表情変化AI クラスから得られた出力状態を、 表情アニメーションエンジンに 引き渡し、 実行させることでリアルタイムに表情アニメーションをさせることになる。【  STEP-3  AI へ入力する値の工夫 】 表情変化AI クラスへの入力は、【 STEP-2】 で示したようなプレイヤーの行動選択だけに留まら ない。 例えば、 ヒロインキャラのセリフテキスト中に含まれる特別な単語( ※これを《 刺激語》 と 呼ぶ) に対して、 別途、 対応する感情サンプル値を設定した辞書を用意すれば、 セリフテキスト に応じて自動的に表情変化を割り付けることが可能となる。 また刺激語による感情サンプル値の辞書検索に合わせて、 実際のセリフヴォイスデータの 音程、 ピッチ等からセリフ全体のトーン( ※つまり、 全体に暗い会話をしているのか、 明るい 会話をしているのか) を判定し、 それを表情変化AI クラスに引き渡すことで表情変化をさせる ことも可能だと思われる。 ( ※おそらくであるが、 このセリフのピッチやトーンを数値化したものが、 サンプルプログラム    中のSOUNDフォルダに入っている.envファイルの正体じゃないかと思う。    AI はこのファイルをリアルタイムに作成する) ページ 7
  • 8. 表情アニメーションAIインタフェース案【  STEP-4  アプリケーションへの実装 】 セリフのトーンからAI への入力値が判定できるようになれば、 表情アニメーションエンジンを 携帯電話アプリに組み込んで、 バーチャルキャラとして利用するなどのアイディアも考えら れる。 ( ※元エンジンはOpenGLベースのようなので、 携帯にも移植可能と思われる) また刺激語による辞書検索機能を使って、RSS を感情込めて読み上げるようなデスクトップ アクセサリーがあっても面白いかもしれない。【  STEP-5  ヘルパーアプリケーション案 】 ここで表情アニメーションエンジンおよび表情変化AI クラスを利用するのに便利なヘルパーアプリ ケーション( ツール) を考えてみる。 ( ※精確な仕様を切るためには、 表情アニメーションエンジンの詳細を知らなければ無理なので、 今のところは大体こんなものが必要だし、 できるだろうという案です) ○表情設定エディタ 目、 瞳、 眉、 口の形状、 視線、 首の傾き等の表情オブジェクトを顔面上で配置し、 完成した表情を 感情サンプル値と対応させるエディタ。 モーフィングの起点となる表情を指定するためのツール。 ○状態設定エディタ キャラAI を簡単に設定するためのエディタ。 キャラの表情状態とそれに対応する感情サンプル値 をリストとして持ち、 さらにAI に引き渡す入力内容をリスト管理することで簡単に状態遷移表を作 成するためのツール。 スクリプターレベルで表情変化AI クラスをメンテナンスできるようにするのが目的。 ページ 8