NekoFlightの歴史

1998/2/8 作成
1999/6/7 更新


 Ver0.1をNifに公開したのは平成9年5月なので、Windows版はまだ作り始めてから1年ぐらいです。ですが、プログラム的には開発を始めて5年というそれなりに歴史があるものなので、UNIX版を含めた履歴を公開しておきます。
 

平成5年 UNIX版開発開始

 卒研の時期に、無性に現実逃避がしたくなり開発開始(笑)。当時は、自宅のメインマシンがシャープのX68000だったので、この上で機体のモデル計算部を作り始めました。はじめはX-BASICで書き始めて、ある程度できた時点でGNU-Cに移植という形を取りました。

 その際、既に休刊になってしまいましたが、Oh!Xのフライトシミュレータに関する記事(筆者は、祝一平さんだったと思います)が導入として参考になりました。実際の機体周りの計算部分は、大学の図書館にあった航空機力学入門(加藤寛一郎他著、東京大学出版社)を参考にしてます。この本は祝さんの記事でも紹介されてましたが、まともなフライトシミュレータを作るのなら必読でしょう。

 ただ、この本の内容は私には難しすぎて(^^;主に参考にしたのは単純翼の場合の式と、航空機の座標系の部分(オイラー角とか)でした。そのため、操縦感覚に重要な各軸周りの計算は、飛行機操縦技術(宮本晃男他著、鳳山社)などを参考に適当に作りました。具体的には、機体周りの各速度の計算は既にしていたので、単にスティック倒したらロール速度を上げて、ロール速度は自分自身に比例して減衰させるなどです。ただ、翼の失速処理はされているので、あまりスティックを引き続けていると、あっさり失速するという(^^;非常に操作が難しいものでした。

 また、計算部分を作りながら、HUDなどの表示部分も作り始めたのですが、X68Kだとラインだけでも表示速度に問題が出てきたので、開発環境を大学のマシンに移しました。大学の環境は、UNIX+X-Windowで、本来はリアルタイム系に向かないのですが、ラインが非常に早いので・・・。もともとこのことを発見したため、フライトシミュレータの開発を始めたというところもあります(描画速度に困ったら、学校に持ってくればいいということで)。

 あと、せっかく大学の環境で動かすのだからということで、ネットワーク対戦の機能を初めから持たせました。平成4年のころに、UNIX上で他の対戦ゲーム(ボンバーマンもどき)を作っていたので、その時のノウハウからです。ただ、このボンバーマンもどきは、X-WINDOWの機能でネットワーク対戦を行っていたので、flightはTCP Socketを用いて、途中参加などをより自由に行えるようにしました。実は、このとき作ったクライアント-サーバルーチンが、そのまま私の卒論のシステムでも使われていたりします(笑)。また、当時このプログラムの名前は単にflightという名前でした。
 

平成6年 UNIX版完成

 この様にして、平成6年ごろにはUNIX版が大体できあがりました。

特徴としては、
 

 
というものです。機銃は付いていましたが、ミサイルはありませんでした。あと、変形などもありませんでした。この当時、シミュレーション対象として想定していた機体はハリアーで、理由は音速を超えないからというものでした(^^;。遷音速関連の計算をしたくなかったのが理由でした。そのかわり、既にエンジンの向きは変えられるようになっていました。今のNekoFlightでHUDにあるNAは、これの名残です。また、NekoFlightのアイコンにもこの名残があります。

 そのあとは、COM機が現れる用に改良しました。Flightは初めから、対戦用に作られていたので、COM機にもUNIXのプロセスを一つ用いるという豪華な方法を取っていました。これは、大学で使っていたマシンがマルチプロセッサのマシンだったので、こうした方が早いからというのもありました。このあたりの敵機の処理が、今のNekoFlightにも残っています(自機と敵機は同じ処理など)。
 

平成7年 UNIX版改良

 あとは、いろいろ改良して遊ぶという状態でした。
#そういえばこの時期は、アニメのEVAにはまってました

 まず、計算モデルを大幅に改良しました。前のモデルでもそれほど変ではなかったんですが、速度に応じて操縦感が変わるはずだなぁとか、失速時には機種が下がるはずだ、各操舵時の挙動は実際にはどうなるのか?など、改良&実験したいところがたくさんありましたので。

 例の航空機力学入門ではこのあたり、20以上の安定微係数だとか運動モードが・・・とかで、理解不能(^^;。正確には、内容的にはわかる(結局はバネ振動と変わらん)のですが、どうやってシミュレーションするのかが・・・。で、あきらめてたんです。でも、単に計算に用いていた翼計算をもう少し精密(翼回転時の影響を考慮)にし、左右の主翼、水平・垂直尾翼を別個に計算し、あとは単なる剛体計算を行えば大体同じことになると気が付いたので、その用に改良しました。今のNekoFlightで用いている機体計算部はこの時に作ったものです。

 このモデルでは、機体の回転や各安定を全てこの各翼の釣合いだけで、いんちきせずに計算しているのですが、それが幸いして、パラメータをきちんとあわせないと、安定して飛べません。たとえば、各尾翼をあまり大きくしたり、質量が小さかったり、モーメント量が小さい、翼の位置が離れすぎなど、どれでも尾翼が働きすぎ、結局戻る力が強すぎるバネのようになるため、振動が収まらず飛べません。各安定条件が満たされてないとだめなわけです。飛行機飛ばすのって難しいですねぇ。

 あとはポリゴンで表示させる機能を付けました。これは確か、ポリゴン表示が早いワークステーションが利用できるようになったからです。といっても、3D機能があるわけではないので、3D→2D変換、印面処理、クリッピング処理など、全て自分でやる必要がありました。

 あと、いつのまにかロボットに変形できる機能が付きました。これは確か、ゲームセンターでバトルテックやってきた研究室の後輩がロボットのゲーム作りません?といってきたのがきっかけだったと思います。彼には敵機のポリゴンデータを作ってもらいました(西野君、どうも(^^/)。しかしこのロボット用プログラム、いつのまにかflightとくっついてしまい、マク○スになってしまいました(笑)。このとき作ってもらったポリゴンデータは、NekoFlightの方でいまだに使ってます。そういえばこの形状データフォーマット、研究室の数値風洞用のものです(笑)。

 そして、この辺りからミサイルの実装が始まりました。きっかけはマク○スPlusを見たのがきっかけだった様な気がするんですが、正確なところは不明(^^; 昔からミサイル軌道計算のプログラムを作っていたのと(笑)、研究室により早いWSが入ったので、これならミサイル連射が3Dでもリアルタイムで計算・表示できそうだというのもありました。このミサイル周りは、このころから暇を見てはいろいろ試してきたので、今のミサイルは美しさを求めて3年ほど練り込んだものとなっています(笑)。
 

平成8年 UNIX版改良&Windowsα版開発

 研究室に新しい器材が入るたびに、それに対応したflightを作るという状態でした(笑)。具体的には、立体視用の器材が入ったので3D立体視表示に対応とか、3Dポインティングデバイス(6軸ジョイスティック)が入ったので、それに対応とかです。ジョイスティックのルーチンの方は、今でも一部、役にやってます。

 またこのころには、自宅の環境がWindowsになったので、MS-Windowsプログラミングの勉強してました。HPで公開しているActiveDrawがこの名残です(そんなもの公開するな(^^;)。前からWindows上ではVisualBasicとかは一応使ってたんですが、本格的にVisualC++を使うようになったのはこのころからです。

 ActiveDrawを作ったおかげで、Windows上で高速に表示する方法(ただしGDI)が大体把握できたので、確か平成8年の末ごろにflightをWindows上に移植しました。ただ、ネットワーク対戦機能など、移植が面倒そうなところは全て消しました。これがWindows版FlightのVer0.1αです。そもそも描画は線がメインで、計算部もCで作られていたので、1日で移植しました。ただ、やはり研究室のWS用に作ったものをそのまま移植したので非常に遅く(^^;、そのままお蔵入りしました。
#当時自宅で使っていたWindows機は、CPUがPentuim-100で、VideoがTrio64
 

平成9年 NekoFlight公開&改良

 この年の始めは、Windows版は放っておいて、WS用の方を高速化したりしてました。このころ割り当てられていたWSはX-Windowの表示が非常に早いマシンで、ポリゴン表示でも50Fps出てました(^^;
#ちなみにWS版のFlightはウインドウの大きさが768×1024、メインウインドウが768×512で、下部がマップと警戒レーダ 。こんなの↓でした。
 


 

 あとは、新しいマシンがくるたびにベンチマークソフトとして使われていました。たとえば、X-Windowに負荷をかけるとOSがハングするというマシンがあったので、それのチェック用に使うとかです(笑)。

 ただ、自宅のマシンもより早い新しいものにしましたし、DOS/V機いじり&Windows上のプログラミングが趣味になりつつあったので、Windows版のFlightをもう少し早いものにしてみようということで少し改良を始めました。

 Pentium-166クラスになると、CPUの速度は既に中規模のWSと変わらないので、遅い原因は主に画面表示周りです。768×1024という、パソコンでは無謀な画面サイズを書き換えているので、遅いのは当たり前。WSでは、バス速度は400MByte/Secとかなのに対して、PCIバスは133MByte/Sec(理論値)ですから。ということで、画面の大きさを640×400程度とし、マップやレーダを消しました。これでワイヤーフレームなら、30fpsぐらいは出る用になりました。

 平成9年度になると、研究用のマシンもDOS/V機になり、暇つぶしにはActiveDrawとかNekoLauncherを変更し、NekoFlightはほったらかしでした。あまりにも趣味的なので正式に公開する気がありませんでしたので。

 ただ、何かのきっかけでふっとNifに公開してみようかと思い、簡単な説明ファイルを付けただけでNiftyのFWINGフォーラムにUPしました。これがNekoFlight Ver0.1です。NekoFlightになったのは、NekoLauncherと同じで、Nekoを付けただけという簡単な理由です(^^; Nekoは私の名字からです。

 公開したきっかけですが、正確な理由は忘れてしました。確か、PSで出たゲーム「マクロス」を見て、こんなのだったら私が作ったプログラムの方がミサイルが美しい(笑)と思ったというのがその理由だったと思います。でも、これはWindows上に移植を始めた理由かな。ビデオか何かを見てふっと思いたったと思うのですが、レンタルでガンダム83を借りてきたからか?(笑)

 まあ、こんなのが、NekoFlightができるまでの経緯です。

 で、Ver0.3ぐらいまでは、何か少しでも変えたらアップしちゃえという感じでやってましたが(^^;、メールで感想をいただけるようになり、要望を頂くとやはりやる気がでますので、今は比較的まじめに改良してます(といっても暇な時間があればですが)。
 
 

Ver0.4以降は、一つ上のページの通りです。

最後に、付属ファイルのバージョンアップ履歴をそのまま載せておきます。
 

変更履歴

ver. 0.1 平成9年5月12日公開
 
ver. 0.1 → ver.0.2 平成9年6月11日

 
ver. 0.2 → ver.0.3 平成9年6月22日

 
ver. 0.3 → ver.0.4 平成9年8月16日

 
ver. 0.4 → ver.0.5 平成9年8月31日

 
ver. 0.5 → ver.0.6 平成9年9月26日

 
ver. 0.6 → ver.0.7 平成9年11月7日

 
ver. 0.7 → ver.0.8 平成10年2月5日


 あと、せっかくですので、UNIX & X-WINDOW版のソースを公開しておきます。コメントがまったく無いですし、1・2文字の変数てんこもり、大域変数ばかりでドキュメントもないという、悪いプログラムの典型例みたいなソースですが、公開しないより良いでしょう。
 実行すると/tmpに、ソケットファイルやスコアファイルなどを作りますし、system()関数で自分自身を複数起動しますので、注意してください。バージョン的にはポリゴン表示やミサイルが追加されたバージョンです。このソースの扱いとしては、GNUに準じます。適当に使ってください。なお実行はflightスクリプトです。コンパイルその他は各自で適当に処理してください。こちらで動作を確認したOSは、Solaris2, HP-UX9, FreeBSD, Linux(SlackWare)です。変なことはしてないので、大抵のUNIXで動くと思います。

UNIX版 flight のソース一式 をダウンロードする(tgzファイル、27KB)
 

2/9に追記

 各マシンでコンパイルし直してみたら、HP-UX9とFreeBSD, Linux では問題なかったのですが、Solaris2ではコンパイルが通らない&実行できない状態だったので、Solarisの場合、makefileのLIBの所を#でコメントアウトされている部分に変えて、main.cファイル内部のmain()関数にある、pwait(200000);をコメントアウトしてください。

2/20に追記

 NekoFlightで用いている形状データを公開します。アーカイブに含まれているXファイルの元データです。

Flightの形状データ

99/6/7に追記

 Ver0.9以降では、DirectX-RMを使わなくなったため、独自の形状フォーマットをつかってます。この独自フォーマットは、次のコンバータを用いることで作成できます。元データにはXフォーマットを用います。

NekoFlightの形状コンバータ(Windows95/98/NT4用、LZH圧縮、91KB)


一つ上のページに戻る  

ソフトウェアトップページに戻る