原題 : Model Config
原文 : http://community.bistudio.com/wiki/Model_Config
翻訳時期 : 2009 Feb.
はじめに
モデルのコンフィグレーションファイル(略してコンフィグ)は、P3D形式のモデルとプログラムをつなぐインターフェイスにあたるものです。
バイナライズする過程の間、テーブルの索引の処理が行われ、モデルの様々なセクションとスケルトンを使用してどのうようにアニメーションさせるかをプログラムに伝えます。
このシステムは、前作で使われていたものよりも、もっとフレキシブルになりました。というのは、全ての情報がモデルに格納され、そしてメインのコンフィグファイルの中にオブジェクトクラスを必要としなくなりました。これが意味するものは、いくつかのオブジェクトクラスは、同じモデルを使うこともできますし、モデルと分離してアニメーションを定義する必要がなくなったからです。
システムの目標は、モデルのコンフィグを設計者とアーチストの担当パートに分離することにあります。メインのコンフィグファイルへのアニメーションソースクラスの導入によってこれが行われ(設計者の担当パート)、そしてモデルのコンフィグファイルの中でアニメーションクラスを継続的に使用することとなります(アーチストのパート)。
ほとんどのモデルにおいて、データの階層構造の上位レベルで定義した基礎部分から、定義内容を継承することが可能です。階層構造の例について、次の挿絵と一緒に説明いたします。
- p:\ofp2\vehicles\model.cfg – デフォルトクラスの定義
- p:\ofp2\vehicles\land\wheeled\model.cfg – Carクラスの定義
- p:\ofp2\vehicles\land\wheeled\landrover\model.cfg – ランドローバーとしての定義
- p:\ofp2\vehicles\land\wheeled\landrover\lr6x6_3 – モデル内における、ランドローバーの正しいコンフィグ(この機能は実装されてない、そして多分今後も)
- p:\ofp2\vehicles\land\wheeled\landrover\lr6x6_mg240 – LR6x6_MG240.cfgを持つ。ランドローバーのクラスから継承し、砲塔を定義を追加
Notes[注意]
このステージでは、ユーザーのアクションと一緒にプログラムの中でモデルとアニメーションのバイナライズされる間のファイルの構文について解析します。ついにそれらはBuldozerのビユワーでプレビューできるようになりました。
モデルコンフィグは、使いやすいように名称を付けることを許可します。デフォルトのmodel.cfgによって名称がつけられた複数のモデルコンフィグのファイルは、フォルダ名の後または特定のモデルの後に名前を付けることができます。この事例においては、「モデル.cfg」と「フォルダ名.cfg」の両方があって、文字だけが分析されます。「モデル名.cfg」は他のモデルコンフィグの横に並んで分析され、その結果としてモデルは階層の中の追加されたレベルとして見えるようにすることもできます。
hmmwv.p3dと呼ばれるモデルと一緒にhumrと名付けたフォルダを例としてあげます、私たちはmodel.cfgまたはhumr.cfgそして次に出てくるhmmwv.cfg.を使うことができます。
将来におけるモデルは、プロパティ名がサポートされるかもしれませんが、モデルはモデルのコンフィグクラスの中で使われるかもしれません。いくつか疑わしいところもありますが、この機能は実装されることだろうと考えています。
モデルコンフィグのファイルは、特定のモデルに直接関連付けられることはありません、しかしながらデフォルトクラスと同様に、生成が基となるクラス定義用に使用されていました。
アニメーション関数が拡張されました。RTMアニメーションを使用する前にスクリプトを動作させることができるようになりました。さらに、異なるアニメーションを同時にコントロールできるようにするためのアニメーションコントローラーが紹介されていました。これはいくつかの戦車の砲塔のように開くことが可能になります。
モデルコンフィグとメインのコンフィグレーションファイル(以前に定義したclasses cfgModels、cfgSkeletonsとAnimations)は、古いものから新しいシステムにスムーズに変更するよう一緒に操作します。モデルコンフィグとメインのコンフィグレーションファイルの両方は、同じモデルとして定義し、モデルコンフィグが優先されます。
Segments(セグメント)
cfgModels
このセグメントでは、各モデルの全てのプロパティを定義します。クラスネームはモデル名に一致します。
ここでは、あなたはモデルのセクションで定義し、それらのスケルトンのアニメーションを使用します
//ベースクラスを宣言
class CarAnimations
{
class IndicatorSpeed;
};
class CfgModels
{
class Car; //ベースクラスを宣言
class Vodnik: Car
{
sectionsInherit = "Car"; //カークラスの全てのセクションを継承する
//新たしいセクションの追加.
sections[] =
{
"section1"
};
skeletonName = "Vodnik"; //Vodnikスケルトンを使用
class Animations: CarAnimations //生成されたアニメーションを継承する
{
class IndicatorSpeed: IndicatorSpeed //最大値を再定義する
{ //速度計用
maxValue = 40;
};
};
};
};
cfgSkeletons
ここは、モデルとボーン用のスケルトンを定義し使用できるようにするセグメントです。
class CfgSkeletons
{
class Car; //基礎となるクラスを定義
class Vodnik: Car
{
skeletonInherit = "Car"; //カークラスから全てのボーンを継承
skeletonBones[] = //2つの新しいボーンを追加。
{ //ボーン2の移動は、ボーン1にリンクされる
"bone1", ""
"bone2", "bone1"
};
};
};
Animations
このセグメントでは、cfgModelsクラスの部分とモデルによって使用された全てのアニメーションの定義について述べます
class Animations
{
class FrontWheelR
{
type = "rotationX"; //アニメーションのタイプ
source = "wheel"; //インプットが供給するコントローラー
selection = "pravy predni"; //使用するスケルトンボーンの名称
axis = ""; //モデルにおける軸の名称
memory = true; //この軸はモデルのメモリレベルで定義されているものか、そうでないのか
sourceAddress = "loop"; //アニメーションをループさせるか、そうでないか
minValue = 0; //モーションする範囲の最小値
//すなわち、アニメーションのフェーズ0としてコントローラーに入力
maxValue = 1; //モーションする範囲の最大値.
//すなわち、アニメーションのフェーズ1としてコントローラーに入力
angle0 = 0; //開始時のアニメーションの角度
//(アニメーションフェーズ0から見て)
angle1 = "rad -360"; //終了時のアニメーションの角度
}; //(アニメーションフェーズ1から見て)
};
アニメーション・ソース
アニメーションフェーズのアニメーション用のインプットが供給するコントローラー。これらのコントローラーはアニメーションクラスの中で定義され、パラメータの数値が使用されます。メインコンフィギュレーションファイルの中でカスタムコントローラーを定義することも AnimationSourcesクラスを使用することも可能です。
コントローラーは、*とマークされて名前づけられ、乗物の砲塔コンフィグによって自由に定義されました。ここでは、ArmAの乗り物で普通に使用された名称で表記しています。
Name (名称) | 説明 | Simulation Classes |
---|---|---|
altBaro | 気圧による高度 | Aircraft |
altRadar | レーダーによる高度 | Aircraft |
gear | ビークルの車輪 | Aircraft |
horizonBank | ビークルのバンク角 | Aircraft |
horizonDive | ビークルのダイブ角 | Aircraft |
vertSpeed | 垂直速度 | Aircraft |
aileron | 主エルロンをコントロールする表面 | Airplane |
aileronB | 開くエルロンによるスピードブレーキの底部 | Airplane |
aileronT | 開くエルロンによるスピードブレーキの上部 | Airplane |
aoa | アタックの角度 | Airplane |
elevator | エレベーター | Airplane |
flap | フラップ | Airplane |
rotor | ローター | Airplane |
rudder | ラダー | Airplane |
speedBrake | スピードブレーキ | Airplane |
direction | ビークルの方位 | Any |
fuel | 燃料レベル | Any |
oil | 油温計 | ? |
gmeter | 重力 | Any |
rpm | ビークルのエンジン回転数。回転計で使用する | Any(except Ship) |
speed | ビークルのスピード。スピード計で使用する | Any |
time | タイマーベースの入力 | Any |
clockHour | 現在の時間(時) | Any (including e.g. Weapon) |
clockMinute | 現在の時間(分) 時間計clockHourと分離 | Any (including e.g. Weapon) |
clockSecond | 現在の時間(秒)毎秒慎重に動き、clockHourからは独立する | Any (including e.g. Weapon) |
damage | 現在のダメージレベル(0が健康、1が破壊) | Any |
user | ユーザーが定義したスクリプトで制御するアニメーション | Any |
direct | ユーザーのように、しかし直ちにではない、スムースではない変化 | Any |
pedals | ペダル | Bicycle |
damper | ビークルのサスペンション。現在のところ、y方向にのみ可動する | Car, Tank, Aircraft, Motorcycle |
FrontDamper | 前輪のサスペンション。 | Car? |
BackDamper | 後輪のサスペンション。 | Car? |
drivingWheel | ハンドル、方向舵の方位。ステアリングホイールとステアードホイールに使用する | Car, Ship, Motorcycle |
*mainGun | メインの銃 | Car, Tank, Helicopter, Ship |
*mainTurret | メインの砲塔 | Car, Tank, Helicopter, Ship |
wheel | 通常の車輪。前進とターン | Car, Airplane, Motorcycle |
noseWheelTurn | Airplane | |
compassArrow | コンパスの矢印 | Compass |
compassCover | コンパスのカバー | Compass |
compassPointer | コンパスのポインター | Compass |
rotorH | 水平ローター | Helicopter |
rotorV | 垂直ローター | Helicopter |
rotorHDive | 水平ローター(チルト) | Helicopter |
rotorVDive | 垂直ローター(チルト) | Helicopter |
support | サポートスタンド | Motorcycle |
*hatchCommander | コマンダーのハッチ | Tank |
hatchDriver | ドライバーのハッチ | Tank |
*hatchGunner | ガンナーのハッチ | Tank |
*obsGun | オブザーバー、コマンダーの銃 | Tank |
*obsTurret | オブザーバー、コマンダーの砲塔 | Tank |
reload | リロードする時の移動 | Weapon |
revolving | 発砲する時の移動 | Weapon |
turretDir | 砲塔の方位 | Tank |
wheelL | キャタピラの左 | Tank |
wheelR | キャタピラの右 | Tank |
scudLauncher | スカッドランチャー | Scud |
flag | 旗ポールの0から1まで | Flagcarrier |
アニメーションのタイプ
この表は、あなたがアニメーションクラスとして使用することのできるアニメーションタイプです。
Type (タイプ) | 説明 |
---|---|
rotation | 回転、円形の移動 |
rotationX | x軸へ固定した回転 |
rotationY | y軸へ固定した回転 |
rotationZ | z軸へ固定した回転 |
translation | 軸に沿った移動 |
translationX | x軸へ固定した移動 |
translationY | y軸へ固定した移動 |
translationZ | z軸へ固定した移動 |
hide | 一度与えた分岐点に到着したら非表示??? |
direct | 回転もしくは/及び移動(モデルの軸としてセクションを使用することなしに) |
アニメーションのプロパティ
この表は、指定されたアニメーションタイプをベースとして使用することが期待される各々定義されたアニメーションクラスがプロパティ(またはエンティティ)です。
例)もしあなたが指定するアニメーションタイプが’rotationX’だとしたら、あなたはアニメーションプロパティとして’angle0′ と ‘angle1’を指定しなくてはなりません。
プロパティ | 説明 | アニメーションのタイプ |
---|---|---|
source | 入力用に使用されるコントローラー | Any |
selection | スケルトンのボーン | Any |
axis | モデルの軸 | Any |
begin | モデル軸の方位の開始地点。 | Any |
end | モデル軸の方位の終了地点。開始の軸と一緒に使用することができる | Any |
memory | オプショナル(デフォルトはTrue値)メモリレベルの軸、あるいはそうでないか | Any |
animPeriod | アニメーションサイクル(秒単位)ユーザーコントローラーでのみ使用される | Any |
minValue | モーションの範囲の最小値。アニメーションフェーズが0の時にコントローラーに入力 | Any |
maxValue | モーションの範囲の最大値。アニメーションフェーズが1の時にコントローラーに入力 | Any |
minPhase | アニメーションフェーズの最小値。コントローラーが0の時にアニメーションがフェーズ(動き出す?)する | Any |
maxPhase | モーションの範囲の最大値。コントローラーが1の時にアニメーションがフェーズ(動き出す?)する | Any |
sourceAddress | アニメをループさせるかどうか。閉塞(デフォルト)、ループ、ミラーの3つの異なるモードがある。 | Any |
angle0 | アニメーションフェーズが0の時のアニメの開始角度 | Rotations |
angle1 | アニメーションフェーズが1の時のアニメの終了角度 | Rotations |
offset0 | アニメーションフェーズが1の時のアニメ開始のオフセット | Translations |
offset1 | アニメーションフェーズが1の時のアニメ終了のオフセット | Translations |
hideValue | 非表示の閾値 | Hide |
axisPos[] | モデルにおける軸の位置 | Direct |
axisDir[] | 軸の方位、向き(ベクトル) | Direct |
angle | 回転角の量! | Direct |
axisOffset | 変形に使用 | Direct |
AnimationSources(アニメーション・ソース)
これはモデルコンフィグのパートではありません、しかしメインコンフィギュレーションファイルのパートです。このクラスは、あなたが新しいユーザコントローラーを定義すること、または既に存在するコントローラーを選択してプロパティを改造することを許可しています。
カスタムコントローラーの定義は、いくつかの異なるアニメーションのためにひとつのカスタムコントローラーを使うことが可能になります。もしアニメーションのソースパラメータが定義されてなければ、プログラムはこのクラスの中の同じ名前で定義されているカスタムコントローラーを見せるようになります。
このクラスで使用する既に存在するコントローラーの上に被せることもできます。ですがこのケースではかなり注意するようにしてください。カスタムコントローラーは、オリジナルのものを隠してしまいますし、後で戻せなくなります。オーバーライドの機能を使用する際のソースパラメーターの記述方法は、3番目の事例の所で読み取ることができます。
class AnimationSources
{
class MachineGun
{
source = "reload"; //このコントローラーの定義のために使用されたコントローラ
weapon = MachineGun25W; //weapon class名においてリロードコントローラーを
}; //指定するケース
};
class AnimationSources
{
//ソースのパラメーターは定義しない、またはsource = Door1で
//定義したアニメーションによるDoor1としたアニメーションを使用
class Door1
{
source = "user"; //コントローラーはユーザーアニメーションとして定義される
animPeriod = 1; //アニメをする期間は、このコントローラーによって使用される
initPhase=1; //オブジェクトが生成された時の間隔
};
};
class AnimationSources
{
class wheel
{
source = "::wheel"; //既にある車輪のコントローラーにオーバーライド
};
};
Example(事例)
CfgModels(攻撃ヘリでの作業)の説明の項で、補足説明と事例と一緒にcfgModelsとcfgSkeletonsがどういうものなのか、参照することができます。
免責事項 : 個人的に訳した文書ですので、もし翻訳された文章により何らかの損害、不利益が発生したとしても、一切の責任は負いませんのでその点をご留意の上お読みください。また原文に記載されている権利に基づき、利用にあたっては非商用利用にのみに限定されていますのでご注意ください。