2015年09月02日

(SimPeople)オブジェクトを3Dで修正しよう - 一発自動修正もあるよ -

さて、Zバッファについて色々と書いてきましたが、一番の問題は「直観的でない」という事でしょう。白黒の画像を見て3次元をイメージしろと言われても無茶ぶりすぎます。
自作のオブなら初めから3Dで作るという手もありますが、3Dモデルを作るのは結構大変ですし、既に完成しているオブジェクトを修正しようとなると手の出しようがありません。

それならオブジェクトを3Dで見れるようにしてしまえば良いじゃない、という事で、オブジェクトの画像から3Dモデルを復元、移動や編集を出来るようにしてみました。

3Dモデルを扱うのでBlender用のプラグインとなっていますが、基本的な操作は専用のパネルから行えるのであまり詳しくなくても手順通りにやれば大丈夫だと思います。



まあ、とにかくどんなものか見てみましょう。静止画だと分かり辛いので動画にしてあります。
後半は使用法となっているので、とりあえず最初の部分だけ見てもらえればどんなものかは分かるかと思います。
字が細かいので、全画面で最高画質にしてご視聴ください。重いかもしれませんが。


作成したプラグインですが、見ての通り"The Sims Transmogrifier"(以下トラモグ)の表示、移動を3次元にした様なものです。
干渉するオブジェクトの修正用に、簡易的な自動修正を行うことも出来ます。



まずはインストールです。いつも通り、Blender2.49b用となっています。
プラグインのダウンロードはこちらからどうぞ。
シムピープル用オブジェクト3Dインポータ・エディタ v0.1

Blender2.49bをインストールした後、
\Users\<ユーザー名>\AppData\Roaming\Blender Foundation\Blender\.blender\scripts\

以下に、ダウンロードした import_sims_3Dedit.py を入れてください。
なんか面倒な場所ですが、Vista以降のUACのせいでこんな場所になっています。
※ "AppData"フォルダが隠しフォルダになっているので、エクスプローラの設定で"隠しファイルを表示する"設定にしないと見えないので注意してください。

また、画像処理用にPIL(Python Image Library)を使用しているので、こちらもインストールが必要です。
PILは長らく更新が無いので、互換性のあるPillowというライブラリから、Windows用のPython2.6-32bit版をダウンロード、インストールするのがいいでしょう。Blender2.49は32ビットなので、32ビット版が必要です。

Pillowのダウンロードはこちらからどうぞ
配布ページ
Windows用インストーラ版



さて、使用法ですが、大体の事は動画で分かると思います。
この後では動画には書ききれなかったことを含めてもうちょっと詳しい解説をしていきますが、動画で力尽きたのでこの後は画像とか無しです。動画と大体同じ流れなので、そちらを見ながらでもどうぞ。面倒なら読まなくてもたぶん大丈夫です。



トラモグからの出力とBlenderでの読み込み


まずは読み込むファイルを用意しなくてはいけません。このプラグインはトラモグからExportしたXMLと画像を読み込むようになっています。
必ず修正したいオブのバックアップを取ってから、トラモグでそのオブを選択して、"Export Object File..."を実行、オプションは動画と同じにして下さい。

出力できたら、Blenderを起動して左右どちらのサブウインドウでもいいのでScriptウインドウに切り替えて、Script->Import->Sims3DEdit で起動します。
上のFileメニューのImportからでも起動できますが、このスクリプトは起動しっぱなしで使用する & 縦長のサブウインドウを前提でレイアウトしているので、サブウインドウを指定して起動した方がいいです。


起動するとファイル選択ボタンが出てくるので、先程出力したxmlを開けばオブジェクトが3Dで表示されます。

テンキーの"0"でゲーム上で見た視点の固定カメラで見ることが出来ます。当然ながらゲームでの表示と大体同じはずです。固定カメラなので、そのままだと視点移動できないので、もう一度"0"を押すとフリーカメラに戻ります。
他に、テンキーの"1" で左前、"3" で右前、"7"で上から、"5"でパースのON/OFFができます。"2468"は上下左右の回転なので、好きな方向から見てみて下さい。

表示される方向から見たデータしかないので、影の部分や裏側は表示されません。
また、仕様上マルチタイルのオブジェクトを表示するとつなぎ目の部分に隙間がありますが、ゲーム上では繋がっているので移動して繋げたりはしないでください。
画像上の1ピクセルを1頂点に変換しているので、面積のあるピクセル→面積の無い点になり、結果つなぎ目部分が空いているように見えています。1ピクセルを四角の面にすれば繋がって見えますが、頂点数が4倍になるので重くなりますし、色々不都合があるのでこうなっています。


画像の方向やDrawGroup(ベッドメイク済み・寝てる時・使用後などの切り替え)の選択はトラモグと大体同じですが、マルチタイルのオブジェクトの場合はトラモグと違い全タイルをまとめて移動できます。個別に移動したい時は、上の方の"All Tiles"ボタンで切り替えることが出来ます。

一応チェックはしていますが、万一何かのエラーでプラグインが終了してしまった時は、そのままプラグインを再実行してください。エラーで落ちる直前の状態に戻ります。おかしなことになったら、ResetボタンかBlenderを再起動してください。



初級編 - とりあえず干渉を自動修正する -


さて、Blenderなんて触ったことが無い、3Dなんてやったことが無い、でもオブどうしの干渉や壁へのめり込みを何とかしたいという方。
オブが読み込めたら、右下の方にある"Full AutoFix"ボタンを押しましょう。
確認のポップアップが出るので、"Yes"を押すと勝手に読み込んで修正、勝手に保存します。
終了のポップアップが出ればBlenderでの作業は終了です。もうBlenderは閉じて構いません。
後はトラモグで先ほど選択したオブを選んで、"Import Object File..."で読み込めば壁や隣のオブジェクトへの干渉は直っているはずです。ゲーム上で確認してみてください。

余程おかしなことをしていなければ、大抵はこれで直るはずです。



中級編 -トラモグの3D版 -


自動修正は壁への干渉は直してくれますが、シムがオブを使う時にめり込むのは直してくれません。簡単な物なら、オブ全体を移動することで直すことが出来ます。
自動修正は何をやっているのかよくわからないから嫌だ、見た目で分からなくてもきちんとした場所に置きたい、という几帳面な方もこちらです。

まずは読み込んだオブを見てみましょう。明らかに場所がおかしいなら、ここで移動するだけで修正できます。
マウスなりテンキーなりで表示を回転させて見やすい位置にしたら、右の"+Z" "-Z"ボタンで移動します。"X" "Y" は普通使用しません。なぜなら、XYはトラモグで修正できるので、大抵はすでに正しい位置になっているからです。
"+-Z"ボタンで移動すると、オブが斜めに移動していきます。これで正しい位置に移動してください。
ゲーム視点の固定カメラで見ると、Zを変えてもオブには何の変化も見られません。視線の方向に沿って移動しているので、遠い近いの分からないモニター上では同じに見えるんです。これがZバッファが難しいことの一因でもあります。


この時、オブの表示されている3Dウインドウはクリックしない方がいいです。誤って右クリックすると、オブジェクトの選択が解除されてしまうことがあります。プラグインのボタンは選択されているオブジェクトのみを移動するので、マルチタイルだと一部分しか移動しなくなります。
一度別な方向などに切り替えて戻すと、再度すべて選択された状態に戻ります。
理解しているなら、マルチタイルの一部のみを選択して移動することも出来るので、必要に応じて利用してください。

移動の際は、"View SampleWalls"ボタンを押しておくと壁を表す枠線が表示されるので、基本はみ出さないように移動してください。オブの形がおかしい・大きすぎてはみ出す時は、壁への干渉は後で修正できるので、シムが干渉しない事を優先して移動しましょう。

もし、この移動で壁や床からはみ出しているときは、下にある"Wall Fix"ボタンを押してください。壁からはみ出している部分が、自動的に壁の前/後 に移動します。
3Dで見るとすごい形になっているかもしれませんが、カメラ視点にすると普通に見えるので心配しないでください。


移動が終了したら、"Save Changes"ボタンで保存します。トラモグと違い、自動保存はされません。また、方向やDrawGroupごとに毎回保存する必要があります。保存せずに切り替えようとすると警告が出るので、保存するか変更を破棄するか選んでください。

Blenderの操作になれている方なら、オブのモデルを直接3Dウインドウで移動しても構いません。この場合も、ゲーム上での位置を変更したい場合でない限り、XYは変更しません。移動モードになったら、キーボードの"z"キーを2度押せばオブのローカルZ軸に沿って移動できます。



上級編 - オブジェクトの形を変更する -


さて、壁へのめり込みや場所の移動で直せるものは修正できましたが、これで直せないものも中にはあります。寝ると体がはみ出してしまうベッドが一番多いパターンでしょうか。この場合は、直接オブの形状を変更する必要があります。
Blenderをそれなりに使える知識が必要ですので注意してください。

ここでは、ベッドの修正を例に解説します。
まずは、付属の修正用.blendファイルを開いてください。中には、いくつかのマネキンが用意してあります。立ち姿、座った姿、寝ている姿です。必要なもの以外は削除するか非表示にするといいでしょう。

この状態で、修正したいベッドを読み込みます。表示は当然 "Sleeping" にして下さい。マネキンを移動してベッドに寝かせるんですが、その際にマネキンの高さを変えないように注意してください。テンキーの"7"で上から見た状態で移動するなりすれば良いでしょう。回転も90度単位で回して下さい。

寝ている位置まで移動させると、当然体がはみ出しているはずです。はみ出している部分のオブを選択して、EditModeに入ります。
EditModeにしたら、はみ出している部分の頂点を選択して移動すれば良いんですが、その際にXY座標を絶対に変えないように注意してください。XY座標はそのまま画像上のXY座標となるので、移動するとZ画像自体がおかしくなってしまいます。
ショートカットで言うと、頂点選択後に "G"(移動モード) "ZZ"(Zを2回でローカルZ座標に沿って移動)となります。移動時に3Dウインドウ左下に "〜 along local Z"と表示されていればOKです。

3D上で凸凹していても大丈夫です。しつこいようですが、Zを変えてもゲーム上の見た目は変わりませんから。ただ、壁は超えないようにして下さいね。

修正が終わったら、忘れずに"Save Changes"で保存してください。これを4方向すべてで行えば終了です。
Blenderの操作が出来れば、手間は多少かかりますがそれほど難しくはないと思います。





今回の記事はここまでです。
後半は投げやり感がすごいですが、まあ動画見れば大体行けるでしょう。
ではまた次回に。



.

2014年09月01日

(SimPeople)壁や隣に干渉しないオブジェクトを作る その4 -干渉したなら直せばいいじゃない-

今まで干渉しないzバッファについて少々書いてきましたが、現実として既に干渉してしまっているものもあるでしょう。他の方の配布オブとか、昔作った物とか。
それでなくても、今現在干渉しているものを作り直さずに直したい、とかはあるでしょうし。

そこで今回は取りあえず壁への干渉を治す方法を考えてみましょう。




毎度出てきますが、zバッファはオブジェクトまでの距離を表した白黒の画像です。後ろの壁に干渉するときは明るすぎ、手前に干渉するときは暗すぎます。

と、ここでとある大事なポイントが見えてきます。
zバッファは白黒の画像ですから、「奥の壁に埋まらないギリギリのzバッファ画像」を用意して、それとオブジェクトのzバッファを「比較暗」で重ねてやれば、埋まるはずだった部分が壁の手前に出てくるはずです。
※ 「比較暗」- フォトショップなどの画像処理ソフトにある機能。2つの画像を比較して、より暗い部分を合成してくれる。
※ ここでは「暗い = 手前にある」という事なので、壁に埋まりそうな部分が壁の手前に出てくるという事

手前側も同じように、手前の壁を貫通しない画像を用意して「比較明」で重ねれば飛び出すはずの部分が壁の向こうに引っこみます。

そんなので大丈夫か、と思う方も居るかもしれませんが、実はこれと同じような方法が公式のオブジェクトでも使われています。というかテストしている最中に気が付きました。それについては後述します。

z4-1.jpg
というわけで、まずは以前書いた方法で垂直な板のzバッファを作ります。例の「同じ色で2px縦に書いて横に1px移動を繰り返す」という奴ですね。無論手作業でなどやってられないのでサクッとプログラムで出力します。後ろの壁用と手前の壁用で2つ、こんな感じの1タイルぎりぎりのオブジェクトにします。

次はこの板をちょうどいい場所に設置しなくてはなりませんが、残念ながら、シムピープルでの壁のzバッファを知る方法はありません。なので、ある程度壁の近くに設置したら、あとはひたすら調整→テストの繰り返しです。

さて、テスト中にいくつか分かったことがあります。

z4-2.jpg z4-3.jpg
一つは壁の向きによって微妙に奥行きが違うこと。実はゲーム中でもよく見ればわかるんですが、右側の壁は左側の壁よりも自タイル側に寄っています。どのみち壁自体もタイル上になければならないので(そうじゃないとタイルを並べると壁の分だけ隙間が出来る)、それが右側だったという事です。

今回の目的としては、オブジェクトによっては画像を左右反転して使用する(=zバッファも左右反転する)ので、左右対称なzバッファが望ましいです。なので、ここは手前にある右の壁に合わせることにしました。

次に、トラモグでLサイズの画像からM,Sサイズの画像を自動生成するときの誤差です。
z4-4.jpg
このように、Lサイズで埋まらないオブジェクトも、ズームを変えると埋まってしまいます。
ズームごとに最適なzバッファを用意する方法もありますが、自動生成が使えないのも面倒なので、これもzバッファに余裕を持たせることで対処します。

最後に、公式で行っている壁に干渉しないための補正です。
z4-5.jpg
これは公式のテーブルに丁度テーブルの高さの平らなラグを置いたものですが、テーブルの後ろ側がラグの上にはみ出ています。
続いて垂直な壁で切ってみました。どうやら、平らに見えたテーブルも後ろの部分が反り返っているようです。これは、テーブルが壁に埋まらないようにするための対策だと思われます。
今回作ったzバッファもこれと同じことをしますから、知らない間に公式の真似をしていたことになります。公式と(方法は違うかもしれないけど)同じ結果なら、そんなに不具合が出ることもないでしょう。たぶん。そうだといいなぁ。




z4-6.jpg
そうして調整を繰り返して、さらに色々と小細工を加えて出来上がったのがこちらになります。丁度ドアの厚さと同じくらいの余裕があります。最初にも書きましたが、zバッファは重なるかどうかの判定に使用するだけで見た目には影響しないので、壁に埋まりさえしなければ割と適当でも大丈夫です。シムが使う(使うモーションがある)オブジェクトは、シムが使う部分をきちんとしないとおかしなことになりますが、そんな壁際で使うオブジェクトはなかったはずなので大丈夫でしょう。

z3-7.jpg
ここで、オブジェクトの右の端がはみ出ているのが分かると思います。原因は先ほど述べた、右側の壁が内側にあるのが問題だと考えられます。
前回も書いた通り、この部分は、前の壁と後ろの壁に同時に干渉する場所なので使ってはいけません。というか、今回のテストで右上と右下の端はゲーム中に壁が置かれるという事が分かったので、ここに置くとかなりの確率で干渉します。

z_wall8.jpg
こちらは公式のゴミコンパクターをトラモグ上で見たところですが、これも右の端の部分には余裕があります。並べてくっついているように見えるオブジェクトも、基本ここは使われていません。
勿論、絶対に壁が来ないような場所(2マスオブジェクトの繋ぎ目とか)ならば使用して問題ありません。


これで「壁と干渉しないギリギリのzバッファ」は出来上がりました。
使い方は簡単(?)、修正したいオブジェクトのzバッファと、後ろの壁用なら比較暗で・前の壁用なら比較明で重ねるだけです。2マスオブジェクトとかの場合は、適当なところで切ってやれば使えるんじゃないかなーと思いたいです。

ただし1つだけ注意点が。今までもしつこく言ってきましたが、「トラモグ上(ゲーム上)
の位置と、画像上の位置は正確に合わせる」事が大事です。いやホント、zバッファはこれに尽きるんじゃないかってくらいに大事です。

ダウンロードはこちらから。
fix_wall.zip


.

(SimPeople)壁や隣に干渉しないオブジェクトを作る その3 -色々使いまわせるz画像が欲しい-

何かしらのオブジェクトを作りたいと思った時、毎回z画像を作るのは大変です。そこで、ある程度用途が限定されますが、色々使いまわせるz画像を作ってみたいと思います。

使える条件ですが、
  • 1x1タイルのオブジェクトである
  • 置いたタイルに侵入できない(テーブル上に置くものはテーブルには侵入出来ないのでOK)
  • 同じタイルに別のオブを置けない(ラグは除く、テーブル上に置くものなら、置くテーブルは除く)
  • シムが使用する特別なモーションが無い

要は床やテーブルに置く1マス置物系ですね。




z3-1.jpg
まずは、どんなzバッファが必要か考えてみましょう。公式オブのzバッファを見ると、細かいところまできちんと作られています。おそらく、モデルを3Dソフトで作って後は自動で生成しているんでしょう。
ですが、普通に作成する分には細かいところは必要ありません。シムが使ったりするオブなら大雑把な形くらいは必要ですが、大抵のオブは前や後ろを通ったり立ち止まって見る程度です。

このような、置かれたタイルに侵入できない・シムが使用する特別なモーションが無い・同じタイルに別のオブジェクトを置けない(テーブルに置くものなら、テーブルの上に同時に置けない)オブジェクトのzバッファは、壁やテーブルにさえ埋まらなければ後はどうでもいいんです。

z3-0.jpg
なぜなら、このようなオブでは「必ず全体が他のオブの手前にある」か「必ず全体が奥にある」かの2通りしかなく、その為に必要なzバッファは「隣のタイルにはみ出さない=壁に埋まらない」という事だけだからです。

z3-2.jpg z3-3.jpg
例えば適当な壺があったとして、zバッファが本当に壺の形をしていようが、立て看板に書かれたものだろうが、箱に書かれた絵であろうが、ゲーム中の見た目は同じですし、シムや他のオブと重なっても同じ結果になります。
ぶっちゃけ、侵入できない置物系のzバッファは全部同じものを使っても問題ありません。

z3-7.jpg z3-5.jpg
ただし、ゲームの仕様上使ってはいけない場所があります。タイルの右端は、前後2つの壁に同時に干渉するので、どうやってもどちらかに干渉します。なので、ここは使用しないでください。公式オブを色々見てみるとわかりますが、基本この場所(というか右の壁のそば全般)は使われていません。右の壁は前後共にタイルに干渉しやすくなっているので、なるべく避けた方が無難です。
※ 2タイル以上のオブジェクトのつなぎ目部分は例外です。つなぎ目ですから、絶対にそこに壁は来ないので。




z3-6.jpg z3-4.jpg
というわけで、こちらが書き割りのzバッファになります。3Dで見ると右の様になっています。とても怪しい形ですが、正面から見れば普通です。これ1枚で、最初に書いた条件のオブジェクトなら大体何とかなると思います。
真ん中の出っ張りはテーブルの上に置くための部分です。テーブルが無ければ下の部分が隠れることもないので、これを床置き用と兼用しても問題ありません。

使用するときは、別レイヤーにトラモグやゲーム上で出てくるタイルのグリッドが書いてあるので、それに合わせて場所だけはきちんと合わせてください。

以前も書きましたが、このzバッファを使う時にも大事なのは画像をゲーム内での置き場所ときちんと合わせる、という事です。zバッファ関係で上手くいかないのは、大抵はzバッファを作った後にトラモグで場所を移動していたり、そもそも画像内での置き場所を間違って、変な場所のzバッファを使っているのが問題だと思われます。その辺は以前の記事を読んでください。

ダウンロードはこちらから
kakiwari_z.zip




.

2014年08月31日

(SimPeople)壁や隣に干渉しないオブジェクトを作る その2 -zバッファの基本-

zバッファといえば、シムピープルのオブジェクト作りの鬼門ともいえる所です。幾多の職人がこれに悩まされ、涙したか知れません(いや新参なんでほんとに知らないだけですがw)。

zバッファとは、要はオブジェクトの奥行きを表した白黒の画像です。奥行きの情報だけなので、オブジェクトが単独で存在しているときは意味はありませんが、前後にシムやオブジェクトがあるときは、この情報を元に「どちらが手前にあるのか」を判断しています。
白い(数値が大きい)ほど奥に、黒い(数値が小さい)ほど手前にあるので、これが白すぎると奥の壁に埋まったり、黒すぎると手前の壁を貫通してしまいます。

これを作る必要があるわけですが、普通手書きで作るとかそういうものではありません。細かい修正くらいなら可能でしょうが。

Blenderが使えるならそれで3Dモデルを作ってしまえば必要な画像がすべて作成できるので無問題ですが、なかなかそうもいかないでしょう。

なので、出来ればどこかから元になるzバッファを持ってきて、それを流用するのが一番です。公式オブの物がそのまま使えれば、少なくとも壁に埋まるなどの問題は起きませんし。

とは言っても、そのまま使えないことも多いでしょうし、zバッファがどんな物なのか、どういう特性を持っているのかを理解しているのは大切です。その辺を少し解説してみます。




さて、zバッファはオブジェクトの奥行きを表している、といいましたが、正しくは「画面との距離」を表しているといった方がいいです。画面との距離なので、画面と平行な場所までの距離はすべて等しくなります。
つまり、画面に対して平行に動かすのなら、zバッファは変わらないという事になります。

z2-1.jpg z2-2.jpg
しかし、シムピでは対象を斜め上から見下ろした形になっていますから、画像上で左右に移動したときは思った通りの場所へ移動しますが、上下に動かすと思ったのとは全く違う場所へ移動してしまいます。

それじゃあ、上下には全く動かせないのか、というとそうでもありません。勿論、zバッファの濃さを調整する必要はありますが、割と簡単に修正できます。
zバッファにはいくつか法則があって、それを利用するとオブジェクトを床に対して平行、垂直に移動することができます。これはzバッファの計算式から求めることができますが、あんまり役に立たないのでおまけとして後述しておきます。

z2-4.jpg
まずは床に平行に動かす場合です。床やテーブルに置いたまま手前や奥にずらす時ですね。
この場合は、画像上で1px上に動かすたびに3/2ずづzバッファを明るくしてやります。(ずらしたpx数)*(3/2)という事ですね。10px上に動かしたなら、15だけzバッファを明るくすればいいことになります。画像上で下にずらしたのなら、逆に暗くしてやるだけです。

明るくするときは、Photoshopなら新しいレイヤーを作って、(15,15,15)のグレー(ほとんど黒ですが)で塗りつぶし、元のzバッファの上に「覆い焼き(リニア)-加算-」で重ねて「下のレイヤーと統合」で元のzバッファと統合すれば出来上がりです。オブの周りの余計な部分は削除してくださいね。暗くするなら「差の絶対値」で同様に。

床に垂直に動かしたい時、大抵は床置きのオブを机の上に移動したいとか逆に床に移動したい、という時だと思いますが、画像上で1px上に動かすたびに1/2ずつ暗くしてやります。(ずらしたpx数)*(1/2)ですね。テーブルの高さは画像上で床から64pxなので、32だけzバッファを暗く/明るくすることが多いでしょう。ただし、床置きのラグなどは上にくるシムやオブとの干渉を避けるためか、理論値よりも明るく(奥になるように)作られていることが多いようなので、その分少し余計に暗くする必要があるかもしれません。

これで、zバッファを好きな場所に移動できるようになりました。とは言え、地味に面倒なので、なるべくならそのまま流用できるオブを見つけて持ってきたいところですね。

次回は、使える状況がある程度限られますが、色々と使いまわせるzバッファを作ってみたいと思います。




おまけ -zバッファの計算式-

まず、シムピープルの画面は、45度水平回転したものを30度の角度から見下ろしている、とありました。
45度は言わなくてもわかるでしょう。見下ろし角の30度は、タイルの対角線の長さが 1:2 になっていることから、sin30°= 1/2 でこれも正しいようです。

ここから、z=0 である平面(XY軸上の平面)を回転させた時のZの値を計算します。
z=0の平面、すなわち法線ベクトルが(0,0,1)の平面をZ-Y-X回転で回転させて、その平面の式にXとYを代入すればzの値が求まります。

z_siki1.jpg
これでzの値が出るかと思いきや、どうも公式のzバッファと合致しません。色々検証した結果、グレースケール画像のとれる値(0〜255)に収まるように係数がかかっているようです。それを調べた結果、最終的な式は

z_siki2.jpg
となります。

zバッファの作成法で、冷蔵庫などの垂直な壁部分は「同じ色で2ドット上がって、1ドット横に動く」というのが定番としてあるようですが、「同じ色(zが等しい点)は2ドット上がって(yが2増える)、1ドット横に動く(xが1増える)」となり、求めた式と一致します。

床面などの式も、同じ様な方法で求めることができます。




.

2014年08月30日

(SimPeople)壁や隣に干渉しないオブジェクトを作る その1 -まずは必要な画像の基本から-

さて、今更ながら備忘録もかねてオブジェクトの作成に必要な情報について少しまとめておきます。作成する画像の解像度とかその辺ですね。

オブジェクトのグラフィックは、すべて1タイル単位で作成されています。1x2のオブジェクトなら、1x1のグラフィックが2タイル分入っているという事です。

で、1タイル分のグラフィックは横136x縦384のグラフィックが3枚セットになっています。
順に、
  • 実際に表示されるp画像(picture)
  • 画像の表示部分を表すa画像(alpha)
  • オブジェクトの奥行きを示すz画像(zバッファ)

この3枚がセットで1つの絵が完成します。オブジェクトは向きが変わると画像も変わるので、基本的には方向ごとに1つづつ、4セットの絵が入っていることが多いです。
そのため、1タイルのオブジェクトには、1セット3枚x4方向で計12枚の画像が必要になります。

(花瓶の様にどの方向から見ても同じものは1セットのみ、左右対称のオブジェクトは画像の左右反転が使えるので2セットで済みます)

実際には、画面のズームに応じて更にx3しなければならないんですが、これはトラモグの機能で自動生成できるので、ここでは1番拡大された画像のみ扱うこととします。
※ 自動生成は若干クオリティが落ちるので、気になる方は自分で縮小、修正してください。




z1-1.jpg
それぞれの画像ですが、p画像はそのまま見た目を表す画像です。次に出てくるa画像で指定した範囲だけが表示されます。

a画像は表示部分を指定するモノクロ画像です。真っ白の部分はそのまま表示され、まっ黒の部分は全く表示されません。間のグレーの部分は、濃さに応じて半透明で表示されます。これを利用して、ガラスやレースカーテンなどのオブジェクトを作ることも出来ます。

z画像は見た目自体には影響を与えませんが、他のオブジェクトと重なった時にどちらが前になるかを示しています。モノクロ画像で、白いほど奥にあって黒いほど手前にあるという事を表しています。ここがおかしいと、壁に埋まったり、シムが前を通るとオブジェクトに埋まったりします。




ここで、p画像は256色パレットカラーで、他の2つはグレースケールで保存する必要があります。また、p画像とz画像はアンチエイリアスなしで、a画像はアンチエイリアスをかけて保存するのが基本です。

z1-2.jpg
なぜかというと、アンチエイリアスをかけないとオブジェクトのふちがギザギザになってしまいます。なので、オブジェクトの表示範囲を決めるa画像にはアンチエイリアスをかけた方が望ましいです。
ですが、p画像にアンチエイリアスをかけてしまうと、エッジ部分に背景の黄色が混ざります。オブジェクトに黄色の縁取りがついてしまうわけです。z画像も同じことです。なので、p画像とz画像にはアンチエイリアスをかけてはいけません。




z1-3.jpg
では、次にオブジェクトで使える範囲を見てみましょう。
1タイルの大きさは、縦64x横128のひし形になっています。そして、基本的にどのオブジェクトも1タイルの幅に収めることが必要です。そうしないと、後々壁を貫通したり面倒なことになります。それを覚悟で大きくするのは自己責任で。高さは2階に被らない程度ですが、そこまで行くことはあまりないでしょう。屋外限定のオブジェクトなら画像ギリギリまで行けるかと思います。

テーブルなどの高さは64ピクセルです。なので、地面に置くように作られたものは、上に64ピクセル移動すれば丁度テーブルの高さになります。

オブジェクトは画像のどこで作っても構いませんが、最終的には公式のオブジェクトで使われている場所を基準にして、ゲーム内で表示される予定の場所に移動するのが望ましいです。なぜなら、zバッファはゲーム内でどこに置くかによって変わるので、公式と同じ場所にしておけばzバッファを流用したり比較するのが容易になるからです。
※ 公式のオブジェクトは、ゲーム内の位置と元画像の位置が同じになるように作られています。




ここでとても大事なポイントがあります。
それは、「オブジェクトを作るときは、z画像は本当の一番最後に作る」という事です。
「本当の一番最後」とは、zバッファ以外の画像を作って、さらにゲーム中で位置を確認・調整して、その位置が確定した後です。「干渉するから位置を変えよう」とかはやってはいけません、別の干渉を起こす原因にもなります。
それまでは適当に仮のzバッファを使って、干渉上等でテストします。

なぜなら、「zバッファはゲーム中で表示される場所によって異なる」ので、場所を変えるとzバッファも変わります。逆に言うと、zバッファを作ってしまったら、その時点でゲーム中での位置も決まっています。それをzバッファを変えずに位置だけを移動させると、当然干渉が起きてしまいます。

z1-4.jpg
勘違いしている方も多いと思いますが、トラモグでの位置調整は「オブジェクトを作った画像と同じ場所に移動する」為のものであって、「最終的に位置調整を行う」物ではありません
トラモグで画像と違う場所に移動すると、zバッファがずれてしまうので、結果壁への干渉などが起きます。タイルの真ん中辺りに置くオブジェクトなら壁とも余裕があるのであまり問題にはなりませんが、本棚など壁際に置くものは簡単にめり込んでしまいます。

なので、トラモグで位置調整を行うときは、取りあえず干渉を無視して望みの場所に移動して、確定したらそれを元に画像の方を移動してzバッファを作り直す、というのが正しい手順になります。

取りあえずはこんな所で。次回はzバッファについて少し書いてみる予定。


.
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。