E-mote HOW TO ブログ


【ノアフェス】ノアフェスに参加して、16時間で10分のシナリオのスクリプト付けを行ないました。

2018/05/03 ・ 9:29 am

はじめに

E-mote担当プログラマのOです。

今回、縁あって、2日間でノベルゲームを1本作成するゲームジャム「ノアフェス」に参加して来ました。
事前に準備しておいて良いのはシナリオ・BGM・効果音のみ。残りの素材はボイスを含めて当日現場で制作すると言うレギュレーションです。

私達は5人のチームで参加して来ました。
ノアフェスは徹夜禁止なので、開催中のトータル16時間で作業を終える必要があります。
チームの内2人は1日のみの参加だったので、実質8人日でノベルを1本完成させる必要がありました。

限られた時間の中で作品の表現力を最大化するために私達が選んだ選択肢が「えもふり」でした。

まずは、そうした制約の中で完成させたノベルをご覧ください。

道玄坂女子中学2年A組オカルトカルテット怪奇ファイル01

4人のキャラが表情豊かに掛け合いを行なう様子をご覧いただけたでしょうか?

今回、私はスクリプト作業を担当しました。
以下、この記事では16時間の間にどのようにE-moteのスクリプト作業を行なったか、そのノウハウを解説して行こうと思います。

 

プラットフォーム

えもふりは、2018年1月のアップデートで、Unityとティラノスクリプトを対象とした出力に対応しました。
今回はえもふりを使うので、自動的にプラットフォームはそのどちらかから選択することになります。


個人的に以前から吉里吉里を使い慣れていることもあり、スクリプトの文法に吉里吉里と互換性のあるティラノスクリプトを使用することに決めました。


ティラノスクリプト
https://tyrano.jp/

ティラノスクリプトはPCからスマホまで幅広い出力に対応したマルチプラットフォームのノベルエンジンです。
HTML5ベースのため、ブラウザでの再生にも対応しています。

 

プラグインの準備

ティラノスクリプトのホームページから、最新のえもふりプラグインをダウンロードします。
https://tyrano.jp/sample/emote/

アーカイブの中身を、ティラノスクリプトの data/others/plugin/ フォルダに展開します。
これで、ティラノスクリプトでE-moteを使う準備が整いました。

 

タイムライン

E-moteでは、『目の上下左右の動き』『顔の表情』『腰のひねり』など様々なキャラの挙動を、それぞれに対応した名前のついた「変数」に対して任意の「値」を指定するという形で制御します。

ですが、この仕組みだけでは、「キャラがちょっと首を傾げて上目遣いに不思議そうな表情でこちらを見ている」と言う程度の演出をするだけでも、膨大な数の変数の値を一度に指定しないといけません。

そのため、E-moteには時系列での変数の値の変化をまとめて指定し演出作業を簡素化する仕組みが存在します。それが「タイムライン」です。

1からタイムラインを作っていると、とても時間が足りないので、今回はE-moteフォーラムで公開されているサンプルタイムラインをそのまま使わせてもらうことにしました。

https://emoteforum.mtwo.co.jp/forums/topic/%E3%80%90%E3%81%88%E3%82%82%E3%81%B5%E3%82%8A%E3%83%BBe-mote%E5%85%B1%E7%94%A8%E3%80%91%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%B3

サンプルタイムラインの中には 楽しい01 びっくり など、キャラの表情や仕草を表現するタイムラインが多数収録されています。
これらを指定することで、ADVの表情差分を指定する感覚で、演出を進めることが出来ます。

女子セット(おっとり系 女子ギャル系 女子元気系 女子クール系) と、ちょうど性格別に4種類のタイムラインが用意されているので、4人のキャラにそれぞれ割り当てることにします。

性格別のタイムラインは、「同じ名前で、性格ごとに演技が違う」設定になっています。つまり、スクリプトからは、同じ名前のタイムラインを指定しても、キャラごとに異なる演技をすることになります。

ダウンロードしたアーカイブを展開すると、4つのjsonファイルが入っています。E-moteエディタのタイムラインメニューを右クリックして「タイムラインをJSONファイルからエクスポートする」を実行して、取り込むタイムラインを選択します。

 

カタログ

具体的にスクリプトで演出を指定するには、それぞれのタイムラインがどういった動きをするのか、きちんと把握する必要があります。
それには、いちいちエディタの編集画面で挙動を確認する必要があるのでしょうか?

いえいえ、もっと簡単な方法があります。

E-moteには、複数のタイムラインのアニメーションをまとめて閲覧できる、HTML製のアニメーションカタログを出力する機能があります。

出力対象とするタイムラインをまとめて選択し、右クリックしてコンテキストメニューから、タイムラインをまとめてアニメーションカタログを作る を実行します。

では、実際に出力したカタログを見てみましょう。

……実は、ノアフェスに参加した時は、キャラクターの完成を待っている時間が無いため、テンプレートキャラの髪色を変えただけのダミーキャラで開発を行っていました。

実際にダミーモデルで演出をつけている光景。

スクリプト作業のモチベーションに影響するので、通常はキャラデータがある程度出来上がってからカタログを作成してスクリプト作業を行うことをオススメします。

 

キャラデータをエクスポートする

エディタのファイルメニューから エクスポートする/ティラノスクリプト向けにエクスポートする を実行します。

これで、「emtbytes」という拡張子のモデルファイルが出力されます。

このファイルを、ティラノスクリプトの data/others/plugin/emote/model/ フォルダに配置することで、ティラノスクリプトから利用可能になります。

 

キャラを読み込む

E-moteのモデルファイルは複数の画像から構成される大きめのファイルです。そのため、キャラが画面に登場するたびに読み込み処理を発行していると、読み込みのオーバーヘッドに時間を食うことになります。
そのため、シーンに登場するキャラクターは一旦全て読み込んで置いて、必要に応じてキャラの表示・非表示を切り替える運用が基本となります。

emote_new タグを使ってキャラモデルをメモリにロードします。
[emote_new name=”kae” storage=”emt_kaede.emtbytes” y=-100]

name属性でキャラの識別するための名前を指定します。
storage属性でファイル名を指定します。

ここまでが基本形。
さらにこの例では、y属性で縦方向の座標の初期設定を行なっています。
E-moteキャラの座標系は通常のティラノスクリプトの座標系とは異なります。
画面の中央が座標(0,0)となり、エディタで設定したE-moteキャラの「原点」がその位置に表示されます。
x,y属性で、この表示位置をオフセット出来ます。

一旦メモリに読みこませたキャラデータは emote_delete タグでアンロードできます。
[emote_delete name=”kae”]

キャラのロード時には、その他にも様々なキャラの初期属性を設定可能です。

詳細は、ティラノスクリプトのえもふり配布ページをご覧ください。
https://tyrano.jp/sample/emote/

 

キャラの演出

キャラを表示して演出をつけるタグの凡例は以下のようになります。

[emote_show name=”kae” x=-190 time=100 wait=false]
[emote_motion name=”kae” motion=”哀しい01″]
[emote_motion name=”kae” slot=1 motion=”うん”]
[emote_motion name=”kae” slot=5 motion=”右向き会話”]
[emote_motion name=”kae” slot=6 motion=”歩行ループ”]
[emote_motion name=”kae” slot=4 motion=”kae_0002″]
[playse buf=2 storage=”kae_0002.ogg”]
#かえで
「確かに、これだけ人が多いと[r]
誰か消えてもわからないかもって[r]
思えちゃいますね」

以下、各タグの意味を、E-moteの演出セオリーと共に解説します。

 

キャラを表示する

[emote_show name=”kae” x=-190 time=100 wait=false]

キャラを表示するには emote_show タグを使います。

name 属性で、キャラをロード時に設定したキャラの名前を指定します。

time 属性で、フェードインにかける時間をミリ秒単位で指定します。

wait 属性で、フェードインの終了を待つかどうかを指定します。

x,y 属性を指定して、この段階で座標を指定することも出来ます。

今回の作品では、プレゼン時間が限られているためスピーディな演出を心がけ、フェードインは100ms、ウエイトも掛けないという選択をとりました。
一旦表示したキャラの座標やその他の属性を変更するには emote_trans タグを使います。
表示中のキャラを消去するには emote_hide タグを使います。
キャラを非表示状態にしても、メモリ上にキャライメージは展開されたままです。メモリ上から解放するには、 emote_delete タグを使うことを忘れないようにしましょう。
これらのタグでは、その他にも様々なキャラの属性を設定可能です。

詳細は、ティラノスクリプトのえもふり配布ページをご覧ください。
https://tyrano.jp/sample/emote/

 

表情を指定する(メインタイムライン)

[emote_motion name=”kae” motion=”哀しい01″]

キャラのタイムラインを指定するには emote_motion タグを使用します。

name 属性で、キャラを作成時に設定したキャラの名前を指定します。

motion 属性で、再生するタイムラインの名前を指定します。

ここでは、哀しい 表情をするタイムラインを再生するように指定しています。
タイムラインの中には、エディタでループ指定がされているタイムラインもあります。
ループタイムラインは一旦再生を開始すると、その後自動で再生され続けます。
ループタイムラインの再生を止めるには、motion 属性に空文字列を指定して emote_motion タグを記述してください。

 

仕草を指定する(差分タイムライン)

[emote_motion name=”kae” slot=1 motion=”うん”]

E-moteのタイムラインには「メインタイムライン」と「差分タイムライン」の2種類のタイムラインがあります。

エディタで 差分用途 にチェックを入れてあるタイムラインが差分タイムラインとなります。
ベースとなるメインタイムラインと同時に再生して、動きを追加で足し込むことが差分タイムラインの役割となります。

E-moteフォーラムで配布しているサンプルタイムラインでは、表情の変化 をメインタイムラインで、首を傾げたり身体を震わせたりと言った 仕草 を差分タイムラインで作成してあります。

えもふりティラノスクリプトプラグインでは、 emote_motion タグに slot 属性を指定することで差分タイムラインを再生することが出来ます。

差分タイムラインスロットには1~6までの6つのスロットが指定可能で、スロット毎に適当な役割を割り振ってやることが出来ます。
今回、スロット1には「表情と共に再生する身体の仕草」を指定することにしました。
ここでは、首を縦に振る仕草を差分タイムラインとして再生するように指定しています。

このように、表情を指定するメインタイムラインと、仕草を指定する差分タイムラインを組み合わせて指定することで、バリエーション豊かな表現が可能になります。

 

身体の向きを指定する(差分タイムライン)

[emote_motion name=”kae” slot=5 motion=”右向き会話”]

サンプルタイムラインでは、キャラが会話する相手の方向を向かせる 右向き会話 左向き会話 と言う二種類の差分タイムラインを用意されています。

このタイムラインを再生すると、身体、顔、目線を相手の方に向け、会話をしている臨場感がぐっと高まります。
今回の作品では、会話向きを指定するために、スロット5を使いました。
なお、これらのタイムラインはループタイムラインのため、一旦再生をするとそのまま再生しっぱなしになります。
停止させるには、 motion 属性に空文字列を指定して再び emote_motion タグを記述してください。

 

移動ポーズを指定する(差分タイムライン)

[emote_motion name=”kae” slot=6 motion=”歩行ループ”]

キャラが歩いている様子を表現するために、 歩行ループ と言う差分タイムラインを再生しています。
移動ポーズや待機ポーズを再生するために、スロット6を使いました。

 

口パクを指定する(差分タイムライン)

[emote_motion name=”kae” slot=4 motion=”kae_0002″]

今回の作品は、フルボイス仕様とし、当日ボイスも収録しました。

ボイスに合わせた口パクのタイムラインをスロット4に割り当てて、そちらも再生します。

この口パクのタイムラインはどうやって用意したのでしょうか?

もちろん、手動で作成している時間などありませんでした。
えもふりは、WAVファイルを解析して自動で口パクのタイムラインを作成する機能を持っているのです。

エディタのファイルメニューから ボイスボリューム解析 を実行します。

入力フォルダに、WAVファイルを収めたフォルダを指定すると、出力フォルダに voicetimeline.json の名前で、口パクタイムラインが出力されます。

次に、エディタで ツリーのタイムライン編集アイテムを右クリックし、 タイムラインをjsonファイルからインポートする を実行し、先ほど出力された json ファイルを指定します。

これだけで、WAVファイルに対応した口パクが出来上がりました!

WAVファイルと同じ名前で差分タイムラインが作られているので、そのままティラノスクリプトで再生することが出来ます。

 

おわりに

いかがだったでしょうか?
通常の静止画による立ち絵の、表情差分を指定するのと近い感覚で演出を出来ることを体感していただけたでしょうか?

ノアフェス当日は、こうしてダミーモデルを使って演出をつけ、背景演出を入れ、音を埋め込み、ボイスを埋め込み、完成したモデルを埋め込みさらに細かい修正を行なうといった作業をさみだれ式に行ないました。

16時間ですべてを終らせるのはなかなかハードな作業でしたが、E-moteの演出能力のおかげでなんとかなりました。

えもふりティラノスクリプトプラグインでは、他にも色々と多彩な表現を使うことが出来ます。

https://tyrano.jp/sample/emote/

気軽にダウンロードして、自分のキャラを好きなように動かせる快感を是非味わってみてください。

よいえもふりライフを!