2008/9/2 火曜日

車を作ろう? 完成

Filed under: Armaアドオン製作支援,  ─車編,アドオン — gachopin @ 15:34:12

これで完成です。
アドオンとアドオンフォルダ両方を含むzipを用意しました。
参考にしてください。

mycar.jpg

mycar.zip

車を作ろう? 車体のダメージ、タイヤのダメージ

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 14:43:19

車体とタイヤで、ダメージでテクスチャの色が変わり、
タイヤを撃つと機能させなくすることができます。

まず、hitpointLodに車体周りに点をおき、body_hitと名付けました。
タイヤはleft_back_wheel_hit、right_back_wheel_hit 等4つ名付けました。
car51.JPG

モデルLodで、車体にダメージがあったときに変更する部分をbodyと名付けました。
タイヤは既にアニメ用に名付けたものを流用します。
car52.JPG

壊れたときのテクスチャはBISのテクスチャを流用してもよいですが、今回はテクスチャにノイズをかけたりして作成。
car53.JPG

あとはconfig.cppで定義するだけです。HitBody、HitLFWheel、HitLBWheel、HitRFWheel、HitRBWheelを定義します。
一例を載せておきます。

class HitLFWheel {armor=0.15;material=-1;name=”left_front_wheel_hit”;visual=”left_front_wheel”;passThrough=0;};
name= はhitpointで名付けた点の名前、visual= はモデルLODのタイヤの名前です。

同じくconfig.cpp内でテクスチャの定義(class Damage)を書きます。

ここから手抜き方法。
ここで本来ならmat[]=の部分にrvmatを指定するのですが、
tex[]={“壊れる前のテクスチャ”,”壊れた後のテクスチャ”};
と書きます。rvmatなら壊れた後のテクスチャのマテリアル等を細かく定義できますが、
私は正直壊れたモデルに丁寧な設定をしたくないのです。
この定義だけでダメージを受けたときテクスチャが壊れた物に換わってくれます。

class Damage
{
tex[]={“\mycar\tex.pac”,”\mycar\tex_destroy.pac”};
mat[]={};
};

また、完全に壊れたら人とドアが消えるようにしたいので、まず乗員のモデルにdamageHideと名付けました。
「壊れたら消える」はアニメとして定義するので、model.cfgのCfgModels内、class AnimationsでdamageHideを定義します。

そして、CfgSkeletonsのskeletonBones[]=に”damageHide”,”” を追加します。

次にドア。ドアは既にアニメの定義がされているので、上記のように定義すると動かなくなってしまいます。
そこでドアは個別にanimationsクラスの定義をします。

人とドアが消えるanimationsクラスの定義はこちら。

class damageHide
{
type=”hide”;
source=”damage”;
selection=”damageHide”;
};
class damageHide_r1 : damageHide {selection=”door_r1″;};
class damageHide_l1 : damageHide {selection=”door_l1″;};
class damageHide_r2 : damageHide {selection=”door_r2″;};
class damageHide_l2 : damageHide {selection=”door_l2″;};
class damageHide_rear1 : damageHide {selection=”door_rear1″;};
class damageHide_rear2 : damageHide {selection=”door_rear2″;};

これで完成、です。

2008/8/29 金曜日

車を作ろう? ガラスのダメージ

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 15:35:44

これは車の定義に必須ではありませんが、私は常々面倒で避けていたのであえて作ります。

まずモデルからガラス部分だけ抽出して全部正面に向け、SSを撮ります。
car47.JPG
512×256に画像の大きさを変更し、貼り付けておきます。
car48.JPG

これから用意するテクスチャは、?壊れていないときのテクスチャ ?半壊したテクスチャ ?全壊したテクスチャです。
car49.JPG

ガラスの壊れ方の定義は、「右のガラス」か「左のガラス」しかありません。
ここでは「右」を「正面と後部のガラス」 「左」を「横のガラス」として定義していきます。

まず0LODのガラスで正面と後部をsklo predni Pと名付けます。横のガラスはsklo predni Lと名付けます。(viewCargoLODも同じように)
FireGeometryのガラスの当たり判定の部分にも同じように名付けます。
そして、firegeometryの窓にca\data\data\black.pacを貼ります。ARMAではこれを貼らないと窓が壊れても銃弾が貫通しません。

そしてhitpointsLODを作成しガラスの真ん中あたりに点を置いてsklo predni P、sklo predni Lと名付けます。
car50.JPG

あとはmodel.cfg内のcfgmodelsのsections[]=に”sklo predni P”と”sklo predni L”を追加。
config.cppのcfgvehiclesにHitLGlassとHitRGlassを追加、dammageHalfとdammageFullにテクスチャを定義します。

class HitLGlass {armor=0.1;material=-1;name=”sklo predni L”;visual=”sklo predni L”;passThrough = 0;};
class HitRGlass : HitLGlass {name=”sklo predni P”;visual=”sklo predni P”;};

2008/8/22 金曜日

車を作ろう? アニメーションのプレビュー

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 18:12:13

定義が終わったらo2のビューアでモデルを見てみましょう。
ARMAでは定義したアニメの動きまでプレビューすることが出来ます。これ便利。すごく便利。

動かすにはmodel.cfgが必須です。
ビューア画面を開いたらミドルマウスボタンを押します。
左上にcfgmodelsで定義したアニメの名前が出てきます。その状態でマウスホイールを転がすとアニメが動きます。
ミドルマウスボタンを再度押すと次のアニメを選択することが出来ます。

car46.JPG

車を作ろう? ジオメトリ及び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

2008/8/18 月曜日

車を作ろう? 窓、ミラー

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 14:20:12

窓やミラーの表現で、ARMAから導入されたRVMATを使用すると「反射しているように見える」エフェクトを使用することが出来ます。
窓は既にポリゴンで用意したので、ミラーの面を作ります。
ミラーの面は前面のポリゴンをコピペ、0.9倍にして作成しました。テクスチャはまだ必要ありません。
car36.JPG

反射に使うテクスチャはコレ。ARMAで使っているファイルを抜き出してきたものです。
car37.JPG

拡張子rvmatで以下のようなファイルを作ります。

ambient[]={1,1,1,1};
diffuse[]={1,1,1,1};
forcedDiffuse[]={0,0,0,0};
emmisive[]={0,0,0,1};
specular[]={1,1,1,1};
specularPower=32;
renderFlags[]={“NoAlphaWrite”};
PixelShaderID=”Glass”;
VertexShaderID=”Glass”;
class Stage1
{
texture=”#(argb,8,8,3)color(0,0,0,1)”;
uvSource=”none”;
};
class Stage2
{
texture=”mycar\env_co_pac.paa”;
uvSource=”none”;
};

Stage2でミラー用テクスチャを指定。

ミラーの面を選んで面のプロパティでrvmatファイルを指定します。
ここでテクスチャの指定は「無」になっていますが、例えば青色のテクスチャだと青っぽく反射します。
car38.JPG

これで視点によって見え方が違うテクスチャができます!
car39.JPG

窓は半透明のテクスチャ(paa形式)を貼り、
上記のRVMATのstage1のアルファ部分を0.3にします。
texture=”#(argb,8,8,3)color(0,0,0,0.3)”;

ここでいくつか注意。
半透明テクスチャはpaaのみです。pacでは透明度が0か1しかありません。窓には使えません。
また、paaには優先度があります。優先度が低い物は表示されません。
car40.JPG
この画像では後ろの窓が前の窓から見えます。
これ、優先度を上げる前は後ろの窓は見えませんでした。
窓の外側の面はfaces→move to topで優先度を最大にする必要があります。

ノーマルマップとスペキュラマップを作成。以前のチュートリアルで解説しています。
car41.JPG

これで9割方はモデル完成。

車を作ろう? テクスチャ

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 1:41:15

1024×1024のbitmapを作成、
必要な部分のモデル線をコピペして下地を作ります。
car30.JPG

car31.JPG
選択した部分にFrontviewにて、下地テクスチャをおおまかに貼ります。(ずれてもOK)

その後serface(サーフェース)→UVエディタを起動。
Filter→新しいテクスチャをブラウズ(browse new texture?)を選択し、下地テクスチャを読み込みます。

先ほどfrontviewでテクスチャを貼った付近をマウスで囲むと、貼った面が出てきます。
下の図の黒い四角をドラッグして、大きさを調整しましょう。リアルタイムにテクスチャマッピングが反映されます。
car32.JPG

同じようにして全体に貼っていきますが、ここでテクニック。
選択した面を選んでselectionウィンドウて右クリック→new(新規作成)で名前をつけておきます。
下の図では右の面、左の面を分けてセレクション名をつけ、ctrlを押しながら左右のセレクションをクリックし、
左右同時に面を選択しています。
car33.JPG

外面を貼り終わったところです。
car34.JPG

貼ったら下地を元に塗ります。
テクスチャを描いた後テクスチャマッピングの位置を変えることも出来るので、気楽に、気長にやりましょう。
car35.JPG

2008/8/12 火曜日

車を作ろう? タイヤ等

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

タイヤを作ります。
円柱を点を置いて作るのは難しいので、
create(作成) ->cilinder(円柱)で円柱から作ります。
赤い線で示しているアイコンがピン。これの中心に円柱が作成されます。
car26.JPG

car27.JPG
3つに分割した円柱を作成、端を0.9倍にしました。
大きさは三面図に合わせます。

ハンドルは円柱を作成して大きさを調整し、
外周をコピペ、それを0.9倍してドーナツ状に円をつなげました。
運転席部分は「内装LOD」から取ってきた赤く囲った部分の点を元に作成。
car28.JPG

装飾品等を作成。図面に細かい装飾品は載っていないので、
写真を見つつ目測で作成しました。
car29.JPG

2008/8/11 月曜日

車を作ろう? モデリング?ドア

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 22:31:31

ドアをモデリングします。まずは横から。
車をつくろう?で使用した点のうち、ドアで使う点を新しいLODにコピペします。
car20.JPG

点を全部選んでDボタンで面を削除。
car21.JPG

三面図を参考に、片面の点だけ残して、ここから作っていきます。
car22.JPG

外枠の点を大事にしつつ、ドアの面を作成、全体をコピペして内側に移動させ、「厚み」をもたせます。
car23.JPG

後ろのドアも同じ要領で。
car24.JPG

窓の枠の点を別のLODにコピペ、厚さを薄くして窓も作っちゃいます。
car25.JPG
*後部ドアの解説は割愛します。手順は同じです。

2008/8/10 日曜日

車を作ろう? モデリングその2

Filed under: Armaアドオン製作支援,  ─車編 — gachopin @ 18:12:27

ドアを除いた横部分を片方だけ作り、反対側にコピペします。
両側を同時に作るより合理的です。
car12.JPG

後ろもドアを除いて作成。
car13.JPG

次に、内装をちょっと作っておきます。
いままで作ったLODを複製。外枠から、内側の点だけを残してあとは削除。
car14.JPG

今↑でコピーしたモデル、コピー元と大きさが同じなので、この点を元に内側に厚みをつけてモデリングし、
最後に先ほどの外装モデルにコピペすることで、ピタリと重ねることが出来ます。
分かりやすい例えで言い換えると、「型にゼリーの元を流し込んでゼリーを作る」ということです。
型通りのゼリー(内装)を後で型(外枠)に戻す。これが最終段階になるわけです。

ドアとドアの間の柱の部分の点をコピーし、内側に移動させて、内側だけ面を貼ったのが以下の図です。
外枠とあわせるとキッチリ合わさっているのが分かると思います。
car151.JPG

後ろも同じように厚みを持たせます。
下の図で青い線で囲った点は窓枠に使うので必要な点です。
赤い線で囲った点は必要ない点なので消してしまいます。
点をコピペして面を貼っていくと、その中でどの点が必要でどの点が不要か分かってきます。
car16.JPG

コピーして、動かして、必要な部分はまたコピーして・・・を繰り返して後部を作成しました。
何度も最初に作った外枠と見比べて、「どの点が外枠に接しているか」を意識しながらモデリングします。
car17.JPG

前のほうを続けて作ります。
窓の厚みを作り、運転席の空間を確保するため、少し前に点を置いてつなげました。
この空間にハンドルやダッシュボードを将来置くためです。結構難しいです。根気よくいきましょう。
car18.JPG

うまく合わさるとこうなります!!
car19.JPG

次ページへ »

HTML convert time: 1.792 sec. Powered by WordPress ME