Hack and Play

プログラミングやCG、ゲーム、コンピュータのネタを投稿していくブログ。不定期更新。

表情ジェネレータについて(使い方編)

2014年01月11日 | CG関連

先日じゃんけんゲーム http://www.unitygames.jp/game/ug7000830 を作った際に、表情をつけるのが大変だなーと思い、ふと

自動で表情生成できたらおもしろんじゃね?

という欲が出て、作ることを計画しました。ということで、できました。

できたものは、

 http://www.unitygames.jp/game/ug7000851

にあります。
この記事では使い方について解説をしたいと思います


1.初期画面について

まず、作りたい表情のキーワードを入力します。あらかじめ入れられているキーワードは「かわいい」、「なごむ」、「悲しい」、「怒ってる」が入っていますが、キーボード入力から変更が可能です。好きな表情のキーワードを入れてください。
「表情パラメータ」変更のチェックボックスについては、記事の最後に解説します

入れ終わったら、次へを押します。

 

2.表情のキーワードごとの評価と表情の再生成


 
次の画面では、いろいろメニューが出てきます。「次の表情」、「前の表情」ボタンで生成された表情を行き来できます。その右側の「再生成」ボタンは表情を作り直すことができます。
画面中央の「パラメータ表示」のチェックボックスを押すと、作られた表情の各モーフのウェイト値(0から1の範囲)を見ることができます。
キーワードの右側のスライドを動かして、この表情がキーワードにあっているかを評価します。度合いで示し、右側(プラス側)に行くほど、その表情はキーワードとマッチしている、左側(マイナス側)はぜんぜんあっていない場合になり、中央値(0付近)はどちらとも取れる、もしくは分からないときにここにあわせます。
続けて「次の表情」を押して評価をしていきます。
 
また、「3.すべて評価したら・・・」の下に「計算!」、「表情削除」「表情追加」ボタンがあります。
「表情追加」ボタンを押すと、現在の表情数の上限が5増え、新たに表情が追加されます。
「表情削除」ボタンを押すと、表情数が5減りますが、初期の表情数よりも少なくなることはありません。
 
 
3.すべての表情が評価終わったら

そして、「計算!」ボタンを押すことにより、次の画面に映ります。
この画面では、キーワードごとの評価結果から推定した表情を生成します。
各キーワードのボタンを押して、スライダを動かすと、表情が変わります。
その下のテキストボックスは各モーフのウェイト値を参照しています。
評価した表情が少ないと、値が収束されず、変な表情になりやすいと思います。
その場合は「前に戻る」ボタンをおして、前の画面に戻り、表情数を増やして評価し、再度計算しなおしてみてください。
表情数を増やして評価をすると、データが収束し、

 
表情もそれっぽいのができあがります。
他にも、

 
といった表情を、各キーワードに対して評価をしておくと、生成することができます。
いろいろ試してみてください!
 
 
4.自分で変化させるモーフを指定する。

最初の画面で、「表情パラメータ変更」のチェックボックスがあったと思いますが、このチェックボックスをオンにして、テキストボックス内の設定を書き換えることで、自分でモーフの設定を変更することができます。
※入力時はテキストフィールドで改行が反映されないので、いったんメモ帳などからコピペするのをお勧めします。
 
 
実際のパラメータを抜粋すると・・・
 
0-1: 困る;
0-1: にこり;
0-1: 怒り;
・・・
 
という風になっていると思います。
これは以下のような構成になっています。
[モーフのウェイト値設定]: [モーフ名];
[モーフのウェイト値設定]: [モーフ名1], [モーフ名2];
 
という風になっており、コロン(:)とセミコロン(;)で識別しています。これを忘れると正常に認識できないので注意してください。また、パラメータによっては複数モーフをしていする場合があり、その場合はカンマ(,)で区切ります。
モーフのウェイト値設定のタイプは合わせて7種類あり、以下のようになります
 
  • "*0,5"など  =  モーフを固定数(0.5)のにする
  • 0-1または0.1-1.0  =  モーフのウェイトを0~1のランダムな数に設定する
  • "0.1-0.8"など  =  モーフのウェイトを前の数字(0.1)から後ろの数字(0.8)までの間で生成する
  • a-b  =  ランダムな数字r(0~1)に対し、前のモーフはrの値、後ろのモーフは(1-r)の値をウェイトに設定する。(書き方は、a-b: [モーフ1], [モーフ2]; となる) 
  • a-0-b  =  ランダムな数字r(-1~1)に対し一方のモーフは+側の数値、一方のモーフは-側の数値を参照する。(一方の値が割り振られたら、もう一方は常に0になる)
  • "[0.2-0.7]"など  =  0~1のランダムな数を生成し、前の数字未満(0.2)になった場合は、すべて0になる、また後ろの数字(0.7)よりも大きい場合はすべて1になる
  • a^b  =  モーフ間のウェイトの合計値を1未満にする。(計算式は[各モーフのランダム値]/[モーフのランダム値の合計]x[0~1のランダムな数])、また、2つ以上のモーフを使うことができ、3つの場合の記述は"a^b^c: [モーフ1], [モーフ2], [モーフ3];"、4つの場合は"a^b^c^d: [モーフ1], [モーフ2], [モーフ3], [モーフ4];"となる
使用できるモーフ名は
 
眉系: 真面目、困る、にこり、怒り、上、下、前、眉頭左、眉頭右
 
目系:まばたき、笑い、ウィンク、ウィンク右、ウィンク2、ウィンク2右、なごみ、はぅ、びっくり、じとめ、キリッ、(はちゅ目、はちゅ目縦潰れ、はちゅ目横潰れ、)、星目、はぁと、瞳小、瞳縦潰れ、光下、(恐ろしい子!)、ハイライト消し、映り込み消
 
口系:あ、い、う、え、お、あ2、ん、(▲)、^、(□、ワ)、ω、(ω□)、にやり、にやり2、にっこり、ぺろっ、てへぺろ、てへぺろ2、口角上げ、口角下げ、口横広げ、歯無し上、歯無し下
 
他:(涙)、輪郭、照れ、がーん、みっぱい、(メガネ)、(LightUp、LightOff、LightBlink、LightBS)、青ざめる、(髪影消、照れ消、AL未使用)
 
などがあります。カッコつきのモーフに関しては、差し替え系や効果が分からないものなので注意が必要です。
たとえば、はちゅ目にしたい場合は、モーフのウェイトは0か1にしたいので、"[0.4999-0.5001]: はちゅ目;" とすればできますが、他の目系にウェイトをかけてると、へんな線が出たりするので、取り扱いが難かしいと思います。
 
また、口系や目系は複数のウェイトをかけると、顔面が崩れやすいので、a^bのパラメータをかけるか、0.0-0.5など、最大値を抑えるなどの工夫がいるかと思います。
 

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。