SlideShare una empresa de Scribd logo
1 de 8
表情アニメーションAI インタフェース案




        2005/7/14
       N.Kobayashi
表情アニメーション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
表情アニメーションAIインタフェース案



表情オブジェクトと表情の関係


         平常状態
         表情を構成する各オブジェクトの重心は
         ほぼ円の中心にある。




         笑い(喜び)
         眉がゆるやかにカーブ、目が細くなり、両端が下がる。
         唇の両端があがる。
         表情オブジェクトの重心は平常状態と同じ。




         怒り
         眉がつり上がり、眉の間にしわが現れる。
         目の両端が上がる。
         口元を食いしばったり、大きく開けたりする。
         各オブジェクトが平常状態よりも重心に寄る。
         (中央に集まるイメージ)




         悲しみ
         眉の端が下がり、眉の間にしわが現れる。
         目の両端が下がり、視線も下向き気味になる。
         口元が力なく開き気味になったりする。
         表情オブジェクトの重心が平常状態よりも下方に移動する。
         (うなだれ気味になるため)




         驚き
         ショックの表情。
         眉が上がり、目を見開く。瞳も小さくなる。
         口元は小山のように開く。
         表情オブジェクトの重心が平常状態よりも上方に移動する。

                                 ページ 3
表情アニメーションAIインタフェース案



3.2 のように感情空間Εを定義すると、 キャラがある感情状態εにある時、その
  表情点e は、 感情空間Ε上のいずれかにあることになる。 この時原点0 と表情点e
                      v
                      ~
  を結ぶベクトルを表情ベクトル    と名付ける。
                  e
                v
                ~         |v |
                           ~
    定義: 表情ベクトル   の大きさ    は一定時間で、 必ず         となる
                e      e             e             |v | = 0
                                                    ~
       ものとする。
       ( ※ある表情は、 一定時間が経つと平常状態に戻る)


                                            v~ 1
4. 今、 ある表情点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
表情アニメーションAIインタフェース案



   以上をもって感情の時系列変化の数値化が終わったので、 次にキャラの感情および
   表情を管理するAI を有限状態マシンクラスで定義する。



【  STEP-2  有限状態マシンクラス( FSMClass) によるキャラクターAI の作成 】
   有限状態マシンクラスとは、 有限個の《 状態》 を持ったクラスオブジェクトで、 ある《入力》 を
   外部から受け取り、 それに対して一定の《 出力》( リアクション) を返すのと同時に、 変化し
   た《 状態》 を内部で保持する。

   これをキャラクターで言い換えれば、

    ○対象キャラの現在の感情             →  《 状態》
    ○プレイヤーのアクション、 選択した会話・話題…
      他キャラクターからの連鎖リアクション…等   →  《 入力》
    ○対象キャラのリアクション、 表情変化      →  《 出力》

   にあたる。

   つまり「 キャラを一人設定する」 ことは、「 ひとつの有限状態マシンクラスを設定する」 ことに
   置き換えることができる。
   ( ※このキャラ管理の方式だが、『 ガンパレードマーチ』 のキャラAI が同じことをやっている)

   上のような方法でキャラの感情や表情を管理している有限状態マシンクラスを今、
   表情変化AI クラスと名付けることにしよう。

   ここで例えば、 プレイヤーとヒロインの会話において、 プレイヤーがとりうる行動が7 つあり、
   ヒロインの表情状態が7 つあるものとし、 プレイヤーの行動とヒロインの表情の間に以下の
   ような状態遷移表が成立するものとする。
   ( ※表における表情状態、 入力の例はサンプルであり、 これ以外もありうることに注意)



               プレイヤーの行動             ヒロインの表情状態
                 会話に誘う                  平静
            当たり障りのない話題を振る               微笑
            ヒロインの好きな話題を振る               笑い
            ヒロインの嫌いな話題を振る              不機嫌
            ヒロインに関する事を尋ねる               怒り
               プレゼントをする                 不安
               会話を切り上げる                 泣き




                                                      ページ 5
表情アニメーション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
表情アニメーション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
表情アニメーションAIインタフェース案



【  STEP-4  アプリケーションへの実装 】
   セリフのトーンからAI への入力値が判定できるようになれば、 表情アニメーションエンジンを
   携帯電話アプリに組み込んで、 バーチャルキャラとして利用するなどのアイディアも考えら
   れる。
   ( ※元エンジンはOpenGLベースのようなので、 携帯にも移植可能と思われる)

   また刺激語による辞書検索機能を使って、RSS を感情込めて読み上げるようなデスクトップ
   アクセサリーがあっても面白いかもしれない。




【  STEP-5  ヘルパーアプリケーション案 】
   ここで表情アニメーションエンジンおよび表情変化AI クラスを利用するのに便利なヘルパーアプリ
   ケーション( ツール) を考えてみる。
   ( ※精確な仕様を切るためには、 表情アニメーションエンジンの詳細を知らなければ無理なので、
      今のところは大体こんなものが必要だし、 できるだろうという案です)

   ○表情設定エディタ
    目、 瞳、 眉、 口の形状、 視線、 首の傾き等の表情オブジェクトを顔面上で配置し、 完成した表情を
    感情サンプル値と対応させるエディタ。 モーフィングの起点となる表情を指定するためのツール。

   ○状態設定エディタ
    キャラAI を簡単に設定するためのエディタ。 キャラの表情状態とそれに対応する感情サンプル値
    をリストとして持ち、 さらにAI に引き渡す入力内容をリスト管理することで簡単に状態遷移表を作
    成するためのツール。
    スクリプターレベルで表情変化AI クラスをメンテナンスできるようにするのが目的。




                                                   ページ 8

Más contenido relacionado

Destacado

Chapter 1 seiu the early years
Chapter 1   seiu the early yearsChapter 1   seiu the early years
Chapter 1 seiu the early yearsSEIU
 
บทที่ 4 ผลการดำเนินงาน
บทที่ 4 ผลการดำเนินงานบทที่ 4 ผลการดำเนินงาน
บทที่ 4 ผลการดำเนินงานTangkwa Tom
 
Chapter 34 seiu helps pass historic healthcare reform - SEIU contribue au v...
Chapter 34   seiu helps pass historic healthcare reform - SEIU contribue au v...Chapter 34   seiu helps pass historic healthcare reform - SEIU contribue au v...
Chapter 34 seiu helps pass historic healthcare reform - SEIU contribue au v...SEIU
 
Objects in mirror are closer than they appear
Objects in mirror are closer than they appearObjects in mirror are closer than they appear
Objects in mirror are closer than they appearMariella Azzato
 
Borghi & castelli_tra-padova_&_verona
Borghi & castelli_tra-padova_&_veronaBorghi & castelli_tra-padova_&_verona
Borghi & castelli_tra-padova_&_veronaCavallo-Pazzo
 
Bb slideshow1
Bb slideshow1Bb slideshow1
Bb slideshow1ldk0524
 
Planning your garden
Planning your gardenPlanning your garden
Planning your gardenldoxon
 
6340 62 fall_11_copyrt_carmona
6340 62 fall_11_copyrt_carmona6340 62 fall_11_copyrt_carmona
6340 62 fall_11_copyrt_carmonacherubess
 
Casos de estrategias uno
Casos de estrategias unoCasos de estrategias uno
Casos de estrategias unoEdgar Sanchez
 
Parallel Session 2.1 Capable, Integrated and Fit for the Future
Parallel Session 2.1 Capable, Integrated and Fit for the FutureParallel Session 2.1 Capable, Integrated and Fit for the Future
Parallel Session 2.1 Capable, Integrated and Fit for the FutureNHSScotlandEvent
 

Destacado (19)

Akhtar Badshah
Akhtar BadshahAkhtar Badshah
Akhtar Badshah
 
4.6 notes
4.6 notes4.6 notes
4.6 notes
 
Chapter 1 seiu the early years
Chapter 1   seiu the early yearsChapter 1   seiu the early years
Chapter 1 seiu the early years
 
9.6 Notes
9.6 Notes9.6 Notes
9.6 Notes
 
บทที่ 4 ผลการดำเนินงาน
บทที่ 4 ผลการดำเนินงานบทที่ 4 ผลการดำเนินงาน
บทที่ 4 ผลการดำเนินงาน
 
Abhinav_CV
Abhinav_CVAbhinav_CV
Abhinav_CV
 
Chapter 34 seiu helps pass historic healthcare reform - SEIU contribue au v...
Chapter 34   seiu helps pass historic healthcare reform - SEIU contribue au v...Chapter 34   seiu helps pass historic healthcare reform - SEIU contribue au v...
Chapter 34 seiu helps pass historic healthcare reform - SEIU contribue au v...
 
Veena Raizada
Veena Raizada Veena Raizada
Veena Raizada
 
Sambit Sinha
Sambit SinhaSambit Sinha
Sambit Sinha
 
Objects in mirror are closer than they appear
Objects in mirror are closer than they appearObjects in mirror are closer than they appear
Objects in mirror are closer than they appear
 
Borghi & castelli_tra-padova_&_verona
Borghi & castelli_tra-padova_&_veronaBorghi & castelli_tra-padova_&_verona
Borghi & castelli_tra-padova_&_verona
 
9.3 notes
9.3 notes9.3 notes
9.3 notes
 
Bb slideshow1
Bb slideshow1Bb slideshow1
Bb slideshow1
 
Planning your garden
Planning your gardenPlanning your garden
Planning your garden
 
Amit Gupta
Amit Gupta Amit Gupta
Amit Gupta
 
6340 62 fall_11_copyrt_carmona
6340 62 fall_11_copyrt_carmona6340 62 fall_11_copyrt_carmona
6340 62 fall_11_copyrt_carmona
 
Casos de estrategias uno
Casos de estrategias unoCasos de estrategias uno
Casos de estrategias uno
 
We guardians june'13
We guardians  june'13We guardians  june'13
We guardians june'13
 
Parallel Session 2.1 Capable, Integrated and Fit for the Future
Parallel Session 2.1 Capable, Integrated and Fit for the FutureParallel Session 2.1 Capable, Integrated and Fit for the Future
Parallel Session 2.1 Capable, Integrated and Fit for the Future
 

Más de 小林 信行

攻略リニアカラー改訂版
攻略リニアカラー改訂版攻略リニアカラー改訂版
攻略リニアカラー改訂版小林 信行
 
CEDEC2017 アーティストのためのリアルタイムシェーダー学習法
CEDEC2017 アーティストのためのリアルタイムシェーダー学習法CEDEC2017 アーティストのためのリアルタイムシェーダー学習法
CEDEC2017 アーティストのためのリアルタイムシェーダー学習法小林 信行
 
Unite2017 tokyo toonshadermaniax
Unite2017 tokyo toonshadermaniaxUnite2017 tokyo toonshadermaniax
Unite2017 tokyo toonshadermaniax小林 信行
 
Unity道場aseスペシャル補足資料
Unity道場aseスペシャル補足資料Unity道場aseスペシャル補足資料
Unity道場aseスペシャル補足資料小林 信行
 
Unity dojo amplifyshadereditor101_jpn-jp
Unity dojo amplifyshadereditor101_jpn-jpUnity dojo amplifyshadereditor101_jpn-jp
Unity dojo amplifyshadereditor101_jpn-jp小林 信行
 
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編小林 信行
 
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜小林 信行
 
Unity道場08 Unityとアセットツールで学ぶ 「絵づくり」の基礎 ライティング 虎の巻
Unity道場08 Unityとアセットツールで学ぶ「絵づくり」の基礎 ライティング虎の巻Unity道場08 Unityとアセットツールで学ぶ「絵づくり」の基礎 ライティング虎の巻
Unity道場08 Unityとアセットツールで学ぶ 「絵づくり」の基礎 ライティング 虎の巻小林 信行
 
Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編
Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編
Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編小林 信行
 
Unity道場08「絵づくりの基礎」ライティング虎の巻
Unity道場08「絵づくりの基礎」ライティング虎の巻Unity道場08「絵づくりの基礎」ライティング虎の巻
Unity道場08「絵づくりの基礎」ライティング虎の巻小林 信行
 
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクトUnityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト小林 信行
 
ゲームシナリオ構成法 2015版
ゲームシナリオ構成法 2015版ゲームシナリオ構成法 2015版
ゲームシナリオ構成法 2015版小林 信行
 
Unityを使ったゲームデザイン超入門
Unityを使ったゲームデザイン超入門Unityを使ったゲームデザイン超入門
Unityを使ったゲームデザイン超入門小林 信行
 
マネタイズセミナー「経験からモデルを導く方法論」
マネタイズセミナー「経験からモデルを導く方法論」マネタイズセミナー「経験からモデルを導く方法論」
マネタイズセミナー「経験からモデルを導く方法論」小林 信行
 
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版小林 信行
 
『天空の城ラピュタ』のエピソード構成表
『天空の城ラピュタ』のエピソード構成表『天空の城ラピュタ』のエピソード構成表
『天空の城ラピュタ』のエピソード構成表小林 信行
 
最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips
最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips
最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips小林 信行
 
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出小林 信行
 
『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...
『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...
『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...小林 信行
 
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版小林 信行
 

Más de 小林 信行 (20)

攻略リニアカラー改訂版
攻略リニアカラー改訂版攻略リニアカラー改訂版
攻略リニアカラー改訂版
 
CEDEC2017 アーティストのためのリアルタイムシェーダー学習法
CEDEC2017 アーティストのためのリアルタイムシェーダー学習法CEDEC2017 アーティストのためのリアルタイムシェーダー学習法
CEDEC2017 アーティストのためのリアルタイムシェーダー学習法
 
Unite2017 tokyo toonshadermaniax
Unite2017 tokyo toonshadermaniaxUnite2017 tokyo toonshadermaniax
Unite2017 tokyo toonshadermaniax
 
Unity道場aseスペシャル補足資料
Unity道場aseスペシャル補足資料Unity道場aseスペシャル補足資料
Unity道場aseスペシャル補足資料
 
Unity dojo amplifyshadereditor101_jpn-jp
Unity dojo amplifyshadereditor101_jpn-jpUnity dojo amplifyshadereditor101_jpn-jp
Unity dojo amplifyshadereditor101_jpn-jp
 
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
 
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜ハリウッド流映画脚本講座・特別編「ゲーム」は「キャラクター」がドライブする〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
ハリウッド流映画脚本講座・特別編 「ゲーム」は「キャラクター」がドライブする 〜ヒットする、原作付きキャラクターゲームシナリオの作り方〜
 
Unity道場08 Unityとアセットツールで学ぶ 「絵づくり」の基礎 ライティング 虎の巻
Unity道場08 Unityとアセットツールで学ぶ「絵づくり」の基礎 ライティング虎の巻Unity道場08 Unityとアセットツールで学ぶ「絵づくり」の基礎 ライティング虎の巻
Unity道場08 Unityとアセットツールで学ぶ 「絵づくり」の基礎 ライティング 虎の巻
 
Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編
Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編
Unity道場11 Shader Forge 101 ~ShaderForgeをつかって学ぶシェーダー入門~ 基本操作とよく使われるノード編
 
Unity道場08「絵づくりの基礎」ライティング虎の巻
Unity道場08「絵づくりの基礎」ライティング虎の巻Unity道場08「絵づくりの基礎」ライティング虎の巻
Unity道場08「絵づくりの基礎」ライティング虎の巻
 
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクトUnityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
 
ゲームシナリオ構成法 2015版
ゲームシナリオ構成法 2015版ゲームシナリオ構成法 2015版
ゲームシナリオ構成法 2015版
 
Unityを使ったゲームデザイン超入門
Unityを使ったゲームデザイン超入門Unityを使ったゲームデザイン超入門
Unityを使ったゲームデザイン超入門
 
マネタイズセミナー「経験からモデルを導く方法論」
マネタイズセミナー「経験からモデルを導く方法論」マネタイズセミナー「経験からモデルを導く方法論」
マネタイズセミナー「経験からモデルを導く方法論」
 
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
 
『天空の城ラピュタ』のエピソード構成表
『天空の城ラピュタ』のエピソード構成表『天空の城ラピュタ』のエピソード構成表
『天空の城ラピュタ』のエピソード構成表
 
最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips
最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips
最新Mayaを使ったUnity 5向けキャラクターセットアップセミナー&使いこなしTips
 
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
 
『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...
『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...
『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creating PBR ...
 
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版
 

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

  • 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~ 1 4. 今、 ある表情点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