2012/8/19 日曜日

建物を作ろう 上級者編 その? 廃墟の表現(BISの廃墟の流用法)

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 14:08:02

今回のファイルはこちら

建物を作った後、廃墟のモデルを用意するのは面倒なものです。
そこで、最も簡単に廃墟に置き換わる方法を解説します。
弄るのはconfig.cppだけ。
Houseの継承の部分を少し書き換えて、DestructionEffectsを利用できるようにします。
class HouseBase;
class House: HouseBase
{
   class DestructionEffects;
};

あとは建物のクラスに以下を追記します。

 class DestructionEffects: DestructionEffects
 {
   class Ruin1
   {
   smulation = “ruin”;
   type = “3dモデルのパス“;
   position = “”;
   intensity = 1;
   interval = 1;
   lifeTime = 1;
   };
 };

BISのモデルを流用して3dモデルのパスの部分に書けば、それだけでOKです。
CfgPatchesのrequiredAddonsにCABuildingsを追記しましょう。
(廃墟モデルを自作する場合は廃墟のクラスを別に作成する必要があります)

d6
こんな感じ。

では、作った建物と似た大きさのBISの廃墟はどうやって探せばよいか?

→CABuildingsの廃墟ビューワ―を作ってみたのでご覧あれ。
d5
Flagの位置に廃墟が出て、W、Sで切り替わります。
Flagの近くに作成中の建物を置いたりして、似たような大きさの廃墟を探してみるのがよいかと。
p3d名の一部をメモって、test.txtで検索すると便利と思います。


補足:
ミッションフォルダの中のExtract_Class_Model.plは、config.cppの中からクラス名とp3dのパスをミッション中のスクリプトで使う形に加工してtest.txtに出力するperlのスクリプトです。perlはこういうとき便利ですねぇ。
多分Cabuilding2でも動くと思うので、改造はご自由に。

廃墟ビューワーはこちら

2012/8/18 土曜日

建物を作ろう 上級者編 その? ガラスのダメージ表現

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 10:56:41

今回のファイルはこちら

今回はガラスのダメージ表現を考えます。
前回まで使っていた青いドアをガラス製にします。

作業手順は以下のようになります。
?fireジオメトリのrvmatをガラス用に変更
?モデルにHitpointLODを追加
?ドアにガラスのテクスチャ、rvmatを貼る
?model.cfgのsectionsにドア名を追加、model.cfgとconfig.cppの追記

以下詳細

?
Fire geometry LODで青いドアの当たり判定モデルを選択しEボタンでFace propatiesを選択し、Materialで前回選択したironplateからca\data\penetration\glassplate.rvmatに変更します。
これで弾丸が貫通し、撃つとガラスの割れる音がします。

?
d3
HitPointsLODを追加します。
新しいLODを作り(右クリック->new)、右クリックでHitPointsを選びましょう。
0LODから青いドアのモデルをコピペし、shift+Dで1つの点に変換します。(点はドアモデルの中央に位置します)
door_bというセレクション名をglass1に変更します。

?
0LODの青いドアにca.pboの壊れたガラスのテクスチャを貼ってみます。
d1
front viewにてaボタンを押してテクスチャ編集モードになり、右クリック→Load textureでCA\data\Destruct\destr_glass_buildings_full_ca.paaを選び、ドアの大きさにドラッグします。
再びaボタンでテクスチャ編集モードを抜け、ドアを選択した状態でBボタンを押し、テクスチャを適用します。
d2
ブルドーザで見るとこんな感じ。

貼り終わったら再びドアを選択し、EボタンでFace propatiesを選択し、Textureで#(argb,8,8,3)color(0.4,0.4,0.4,0.3,CO)と書きます。
Materialにはtest_building\glass.rvmatを指定しておいてください。壊れる前のガラスのrvmatです。
Applyを押すと先ほど貼ったガラスが割れたから、ただの半透明な見た目に変わります。
これで、「ガラスが割れたテクスチャのマッピング(テクスチャの位置情報)を持っているドア」が出来ました。

?
configでモデルの一部をガラスとして扱う関係で、model.cfgのsectionsにdoor_bを追加する必要があります。
sections[]={“door_b”,”door_r”}; ← 一応赤いドアも追記

ガラスは割れたら当たり判定ごと消えるようにします。
ダメージを負ったら消えるようにする」には、config.cppmodel.cfgの連携が必要です。

まずはmodel.cfg内にclass glass_destruct、class door_b_destructを定義しました。
source=“Hit_door_b”;はこれからconfigで追記する定義になります。

次にconfig
class Damageでダメージテクスチャのrvmatを定義。(割れる前、半壊、全壊の3つのファイルが1セットになります)

class HitPointsにclass Hit_door_bを追記。
Hit_door_bのarmor = 0.0001;はこのクラスのarmor値に0.0001を掛けたものを表します。つまり500×0.0001で0.05です。
銃弾が数発当たったらダメージテクスチャに切り替わるように調整してみました。
建物によって異なる値になると思いますので、トライアンドエラーしましょう。

class AnimationSourcesにclass Hit_door_bを追記。
これで「消えるアニメ」がhitpointsに関連付けられます。

ガラスのダメージ表現は複雑なので、model.cfgとconfig.cppの関係を図にしておきます。
d4

追記:UserActionsのOpenDoorのpositionはdoor_bにしました。これでdoor_bがダメージを受けて消えた後、アクションメニューも一緒に消えてくれます。

ガラスのダメージは少し手間ですが、一度自分の建物を作ってしまえばあとは継承だけで楽になりますので、頑張りましょう。

2012/8/16 木曜日

建物を作ろう 上級者編 その? config

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 15:58:39

前回の完成ファイルを見ながら説明を読んでください。

configはCfgPatchesでアドオン名と依存関係を定義
CfgVehiclesで建物のクラス、アニメの動作時間等を定義し、アクションメニューでドアが開くようにします。

Cfgvehicleについて
クラスはHouseから継承します。
animated = 1;はよく分かりませんが、デフォルトは1のようです。
まだ破壊モデルの定義はしていませんが、破壊モデルに置き換える準備として、名前にLand_とつけておきます。
今回のモデルは class Land_test_building としました。
class AnimationSourcesでドアのsourceがuser定義であること、
ドアが動く秒数(animPeriod)が2秒であること、ドアは初めに閉じられていること(initphase=0)を定義します。

class UserActionsではドアのアクションメニューを定義します。
開けるアクションと閉じるアクションが必要です。
class OpenDoor、class CloseDoorを定義しました。
手順省略のため、アクションメニューが出る点(position)は、ドアの名前かドアの回転軸の名前にします。
今回は回転軸にしました。青いドアは上にスライドするので、アニメ後にアクションメニューからプレーヤから離れる恐れがあるためです。

建物を作ろう 上級者編 その? アニメ

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 11:36:55

完成済みファイルこちら

モデルがあるフォルダにmodel.cfgという名前のファイルを用意します。
model.cfgはclass CfgSkeletonsclass CfgModelsに分かれます。
CfgSkeletonsは骨を定義します。
”子の骨”と”親の骨”の2つの要素で成り立っています。
分かりやすく定義するなら、以下のようになります。
skeletonBones[] ={“頭,”首” , ”首”,”上半身”};
頭と首で1セットです。首の親は上半身です。上半身が回転すると首と頭も追従して回転するのです。
(skeletonの概念について今はピンと来なくても、慣れれば分かるようになると思います。)
skeletonInheritは骨の定義を親クラスから受け継ぎます。今回はDefaultから受け継ぎます。
初心者はBISの定義を親として受け継ぐのが無難です。

CfgModelsはアニメはモデルを構成するmemoryポイントなどを定義します。
クラス名は3dモデルと同じ名前でないと動作しません。
sectionsはmemory LODで定義した光点や乗り物の乗車位置などを書きます。この建物には明かりが無いので、空でOK。
sectionsInheritは親クラスのmemory LODの名前を引き継げます。空でOK。

skeletonNameはCfgSkeletonsで定義した骨の名前を書きます。
class Animationsでアニメを定義します。
type=”translation”の場合、axisに沿って平行移動します。
memory=1にすることでaxisの大きさ(2点間の距離)を基準に動きます。
offset1=1;がaxisの大きさ1つ分ということです。
type=”translationX”あるいは”translationY”の場合、X軸/Y軸に動きます。
さらにX軸/Y軸の動きでaxisを指定しない場合、単位はメートルになります。
offset1=1;が1mということです。
(MH53の掃海具の牽引ロープはこれを使っています。建物ではまず使わないでしょう。)

type=”rotation”の場合、axisを軸に回転します。
type=”rotationX”あるいは”rotationY”の場合、X軸/Y軸に沿って回転するため、axisは不要(axis=””;)です。
sourceAddress=”clamp”;にしていますが、sourceAddress=”loop”;にすると回り続けます。
プロペラの回転アニメはloopです。

t9
ブルドーザーを起動し、ミドルマウスクリックでアニメの選択、マウスホイール回転でアニメをプレビューすることができます。

建物を作ろう 上級者編 その? モデル作成

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 10:46:46

他の解説に行く前に、まずモデルを作ります。

見た目のLOD
t1
こんなモデルを用意しました。ドアを以下のように作ることにします。
赤:木製のドア、回転式  壊れたら消失
青:金属製のドア、スライド式 壊れたら消失
t2
ちなみに色は面を選んでEボタンを押し、このように塗りました。単色ならテクスチャ不要なのです。
#(argb)color(*,*,*,*)の4つ目の値は透明度です。1より小さいと半透明になります。


以下で当たり判定であるジオメトリ/fireジオメトリを作りますが、面が長方形の単純な形のみで構成されているため、
モデルごとコピーしていますが、複雑な形のモデルでは、辺り判定用の単純な形を別に用意する必要があります。

重さのLOD
t3
上で作成した0LODを右クリック→duplicateでコピーして、1LODを作ります。
1LODをさらに右クリックしてプロパティでジオメトリを選びます。すべての面を選択して重さを1000(1t)にします。
ジオメトリは当たり判定と重さです。建物なので戦車にぶつかっても吹っ飛ぶことはありませんが、乗り物だと物理エンジンにも作用します。

当たり判定のLOD
t4
0LODからでもジオメトリからでもよいので、同じようにduplicateし、fireジオメトリを作ります。
ドアの面を選んで?で解凍したP:\CA\data\Penetrationフォルダの中から、赤はwood、青はironplateを選びます。
壁の部分はrvmat無しですが、その場合はデフォルトで小石のかけらが破片で出ます。

t5
0LOD、ジオメトリ、fireジオメトリのドアそれぞれに名前をつけます。
ジオメトリ、fireジオメトリはstructure->find componentsで全ての面に名前をつけておきます。こうしないと辺り判定が動きません。

影のLOD
t6
今度は0LODをコピーしてshadow volumeを作ります。
全ての面を選択し、structure->trianglateで三角面に変換し、Uボタンで平滑面にします。
影LODは全ての面が閉じており、三角のみの面で構成され、平滑面でないと正常に働きません。

描画負担軽減のLOD(無くても動作します)
shadowvolumeをコピーして、viewジオメトリを作りましょう。
これは手前にこの建物があるとき、奥のオブジェクトを描画しないようにする機能です。
これがあるとゲームが軽くなります。影と同じく三角面で構成される必要があるようです。
structure->find componentsもしておきます。

ここまで作成したLODの全てのドアに、door_r、door_bと名付けておきます。

動作の基準点のLOD
右クリック→newで新しいLODを作り、右クリックでmemoyLODを作成します。
memoryLODとは、アニメの軸や光源、音などの基本座標を定義する場所です。

t7
0LODに戻り、青ドア、赤ドアの軸となる4つの点をctrl+cでコピーし、memory LODにペーストします。

t8
2つの軸に名前をつけましょう。それぞれdoor_r_axis、door_b_axisとします。

次回はアニメを定義します。

追記:
visitorで島に建物を置く場合、ジオメトリのプロパティにいくつか追記する必要があります。
ARMAのサンプルモデルを開いて参考にしましょう。バイナライズされていないのでo2で直接開くことができます。
世界のアドオンメーカーはほぼ全員、このモデルを参考にしていると言ってよいでしょう。
サンプルモデルはこちら
window->named propatiesでプロパティ書き込み画面が出せます。
t11

2012/8/15 水曜日

建物を作ろう 上級者編 その? 作成までの準備

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 19:26:04

今回はARMA2に向けた、より上級者向けの建物の製作法を紹介します。
(全てフリーソフトで製作可)
この内容は他のアドオンの制作方法と共通しています。

まずは準備として、BISのファイルを解凍します。

ここからExtractPboとPboDllを落とします。
PboDllを解凍するとDePbo.dllがあるので、これをExtractPboのフォルダに入れます。
ArmA2のインストールディレクトリ\AddOns\ca.pboをPドライブにコピーしてから右クリックし、ExtractPbo.exeに関連付けておきましょう。
これでpboファイルをダブルクリックするだけで解凍できるようになります。(Ca.pboを解凍しましょう。)
Ca.pboは爆発に使われるテクスチャや、銃弾の貫通定義ファイル、スクリプト等が入っています。建物作成時に流用するファイルも多数含まれます。

最低限の建物製作法は以前に解説しました。
島に置くだけならrvmatすら必要ありません。当たり判定、重さ、見た目のテクスチャだけでOK。

さて、ARMA2の建物で出来ることは・・・
-RVMAT
・凹凸、反射の表現
・銃弾の貫通の定義
・銃弾着弾時の破片のエフェクト(木クズや金属片)
-model.cfg
・扉などのアニメ、ダメージによるモデルの一部消失の表現
-CONFIG
・名前、アニメの動作時間や島に置いた時のアイコンの定義など

次回以降、上記を解説していきます。

2008/10/12 日曜日

建物の破壊例とミラー・窓の例

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 21:38:42

建物の破壊によるモデル置き換え例と窓・ミラーの作例です。
ファイルの中に説明があります。
本格的な建物を作成したい方、参考にしてください。

ダウンロード

2007/8/16 木曜日

建物を作ろう? config

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 20:48:26

これまでに0LODとジオメトリを作成しました。
これさえあれば最低限OFP(Arma)に出すことができます。

ではconfigの解説をば。
config.cppをメモ帳などで開いてください。

上のほうから、
#define TEast 0
などと書いてあるのは、例えばconfigにSide = TEastと書いたらSide = 0とconfig側で認識するという意味です。
分かりやすくするための変数みたいなものです。
config作成ときの慣例なのでこれらの行をコピペしておくと楽です。

CfgPatchesの中身はアドオン名、定義するユニット、武器、弾薬、要求するバージョン、要求するアドオンを記述します。
もし要求するバージョンよりゲームが古い場合はゲーム起動時にエラーメッセージが流れます。

CfgVehiclesから先が乗り物の定義です。
ます、 class All {};から順番に、クラスを継承していきます。

日本語で分かりやすく説明すると、全ての定義の基本(All)→建物の基本定義(Building)→特徴を持った建物の定義(etc・・)→…
と、まるで生物の進化のように下のほうへ流れていきます。一番下がもちろんこれから定義するMyhouseになります。

class myhouse: TargetGrenade   の中身が建物の持つ特徴になります。

vehicleClass=”MyAddon”はエディット画面で選択するときのカテゴリです。

model=”\mybuilding\myhouse”;はモデルへのパス。拡張子を省略しましたが、\mybuilding\myhouse.p3dでもOkです

armor=100;は耐久値。

scope=2;はエディット画面でも表示されるという意味です。全てのオブジェクトがエディット画面で出せないのは、こういう定義で変更しています。

displayName=”myhouse”;はエディット画面で表示される名前です。

その他に様々な属性をアドオンに定義することができます。

・最後にArma専用のノーマルマップとスペキュラマップについて。

ノーマルマップ=テクスチャにより光源依存の凹凸を表現。バンプマップの進化系(?
スペキュラマップ=テクスチャにより光の反射の強弱を設定。ピンクから白に近づくにつれ反射が強くなる。

CfgTextureToMaterialでどのテクスチャを、どのマテリアルに適応するか定義し、
CfgMaterialsでノーマルマップ用、スペキュラマップ用のテクスチャパス、
光加減等を定義します。
これらは非常に細かい設定が可能なようですが、定義1つ1つまでは私の勉強不足で分かりません。

ノーマルマップ用のテクスチャをnohq、スペキュラマップ用のテクスチャをsmdiと名づけるのが慣例となっているようです。
ノーマルマップはhouse.paaにGIMP2のノーマルマップフィルタをかけただけ。
スペキュラマップは窓の部分を明るくさせてピンク色のレイヤーに「スクリーン」で重ねました。

注:現在建物でのスペキュラマップがうまく動いていない模様。分かり次第追記します。

建物を作ろう? ジオメトリと影

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 20:18:35

ど真ん中に家を作ってしまいました。
このままArma(OFP)に出すと地面に埋まってしまいます。
・Yを押してY軸を固定し、少し上に動かします。
houseup.JPG

いよいよジオメトリを作成します。
・右のほうに0.000と書かれたLODを管理する窓があります。0LODを右クリックし、duplicateしましょう。
1.000LODに全く同じものがコピーされます。
0LODは最も距離が近いときに表示される3Dモデルです。LODの数値が増えるほどポリゴン数の少ない3Dにします。
LODの数値は自分との距離に関係します。つまり0LODは自分から最も距離が近いときに表示されるポリゴンです。
9999LODなんて作ってもおそらくゲーム上では反映されないでしょう。バランスが大事です。
dup.JPG

1.000LODを右クリックし、プロパティーからGeometryを選んでください。
ジオメトリLODをダブルクリックして選択します。

ジオメトリは単純な形しか動作しません。
なのでここでは屋根を消してしまいます。

そしてモデルを選択してください。
左下のMassに重さを入力します。もし「Mass」が表示されていなかったら、alt+Mで表示させてください。
物理エンジンに関わる部分です。重くしましょう。ここでは10000にしてみました。Applyを押します。
mass.JPG
灰色の同じ大きさの四角が出ましたね。この四角の大きさが相対的な重さを示しています。
点ごとに重さを設定して重量バランスを変えることができます。乗り物に重要になります。が、ここでは割愛します。

ジオメトリに名前をつけます。
Structure→Topology→FingComponentsを選択してください。名前が自動でつきます。

*注意*
ジオメトリに使用するモデルは単純でなければなりません。立方体が無難。
複雑・面が閉じられていないモデルは動作しません。
また、名前を付けていないものもジオメトリとして動作しません。

・次に影LODを作成します。(Arma専用セルフシャドウLOD)
0LODをまたduplicateしておきます。
それを右クリックしてresolutionの値を10000にします。
モデルを全選択して、
Structure→trianglateで面を三角にします。

・0LODのプロパティに値を追加します。これはwindowsのレジストリの値を書くのを想像すると分かりやすいかも。
lodnoshadowを1にします。
10000LODは逆にlodnoshadowを0に。
lodno.JPG
・Myhouse.p3dとしてmybuildingフォルダ内に保存します。

建物を作ろう? モデリング+テクスチャその2

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 18:41:35

ただの四角じゃさびしいので屋根を作りましょう。
・frontviewで左上の点だけ選択します。
hasi.JPG

・ctrl+Cでコピーし、ctrl+vでペーストします。選択した点がまったく同じ座標にコピーされてしまうので、
右クリックを押しながらまんなかあたりに移動させます。
ido.JPG

・(使わなくても選択できますが)3D視点を使って片方の屋根になる予定の点を選択します。
alt+右クリックで視点の回転、alt+左クリックで視点の移動ができます。これでグリグリ動かしてうまく選択しましょう。
3d.JPG

・F6で面を貼ります。反対側も貼りましょう。
もし面を貼ったのに3d視点で面が見えないときは、面が逆になっています。Wを押して反転させましょう。
hanten.JPG

・ここで、立方体の上の面が、(屋根があるので)不要になりました。
選択してDボタンで面を消去しましょう。
d.JPG

・屋根の形を整えましょうか。
Left視点でXを押し、X軸を固定、右クリックしながら点を移動させます。この技はY軸、Z軸共に共通です。
yane.JPG

・あとは屋根を選択してテクスチャを貼ると。
yanetex.JPG
これで見た目だけ完成。
house.JPG
…テクスチャ適当すぎた。

次ページへ »

HTML convert time: 0.279 sec. Powered by WordPress ME