Vehicle Damage表現に関する解説

原題 : Vehicle Damage
原文 : http://community.bistudio.com/wiki/Vehicle_Damage
翻訳時期 : 2008 Sep

あなたのビークル(乗り物)アドオンにダメージ演出を追加する方法 – チュートリアル

これがエキスパートによる決定的なやり方だととは言いませんが、全てをまとめて編集したものは他にないようなので。

このチュートリアルでの私が伝えたいこと

  • 完全にダメージを受けたモデルとして、追加するダメージ用テクスチャ
  • ダメージを受けたモデルのアニメーションセクション
  • フロントガラスのダメージの基本的なこと

このチュートリアルではお伝えできなかったこと

  • Level2または半ダメージ状態のテクスチャ
  • 防弾窓

範囲

  • 全てのArmAビークルが対象ではありません
  • O2がインストールされ、P3Dファイルを編集できる技量があること

ダメージテクスチャの追加

ステップ 1 – 面のセレクション

  • 全てのLODsとxxxView LODsの中のモデル全体を選択して、“zbytek”といセレクション名を付けてください。
  • モデルを追加する時は、モデル全体に対して“zbytek”を再定義してください。

ステップ 2 – マテリアルの定義

  • 各LODsとxxxView LODsに対して各テクスチャを確実にするには、ダメージマテリアルの定義を計画することになります
  • 各テクスチャの接尾辞と拡張子はノーマルマップを”_NOHQ.paa”、スペキュラの”_SMDI.paa”となります。
  1. テクスチャリストのテクスチャをCtrl+クリックします
  2. メニューの「FACES(面)」->「FACE PROPERTIES(面プロパティ)」を開きます
  3. 右下部のテキストエリアにマテリアルを定義する項目が表示されます

もしテクスチャが何も持ってないのであれば、マテリアル定義の作成を除き、選択していないのかもしれません。

ステップ 3 – 破壊専用のRVMAT

  • まずチェックまたは修正した全てのテクスチャを準備します。O2での再Enterは必要ありません
  • マテリアル定義を行った各テクスチャ用については、次の決まりがあります
    1. NOHQファイルの場所とファイル名
    2. テクスチャのサイズ(1,024×512とか256×256でないといけないとか)
  • 各テクスチャが使用する以下をコピーしたファイル名_destruct.rvmatを新しく作成して下さい。
texturefilename_destruct.rvmat
ambient[]={1.0,1.0,1.0,1.0};
diffuse[]={1.0,1.0,1.0,1.0};
forcedDiffuse[]={0.0,0.0,0.0,0.0};
emmisive[]={0.0,0.0,0.0,1.0};
specular[]={1.0,1.0,1.0,0.0};
specularPower=40.0;
PixelShaderID="NormalMapMacroASSpecularDIMap";
VertexShaderID="NormalMapAS";
class Stage1
{
  texture="<strong><u>XXX</u></strong>SIG_general\effects\bottom_nohq.pac<strong><u>XXX</u></strong>";
  uvSource="tex";
  class uvTransform
  {
    aside[]={1.0,0.0,0.0};
    up[]={0.0,1.0,0.0};
    dir[]={0.0,0.0,0.0};
    pos[]={0.0,0.0,0.0};
  };
};
class Stage2
{
  texture="ca\data\destruct\vehicle_destr<strong><u>XXX</u></strong>256_256<strong><u>XXX</u></strong>_mc.paa";
  uvSource="tex";
  class uvTransform
  {
    aside[]={1.0,0.0,0.0};
    up[]={0.0,1.0,0.0};
    dir[]={0.2,0.0,0.0};
    pos[]={0.2,0.0,0.0};
  };
};
class Stage3
  {
  texture="#(argb,8,8,3)color(1,1,1,1)";
  uvSource="tex";
  class uvTransform
  {
    aside[]={1.0,0.0,0.0};
    up[]={0.0,1.0,0.0};
    dir[]={0.0,0.0,0.0};
    pos[]={0.0,0.0,0.0};
  };
};
class Stage4
{
  texture="ca\data\destruct\vehicle_destr<strong><u>XXX</u></strong>256_256<strong><u>XXX</u></strong>_smdi.paa";
  uvSource="tex";
  class uvTransform
  {
    aside[]={1.0,0.0,0.0};
    up[]={0.0,1.0,0.0};
    dir[]={0.0,0.0,0.0};
    pos[]={0.0,0.0,0.0};
  };
};
  • これらの新しいファイルは、他の.rvmatファイルと同じディレクトリに配置する必要があります。
  • 例えば、メインのテクスチャがbottom.pac、rvmatがbottom.rvmatだとしたら、この新しく作ったファイルはbottom_destruct.rvmatという名称にしましょう

上の3つの太字・下線を引いたXXXのところは、都合に合わせてカスタマイズする必要があります

  • 最初のセクションは、_NOHQテクスチャと関係のあるポイントに必要があります
  • 2番目と3番目のセクションは、デフォルトのBISテクスチャと同じサイズにするべき、またはしないべきです。
    • 例えば1,024×512または2,048×1,024
    • BISがカバーするほとんどの大きさは、2,048×2,048から256×256です
  • XXXのところが削除されているか、確認してください

下の5つのテクスチャ関連ファイルを画像のように配置してください

  • メインのテクスチャ – アドオンディレクトリのルートに配置
  • ノーマルマップ(NOHQ) – effectフォルダの中
  • スペキュラマップ(SMDI) – effectフォルダの中
  • 標準のRVMAT – effectフォルダの中
  • 破壊後用のRVMAT – effectフォルダの中

ステップ 4 – Config.cpp

証明できませんが、各CfgSkeletonsのように、BISのクラスを継承する必要があります。ここでは”Car”で例示します

CfgSkeletonsの部分

class CfgSkeletons
{
  class car;
  class MyAddonSkeleton: car
    {
    isDiscrete=1;
    skeletonInherit = "";

証明できませんが、各CfgModelsのように、BISのクラスを繰り返して継承する必要があります。ここの例では”Car”を繰り返します

CfgModels partial
class CfgModels
{
  class default{};
  class Vehicle: Default
  {
    sectionsInherit="";
    sections[] = {xxxx, xxxxx, xxxxxx, xxxxxx};
  };
  class Car: Vehicle
  {
    sectionsInherit="Vehicle";
    sections[]=
    {xxxxxx, xxxxx, xxxxx, xxxxx, xxxxxx};
  };
  class MyAddonP3D: Car
  {
    skeletonName = "MyAddonSkeleton";
    sectionsInherit="car";
  }

class Car: Vehicle
{
sectionsInherit=”Vehicle”;
sections[]=
{xxxxxx, xxxxx, xxxxx, xxxxx, xxxxxx};
};
class MyAddonP3D: Car
{
skeletonName = “MyAddonSkeleton”;
sectionsInherit=”car”;
}

  • CfgVehiclesの配下に、class Damageの定義する必要があります。
    • サンプルは以下のとおりです
/// CfgVehiclesの部分
class CfgVehicles
{
	class Landrover;// 拡張クラス
	class MyAddon: Landrover
	{
		............
		............
		class Damage
		{
			tex[] = {};
			mat[] = {
				"SIG_general\effects\bottom.rvmat",
				"SIG_general\effects\bottom.rvmat",
				"SIG_general\effects\bottom_destruct.rvmat",
				.............
				............
				.............
				"SIG_general\effects\LastDamageTexture.rvmat",
				"SIG_general\effects\LastDamageTexture.rvmat",
				"SIG_general\effects\LastDamageTexture_destruct.rvmat"
			};
		};
		............
		............
  • 3つの定義グループが定義されます;
    • 最初の定義は、ダメージを受けてない時のです
    • 2番目の定義は、半分のダメージを受けている時のです
    • 3番目の定義は、完全なダメージを受けてしまった時のです。
  • 上のサンプルで、半壊・半ダメージの定義をしないのなら、ノー・ダメージの定義文をコピーして使ってください
  • 半壊を行うのなら、他の”半”rvmatファイルと参考先を2行目に試してみてください。

上と一緒に各テクスチャを用意すれば、今すぐにあなたのモデルへのダメージを確認することができます

除外 – ガラス – (記述を保留中)

  • ガラスはこれとは別の作業を行う必要があります。私は”壊れた窓”のエフェクトを作る方法について、いずれ書くつもりです

次回 – アニメーション – (記述を保留中)

  • ダメージを受けた乗り物のセクションについては、伏せさせていただきます(詳細モデルが必要不可欠ではありません)
  • “LANDCONTACTs”などのようにアニメ対象についても記述する予定です。

私が何も忘れてなければ・・・・

できあがった作品の例です

最後に : 上の文章のいくつかを単に”何も考えなしにコピペする”ことで、確かにリアリティある変更にできますが、これはまだ作業が終わってはいない状態です。自分が行っている作業について簡単に書いてますが、実際はこれから数時間もかけて最適値を探り、微調整を加えていくことが必要です。もしあなたが良いやり方を見つけ出すことが出来たら、どうかそれをみんなに教えてあげてください。Gnat 17:22, 19 June 2008 (CEST)


免責事項 : 個人的に訳した文書ですので、もし翻訳された文章により何らかの損害、不利益が発生したとしても、一切の責任は負いませんのでその点をご留意の上お読みください。また原文に記載されている権利に基づき、利用にあたっては非商用利用にのみに限定されていますのでご注意ください。