2008/8/22 金曜日

車を作ろう? ジオメトリ及びcfgmodels

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 16:39:17

ARMAのアドオンでは必須のアニメの定義を扱います。

まず準備として、memoryLodに点を置きます。
o2で新規にLODを作成し、propatiesでMemoryを選択します。このMemoryLODは点のみを置く必要があります。
個々の点はアニメの軸や光の位置、銃口の向き等、機能を働かせるのに必要な基準点になります。
このLODにBISのサンプルモデルの車等から点をコピペしておくと楽です。
点にはそれぞれ名前がついており、機能を持った点のほとんどはチェコ語で書かれています。
bisのwikiに英訳があるので詳しく知りたい方は参考にしましょう。
ArmA:_Selection_Translations

サンプルモデルのmemoryLodを見れば大体意味が分からなくても機能がわかるのですが、
重要な点を一つ。Pは右、Lは左を意味します。
例えば”P svetlo”は右のライト、”konec P svetla”は右のライトの終端を意味します。”zamerny”はカメラの中心点です。
“pos driver”は乗り込む際、get in ○○ as driverとアクションメニューに表示される点です。
これらは全て自分で定義することが出来ますが、非常に面倒なのでコピペしたほうが楽です。それらの点に加え自分の定義する点もあとで置いてゆきます。

サンプルモデルからmodelLodにコピペしたら位置を調整します。
car42.JPG

最初に車の走行に必須の定義を行いますがその前にジオメトリを作っておきます。
ジオメトリに関しては建物を作ろう?で解説しています。
今回私の車のジオメトリはARMAのサンプルモデルの車のジオメトリをそれっぽく整形しました。
car43.JPG
上の図で、私は左前輪のセレクションにdamp_flと名付けました。(任意の名前でOK)
dampとはダンパー、つまり車のショックを吸収するやつです。OFPで戦車のキャタピラが地面に合わせて傾いていましたが、あれと同じ挙動をします。
ほかの3輪も似た名前をつけておきます。

MemoryLodに戻ります。
それぞれのタイヤの位置、地面に接する部分に↑で名付けた名前と同じ名前の点を一つずつおきます。
car44.JPG
この点が車のダンパーの基準点になります。

今度はモデルのLODです。作成したタイヤを選び、それぞれにタイヤの名前をつけます。
私は左前輪にleft_front_wheelと名付けました。
car45.JPG

ここまできたらいよいよmodel.cfgの作成です。
新規テキストを用意し、model.cfgと名付けてください。それをメモ帳等で開きます。
model.cfgの中にはCfgSkeletonsとCfgModelsを定義していきます。
Cfgskeletonは文字通り骨を定義します。人間で言うと、肩を動かしたら腕が一緒に動きますよね。そんな関係を作ります。
説明に必要な部分だけ下に書きます。実際は他の定義が必要です。

class CfgSkeletons
{
class Vehicle;
class Car: Vehicle {};
class car_stepvan : Car
{
isDiscrete=1;
skeletonInherit=””;
skeletonBones[]=
{
“damp_fr”,””,
“right_front_wheel”,”damp_fr”
};

—解説—
isDiscrete=1;はとりあえず1にしておきましょう。私は意味がワカランです。
skeletonInheritは骨の定義を継承できる?らしいのですがエラーが出るのでこのように書きました。
“damp_fr”,”” ←これは、damp_frは単独でアニメするという意味です。
“right_front_wheel”,”damp_fr” ←これは、右前輪が、damp_frと対(ボーンの関係)になって動くという意味。
———-

class CfgModels
{
class Vehicle;
class Car: Vehicle {};
class car_sedan: Car {};
class mycar : car_sedan
{
sectionsInherit=””;
sections[]=sectionsにはmemoryLodの点以外の、稼動するセレクションを定義します。(ここではダンパーと右前輪)
{
“damp_fr”,”right_front_wheel” 
};
skeletonName=”car_stepvan”;
これは上記で定義した骨をアニメに使いますよ、という意味です。
class Animations {
class FrontWheelR
{
type = “rotationX”;
source = “wheel”;
selection = “right_front_wheel”;
axis = “”;
axisは軸を意味するのですが空欄になっています。これは、type が “rotationX”だからです。X軸を軸にするので、定義する必要がありません。

memory = 1;
sourceAddress = “loop”;
minValue = 0;
maxValue = 1;
angle0 = 0;
angle1 = “rad -360″;
普通角度は円周率の値で定義するのですが、radを使用することで角度で定義できます。360はつまり1回転です。
};
class FrontWheelRTurn
これは前輪の横回転。曲がるときの動き。
{
type = “rotationY”;
source = “drivingWheel”;
selection = “right_front_wheel”;
axis = “”;
memory = 1;
sourceAddress = “clamp”;
minValue = -1;
maxValue = 1;
angle0 = “rad 25″;
angle1 = “rad -25″;
};
class Wheel_Damper_rf
ダンパー。minValueがマイナスです。地面に接していないときにタイヤがその値まで沈み込みます。ダンパーとタイヤは”骨”なのでタイヤもその動きに追従します。
{
type=”translationY”;
source=”damper”;
selection=”damp_fr”;
axis=””;
minValue=-0.090000;
maxValue=1;
memory=1;
};
};
};

model.cfgのサンプルを置いておきます。
model.cfg

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード TrackBack URL

コメントをどうぞ

HTML convert time: 0.155 sec. Powered by WordPress ME