2020年2月 8日 (土)

FlightGearの機体開発#16:Liveryを選択できるようにする

機体モデルのテクスチャの修正や変更を行い自身の好みにカスタムすることは
Flightgearの楽しみ方のひとつです。
いくつかの機体カラーリングを作成した時、いちいちファイル名を入れ替えせずに
メニューから変更できるようにしたくなります。

本連載最後はLiveryを選択できるようにする工程です。

Nasalフォルダに他からコピーしたLiveries.nasを置いておきます。
このファイル内記述にあるLiveryフォルダのパスは変更しておきます。
下図はNasalフォルダ内

Ws0011続いてXXXX-base.xml内にNasalを読み出す記述を追加します。
下図はFA-200の例

Ws00

さらに
modelのxmlファイル内にLivery変更の記述を追加します。
ここではテクスチャ変更の対象となる3Dモデルのオブジェクト名を
全て記載する必要があります。
逆に共通部品はここに記載しないことでDefaultのテクスチャが適用されます。
下図はFA200の例です。

Ws000001

最後に
Liveriesフォルダに作成したテクスチャファイルと対応するXMLファイルをセットで置きます。
XMLファイルは他から流用して記述のファイル名・表示名を変更します。

下図はFA200のLiveriesフォルダ例

Ws000002

Defaultも置いておく必要があります。
ここまで出来れば、あとはこのフォルダに作成したものを追加していくだけで反映されます。

機体開発としてここまでできれば十分楽しめるとおもいます。
ここから先はこだわりの領域になりますのでいろいろなモデルを参考に自身のモデルへ
組み込んで満足いくまで作り込んで頂きたいとおもいます。

ここまで読んで頂き有難うございました。
これからも機体開発に尽力していきますのでサイトともによろしくお願いします。

2019年12月27日 (金)

FlightGearの機体開発#15:テクスチャの作成

3Dモデルが完成しFDMの調整やアニメーション付与をしたりと
機体開発の一番楽しい段階なのでついつい飛び続けてしまって進捗が悪くなるのは
機体開発あるある話です。ここは気持ちに我慢して次の段階に進みましょう。

テクスチャを作成します。
使うツールはRGBファイルやPNGファイル形式が扱えるものなら何でも良いのですが
できれば透明、半透明の着色が可能なものがよいです。これはプロペラ回転中の表現や
ガラス面の鏡面エフェクトをする場合に必要になります。標準ツールのペイントでは
透明に出来ないので私自身はGIMPを使用しています。

画像の解像度は細かい程良いのですが、その分データ読み込みが遅くなる弊害があり
PCのスペックによってはフレームレートに影響します。それに高解像度にしたところで
Flightgear上での表示はボケるので限度があります。
参考までにFA200では2500ピクセル×2500ピクセルです。
この画像サイズが正方形であることは作成上で意味があります。
3DモデルはUV画像の縦横比の変化に追従してしまうので、それを変化させないように
正方形を基準としておけば、解像度を変更しても影響ありませんし、描画位置を変更
したときでも拡縮の手間を省けるなど作業効率が良くなります。

テクスチャを描くにはBlenderよりUVをエクスポートする方法でも良いですが
今回は三面図より形状をおこしているのでその図を正方形内に配置しています。
下図はFA200のものです。

Ws000004_3

カラーリングに影響しない部品は画像下段に並べるようにしてみました。
機体の左右のカラーリングが全く対称なら片側だけでもよいでしょう。
それとパネルラインなど基準線となるものを描いておくと部位毎のUV位置ズレが
確認しやすくなります。

Ws000003


各オブジェクトにテクスチャを貼り付けて完成させます。
ガラス面やプロペラ残像などはマテリアルで透明にすることができます。
但し、FlightgearでRenbrandtモードで起動した場合は透明になりません。
これを回避するには下記のように

<effect>
 <inherits-from>Effects/model-transparent</inherits-from>
 <object-name>prop-low</object-name>
 <object-name>prop-high</object-name>
</effect>

をモデルのxmlに追記する必要があります。

最後にこのテクスチャファイル3Dモデルファイル(.ac)と同フォルダ内に
置いておく必要があります。
こうしておくことでFlightgear実行中にテクスチャを見失うことを防げます。

2019年12月18日 (水)

FlightGearの機体開発#14:アニメーションの順番

先回は3Dモデルに動きを与えるアニメーションの記述について説明しましたが
この記述には順番が関係してきます。
順番というのはXMLファイルに記載する順をさします。
順番を間違えると意図しない座標点で移動・回転してしまいます。

Ws000003_2

上図はFA200のノーズギアの3Dモデルです。オブジェクト毎に色分けしてあります。
FA200は引込式の脚ではありませんが、そのように動くと仮定して見て下さい。

最初に①のアニメーションを記述します。
タイプ:rotateの対象オブジェクトは白(タイヤ)、黄、赤、青、緑です。

次に②。タイプ:translateで対象は白、黄、赤。

続いて③。タイプ:spinで対象は白。次④、タイプ:rotateで対象は赤。

最後に⑤.タイプ:rotateで対象は青。

この順で書く必要があります。但し、③④⑤同士は入れ替わっても大丈夫です。
もし③を②より先に記述した場合、
タイヤの回転中心が脚が伸びた状態の座標で固定されるため
脚が縮んだ時にはこの固定座標とタイヤ中心にズレが生じて軌道回転をしてしまいます。

つまり『対象が多いものから記述する』と考えればいいです。




2019年12月10日 (火)

FlightGearの機体開発#13:3Dモデルのアニメーション


FDMが作れましたので早速Flightgear上で表示させて見ましょう。

テキストエディタで下図のように記述して
modelsフォルダに"FA-200-160.xml"のファイル名で保存します。

Ws000003_3

Blenderで作成しエクスポートした.acファイルもmodelsフォルダに保存します。

Flighgearを起動して機体選択画面にFA-200-160があることを確認します。
リストに表示されない場合はファイルの記述に何らかの不備があると判断して
記述を確認します。このときFlightgearランチャーの設定でデバッグコンソールの
表示をONにしておくと原因が判りやすいです。
リストから選択して実行すれば下図のように表示されます。
機体外観のチェックや重量配分の調整を行ないます。
YMF-5D流用であればエンジン始動して飛行することができます。
アニメーションを設定していないので機体の動きはありませんが、これだけでも
しばらくは飛び続けて見入ってしまうのです。なにせ自作ですから。


Fgfs20191209113520_2

さて、楽しいフライトもほどほどにFA-200-160.xml"ファイルに3Dモデルへの
アニメーションを加えていきます。

ちなみにFA-200-160.xmlのファイル名がマルチプレイ時のマップサーバーにて機体名として
表示されますのでファイル名の付け方には考慮が必要です。

以下に主なタグを説明します。

・modelタグ

Ws000003_8

別ファイルで作成した.acファイルまたは.acファイルを参照する記述の.xmlファイルを配置します。
<name>****</name>を追加することでオブジェクト名として設定されます。
x,y,z座標を指示しない場合は原点合わせで配置されます。

Ws000005

<roll-deg><pitch-deg><heading-deg>を追記すれば傾けて配置できます。

【注意】<model>及び<animation>タグのx,y,zの座標はBlenderモデリングの座標系を指示

・animationタグ

Ws000003
<name>
複数のオブジェクトをひとまとめにした名前を付与します。

Ws000004

<type>:アニメーションの種類を設定します。動作に関する種類は以下のものがあります。
       translate:平行移動 rotate:回転移動 spin:軸回転

<object-name>:対象となるオブジェクト名
<property>:数値のソース(プロパティ参照先)
<interpolation>:ソースの数値変化に対して返す値を変更する際に記述する。
         例では変化値0.0~1.0のとき出力値0.0~0.7となる。
         translateは距離(m)、rotateは角度(deg)、spinは回転数(rpm)
<axis>移動する軸方向を指定。

Ws000006

<axis>は2点指示で与えることも可能。2点を結ぶ直線が軸方向となる。
<type>でよく使うものにselectがあります。

Ws000003_3

selectは条件に応じてオブジェクトの表示をON/OFFする際に使用します。
<condition>に条件式を記述します。
例では
・nav-light=1(true)
・dragchute/position-norm=1(true)でない
の2つの条件を満たすときTail-Lightを表示するという記述になります。

このような記述を追加していき3Dモデルに動きを与えていきます。

2019年12月 7日 (土)

FlightGearの機体開発#12:FDMの作成④

FDM作成のつづきです。

Ws00005
<propeller>
x,y,z値とmass値はプロペラとエンジンを合成した重心位置で考えます。
radiusはプロペラ半径(m)です。
momentはプロペラの回転方向と反作用値の設定です。+値はコクピットから見て右回転、
-値で左回転となります。反作用値は同クラス機を参考にして設定し、飛ばした具合で調整
します。
cruise-~とtakeoff-~は巡航時と離陸時の速度に対するエンジン回転数、高度を設定します。
actionptは推進力の発生位置であり、プロペラ中心の座標を入力します。

<gear>
x,y,zはタイヤの接地点を指示します。3Dモデル作成時に脚を伸展状態で作成したのは
この値を得るためです。
compressionは収縮量(m)、他スプリング硬さ、ダンパ収束値、地面との抵抗値を設定します。
これらの値が適切でない場合、脚が地面にのめり込んだりします。
スキッドタイプや水上フロートはこのタグ内で追加設定します。

<tank>
タンクの重心位置と容量を設定します。容量はポンドに変換して設定します。
変換式が分からなければ多めに見積もって設定しておき、Flightgear上で燃料の量を変化させて
表示されるポンド値を求めると確実です。
タンクは幾つで追加でますが、全て一律に消費されていきますので、消費されるタンクの
順番を付加する場合はNasalによる設定が別途必要になります。

<ballast>
airplaneタグ内のmassで設定した機体重量の配分を調整する際に使用します。
駐機時に機首が軽くて尻もちをついてしまう場合や飛行中に機首が重くて前のめりになる時など
重心位置を変化させることができます。

<weight>
図中に記載はありませんが、重量に関するタグを解説しておきます。
このタグは<ballast>と違って付加物の重量を設定するものです。
乗員乗客や荷物、増槽などを設定する際に使用します。

以上でFDMの記載は完了です。

このほかにも機種に合わせたタグがあります。Flightgear Wikiなど参考にしてください。