*シラネーヨのキャラ電 技術資料

はじめに

このページでは,2Dキャラ電を作る際に気づいたこと,シラネーヨのキャラ電の設定資料を公開します。

現在(2004/11/10),キャラ電の開発資料はNTT DoCoMo提供の仕様書以外にこれといったものがなく,お世辞にも充実しているとは言えない状況です。私はキャラ電の仕様書を読んではみたものの(仕様書へのリンクはこの文章の末尾にあります),あまり内容が理解できませんでした。もしかしたらゲーム業界の人なら,あっさりと用語や考え方を理解できるのかもしれませんが,畑違いの人間だからなのか「思ったとおりにならない」なんてことがよくありました。

それでも最終的に動くものはできたので,そこに行き着くまでに解決した問題を書き残しておきます。

キャラ電スタジオVer.1.02

<画像の説明>キャラ電スタジオ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) 基本姿勢

ソースファイル

ファイルの説明
  1. shiraneyo100.afd ― キャラ電データ
  2. shiraneyo100.avp ― プロジェクト
  3. shiraneyo100.bhv ― ビヘイビア
  4. all.mot ― モータ
  5. help0.txt ― 全体アクションのキーアサインヘルプ情報
  6. help1.txt ― パーツアクションのキーアサインヘルプ情報(未使用)
shiraneyo100.afd

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

関連リンク

*コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

yumi-ii/shiraneyo AAアプリ研究室, Copyright (c) MURONO 2001-2002, 2004-2005, murono@mtc.biglobe.ne.jp