Feature Requests / Proposals / Ideas
Occassionally, people join the FlightGear mailing lists offering to contribute to FlightGear and asking where they might start contributing, apparently often hoping for some sort of official "TODO" list or at least some sort of semi-official roadmap. Unfortunately, nothing like this exists so far for FlightGear and the closest thing to a "TODO" page, the "Goals page", has apparently not really been updated for several years.
So it is understandably hard for new community members to get a good grasp of the current development status and -progress, as well as to identify areas where FlightGear might use some improvement if they have not followed the recent mailing list discussions. In addition, many developers find it often hard to come up with suggestions for "mini projects", not because there are not any such opportunities, but rather because there does not exist any sort of general schedule or development plan. However, FlightGear itself does indeed offer a very broad range of often exciting contribution possibilities, this page is dedicated to providing a collection of such ideas that were discussed on the mailing lists. Not all of these ideas are necessarily "mini projects", rather some of these can be quite complex efforts that were simply not pursued because of the very complexity.
Also, as this is a static page and no searchable bug tracking system, we have decided to categorize these "mini projects" into groups ranging from "minor", "intermediate", "major" and "huge" to give new developers an impression of the estimated complexity of the various ideas.
Please note: while this list is only meant to provide an overview of desirable short- and long-term goals for FlightGear itself, there are meanwhile various interesting FlightGear-related co-projects (i.e. fgrun, fgsd, taxidraw, terragear, simgear), that you might want to check out for other interesting possibilities to contribute to the FlightGear community as a whole.
IMPORTANT: before you actually start working on any of these efforts, it is important to subscribe to the FlightGear Developer's mailing list to discuss your plans, this is extremely important in order to avoid duplicate code/efforts and a lack of coordination with regard to relevant implementation details, so please make sure to talk about your plans with other contributors before starting your work!
- Create or modify existing DTDs/Schemas for the various PropertyList encoded XML file formats that FlightGear currently supports (FDM, Aircraft, GUI, Sounds etc.), so that such DTDs or Schemas can be used by XML editors and validators.
- Add support for an optional framerate limiting mode (configurable, default i.e. 60-70fps), this can safe CPU cycles on many platforms (no useless idling/sleep() )
- Add new nimitz carrier view
- the menubar should be reloadable
- there should also be an option to reload the aircraft's instrumentation system file (currently usually $FG_ROOT/Aircraft/Generic/generic-instrumentation.xml), also errors in these files are not properly dealt with-there are not even warnings or error messages.
- when the aircraft's position is changed/reset, instrumentation subsystems should be suspended-slower machines (where repositioning may take several seconds) show occasionally undefined behaviour due to running (and confused) instrumentation systems
- add additional pitch mode to autopilot dialog for climb/descent gradients, so that users can specify a gradient that is automatically maintained (i.e. a glidepath)
- add support for non-rectangular hotspots (2D panels)
- currently, hotspots don't seem to work properly if you tilt the panel-we should try to fix this soon
- switch completely to SDL for I/O handling (many more possibilities and better support than plib can offer)
- support additional transformation type to allow cropping and cutting off of textures, useful for example for things like a rose vs. arc mode HSI representation
- it might be a good idea to add another routine to SimGear that can optionally check textures to match the 'power of two' requirement and emit a console warning if that's not the case. This will make it easier for developers to track down texture size related problems.
- add new command to nasal interpreter to allow playing of sound files (see mailing list discussions)
- add possibility to re-init the nasal interpreter, so that it reloads any modified script files
- there are still plenty of old "pseudo-subsystems" that do not yet make use of SGSubsystem, it would be good if subsystems such as the GUI subsystem could be ported to become native SGSubsystems
- implement a "failure/crash" (limits?) subsystem that can be XML-configured with tailored values and limits for specific aircraft (i.e. max allowable speeds in various configurations, max allowable pitch up/down, roll angle, g load etc.). That way, it would be up to aircraft authors to provide such limits for their aircraft in some sort of easily modifiable XML file and FlightGear could optionally honor these values at runtime (currently, it is no problem to extend the gear or flaps at ridiculously high speeds, or crash-land an airliner and keep flying afterwards-this would certainly add a good portion of realism to FlightGear and could still be kept entirely optional).
- provide a GUI dialog that automatically enumerates all available instrumentation systems, so that users can easily enable/disable individual systems
- add a native flight planning facility to FlightGear, so that VFR/IFR flights can be planned (loaded and saved) and optionally be passed on (filed) to the AI/ATC subsystems, this will probably require the base package to be extended with terminal approach/departure data.
- provide runtime configurable friction coefficients for runways to simulate contaminated runways (dirt, water, snow/ice) at runtime and export corresponding properties to property tree
- extend weather modelling subsystem to simulate weather features such as thermals, gusts or windshear more extensively and realistically. This would also come in very handy for sailplane/gilder modelling which is currently not yet satisfactorily simulated.
- add openGL wrapper commands to the Nasal interpreter, so that users can make use of basic OpenGL calls (the primitives at least) from their scripts, optionally allow to render to a texture rather than directly to the screen, i.e. useful for things like a scripted display (CDU/moving map)
- add support for registration labels to be drawn at runtime to an aircraft's tail-possibly using ImageMagick (or maybe just PLIB's FNT library) and rendering the text to a texture, so that airplanes can optionally show proper registrations (taken form the property tree) in multiplayer or AI traffic scenarios
- Make HUDs completely XML-configurable, so that users can easily create their own customized HUDs using arbitrary values from the property tree and generic OpenGL primitives as well as animations
- extend sgsubsystem class to optionally publish each subsystem's actual update interval (determined at runtime) to a specific property, this will allow simple nasal scripts to deal with any issues (i.e. show warnings) if a certain subsystem is not, or cannot be run at a certain update interval. As more and more complex subsystems are getting added to FlightGear this would add the possibility for automatic detection of subsystems that cannot be run at proper update intervals, i.e. due to old/slow hardware. Ultimately, this could also make it easier to add auto-scaling support to FlightGear.
- add support for vector images (SVG) to FlightGear, so that FlightGear can use vector images natively (should also reduce the base package size)
- add support to enable users to disable 3D cockpit rendering for multiplayer/AI aircraft
- extend nasal interpreter to provide functions for loading and saving XML files directly, preferably also wrapping the functions from props_io.cxx for nasal
- provide support for optional use of VoIP (voice over IP) clients within FlightGear, so that such clients can be used for ATC-specific purposes (there were various discussions with plenty of good ideas mentioned on the mailing list)
- merge AI and ATC code so that both work properly with each other
- add support for a TCAS implementation that honors multiplayer as well as AI traffic
- add support for flight path visualization within FlightGear, possibly so that it can optionally be enabled for external or replay views
- expose the nasal interpreter via network/telnet, so that scripts can be remotely inserted and executed.
- implement a flight director (using the current PID controller code)
- provide support for force-feedback input hardware and/or motion platforms
- for the development of more advanced avionics we will require a terminal procedures database (i.e. SIDs & STARs), this should be added to the base package, so that we can provide the corresponding data within FlightGear, its availability (memory consumption!) could be made optional using a corresponding property or new special instrument type.
- allow nasal code to be specified in instrument files
- allow nasal scripts in AI object XM files, so that nasal code can move AI objects along predefined routes
- allow instrument update interval to be configurable (export to property tree)
- strictly enforce usage of enum fg_nav_types in all FG code to isolate/protect other code from changes in the underlying navdb format
- add additional updates to the splash screen during startup, so that it is more responsive, possibly using some sort of progress bar
- allow aircraft to be reloadable at runtime (could be a first big step towards making aircraft switchable at runtime!)
- allow placing of objects/models directly from within FG, saving coordinates
- add support to metar code, to run update on demand (i.e. when user requests an update)
- the replay system is very nice, but it is not very convenient to use: improve usability
- add texture paging support to singear/flighgear
- allow the navdb to be reloaded at runtime, possibly differentiating between airports,navaids,fixes etc. - so that changes can take effect without having to restart FG
- implement support for dynamically augmented/replaced airport/navaid/fix data, this is something that has been repeatedly discussed on the devel list: Robin Peel's database is not necessarily accurate in every aspect, and we may eventually want to use additional information-that is currently not yet available in Peel's database and that may possibly never make it into his database, due to its focus on X-Plane. Thus, the suggested approach was to simply use an additional FG specific dataset, that could optionally augment or replace existing information. In particular we are talking of inaccurate airport and navaid data, but also of smaller airports that simply don't bear any relevance for the X-Plane database. So, the idea was to provide a facility that could enrich the current format for certain places. Most likely we could simply maintain a set of separate XML files for airports and navaids from the Peel database that should be overridden or augmented with custom data (based on the coordinates,ID etc). Depending on a runtime property variable, FlightGear could then optionally honor such data or not. Basically, we can only win, as we are still maintaining compatibility with the Peel database, but could nevertheless begin to add additional data-without requiring any changes to the Peel database or even its format, and whenever this should causing any trouble we could simply disable the feature.
- saving/loading flights is not very convenient, currently loading a flight requires the user to remember its path and filename, a better way would be some sort of file picker dialog, so that the user can actually browse his file system and view all files. Also, we will probably want to have some sort of standard location for saved flights, possibly in the ~/.fgfs home directory? Additionally, it may be desirable to save additional meta information with each flight (i.e. a description) so that we could show this information as some sort of preview for all flights that were saved.
- there is a great number of aircraft in FlightGear that cannot yet be reliably reset due to problems relating to tied properties that cannot properly be untied, obviously there are various parts in FlightGear that still do not make proper use of the property tree, we should get rid of such problems eventually
- Currently, TerraSync (the automatic scenery tile downloader) is a separate program, that users need to get, explicitly install and set up in order to be able to use it. Even moreso, due to TerraSync's dependency to rsync, TerraSync users are mostly Unix/Linux users right now. However, FlightGear being a cross platform project should whenever possible try to target a maximally broad audience. That's why it would probably make sense to port the TerraSync functionality over to FG, so that it can become a native part of FlightGear itself, preferably an SGSubsystem based service that's runtime configurable via property tree variables. At http://www.samba.org/rsync/ there is a small C library available that exposes most of the rsync features, we could make the library either an additional dependency or simply make it a part of FlightGear/SimGear, so that it's automatically available to all FG users.
- After each FlightGear session there are often many OpenAL related warnings displayed in the console, we should try to get rid of these wherever possible
- add support for texture based OpenGL cursors, so that we can specify arbitrary textures to be displayed as cursors. Currently, we support both, GLUT as well as SDL, so we should try to maintain compatibility with both libraries.
- provide a property in order to allow users to enable/disable scenery rendering at runtime, in particular this could also be useful for debugging sessions
- aircraft (FDM & 3D model) should be re-loadable at runtime
- provide support for an instrument transformation that emulates instrument illumination
- provide support for cockpit light sources, so that we can realistically illuminate the cockpit as a whole
- add an IRS/INS emulation for airliner-type aircraft
- add a LORAN emulation for long range flight
- it would be useful if we could add support for transformation to panel actions, so that certain actions could trigger a conditional transformation, affecting the displayed panel textures. This could for example be used in order to simulate "key presses", simply by reducing the texture's dimensions while the key is pressed.
- the property tree could benefit from some restructuring, particular the properties related to /instrumentation should eventually provide input/output attributes, so that we can easily rewire them dynamically, without hardwiring any code (i.e. in order to drive a VOR/HSI from multiple sources, such as a NavCom or GPS), this is something that David Megginson proposed already 3 years ago.
- allow to create/modify and save instruments hotspot regions directly from within FG, so that the process of creating 2D panels becomes less complicated
- add a new instrumentation system to emulate a MLS (microwave landing system)
- extend multiplayer code to add support for helicopters
- multiplayer: maintain a serverside list of aircraft that may connect to the server, this could be useful to prevent certain types of aircraft (i.e. UFO, santa, ogel etc) from appearing in more serious settings, likewise we could disallow certain aircraft with unfinished fdm
- maintain FDM "plausibility" values for all legitimate aircraft, so that the server can determine if a specific aircraft is able to achieve a certain performance (i.e. climb/descent,airspeed). This could be based on 10-20 figures for each aircraft, so that the server can interpolate between different situations and determine if the provided data is still accurate or not. Eventually this would also allow server admins to run certain 3D models only with certain FDMs.
- it would be nice if we could port the current PID controller code over to Nasal, so that we can automatically equip AI traffic instances with nasal based autopilots
- add support for pilot-controlled runway lighting
- allow airports and navaids to be searched for based on country/region (state)-this would probably require some shapefile information to be added to FG, so that we can look up countries/states for lon/lat pairs.
- add support for particle animations (i.e. smoke, sparks etc)
- improve visual weather effects (fog, rain, snow etc)
- currently, the replay system doesn't take animations, sub models and sounds into account
- add support to allow multiple views to be rendered simulatenously, so that we display arbitrary views within other views
- extend the multiplayer subsystem to support the DIS protocol
- consider adding VBO support
- allow replay flights to be resumed manually (this would be useful for instruction-like scenarios)
- use imposter objects for sky & distant scenery
- add support for multitexturing/texture blending
- Replace current PLIB/PUI based GUI bindings with bindings for a more feature-rich GUI (possibly SDL based)
- texture cropping support for 2D panels (see mailing list archives for discussions)
- add support for enhanced water modeling, so that we can start implementing water aircraft with floats etc.
- when aircraft are very low, the terrain/scenery looks only rarely convincing due to the fact that flat textures are applied to surfaces in order to illustrate vegetation, however this works only properly for higher altitudes, so it would be desirable if we could add support for dynamic vegetation modeling, so that grass, trees and other plants are dynamically created within a certain proximity.
- the navdb should eventually become a true SGSubsystem, it needs some serious revamping.
- basically all subsystems should be fully "suspend-able" and "reinit-able" at runtime, there are currently various subsystems that will consume CPU cycles even though they are not in fact necessarily required, affecting FlightGear's performance negatively. This is particularly the case for non-SGSubsystem based systems.
- the navdb & airports wrappers should eventually be moved to simgear, there are meanwhile various programs (i.e. atlas,taxidraw,fgsd,fgrun) relying on the very same code-using the copy&paste approach. It would be much cleaner and better if simgear coul provide the corresponding functionality. That way, we would also only have to fix any issues (i.e. changes in Robin Peel's db format) on ONE central place.
- add support for inter-texture copying to allow users to copy parts of a texture to another texture (see mailing list dicussions for details)
- The current Property Tree code is not thread safe, sooner or later it may come in handy if this feature was added
- Meanwhile, FlightGear has become a pretty monolothic piece of software, in the long run it would be desirable if the code could become somewhat more modularized and structured, eventually this should also make it easier for new contributors to get started.
- add support for decoding ESRI shapefiles, so that we can later on render them to a texture to be displayed on certain instruments, Dave Luff recently mentioned that he would need similar functionality for his KLN89, too. This would probably also be useful for scenery creation in general. http://freshmeat.net/projects/shapelib/ http://sourceforge.net/projects/shpread/
- Extend VRML/X3D or XGL support, so that proprietary formats such as *.ac can be entirely replaced using open standards
- Helicopter FDM: either extend current FDM engines (i.e. yasim) to provide better support for helicopter flight dynamics, or come up with an entirely new dedicated helicopter FDM engine altogether
- factor out weather subsystem, so that weather can be set up for specific locations (initially mainly airports and navaids (using radials, distances), later on possibly also landmarks and towns/areas), i.e. to provide weather for departure airport, enroute, destination and alternate. A good approach might be to simply convert the current weather subsystem into a METAR server, that way FlightGear could optionally provide its own local METAR server that can be easily set up using some sort of GUI (or the property tree) and still be easily polled for current weather using the METAR code that is already in place. This approach would also make it very feasible to interoperate with a multiplayer server.
- add support for integration with TTS (text to speech) engines to FlightGear (i.e. Festival), so that voice ATC becomes possible. There were various discussions about this topic on the mailing list, so you may want to search the archives if you are interested in this feature. Also, there is a free multi platform TTS engine called sphinx that is siginificantly more lightweight than festival, so that it may be worth considering this to make it an optional dependency for SimGear?
- add moving map functionality to FlightGear (i.e. integrate atlas natively into FlightGear), so that a basic map can be directly shown within FlightGear
- add support for adding, placing and modifying scenery objects within the scenery dynamically at runtime-possibly using the property tree to enumerate all active scenery objects, so that attributes can be changed at runtime
- eventually, it may become desirable to add unit testing support to those FlightGear subsystems/components that can be considered stable and that are thus unlikely to change significantly anytime soon, that way it should become much easier to track development problems early.
- implement support for dynamic LOD customization for aircraft at runtime, so that the detail level of aircraft models can be dynamically reduced/increases (the poly count, that is) on demand, currently multiplayer aircraft need to have their own separate (reduced) 3D model, so it would probably make sense to think about implementhing some sort of runtime configurable LOD algorithm that can return any 3D model with a customized detail level. This has been discussed various times on the mailing list (and is currently being discussed again).
- the current (2D/3D) cockpit panel code is not yet particularly efficient, would be good if someone could optimize it some more
- add support for tutorials/lessons (think, flight school) to FlightGear (see earlier mailing list discussions for details)
- Factor out AI traffic code in order to make it work with the multiplayer client code: incorporate the AI traffic system with the multiplayer system so that the AI traffic system becomes a special multi-aircraft client and can thus sort of 'inject' AI aircraft/traffic instances into multiplayer servers. Next abstract out the current AI traffic system so that it can be run as a standalone executable, that way multiplayer servers could optionally also run their own dedicated AI traffic clients that can connect to a multiplayer server (authentication permitting) in order to inject AI traffic (multiple AI aircraft instances) into a multiplayer server. Eventually, this would address issues concerning the discrepancy between multiplayer clients running with enabled AI traffic scenarios that are currently not yet synchronized. Ultimately, this would add the possibility to have server-side (AI traffic) scenarios for all connected multiplayer clients. Export all AI/multiplayer traffic nodes to local property tree, using a configurable range.
- More and more often, users of other flight simulators with lacking scenery support (such as Aerowinx Precision Sim) would like to use FlightGear in conjunction with their commercial simulator in order to create a FlightGear-based visual scenery representation. To some extent this works already quite well due to the possibility to provide an external/null FDM. However it is not uncommon to see more or less significant differences in the underlying databases (navaids, terrain, airports/runways),so that for example, navaids in other simulators do not match the positions in FlightGear and vice versa. Likewise, for airports and runways. Currently, the only workaround is to manually hardcode corresponding offsets in order to compensate for this. However, in the long run it would be nice if there was a standardized mechanism in FlightGear to automatically align databases for navaids, airports, runways, terran and possibly also important scenery objects (landmarks). This could probably be based on a mechanism to allow other simulators to request/send positional information for a navaid, airport/runway so that FlightGear could automatically compensate for differences by auto-aligning the corresponding coordinates at runtime. Preferably, something like this would be exposed via a network interface (i.e. telnet) so that it would become very straight forward to interface with FlightGear. In the long run, such a facility would also make it possible to use different sets of underlying data in FlightGear easily.
- Allow arbitrary custom views to be rendered to a texture, so that the created texture can be used to create instruments that feature some sort of "outside view", i.e. an advanced HUD or the external view of an A340 (camera mounted on the tail), this would enable us to show external views on an instrument in the cockpit panel. We only need something that allows us to define a custom instrument layer type that gets its contents from a specific user defined (or global) view.
- Currently, roads and rivers do not yet have a realistic curvature when their direction changes, rather there are pretty visible corners, it would be nice if someone could look into this in order to come up with a method to smoothen the directional transistion, so that a realistic curve can be rendered
- Extend the RenderTexture class to provide support for Frame Buffer Object based rendering to a texture, this is a relatively new way to support rendering to texture for platforms or OpenGL (driver) implementations that do not offer native RTT support, as it is the case for many older Linux cards: http://openvidia.sourceforge.net/fbo.shtml
- factor out current plib based scenegraph to allow integration with other scenegraphs, such as OSG (OpenSceneGraph). Adding support for OpenSceneGraph to FlightGear would also add support for mult-head displays, multiple rendering contexts as well as distributed rendering. If you are interested in this idea please make sure to search the mailing list archives at http://www.flightgear.org for "OpenSceneGraph", "OSG", "SSG" to get an impression of previous discussions about this topic.
- factor out scenery system to allow integration with other scenery systems (see mailing list discussions)
- factor out terrain system to allow integration with alternative terrain engines (see mailing list discussions)
- revamp scenery/terrain system in order to favor a non-tile based approach (see mailing list discussions concerning the use of quadtrees,octrees,kd-trees: http://www.sdss.jhu.edu/htm/index.html
- add support to optionally favor dynamic airport/runway creation at runtime over the pre-tesselated approach that is currently used, this would allow users to easily modify airports, possibly even at runtime-without having to re-create the corresponding scenery tile to make the changes take effect
- implement algorithms to feature dynamically adjustable (C)LOD/resolution for terrain data, as plans are being discussed to increase the resolution depth for upcoming scenery builds (SRTM), this would probably come in handy to allow users to adjust the terrain detail level according to their needs and hardware specs, otherwise we would probably face significant performance hits on lower end hardware, that is why it would make sense to allow users to configure the terrain resolution they'd like to use at runtime (i.e. 70% rather than 100% terrain features)
- Have FlightGear become its own IDE (integrated development environment) by allowing users to create and modify instruments directly within FlightGear, this would probably require a revamped (or more feature-rich) GUI toolkit than PLIB's PUI. Eventually, it would be desirable to allow users to pick instruments from the base package and place them at runtime on panels. For the majority of users this would be an essential steps towards improved usability.
- add support for automatically created scenery objects to populate the scenery dynamically at runtime (autogen-like), this could add quite a portion of realism to FlightGear without having to model scenery manually using fgsd, yet one could still use fgsd for areas where people are willing to contribute. All other scenery should by default be populated using autogen buildings and objects (references: http://www.infinitylab.com.au/research/prototypes.htm http://vterrain.org/Culture/BldCity/procedural.html bb )
Proposals Post 1.0
A New Architecture for FlightGear Flight Simulator
AJ MacLeod, Ampere K. Hardraade, Michael Koehne, Steve Knoblock
Keyword(s): MVC architecture; FDM Server; FDM Instance; Client
Abstract: To continue improving existing features and add new ones, FlightGear must make better use of computing power. Preparing for the widespread adoption of multicore CPU architectures is an important step in FlightGear's development. Today, CPU clock rate has reached its peak. The old idea, that features can be added without regard to their effect on performance because computers will become ever faster, has ceased to hold. In addition, as more features are added, developers are inceasingly bumping up against existing limitations in the current FlightGear architecture. Now would be a good time to begin the process of restructuring FlightGear to address the above issues. This proposal decribes a new architecture for FlightGear, one which would greatly improve FlightGear's efficiency and flexibility by making extensive use of parallel processing. It is also hope that this new architecture will improve the quality of multiuser sessions, as well as providing a true support for the simulations of time-critical systems.
Full document: A New Architecture for FlightGear Flight Simulator
Request: could we perhaps post the full document on the wiki, so that we can augment it on demand?