シラネーヨのキャラ電 技術資料
はじめに
このページでは,2Dキャラ電を作る際に気づいたこと,シラネーヨのキャラ電の設定資料を公開します。
現在(2004/11/10),キャラ電の開発資料はNTT DoCoMo提供の仕様書以外にこれといったものがなく,お世辞にも充実しているとは言えない状況です。私はキャラ電の仕様書を読んではみたものの(仕様書へのリンクはこの文章の末尾にあります),あまり内容が理解できませんでした。もしかしたらゲーム業界の人なら,あっさりと用語や考え方を理解できるのかもしれませんが,畑違いの人間だからなのか「思ったとおりにならない」なんてことがよくありました。
それでも最終的に動くものはできたので,そこに行き着くまでに解決した問題を書き残しておきます。
<画像の説明>キャラ電スタジオVer.1.02の画面。
2Dキャラ電にまつわる数々の罠
テクスチャの数
仕様書には「モデルに設定するテクスチャは16個まで使用可能」という記述があります。「テクスチャ」というからポリゴンに貼り付ける画像だけに制限があるのかと思ったら,前景・背景も含むようです。つまりテクスチャの数=画像ファイルの数でこの上限は16です。
画像ファイルの場所
画像ファイルはプロジェクトファイルと同じフォルダに置いた方が良さそうです。作り始めの頃は,プロジェクトファイルと画像ファイルのフォルダを分けていたのですが,キャラ電スタジオを使っている間に「画像ファイルが見つからない」というエラーになることがたびたびありました。原因不明ですが(思い当たりそうな原因をあえて指摘しないだけですが←なぞ),ファイルを同じフォルダに置いたら解決できたので,似たような症状でお悩みの方はファイルの場所に注意してみてください。
モータと全体アクション
いちばん難解だったのは「モータ」だったのかもしれません。どうして「かもしれない」なのかというと,はじめは「何が分からないのかが分からない」という最悪の状態だったのです。後になって「モータで躓いていたのかな」と振り返ることができたというわけです。
仕様書には3Dキャラ電の作り方は詳しく書いてありますが,2Dキャラ電はあまり書かれていません(書かれていたのかもしれませんが,記述に気づきませんでした)。頼みの綱のサンプルコードは2コマのアニメーションで,扱うイベントの数もひとつでした。「それ以上のときはどうなるのさ」というあたりの疑問が解決するまで時間が掛かってしまったのです。
いろいろやってみたところ,ひとつのモーターにすべてのステートを実装してしまえば良いようです。実際それでうまくいきました。
GIF89aとBMP
2Dキャラ電に使う画像ファイルは,GIF89aかBMP(8ビットカラー)でなければなりません。GIFはGIFでもGIF87aには対応していないそうです。私はGIF89aで保存できるソフトを所持していなかったので,BMPを使うことにしました。
BMPでは透明色の設定が厄介に思えました。暗黙で先頭パレットが透明色になるので,パレットを入れ替えなければなりませんでした。「いったいどうすれば」と思って探してみたらありました。パレットの入れ替えソフトにK−Kさんの「パレットエディタ 0.97」を使わせていただいたところ,意外とラクチンに作業が進みました。
キャラ電のContent Type
WWWでコンテンツを配信するときの話です。キャラ電を配信する方法には,<A>タグを使う方法と,<OBJECT>タグを使う方法の2種類が用意されています。キャラ電のContent Typeは「application/x-avatar」です。WWWサーバに設定が必要なのかと思っていましたが,とくに設定なしで移動機でダウンロードできるようです。
ただしこの動作が検証できたのは,<OBJECT>タグでダウンロードした場合のみです。<A>タグの場合は分かりません。<OBJECT>タグでは属性にContent Typeを指定するため,WWWサーバの設定が不要なのだと思います。【追記 16 JUN 2005】 現在は「.htaccess」にてダウンロード時にapplication/x-avatarを送るようにしています。実機ではContent Typeの設定なしでも動くようなのですが仕様上まずいようです。
映像品質の問題
キャラ電の動画をテレビ電話に使うと,映像品質が恐ろしく低くてがっかりするのではないでしょうか。テレビ電話の規格は元々,実写(とくに人間の顔)を撮ることを目的としているはずです。CGのように人工的な輪郭のある映像はテレビ電話に向かないはずなのです。
「シラネーヨのキャラ電」ではテレビ電話の特性に歩み寄るために,意図的に画像の解像度(縦横の大きさではなくて分解能という意味)をほどほどに落とすことにしました。効果をよく検証したわけではないので,どこまで品質に貢献したのか不明ですがいくらかマシなはずです。(注意:「設定資料」には解像度を劣化させていない素の画像を載せています。)
設定資料
状態遷移表(全体アクション一覧)
シラネーヨのキャラ電の状態遷移表です。いわゆる絵コンテのようなものです。状態名を「s01〜s13」,画像名を「p01〜p16」として,事象(イベント)が発生してからの状態遷移をまとめました。なお「N/A」はNot Applicable,該当なしという意味です。
状態 | 事象 | 出力 | 背景 | 時間 | 次状態 | フレーム | ||
---|---|---|---|---|---|---|---|---|
s01 | 0キー押下/キャラクター登場時 | p04 | p01 | 1/8sec | s02 | リセット1/2 | ||
s02 | N/A | p05 | p01 | 1/8sec | s13 | リセット2/2 | ||
s03 | 1キー押下 | p06 | p01 | 1/2sec | s04 | シラ・ネー・ヨ1/3 | ||
s04 | N/A | p07 | p01 | 1/2sec | s05 | シラ・ネー・ヨ2/3 | ||
s05 | N/A | p08 | p01 | 1sec | s13 | シラ・ネー・ヨ3/3 | ||
s06 | 2キー押下 | p09 | p03 | 3/2sec | s13 | リアル・シラネーヨ | ||
s07 | 3キー押下 | p10 | p03 | 3/2sec | s13 | 職ネーヨ | ||
s08 | 4キー押下 | p11 | p01 | 3/2sec | s13 | おやすみ | ||
s09 | 5キー押下 | p12 | p01 | 3/2sec | s13 | 勉強中 | ||
s10 | 6キー押下 | p13 | p02 | 3/2sec | s13 | 振り向く | ||
s11 | 7キー押下 | p14 | p02 | 3/2sec | s13 | あおむけ | ||
s12 | 8キー押下 | p15 | p02 | 3/2sec | s13 | オリジナル | ||
s13 | N/A | p16 | p01 | N/A | N/A | 基本姿勢 |
画像の割り当て
画像名 | 画像 | 画像サイズ | 名称 |
---|---|---|---|
p01 | QCIF(176x144) | 背景1 | |
p02 | QCIF(176x144) | 背景2 | |
p03 | QCIF(176x144) | 背景3 | |
p04 | QCIF(176x144) | リセット1/2 | |
p05 | QCIF(176x144) | リセット2/2 | |
p06 | QCIF(176x144) | シラ・ネー・ヨ1/3 | |
p07 | QCIF(176x144) | シラ・ネー・ヨ2/3 | |
p08 | QCIF(176x144) | シラ・ネー・ヨ3/3 | |
p09 | QCIF(176x144) | リアル・シラネーヨ | |
p10 | QCIF(176x144) | 職ネーヨ | |
p11 | QCIF(176x144) | おやすみ | |
p12 | QCIF(176x144) | 勉強中 | |
p13 | QCIF(176x144) | 振り向く | |
p14 | QCIF(176x144) | あおむけ | |
p15 | QCIF(176x144) | オリジナル | |
p16 | QCIF(176x144) | 基本姿勢 |
ソースファイル
ファイルの説明
- shiraneyo100.afd ― キャラ電データ
- shiraneyo100.avp ― プロジェクト
- shiraneyo100.bhv ― ビヘイビア
- all.mot ― モータ
- help0.txt ― 全体アクションのキーアサインヘルプ情報
- help1.txt ― パーツアクションのキーアサインヘルプ情報(未使用)
shiraneyo100.afd
shiraneyo100.avp
<path> p01.bmp=. p02.bmp=. p03.bmp=. p04.bmp=. p05.bmp=. p06.bmp=. p07.bmp=. p08.bmp=. p09.bmp=. p10.bmp=. p11.bmp=. p12.bmp=. p13.bmp=. p14.bmp=. p15.bmp=. p16.bmp=. <header> redistribute=1 id_creater=0 id_avator=0 replace-action=0 replace_texture=0 resize=0 rotate=0 name=SHIRANEYO_V100 <bones>
shiraneyo100.bhv
behavior { motor { all.mot } document { help0.txt help1.txt } start { set { all.mot:s01 } } reset { set { all.mot:s01 } } event 1 { set { all.mot:s03 } } event 2 { set { all.mot:s06 } } event 3 { set { all.mot:s07 } } event 4 { set { all.mot:s08 } } event 5 { set { all.mot:s09 } } event 6 { set { all.mot:s10 } } event 7 { set { all.mot:s11 } } event 8 { set { all.mot:s12 } } }
all.mot
! all s01 : - { start { setbg p01.bmp; setfg p04.bmp } time 125 { goto s02 } } s02 : - { start { setfg p05.bmp } time 125 { goto s13 } } s03 : - { start { setbg p01.bmp; setfg p06.bmp } time 500 { goto s04 } } s04 : - { start { setfg p07.bmp } time 500 { goto s05 } } s05 : - { start { setfg p08.bmp } time 1000 { goto s13 } } s06 : - { start { setbg p03.bmp; setfg p09.bmp } time 1500 { goto s13 } } s07 : - { start { setbg p03.bmp; setfg p10.bmp } time 1500 { goto s13 } } s08 : - { start { setbg p01.bmp; setfg p11.bmp } time 1500 { goto s13 } } s09 : - { start { setbg p01.bmp; setfg p12.bmp } time 1500 { goto s13 } } s10 : - { start { setbg p02.bmp; setfg p13.bmp } time 1500 { goto s13 } } s11 : - { start { setbg p02.bmp; setfg p14.bmp } time 1500 { goto s13 } } s12 : - { start { setbg p02.bmp; setfg p15.bmp } time 1500 { goto s13 } } s13 : - { start { setbg p01.bmp; setfg p16.bmp } }
help0.txt
8 "1",1,"シラ・ネー・ヨ" "2",1,"リアル" "3",1,"職ネーヨ" "4",1,"おやすみ" "5",1,"勉強中" "6",1,"振り向く" "7",1,"あおむけ" "8",1,"オリジナル"
help1.txt
0
関連リンク
- 作ろうiモードコンテンツ キャラ電 ― NTT DoCoMoによるキャラ電の技術情報
- エイチアイ ― キャラ電の開発元
- キャラ電のプレスリリース記事 ― エイチアイによるプレスリリース