今日(正確には昨日か)、歯医者に行って、検診を受けてきた。そしたら、どうも歯茎の状態があまりよろしくないらしい。ちょっと気をつけないと。この歳から歯槽膿漏なんて考えたくないしね。歯間ブラシをもらったので今日から使わねば。
さて、前回からの続きの話をしよう。テクスチャを作ることになり、花火職人になろうのガイドCD付属の Quick Time ムービーの画像をクリップボード経由で Paint Shop Pro に移すところまで話した。
Microsoft Flight Simulator で使うテクスチャファイルは特殊な形式、いわゆる R8 形式になっている。これは、
Paint Shop Pro だと、直接 R8 ファイルを取り扱うことができる。ここではやや脱線して、Paint Shop Pro での R8 ファイルの編集の仕方について説明する。(なお、この方法は PJCC 社長の柏 之雄氏の NIFTY-Serve での発言に基づいています。)
まず、編集を開始する前に一つ準備が必要になる。それは FS 用パレットの変換作業である。
パレットについて簡単に説明すると、テクスチャファイルは256色のビットマップであるので、それぞれのドットは0から255までの色番号が付いている。この色番号と実際の色の対応表がパレットである。FS の場合、デフォルトのパレットというのが決まっているので、これをグラフィックソフト側に読込ませて画像を編集しないと意図した通りの色がでない。そのため、パレットファイルが必要になる。
Paint Shop Pro で使うパレットは JASC-PAL フォーマットと呼ばれるタイプのパレットである。 FS のパレットから JASC-PAL 形式に変換するツールはいろいろある。今回は bgltools に付属の PALCONV を使った。bgltools といえば、もうシーナリ作成ツール中の古典と言ってもいいツールで、1994年にリリースされたものだ。詳細はこちらを見ていただきたい。
さて、PALCONV を使ってパレットファイルができたら、R8 ファイルの編集を行うことができる。ここでは、R8 ファイルの読込みかたを説明しよう。
逆に、今回のように通常のビットマップファイルから R8 ファイルを作成するときは、以下のようにすればよい。
ふぅ、けっこう長くなってしまった。それでは花火テクスチャの作成に戻ろう。
実は私、FS のテクスチャを作るのは今回が初めてである。いや、名古屋シーナリの道路を作ったことがあるから初めてではないのだが、今回のようにまじめにテクスチャを作るのは初めてで、Paint Shop Pro を使ってテクスチャを作るのも初めてである。それで、以下の作業は試行錯誤の連続で、結構チョンボをやってしまった。
まずは画像のサイズを256 x 256に調整する必要がある。ナイスなことに、今回使った花火の画像は、ちょうど256 x 256のサイズにぴったり収まる程度の大きさだったので、画像の拡大・縮小の必要はなかった。単純に256 x 256のサイズの選択領域を作ってトリミングしただけである。
次に、FS のパレットの読込みである。「カラー」メニューの「パレット交換」で FS のパレットを読込んだ。このとき、パレットの適用方法には「近似色」を選んだ。これだと、パレットの中の一番近い色に色番号を合わせてくれる(これが後々であだになるのだが、、、)
それから、透過色の設定である。詳しいことは省くが、今回の花火マクロではパレット中の0番の色は透過色になる。透過色の部分は後ろが透けて見える。これがないと、空に黒い豆腐ができてその中に花火が表示されることになって間抜けである。
それで、花火の背景の黒い部分を0番の色で奇麗に塗り潰した。この作業をするときは、パレットを編集して一時的に0番の色を別の色(緑とか)にして作業をした方がいい。そうしないと透過色とそうじゃない色の区別が付きにくくて困る。 あと、空中に浮かんだ余分なごみのようなものも、ここで奇麗に塗り潰した。
作業がすんだら、BMP ファイルとして保存した。今回は直接 R8 ファイルで保存するのではなく、一旦 BMP ファイルで保存して、それから BMP2R8 というツールを使って R8 に変換する方法を取った。
これで一応テクスチャは完成したので、早速マクロに組み込んで試してみた。 のであるが、どうもうまくいっていない。どうも花火が暗いのである。ほとんど、背景にとけこむくらいなのである。
うーん、何でだろう。と数分熟慮した結果、大チョンボをしていたことに気がついた。FS のパレットをそのまま使ってはまずかったのである。
例えば、同じ茶色であっても、その色は時間帯によって変わるのだ。昼間なら茶色に見えるが夕方になるとだんだんこげ茶になっていき、夜になるとほとんど真っ黒になる。これにより、時間帯による色の変化を実現しているわけだ。
花火の画像を作成したあと、「パレットの交換」でパレットを読込んだのであるが、このとき、パレットのうち、もっとも近い色に色番号が補正された。だが、その「一番近い色」が時間帯によって変化する色だったりすると花火の場合にはまずい。夜になると真っ黒になってしまうからだ。
でも、パレットの中には時間によって変化しない色、というのも存在している。それが 116番から 127 番までの色だ。ネオンサインとかにはこの番号の色を使うのがあたりまえなのであるが、完全に失念していた。
というわけで、また作業のやり直しである。まずパレットファイルをもう一つ作った。具体的には、116 番から127番以外の色を全部真っ黒にしてしまうのである。それが以下の図である。
こうやっておけば、「パレットの交換」をやったときに 116 番から 127 番の色と、0番の色(要するに透過色)にしか色番号が割り当てられなくなる。つまり、時間帯によって変化する色は使用されない、ということだ。(わかりにくい説明 ^^)
このパレットの作り方であるが、「パレットの編集」で一つずつ色を真っ黒にしていけばいい。だが、そんなことをしていては日がくれてしまう。パレットファイルはテキストファイルなので、テキストエディタでぱりぱり書き換えるほうがいい。
ただ、「パレットの交換」を実行するときに一つ注意点がある。それは、パレットの適用方法に「誤差拡散法」を使うということだ。
さきほどの図を見てもわかるように、時間帯により変化しない色というのはたったの11色しかない。しかもそのうち半分は灰色系統の色だけだ。だから、パレットの適用時に「近似色」などをえらんでしまうと、ちょっと暗めの画像の場合、画像の色が全部灰色系統の色になってしまう。誤差拡散法にすれば、ある程度、赤とか青とかいった色を混ぜてくれるはずだ。
実は最初このことにも気がつかなくて、もう1回作業のやり直しとなった。
さて、これでテクスチャが完成し、花火を打ち上げたところ、おお、ちゃんと今度は奇麗に上がるではないか。うんうん、これなら公開できそうだ、、、
と思って良く見たらなーんか変な気がする。うーん、今度は何だろう、、、、、
と思ってよくよく見てみたら、今度は花火が上下逆さまだった。火花が下から上へ登っているのだ。間抜けである。
良く考えたら、R8 ファイルでは画像を上下逆さまに入れなければならなかったのだ。 ここで更にもう一回作業のやり直しとなった、ら本当の間抜けである。ここは画像の上下を入れ替えて解決した。
ふぅ、これでようやくテクスチャが完成。慣れないせいで、妙に手間取ってしまった。実際の作業時間は忘れてしまったが、3、4時間くらいだったかな?
あとはマクロの手直しと名古屋シーナリへの組み込みであるが、それはまた次回。