T-4 製作記 Step6: 詳細な3Dモデルの制作 (その1)
Tat
投稿数: 375
一通りテストも行った事ですので、そろそろ詳細な3Dモデルの制作について説明したいと思います。ただ、このスレッドで3Dモデルの作成方法を記述するのは大変そうなので、これに関しては作業場にまとめる際に記述したいと思います。ここでは詳細な3Dモデルがあるものとして説明を進めて行きます。
3Dモデルの舵やギア等をフライトギア上で動作させるには、 フライトモデル上の設定とアニメーションの設定とが必要になります。JSBSim ではキーボードやジョイスティックから制御した舵やギアの状態をアニメーションに必要な情報へと変換してフライトギア上のプロパティに値を設定します。アニメーションの設定では、FDM で変換したプロパティの値を参照して、3Dモデル上の部品を回転させたり移動させたりするための設定を記述します。
** JSBSim を利用した機体のアニメーション関連プロパティについて
フライトギアではキーボードやジョイスティックで制御した舵やブレーキ、ギアなどの情報をプロパティとして保持しています(プロパティの内容はフライトギアのメニューの File >>Browse Internal Properties ダイアログから閲覧したり設定したりする事ができます)。JSBSim では 舵の状態は fcs/xxxxx-pos-rad や fcs/xxxx-pos-deg、あるいはfcs/xxxx-pos-norm などのプロパティに保持しています。ここで xxxx には left-aileron や elevator などの制御対象の名前が入るものとします。
一方、アニメーションを行うには surface-positions/xxxx-pos-norm 等のプロパティを参照して3Dモデル上のオブジェクトの位置や向きを調整します(norm はnormalized のことで -1 から 1 までの間に正規化された値が入ります)。JSBSim は fcs/xxxx-pos-norm というプロパティを surface-positions/xxxx-pos-norm というプロパティへと自動的に写像します。従って fcs/xxxx-pos-norm というプロパティに制御対象の位置情報を -1 から 1 の範囲で設定しておけばよいことになります。以下では T-4 におけるの位置情報の設定方法を示します。
※ 実際には、surface-positions/xxxx-pos-norm 以外の値を利用してアニメーションさせている機体もあります。しかし多くの機体は surface-positions/xxxx-pos-norm を参照していますので、ここでは慣例に従ってアニメーションの設定を行うものとします。
** T-4 におけるアニメーション対象となる位置情報の設定
T-4 では以下のものがアニメーションの対象となります。
- エレベータ
- 左右エルロン
- フラップ
- ラダー
- スピードブレーキ
- ランディングギア(出し入れ, サスペンション)
- キャノピ
これらの状態は残念ながら fcs/xxxx-pos-norm というプロパティに保持されているとは限りません。xxxx-pos-rad であったり xxx-pos-deg だったりします。前述したように3Dモデルのアニメーションに必要な位置情報は fcs/xxxx-pos-norm ですから、この値を設定するための処理をフライトモデルに記述する必要があります。これらの設定は flight_control タグ内にある aerosurface_scale タグに記述します。
*** エレベータの位置情報
エレベータの位置情報は fcs/elevator-pos-norm というプロパティに設定します。Aeromatic で自動生成したフライトモデルには既にエレベータ用の位置情報への変換処理が記述されていますので、ここでは何も記述する必要はありません。
*** 左右エルロンの位置情報
左右エルロンの位置情報はそれぞれ fcs/left-aileron-pos-norm 及び fcs/right-aileron-pos-norm プロパティに設定します。Aeromatic が生成した 左エルロン制御の記述は以下のようになっています。
この記述により、左エルロンは -0.35rad 〜 0.35rad (-20°〜20°))の範囲で制御されることになります。アニメーションに必要な left-aileron-pos-norm を設定する為には、以下の記述を追加します。
この記述は fcs/left-aileron-pos-deg (-20〜15の範囲)を -1〜 0.75に変換して fcs/left-aileron-pos-norm に設定することを意味しています。T-4 のエルロン可動範囲は -20°から 15°までですのでこのような変換になります。本来なら素直に fcs/left-aileron-pos-rad から fcs/left-aileron-pos-norm に変換する方が説明上判りやすいのですが、degree 単位の方が理解しやすいのでこのようにしています。ちなみに fcs/aileron-pos-deg は JSBSim 内部で fcs/aileron-pos-rad から自動生成されます。right-aileron に関しても同様に記述しておけば良いです。
*** フラップの位置情報
フラップも Aeromatic により fcs/flap-pos-norm が設定されているため、何も記述する必要はありません。
*** ラダーの位置情報
Aeromatic により自動生成された状態では、ラダーは ±20°の範囲で動作します。しかしながら T-4 は最大±15°の動作範囲です。そこで、自動生成された設定を以下のように変更しました。
最初の aerosurface_scale では ±15°の可動範囲であることを指定しています。次の aerosurface_scale タグでは fcs/rudder-pos-deg の値を ±1の範囲で正規化して rudder-pos-norm に設定しています。
エルロンと同様に、rad ではなく deg から正規化しています。
*** スピードブレーキ
エレベータと同様、スピードブレーキも既に Aeromatic で fcs/speedbrake-pos-norm に正規化されているので記述する必要はありません。
*** ランディングギアの位置情報
ランディングギアの位置情報は2種類あります。ギアを出し入れする時の位置情報と、サスペンションの伸縮に関する位置情報です。これらの値は gear/gear[n]/position-norm, gear/gear[n]/compression-norm で表現されています。T-4 にはノーズギアと2つのメインギアがありまして、n=0 はノーズギアを 1 は左メインギアを、2は右メインギアを表しています。これらのプロパティの値は JSBSim により自動的に設定されるため、記述する必要はありません。
*** キャノピの位置情報
キャノピの位置情報に関しては JSBSim のフライトモデルではなく、Nasal スクリプトとして設定しています。フライトギアにはキャノピやドアの動作を処理するための Nasal スクリプトがベースパッケージに含まれています。(T-4 用の Nasal スクリプトは T-4/Nasa/jwarbirds.nas に記述されています)。これを利用すると、キャノピの位置情報は controls/canopy/position-norm というプロパティに 0〜1の間で設定されます。参考迄に jwarbirds.nas に記述されたキャノピクラスを示します。
ここでは Nasal スクリプトに関する説明は割愛しますが、T-4-jsbsim-set.xml のファイルで Ctrl-D キーが押されると toggleOpenClose() メソッドが呼び出されるように設定しているため、フライトギア内で勝手にキャノピの位置情報を設定してくれます。
この段階でアニメーション設定ファイルを作成するための準備は整いました。
今回はとりあえずここ迄にしておきます。次回はアニメーション設定ファイルについて説明します。
3Dモデルの舵やギア等をフライトギア上で動作させるには、 フライトモデル上の設定とアニメーションの設定とが必要になります。JSBSim ではキーボードやジョイスティックから制御した舵やギアの状態をアニメーションに必要な情報へと変換してフライトギア上のプロパティに値を設定します。アニメーションの設定では、FDM で変換したプロパティの値を参照して、3Dモデル上の部品を回転させたり移動させたりするための設定を記述します。
** JSBSim を利用した機体のアニメーション関連プロパティについて
フライトギアではキーボードやジョイスティックで制御した舵やブレーキ、ギアなどの情報をプロパティとして保持しています(プロパティの内容はフライトギアのメニューの File >>Browse Internal Properties ダイアログから閲覧したり設定したりする事ができます)。JSBSim では 舵の状態は fcs/xxxxx-pos-rad や fcs/xxxx-pos-deg、あるいはfcs/xxxx-pos-norm などのプロパティに保持しています。ここで xxxx には left-aileron や elevator などの制御対象の名前が入るものとします。
一方、アニメーションを行うには surface-positions/xxxx-pos-norm 等のプロパティを参照して3Dモデル上のオブジェクトの位置や向きを調整します(norm はnormalized のことで -1 から 1 までの間に正規化された値が入ります)。JSBSim は fcs/xxxx-pos-norm というプロパティを surface-positions/xxxx-pos-norm というプロパティへと自動的に写像します。従って fcs/xxxx-pos-norm というプロパティに制御対象の位置情報を -1 から 1 の範囲で設定しておけばよいことになります。以下では T-4 におけるの位置情報の設定方法を示します。
※ 実際には、surface-positions/xxxx-pos-norm 以外の値を利用してアニメーションさせている機体もあります。しかし多くの機体は surface-positions/xxxx-pos-norm を参照していますので、ここでは慣例に従ってアニメーションの設定を行うものとします。
** T-4 におけるアニメーション対象となる位置情報の設定
T-4 では以下のものがアニメーションの対象となります。
- エレベータ
- 左右エルロン
- フラップ
- ラダー
- スピードブレーキ
- ランディングギア(出し入れ, サスペンション)
- キャノピ
これらの状態は残念ながら fcs/xxxx-pos-norm というプロパティに保持されているとは限りません。xxxx-pos-rad であったり xxx-pos-deg だったりします。前述したように3Dモデルのアニメーションに必要な位置情報は fcs/xxxx-pos-norm ですから、この値を設定するための処理をフライトモデルに記述する必要があります。これらの設定は flight_control タグ内にある aerosurface_scale タグに記述します。
*** エレベータの位置情報
エレベータの位置情報は fcs/elevator-pos-norm というプロパティに設定します。Aeromatic で自動生成したフライトモデルには既にエレベータ用の位置情報への変換処理が記述されていますので、ここでは何も記述する必要はありません。
*** 左右エルロンの位置情報
左右エルロンの位置情報はそれぞれ fcs/left-aileron-pos-norm 及び fcs/right-aileron-pos-norm プロパティに設定します。Aeromatic が生成した 左エルロン制御の記述は以下のようになっています。
<aerosurface_scale name="Left Aileron Control">
<input>fcs/roll-trim-sum</input>
<range>
<min> -0.35 </min>
<max> 0.35 </max>
</range>
<output>fcs/left-aileron-pos-rad</output>
</aerosurface_scale>
この記述により、左エルロンは -0.35rad 〜 0.35rad (-20°〜20°))の範囲で制御されることになります。アニメーションに必要な left-aileron-pos-norm を設定する為には、以下の記述を追加します。
<aerosurface_scale name="Left Aileron position normalized">
<input>fcs/left-aileron-pos-deg</input>
<domain>
<min>-20</min>
<max>15</max>
</domain>
<range>
<min>-1</min>
<max>0.75</max>
</range>
<output>fcs/left-aileron-pos-norm</output>
</aerosurface_scale>
この記述は fcs/left-aileron-pos-deg (-20〜15の範囲)を -1〜 0.75に変換して fcs/left-aileron-pos-norm に設定することを意味しています。T-4 のエルロン可動範囲は -20°から 15°までですのでこのような変換になります。本来なら素直に fcs/left-aileron-pos-rad から fcs/left-aileron-pos-norm に変換する方が説明上判りやすいのですが、degree 単位の方が理解しやすいのでこのようにしています。ちなみに fcs/aileron-pos-deg は JSBSim 内部で fcs/aileron-pos-rad から自動生成されます。right-aileron に関しても同様に記述しておけば良いです。
*** フラップの位置情報
フラップも Aeromatic により fcs/flap-pos-norm が設定されているため、何も記述する必要はありません。
*** ラダーの位置情報
Aeromatic により自動生成された状態では、ラダーは ±20°の範囲で動作します。しかしながら T-4 は最大±15°の動作範囲です。そこで、自動生成された設定を以下のように変更しました。
<aerosurface_scale name="Rudder Control">
<input>fcs/rudder-command-sum</input>
<range>
<min> -0.25 </min>
<max> 0.25 </max>
</range>
<output>fcs/rudder-pos-rad</output>
</aerosurface_scale>
<aerosurface_scale name="Rudder position normalized">
<input>fcs/rudder-pos-deg</input>
<domain>
<min>-15</min>
<max>15</max>
</domain>
<range>
<min>-1</min>
<max>1</max>
</range>
<output>fcs/rudder-pos-norm</output>
</aerosurface_scale>
エルロンと同様に、rad ではなく deg から正規化しています。
*** スピードブレーキ
エレベータと同様、スピードブレーキも既に Aeromatic で fcs/speedbrake-pos-norm に正規化されているので記述する必要はありません。
*** ランディングギアの位置情報
ランディングギアの位置情報は2種類あります。ギアを出し入れする時の位置情報と、サスペンションの伸縮に関する位置情報です。これらの値は gear/gear[n]/position-norm, gear/gear[n]/compression-norm で表現されています。T-4 にはノーズギアと2つのメインギアがありまして、n=0 はノーズギアを 1 は左メインギアを、2は右メインギアを表しています。これらのプロパティの値は JSBSim により自動的に設定されるため、記述する必要はありません。
*** キャノピの位置情報
キャノピの位置情報に関しては JSBSim のフライトモデルではなく、Nasal スクリプトとして設定しています。フライトギアにはキャノピやドアの動作を処理するための Nasal スクリプトがベースパッケージに含まれています。(T-4 用の Nasal スクリプトは T-4/Nasa/jwarbirds.nas に記述されています)。これを利用すると、キャノピの位置情報は controls/canopy/position-norm というプロパティに 0〜1の間で設定されます。参考迄に jwarbirds.nas に記述されたキャノピクラスを示します。
#
# Canopy class - this is not an observer
#
Canopy = {
new : func {
var obj = { parents : [Canopy],
canopy : aircraft.door.new("/controls/canopy", 2) };
setlistener("/controls/canopy/opened",
func { obj.toggleOpenClose(cmdarg().getBoolValue()); }, 1);
return obj;
},
toggleOpenClose : func(state) {
me.canopy.move(state);
}
};
この段階でアニメーション設定ファイルを作成するための準備は整いました。
今回はとりあえずここ迄にしておきます。次回はアニメーション設定ファイルについて説明します。
投票数:18
平均点:5.56
投稿ツリー
-
T-4 製作記
(Tat, 2007-12-18 1:21)
-
T-4 製作記 - 機体パッケージについて
(Tat, 2007-12-18 8:39)
-
T-4 製作記 - 作業手順
(Tat, 2007-12-18 21:15)
-
T-4 製作記 - Step1: 資料収集
(Tat, 2007-12-18 22:19)
-
T-4 製作記 - Step2: ラフな3Dモデル作成
(Tat, 2007-12-20 12:37)
-
T-4 製作記 - Step3: フライトモデルの作成 (1)
(Tat, 2007-12-20 23:17)
-
T-4 製作記 - メリークリスマス
(Tat, 2007-12-24 16:27)
-
T-4 製作記 - Step3 フライトモデルの作成 (2)
(Tat, 2007-12-27 1:51)
-
T-4 製作記 - Step3 フライトモデルの作成 (3)
(Tat, 2007-12-27 11:17)
-
T-4 製作記 - Coffee Break
(Tat, 2007-12-27 11:41)
-
T-4 製作記 - Coffee Break (2) Yasim モデルのチューニング
(Tat, 2007-12-29 1:26)
-
Re: T-4 製作記 Step4: 機体設定ファイル作成
(Tat, 2007-12-29 1:50)
-
T-4 製作記 Step5: テストフライト
(Tat, 2008-1-10 19:34)
-
T-4 製作記 Step6: 詳細な3Dモデルの制作 (その1)
(Tat, 2008-1-30 1:48)
- T-4 製作記 Step6: 詳細な3Dモデルの制作 (その2) (Tat, 2008-2-1 1:23)
-
T-4 製作記 Step6: 詳細な3Dモデルの制作 (その1)
(Tat, 2008-1-30 1:48)
-
T-4 製作記 Step5: テストフライト
(Tat, 2008-1-10 19:34)
-
Re: T-4 製作記 Step4: 機体設定ファイル作成
(Tat, 2007-12-29 1:50)
-
T-4 製作記 - Coffee Break (2) Yasim モデルのチューニング
(Tat, 2007-12-29 1:26)
-
T-4 製作記 - Coffee Break
(Tat, 2007-12-27 11:41)
-
T-4 製作記 - Step3 フライトモデルの作成 (3)
(Tat, 2007-12-27 11:17)
-
T-4 製作記 - Step3 フライトモデルの作成 (2)
(Tat, 2007-12-27 1:51)
-
T-4 製作記 - メリークリスマス
(Tat, 2007-12-24 16:27)
-
T-4 製作記 - Step3: フライトモデルの作成 (1)
(Tat, 2007-12-20 23:17)
-
T-4 製作記 - Step2: ラフな3Dモデル作成
(Tat, 2007-12-20 12:37)
-
T-4 製作記 - Step1: 資料収集
(Tat, 2007-12-18 22:19)
-
T-4 製作記 - 作業手順
(Tat, 2007-12-18 21:15)
-
フライトモデルの修正
(Tat, 2008-6-22 10:43)
-
Re: フライトモデルの修正
(hide, 2008-6-24 12:28)
-
Re: フライトモデルの修正
(Tat, 2008-6-26 12:51)
-
Re: フライトモデルの修正
(hide, 2008-6-27 11:42)
- Re: フライトモデルの修正 (sambar, 2008-7-25 1:22)
-
Re: フライトモデルの修正
(hide, 2008-6-27 11:42)
-
Re: フライトモデルの修正
(Tat, 2008-6-26 12:51)
-
Re: フライトモデルの修正
(hide, 2008-6-24 12:28)
- Re: T-4 製作記 (Tat, 2008-7-20 6:07)
- Re: T-4 製作記 (Tat, 2008-10-18 7:00)
-
Re: T-4 製作記
(Tat, 2012-7-21 13:02)
-
Re: T-4 製作記
(Hyde, 2012-7-21 22:21)
-
Re: T-4 製作記
(Tat, 2012-7-22 10:47)
- Re: T-4 製作記 (Hyde, 2012-7-22 11:18)
-
Re: T-4 製作記
(Tat, 2012-7-22 10:47)
-
Re: T-4 製作記
(Hyde, 2012-7-21 22:21)
- Re: T-4 製作記 (kozenigata, 2012-7-31 21:56)
-
T-4 製作記 - 機体パッケージについて
(Tat, 2007-12-18 8:39)