<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SammySkycrafts</id>
	<title>FlightGear wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SammySkycrafts"/>
	<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/Special:Contributions/SammySkycrafts"/>
	<updated>2026-04-29T13:05:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_April_2026&amp;diff=144064</id>
		<title>FlightGear Newsletter April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_April_2026&amp;diff=144064"/>
		<updated>2026-04-21T01:38:51Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Add info about WS3 only on next&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
NOTES TO EDITORS&lt;br /&gt;
&lt;br /&gt;
* Headings&lt;br /&gt;
  * DO NOT DELETE HEADINGS prior to final cleanup&lt;br /&gt;
  * Current headings and their order is merely a suggestion based on what have been used earlier&lt;br /&gt;
  * Changes made to headings or structure should also be copied the Newsletter template http://wiki.flightgear.org/User:Skybike/Template:This_months_newsletter/Newsletter_example&lt;br /&gt;
&lt;br /&gt;
* Final cleanup before write protecting&lt;br /&gt;
  * Remove unused headings&lt;br /&gt;
  * Remove {{Appendix}} if not used.&lt;br /&gt;
  * Update &amp;quot;Category: Changes after&amp;quot; to the FG version current at the 1st of this month&lt;br /&gt;
  * Finally remove this comment&lt;br /&gt;
  * Update [[Next Newsletter]] and [[FlightGear Newsletter]]&lt;br /&gt;
&lt;br /&gt;
* Discussion, issues and suggestions&lt;br /&gt;
  * Regarding this newsletter issue, please use the discussion page&lt;br /&gt;
  * Regarding the newsletter in general, primarily use the FlightGear Newsletter discussion page (Talk:FlightGear Newsletter)&lt;br /&gt;
  * Regarding this Newsletter template, please use FIXME&lt;br /&gt;
&lt;br /&gt;
+++   {{Newsletter-header|{{#time: F | 2026-04}}}}   +++&lt;br /&gt;
--&amp;gt;{{User:Skybike/Template:Newsletter-header-translate|2026-04}}&lt;br /&gt;
{{TOC_right|limit=2}}&lt;br /&gt;
''We would like to emphasize that the monthly newsletter cannot live without the contributions of FlightGear users and developers. Everyone with a wiki account (free to register) is welcome to contribute to the newsletter.  If you know about any FlightGear related news or projects such as for example updated scenery or aircraft, please do feel invited to add such news to the newsletter.''&lt;br /&gt;
&lt;br /&gt;
''The new Visual Editor makes editing the wiki as simple as using a Word-processor, and even easier than using the forum as you don't even need to know the syntax for a url. Just hit the 'edit' link and start.''&lt;br /&gt;
&lt;br /&gt;
== Development news ==&lt;br /&gt;
&amp;lt;!-- News about FlightGear itself.  The FlightGear mailing list and/or core developers are a good source. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Disclaimer|id=final-fixed-function-release}}--&amp;gt;&lt;br /&gt;
You can now report and track FGAddon (launcher) aircraft bugs over in the &amp;quot;Aircraft Issues&amp;quot; project, on the FlightGear bug tracker! If there is already an existing bug tracker or repository for an aircraft, we would prefer if issues were reported there instead. But if you are in doubt, create an issue and we can triage it and forward it on to the appropriate place, if that is not the FGAddon tracker. A link to the bug tracker can be found on the left of every wiki page, and at the top of every forum page. If you have a spare hour or 2, and fancy getting involved, we would love for you to come on over, choose an issue, and have a crack at fixing it!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt;, the development branch of FlightGear has moved exclusively to WS3. This marks a huge step in the transition and development of the new terrain model known as [[World Scenery 3.0|World Scenery 3]].&amp;lt;ref&amp;gt;{{Cite web/link|link=https://sourceforge.net/p/flightgear/mailman/message/59318483/|label=[Flightgear-devel] next now WS3.0 only, 2026-04-06 19:08:31}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Software tools and projects == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Those not being part of FlightGear itself, like for example OpenRadar, TerreMaster or flightgear-atc.alwaysdata.net. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the hangar ==&lt;br /&gt;
&amp;lt;!-- News about new and upgraded aircraft and related stuff. The official forum and other ones usually are a good source for this. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === New aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Updated aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Liveries === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Instruments === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Aircraft reviews === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scenery corner ==&lt;br /&gt;
&amp;lt;!-- Scenery development news --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Scenery Models === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Airports === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Land cover === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Osm2city === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === New OSM2City areas === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Interview with a contributor == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Suggested flights == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == AI == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI traffic === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI scenarios === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Community news ==&lt;br /&gt;
&amp;lt;!-- === FlightGear on YouTube === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- embed video as {{#ev:youtube|VCc6PwRI1LA}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Forum news === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Wiki updates === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Article of the month === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiplayer events ==&lt;br /&gt;
&amp;lt;!-- === Upcoming events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Finished events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == FlightGear events == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- For example presence at FSWeekend --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Hardware reviews == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Screenshot of the Month ==&lt;br /&gt;
&amp;lt;!--FlightGear's Screenshot of the Month {{#time: F | 2026-04}} 2026 is FIXME by {{usr|FIXME}}&lt;br /&gt;
ADD IMAGE --&amp;gt;&lt;br /&gt;
If you want to participate in the screenshot contest&amp;lt;!-- of {{#time: F | 2026-04 + 1month}}--&amp;gt;, you can submit your candidate to the {{forum link|title=this|f=88|t=}}. Be sure to see the first post for participation rules. For purposes of convenience and organization, at the end of the month or after 20 entries have been submitted, a new forum topic will be started containing all shots in an easy-to-view layout. The voting will then take place there.&amp;lt;!--Once the voting has finished, the best screenshot will be presented in the Newsletter edition of {{#time: F | 2026-04 + 1month}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Changes after 2024.1]]&amp;lt;!--Has a new version been released this month? Use previous version!--&amp;gt;&lt;br /&gt;
[[Category:FlightGear Newsletter|2026 04]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[de:FlightGear Newsletter {{#time: F Y | 2026-04 | de }}]]--&amp;gt;&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_April_2026&amp;diff=144063</id>
		<title>FlightGear Newsletter April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_April_2026&amp;diff=144063"/>
		<updated>2026-04-21T01:33:18Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Newsletter creation, automatic preload from here&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
NOTES TO EDITORS&lt;br /&gt;
&lt;br /&gt;
* Headings&lt;br /&gt;
  * DO NOT DELETE HEADINGS prior to final cleanup&lt;br /&gt;
  * Current headings and their order is merely a suggestion based on what have been used earlier&lt;br /&gt;
  * Changes made to headings or structure should also be copied the Newsletter template http://wiki.flightgear.org/User:Skybike/Template:This_months_newsletter/Newsletter_example&lt;br /&gt;
&lt;br /&gt;
* Final cleanup before write protecting&lt;br /&gt;
  * Remove unused headings&lt;br /&gt;
  * Remove {{Appendix}} if not used.&lt;br /&gt;
  * Update &amp;quot;Category: Changes after&amp;quot; to the FG version current at the 1st of this month&lt;br /&gt;
  * Finally remove this comment&lt;br /&gt;
  * Update [[Next Newsletter]] and [[FlightGear Newsletter]]&lt;br /&gt;
&lt;br /&gt;
* Discussion, issues and suggestions&lt;br /&gt;
  * Regarding this newsletter issue, please use the discussion page&lt;br /&gt;
  * Regarding the newsletter in general, primarily use the FlightGear Newsletter discussion page (Talk:FlightGear Newsletter)&lt;br /&gt;
  * Regarding this Newsletter template, please use FIXME&lt;br /&gt;
&lt;br /&gt;
+++   {{Newsletter-header|{{#time: F | 2026-04}}}}   +++&lt;br /&gt;
--&amp;gt;{{User:Skybike/Template:Newsletter-header-translate|2026-04}}&lt;br /&gt;
{{TOC_right|limit=2}}&lt;br /&gt;
''We would like to emphasize that the monthly newsletter cannot live without the contributions of FlightGear users and developers. Everyone with a wiki account (free to register) is welcome to contribute to the newsletter.  If you know about any FlightGear related news or projects such as for example updated scenery or aircraft, please do feel invited to add such news to the newsletter.''&lt;br /&gt;
&lt;br /&gt;
''The new Visual Editor makes editing the wiki as simple as using a Word-processor, and even easier than using the forum as you don't even need to know the syntax for a url. Just hit the 'edit' link and start.''&lt;br /&gt;
&lt;br /&gt;
== Development news ==&lt;br /&gt;
&amp;lt;!-- News about FlightGear itself.  The FlightGear mailing list and/or core developers are a good source. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Disclaimer|id=final-fixed-function-release}}--&amp;gt;&lt;br /&gt;
You can now report and track FGAddon (launcher) aircraft bugs over in the &amp;quot;Aircraft Issues&amp;quot; project, on the FlightGear bug tracker! If there is already an existing bug tracker or repository for an aircraft, we would prefer if issues were reported there instead. But if you are in doubt, create an issue and we can triage it and forward it on to the appropriate place, if that is not the FGAddon tracker. A link to the bug tracker can be found on the left of every wiki page, and at the top of every forum page. If you have a spare hour or 2, and fancy getting involved, we would love for you to come on over, choose an issue, and have a crack at fixing it!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Software tools and projects == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Those not being part of FlightGear itself, like for example OpenRadar, TerreMaster or flightgear-atc.alwaysdata.net. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the hangar ==&lt;br /&gt;
&amp;lt;!-- News about new and upgraded aircraft and related stuff. The official forum and other ones usually are a good source for this. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === New aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Updated aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Liveries === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Instruments === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Aircraft reviews === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scenery corner ==&lt;br /&gt;
&amp;lt;!-- Scenery development news --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Scenery Models === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Airports === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Land cover === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Osm2city === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === New OSM2City areas === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Interview with a contributor == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Suggested flights == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == AI == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI traffic === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI scenarios === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Community news ==&lt;br /&gt;
&amp;lt;!-- === FlightGear on YouTube === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- embed video as {{#ev:youtube|VCc6PwRI1LA}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Forum news === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Wiki updates === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Article of the month === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiplayer events ==&lt;br /&gt;
&amp;lt;!-- === Upcoming events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Finished events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == FlightGear events == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- For example presence at FSWeekend --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Hardware reviews == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Screenshot of the Month ==&lt;br /&gt;
&amp;lt;!--FlightGear's Screenshot of the Month {{#time: F | 2026-04}} 2026 is FIXME by {{usr|FIXME}}&lt;br /&gt;
ADD IMAGE --&amp;gt;&lt;br /&gt;
If you want to participate in the screenshot contest&amp;lt;!-- of {{#time: F | 2026-04 + 1month}}--&amp;gt;, you can submit your candidate to the {{forum link|title=this|f=88|t=}}. Be sure to see the first post for participation rules. For purposes of convenience and organization, at the end of the month or after 20 entries have been submitted, a new forum topic will be started containing all shots in an easy-to-view layout. The voting will then take place there.&amp;lt;!--Once the voting has finished, the best screenshot will be presented in the Newsletter edition of {{#time: F | 2026-04 + 1month}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Changes after 2024.1]]&amp;lt;!--Has a new version been released this month? Use previous version!--&amp;gt;&lt;br /&gt;
[[Category:FlightGear Newsletter|2026 04]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[de:FlightGear Newsletter {{#time: F Y | 2026-04 | de }}]]--&amp;gt;&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Skybike/Template:This_months_newsletter/Newsletter_example&amp;diff=144062</id>
		<title>User:Skybike/Template:This months newsletter/Newsletter example</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Skybike/Template:This_months_newsletter/Newsletter_example&amp;diff=144062"/>
		<updated>2026-04-21T01:32:04Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Add mention of FGAddon Aircraft Bug Tracker, located in the FG Gitlab.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{Informative template|1=&lt;br /&gt;
{{See also|User:Skybike/Template:This months newsletter}}&lt;br /&gt;
'''This''' is the right place for permanent changes to the newsletter structure and default segments. Don't hesitate to make your changes or even shorten it.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to the [[User:Skybike/Template:This months newsletter|&amp;lt;nowiki&amp;gt;{{This months newsletter}}&amp;lt;/nowiki&amp;gt;]] template it is no longer necessary to copy-paste an old newsletter and change the dates manually. The newsletter header supports to (pre)load '''this draft page''' automatically during creation of a new newsletter. Next to the newsletter header you can use one of these &amp;quot;Create Newsletter...&amp;quot; links below. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links to create newsletters: {{User:Skybike/Template:This months newsletter|date=now}}, {{User:Skybike/Template:This months newsletter|date=next month}}, {{User:Skybike/Template:This months newsletter|date=+2 months}}, &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;B&amp;gt;&amp;lt;big&amp;gt;Parameters for this draft&amp;lt;/big&amp;gt;&amp;lt;/B&amp;gt;{{-}}&lt;br /&gt;
The following $-parameters will be replaced during preload process: &lt;br /&gt;
* '''$1''' for month (01,02,...12)   &lt;br /&gt;
* '''$2''' for Year (like {{#time: Y | now}}).&lt;br /&gt;
* '''$3''' for current release ({{current release|cr}}) based on {{tl|current release|cr}}.&lt;br /&gt;
&lt;br /&gt;
The [https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time time function] supports more precise dates, like &lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#time: form |date |lang=xx}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; form is like F=FullMonthname and Y=Year, see below&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#time: F Y |$2-$1}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; for &amp;quot;''{{#time: F Y |{{CURRENTYEAR}}-{{CURRENTMONTH}}}}''&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Use &amp;lt;nowiki&amp;gt;&amp;lt;noin&amp;lt;/nowiki&amp;gt;clude&amp;lt;nowiki&amp;gt;&amp;gt; &amp;lt;/noin&amp;lt;/nowiki&amp;gt;clude&amp;gt; for notes to get ignored when preloading this draft into new newsletters (this template description).&lt;br /&gt;
*Use &amp;lt;nowiki&amp;gt;&amp;lt;includ&amp;lt;/nowiki&amp;gt;eonl&amp;lt;nowiki&amp;gt;y&amp;gt; &amp;lt;includeo&amp;lt;/nowiki&amp;gt;nly&amp;gt; for elements to not show up here but in a newsletter. (like Categories)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;B&amp;gt;&amp;lt;big&amp;gt;Note to Translators&amp;lt;/big&amp;gt;&amp;lt;/B&amp;gt;{{-}}&lt;br /&gt;
The newsletter system fully supports translations. Currently there is only German but feel free to to add your language here.&lt;br /&gt;
* [[User:Skybike/Template:This months newsletter/De/Newslettervorlage|German]]&lt;br /&gt;
You would need to add your translation into [[User:Skybike/Template:This months newsletter|This months newsletter]], [[User:Skybike/Template:Newsletter-header-translate|Newsletter-header-translate]] and create new versions of this draft as well as [[FlightGear Newsletter]].&lt;br /&gt;
&amp;lt;!--[[Category:FlightGear Newsletter]]--&amp;gt;&lt;br /&gt;
}}&amp;lt;/noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
NOTES TO EDITORS&lt;br /&gt;
&lt;br /&gt;
* Headings&lt;br /&gt;
  * DO NOT DELETE HEADINGS prior to final cleanup&lt;br /&gt;
  * Current headings and their order is merely a suggestion based on what have been used earlier&lt;br /&gt;
  * Changes made to headings or structure should also be copied the Newsletter template http://wiki.flightgear.org/User:Skybike/Template:This_months_newsletter/Newsletter_example&lt;br /&gt;
&lt;br /&gt;
* Final cleanup before write protecting&lt;br /&gt;
  * Remove unused headings&lt;br /&gt;
  * Remove {{Appendix}} if not used.&lt;br /&gt;
  * Update &amp;quot;Category: Changes after&amp;quot; to the FG version current at the 1st of this month&lt;br /&gt;
  * Finally remove this comment&lt;br /&gt;
  * Update [[Next Newsletter]] and [[FlightGear Newsletter]]&lt;br /&gt;
&lt;br /&gt;
* Discussion, issues and suggestions&lt;br /&gt;
  * Regarding this newsletter issue, please use the discussion page&lt;br /&gt;
  * Regarding the newsletter in general, primarily use the FlightGear Newsletter discussion page (Talk:FlightGear Newsletter)&lt;br /&gt;
  * Regarding this Newsletter template, please use FIXME&lt;br /&gt;
&lt;br /&gt;
+++   {{Newsletter-header|{{#time: F | $2-$1}}}}   +++&lt;br /&gt;
--&amp;gt;{{User:Skybike/Template:Newsletter-header-translate|&amp;lt;includeonly&amp;gt;$2-$1&amp;lt;/includeonly&amp;gt;}}&lt;br /&gt;
{{TOC_right|limit=2}}&lt;br /&gt;
''We would like to emphasize that the monthly newsletter cannot live without the contributions of FlightGear users and developers. Everyone with a wiki account (free to register) is welcome to contribute to the newsletter.  If you know about any FlightGear related news or projects such as for example updated scenery or aircraft, please do feel invited to add such news to the newsletter.''&lt;br /&gt;
&lt;br /&gt;
''The new Visual Editor makes editing the wiki as simple as using a Word-processor, and even easier than using the forum as you don't even need to know the syntax for a url. Just hit the 'edit' link and start.''&lt;br /&gt;
&lt;br /&gt;
== Development news ==&lt;br /&gt;
&amp;lt;!-- News about FlightGear itself.  The FlightGear mailing list and/or core developers are a good source. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Disclaimer|id=final-fixed-function-release}}--&amp;gt;&lt;br /&gt;
You can now report and track FGAddon (launcher) aircraft bugs over in the &amp;quot;Aircraft Issues&amp;quot; project, on the FlightGear bug tracker! If there is already an existing bug tracker or repository for an aircraft, we would prefer if issues were reported there instead. But if you are in doubt, create an issue and we can triage it and forward it on to the appropriate place, if that is not the FGAddon tracker. A link to the bug tracker can be found on the left of every wiki page, and at the top of every forum page. If you have a spare hour or 2, and fancy getting involved, we would love for you to come on over, choose an issue, and have a crack at fixing it!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Software tools and projects == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Those not being part of FlightGear itself, like for example OpenRadar, TerreMaster or flightgear-atc.alwaysdata.net. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the hangar ==&lt;br /&gt;
&amp;lt;!-- News about new and upgraded aircraft and related stuff. The official forum and other ones usually are a good source for this. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === New aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Updated aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Liveries === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Instruments === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Aircraft reviews === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scenery corner ==&lt;br /&gt;
&amp;lt;!-- Scenery development news --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Scenery Models === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Airports === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Land cover === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Osm2city === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === New OSM2City areas === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Interview with a contributor == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Suggested flights == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == AI == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI traffic === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI scenarios === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Community news ==&lt;br /&gt;
&amp;lt;!-- === FlightGear on YouTube === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- embed video as {{#ev:youtube|VCc6PwRI1LA}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Forum news === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Wiki updates === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Article of the month === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiplayer events ==&lt;br /&gt;
&amp;lt;!-- === Upcoming events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Finished events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == FlightGear events == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- For example presence at FSWeekend --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Hardware reviews == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Screenshot of the Month ==&lt;br /&gt;
&amp;lt;!--FlightGear's Screenshot of the Month {{#time: F | $2-$1}} $2 is FIXME by {{usr|FIXME}}&lt;br /&gt;
ADD IMAGE --&amp;gt;&lt;br /&gt;
If you want to participate in the screenshot contest&amp;lt;!-- of {{#time: F | $2-$1 + 1month}}--&amp;gt;, you can submit your candidate to the {{forum link|title=this|f=88|t=}}. Be sure to see the first post for participation rules. For purposes of convenience and organization, at the end of the month or after 20 entries have been submitted, a new forum topic will be started containing all shots in an easy-to-view layout. The voting will then take place there.&amp;lt;!--Once the voting has finished, the best screenshot will be presented in the Newsletter edition of {{#time: F | $2-$1 + 1month}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Changes after $3]]&amp;lt;/includeonly&amp;gt;&amp;lt;!--Has a new version been released this month? Use previous version!--&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:FlightGear Newsletter|$2 $1]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&amp;lt;!--[[de:FlightGear Newsletter {{#time: F Y | $2-$1 | de }}]]--&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Newsletter templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_March_2026&amp;diff=144061</id>
		<title>FlightGear Newsletter March 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_March_2026&amp;diff=144061"/>
		<updated>2026-04-21T01:26:39Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
NOTES TO EDITORS&lt;br /&gt;
&lt;br /&gt;
* Headings&lt;br /&gt;
  * DO NOT DELETE HEADINGS prior to final cleanup&lt;br /&gt;
  * Current headings and their order is merely a suggestion based on what have been used earlier&lt;br /&gt;
  * Changes made to headings or structure should also be copied the Newsletter template http://wiki.flightgear.org/User:Skybike/Template:This_months_newsletter/Newsletter_example&lt;br /&gt;
&lt;br /&gt;
* Final cleanup before write protecting&lt;br /&gt;
  * Remove unused headings&lt;br /&gt;
  * Remove {{Appendix}} if not used.&lt;br /&gt;
  * Update &amp;quot;Category: Changes after&amp;quot; to the FG version current at the 1st of this month&lt;br /&gt;
  * Finally remove this comment&lt;br /&gt;
  * Update [[Next Newsletter]] and [[FlightGear Newsletter]]&lt;br /&gt;
&lt;br /&gt;
* Discussion, issues and suggestions&lt;br /&gt;
  * Regarding this newsletter issue, please use the discussion page&lt;br /&gt;
  * Regarding the newsletter in general, primarily use the FlightGear Newsletter discussion page (Talk:FlightGear Newsletter)&lt;br /&gt;
  * Regarding this Newsletter template, please use FIXME&lt;br /&gt;
&lt;br /&gt;
+++   {{Newsletter-header|{{#time: F | 2026-03}}}}   +++&lt;br /&gt;
--&amp;gt;{{User:Skybike/Template:Newsletter-header-translate|2026-03}}&lt;br /&gt;
{{TOC_right|limit=2}}&lt;br /&gt;
''We would like to emphasize that the monthly newsletter cannot live without the contributions of FlightGear users and developers. Everyone with a wiki account (free to register) is welcome to contribute to the newsletter.  If you know about any FlightGear related news or projects such as for example updated scenery or aircraft, please do feel invited to add such news to the newsletter.''&lt;br /&gt;
&lt;br /&gt;
''The new Visual Editor makes editing the wiki as simple as using a Word-processor, and even easier than using the forum as you don't even need to know the syntax for a url. Just hit the 'edit' link and start.''&lt;br /&gt;
&lt;br /&gt;
== Development news ==&lt;br /&gt;
&amp;lt;!-- News about FlightGear itself.  The FlightGear mailing list and/or core developers are a good source. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Disclaimer|id=final-fixed-function-release}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.flightgear.org/download/releases/2024-1-5/ FlightGear 2024.1.5] has released.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can now report and track FGAddon (launcher) aircraft bugs over in the &amp;quot;Aircraft Issues&amp;quot; project, on the FlightGear bug tracker! A link can be found on the left of every wiki page, and at the top of every forum page. If you have a spare hour or 2, and fancy getting started with aircraft development at a basic level, we would love for you to come on over, choose an issue, and have a crack at fixing it!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Software tools and projects == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Those not being part of FlightGear itself, like for example OpenRadar, TerreMaster or flightgear-atc.alwaysdata.net. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the hangar ==&lt;br /&gt;
&amp;lt;!-- News about new and upgraded aircraft and related stuff. The official forum and other ones usually are a good source for this. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === New aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Updated aircraft === --&amp;gt;&lt;br /&gt;
==== McDonnell Douglas MD-11 ====&lt;br /&gt;
The [[McDonnell Douglas MD-11]] has received an improved fuel system and the SD synoptic, amongst other improvements&lt;br /&gt;
&lt;br /&gt;
* Further detailed the simulation of fuel pumps&lt;br /&gt;
* Fuel pumps can now be individually failed resulting in appropriate consequences&lt;br /&gt;
* FSC now turns off and compensates for failed fuel pumps&lt;br /&gt;
* Simulated manifold valve between upper/lower manifolds&lt;br /&gt;
* Crossfeeds have been fixed, if all pumps on a tank fail, you can now feed the engine through the transfer pump to the crossfeed of the same tank/engine&lt;br /&gt;
* APU Start Pump logic corrected, shuts down automatically 90 seconds after AC power is available and the appropriate tank 2 pump activates&lt;br /&gt;
* If upper aux tank pumps fail, lower aux tank and tail tank can now feed directly into main tanks via the auxiliary fill isolation valve, preventing trapping more fuel&lt;br /&gt;
* Engine suction feed logic improved&lt;br /&gt;
* Misc minor improvements&lt;br /&gt;
&lt;br /&gt;
[[File:MD-11-Fuel-Synoptic.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Liveries === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Instruments === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Aircraft reviews === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scenery corner ==&lt;br /&gt;
&amp;lt;!-- Scenery development news --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Scenery Models === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Airports === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Land cover === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Osm2city === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === New OSM2City areas === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Interview with a contributor == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Suggested flights == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == AI == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI traffic === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === AI scenarios === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Community news ==&lt;br /&gt;
&amp;lt;!-- === FlightGear on YouTube === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- embed video as {{#ev:youtube|VCc6PwRI1LA}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Forum news === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Wiki updates === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Article of the month === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiplayer events ==&lt;br /&gt;
&amp;lt;!-- === Upcoming events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Finished events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == FlightGear events == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- For example presence at FSWeekend --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Hardware reviews == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Screenshot of the Month ==&lt;br /&gt;
&amp;lt;!--FlightGear's Screenshot of the Month {{#time: F | 2026-03}} 2026 is FIXME by {{usr|FIXME}}&lt;br /&gt;
ADD IMAGE --&amp;gt;&lt;br /&gt;
If you want to participate in the screenshot contest&amp;lt;!-- of {{#time: F | 2026-03 + 1month}}--&amp;gt;, you can submit your candidate to the {{forum link|title=this|f=88|t=}}. Be sure to see the first post for participation rules. For purposes of convenience and organization, at the end of the month or after 20 entries have been submitted, a new forum topic will be started containing all shots in an easy-to-view layout. The voting will then take place there.&amp;lt;!--Once the voting has finished, the best screenshot will be presented in the Newsletter edition of {{#time: F | 2026-03 + 1month}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Changes after 2024.1]]&amp;lt;!--Has a new version been released this month? Use previous version!--&amp;gt;&lt;br /&gt;
[[Category:FlightGear Newsletter|2026 03]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[de:FlightGear Newsletter {{#time: F Y | 2026-03 | de }}]]--&amp;gt;&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Aircraft&amp;diff=144060</id>
		<title>Aircraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Aircraft&amp;diff=144060"/>
		<updated>2026-04-21T01:15:36Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update wording encouraging users to use the inbuilt launcher to download aircraft rather than directly from FGAddon SVN if they do not have a need, as this is now possible in Stable builds&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:FlightGear Launcher Aircraft Tab.png|thumb|The FlightGear Qt launcher, showing a handful of the aircraft that are able to be downloaded or updated from the FGAddon repository.]]&lt;br /&gt;
&lt;br /&gt;
This list is not updated to include all the official [[GNU General Public License|GPL licensed]] aircraft for [[FlightGear]], but gives a visual sampling of the different types of aircraft and genres of aircraft officially available.&lt;br /&gt;
&lt;br /&gt;
Most models shown here are available from the official FlightGear project and can be downloaded from the FlightGear launcher, with no additional steps required for installation. Alternatively these aircraft can be obtained directly from the [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/ FGAddon SVN repository]. If the aircraft is installed manually, you will lose the ability to check for, and install updates from within the launcher. Some models shown here are available from [[FlightGear hangars|non-official hangars]].&lt;br /&gt;
&lt;br /&gt;
FlightGear aircraft features, quality, and compatibility vary significantly. Their development is dependent on the [[volunteer]]s who worked on them, with exception of some University and Government funded projects. Aircraft are listed by completeness status in [[:Category:Aircraft by status]].&lt;br /&gt;
&lt;br /&gt;
To edit this list, see here: [[Template:Model_Gallery]].&lt;br /&gt;
&lt;br /&gt;
=== Light civilian aircraft ===&lt;br /&gt;
The Cessna 172 is the default aircraft in FGFS 2.0. These aircraft typically have 1-2 piston engines, props, and avionics geared towards those with civilian pilot licenses.&lt;br /&gt;
{{Model Gallery | section=light_civilian_aircraft}}&lt;br /&gt;
&lt;br /&gt;
===Business Jets===&lt;br /&gt;
Smaller aircraft with 1-2 turbofan engines, usually used by businesses and private companies.&lt;br /&gt;
{{Model Gallery| section=business_jets}}&lt;br /&gt;
&lt;br /&gt;
===Airliners===&lt;br /&gt;
These typically have 2-4 turbofan engines and some of the more complicated takeoff and landing procedures (such as multiple [[flaps]]).&lt;br /&gt;
&lt;br /&gt;
See [[Airliner development status]] for more info.&lt;br /&gt;
&lt;br /&gt;
====Narrowbody &amp;amp; Midsize====&lt;br /&gt;
{{Model Gallery| section=modern_airliners_narrowbody_midsize}}&lt;br /&gt;
&lt;br /&gt;
====Widebody &amp;amp; Jumbo Airliners====&lt;br /&gt;
{{Model Gallery| section=modern_airliners_widebody_jumbo}}&lt;br /&gt;
&lt;br /&gt;
===Helicopters===&lt;br /&gt;
{{Main article|Helicopter}}&lt;br /&gt;
&lt;br /&gt;
Helicopters have fundamentally different controls than fixed wing aircraft (see ''[[Flying the Helicopter]]''). Modern helicopter typically feature 1-2 turbine engines, which power a main rotor with 2-6 blades.&lt;br /&gt;
{{Model Gallery| section=helicopters}}&lt;br /&gt;
&lt;br /&gt;
===Gliders, Sailplanes, &amp;amp; Ultralights===&lt;br /&gt;
These typically have the simplest controls, with minimal avionics. Flying [[:Category:Gliders|gliders]] or sailplanes using [[Soaring|thermals]] can provide more complicated experience. Ultralights on the other hand are among the simplest aircraft in FG.&lt;br /&gt;
{{Model Gallery| section=ultra_light}}&lt;br /&gt;
&lt;br /&gt;
===Warbirds===&lt;br /&gt;
FlightGear includes a wide variety of vintage military aircraft. Complexity and realism is typically tied to the level of development work with a specific aircraft.&lt;br /&gt;
{{Model Gallery| section=warbirds}}&lt;br /&gt;
&lt;br /&gt;
===Carrier-borne aircraft===&lt;br /&gt;
FlightGear supports landing on and taking off from [[carriers]].&lt;br /&gt;
{{Model Gallery| section=carrier_borne_aircraft}}&lt;br /&gt;
&lt;br /&gt;
===Modern military aircraft ===&lt;br /&gt;
FlightGear has a wide variety of modern and retired military jets available, highlighted by features such as air-to-air refueling from the venerable KC-135 and the ability to simulate A-10 ordnance release.&lt;br /&gt;
{{Model Gallery| section=modern_military_aircraft}}&lt;br /&gt;
&lt;br /&gt;
===Historical===&lt;br /&gt;
Many obscure to famous older aircraft of varying quality are available.&lt;br /&gt;
{{Model Gallery| section=historical_aircraft}}&lt;br /&gt;
&lt;br /&gt;
===Experimental &amp;amp; Unique===&lt;br /&gt;
Experimental and special purpose aircraft. &lt;br /&gt;
{{Model Gallery| section=experimental}}&lt;br /&gt;
&lt;br /&gt;
===Lighter than air aircraft (Available from version 1.9.0)===&lt;br /&gt;
These aircraft take advantage of lighter than air gas to become buoyant. In addition to typical aircraft control methods such as elevator, rudder and engine throttle, ballast and control of gas volume and pressure become options.&lt;br /&gt;
{{Model Gallery| section=lighter_than_air}}&lt;br /&gt;
&lt;br /&gt;
===Science Fiction===&lt;br /&gt;
Alternative models provide a diversion of realistic simulation, but can also be useful for exploring scenery.&lt;br /&gt;
{{Model Gallery| section=science_fiction}}&lt;br /&gt;
&lt;br /&gt;
===Spacecraft===&lt;br /&gt;
Things that show how small our planet Earth really is.&lt;br /&gt;
{{Model Gallery| section=spacecraft}}&lt;br /&gt;
&lt;br /&gt;
==See Also ==&lt;br /&gt;
*[[Howto:Make an aircraft]]&lt;br /&gt;
* [[How to install aircraft]]&lt;br /&gt;
*[[Aircraft deployment]]&lt;br /&gt;
*[[Airliner Development Status]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Page settings after this --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[it:Aerei]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
[[Category:Aircraft| ]]&lt;br /&gt;
&lt;br /&gt;
[[ca:Aeronau]]&lt;br /&gt;
[[de:Flugzeuge]]&lt;br /&gt;
[[es:Avión]]&lt;br /&gt;
[[fa:هواپیما]]&lt;br /&gt;
[[fi:Lentokoneet]]&lt;br /&gt;
[[fr:Avions]]&lt;br /&gt;
[[nl:Luchtvaartuigen]]&lt;br /&gt;
[[pl:Samoloty]]&lt;br /&gt;
[[pt:Avião]]&lt;br /&gt;
[[ru:Самолет]]&lt;br /&gt;
[[zh:插件飞机]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:FlightGear_Launcher_Aircraft_Tab.png&amp;diff=144059</id>
		<title>File:FlightGear Launcher Aircraft Tab.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:FlightGear_Launcher_Aircraft_Tab.png&amp;diff=144059"/>
		<updated>2026-04-21T01:11:14Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Uploaded own work with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=The FlightGear Qt launcher, showing just some of the aircraft that are able to be downloaded or updated from the FGAddon repository.}}&lt;br /&gt;
|date=2026-04-21&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:SammySkycrafts|Rhys Ackerman]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{self|cc-by-sa-4.0}}&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Air_traffic_control&amp;diff=144057</id>
		<title>Air traffic control</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Air_traffic_control&amp;diff=144057"/>
		<updated>2026-04-21T00:59:03Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Re-Add &amp;quot;Stub&amp;quot; template. I feel that it was prematurely removed and the article was not expanded in any meaningful way with additional information, there was purely just formatting changes and links to other pages. There could be a lot more added here such as limitations, even linking into things like vatsim support as possible alternatives to the limited integrated fg atc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
'''Air traffic control''' (ATC) is a service mostly provided by ground-based controllers who direct aircraft on the ground and in the air. The primary purpose of ATC systems worldwide is to separate aircraft to prevent collisions, to organize and expedite the flow of traffic, and to provide information and other support for pilots when able. ATC also plays a security or defence role or is run entirely by the military in some countries.&lt;br /&gt;
&lt;br /&gt;
For the common phraseologies and their meanings, see [[ATC phraseology]].&lt;br /&gt;
&lt;br /&gt;
== Addons related to ATC ==&lt;br /&gt;
* [[Spoken ATC]] allows the pilot to listen to the directives of the Air Traffic Controller.&lt;br /&gt;
* [[Red Griffin ATC]] is a speaking Air Traffic Controller Addon for FlightGear.&lt;br /&gt;
&lt;br /&gt;
== ATC in FlightGear multi-player ==&lt;br /&gt;
To know if an area is controlled or booked:&lt;br /&gt;
* Check for announced ATC sessions on [http://flightgear-atc.alwaysdata.net/ Lenny's website].&lt;br /&gt;
* Check the Pilot List in FlightGear or the [[MPMap|Multiplayer map]]. Usually, controllers:&lt;br /&gt;
** have a callsign ''XXXX_DE'', ''XXXX_GN'', ''XXXX_TW'' or ''XXXX_AP'' (where ''XXXX'' is the ICAO code of the airport they are manning);&lt;br /&gt;
** generally use ''[[OpenRadar]]'' or ''[[ATC-pie]]'', which appear as aircraft models on the map, or older ''ATC-*'' named models.&lt;br /&gt;
&lt;br /&gt;
=== For pilots ===&lt;br /&gt;
* [[ATC Tutorial]]&lt;br /&gt;
* [[ATC best practices#For pilots|Best practices]]&lt;br /&gt;
* [[SquawkGear|Connecting to Vatsim]]&lt;br /&gt;
&lt;br /&gt;
=== For controllers ===&lt;br /&gt;
* [[ATC best practices#For controllers|Best practices]]&lt;br /&gt;
* &amp;quot;[http://flightgear-atc.alwaysdata.net Lenny's website]&amp;quot; is today's ''de facto'' ATC platform featuring a [[Flight_planning|flight plan]] database, tutorials and resources, software downloads, and a schedule where ATCs announce their session and let pilots know when and which airport will be controlled&lt;br /&gt;
&lt;br /&gt;
Software for controlling on FlightGear:&lt;br /&gt;
* Standalone programs for more realistic experience: [[OpenRadar]], [[ATC-pie]]&lt;br /&gt;
* FG aircraft like [[ATC-FS]], an ATC model with flight strips&lt;br /&gt;
&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
[[it:Controllo Traffico Aereo]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Carrier_over_MP&amp;diff=143983</id>
		<title>Carrier over MP</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Carrier_over_MP&amp;diff=143983"/>
		<updated>2026-04-13T21:46:55Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update Carrier over MP page to clarify correct and up to date information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Carrier over MP''' is available in [[FlightGear]] 2.0.0 and later and makes it possible to command the [[Howto: Carrier|Nimitz]] and other [[aircraft carrier]]s. Other pilots on the [[Howto: Multiplayer|multiplayer network]] can ''elect'' to be able to see and land on the carrier controlled by the MP carrier player.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
===FlightGear 2.0.0 and later===&lt;br /&gt;
{{Note|It is not enough that you can see carriers in AI mode. You have to have the MPCarrier package installed to be able to see multiplayer carriers}}&lt;br /&gt;
This can easily be accomplished by using the [[FlightGear_Qt_launcher]] and downloading the MP Carrier package. Downloading from here will also mean that you will automatically be prompted when updates to the package are available.&lt;br /&gt;
&lt;br /&gt;
[[File:FlightGear FGAddon MPCarrier.png|thumb|Screenshot of the FlightGear Launcher with the MP Carrier package selected|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can download directly from the FGAddon SVN located at https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Aircraft/MPCarrier/. You will not be prompted when updates are available if you manually download from SVN.&lt;br /&gt;
&lt;br /&gt;
===FlightGear 1.9.1===&lt;br /&gt;
{{Caution|This section refers to a version of FlightGear released in 2009. As a result, its instructions are out of date. Please refer to the &amp;quot;FlightGear 2.0.0 and later&amp;quot; section for up to date instructions.}}&lt;br /&gt;
The download for the [http://www.gidenstam.org/FlightGear/misc/Carrier_over_MP/MPCarrier_fgfs1.9.1.tar.gz MPCarrier aircraft archive] is available here: http://www.gidenstam.org/FlightGear/misc/Carrier_over_MP/&lt;br /&gt;
&lt;br /&gt;
# Unpack the archive into &amp;lt;tt&amp;gt;data/Aircraft&amp;lt;/tt&amp;gt;. For windows users, you can use 7zip and apply it twice (one to unzip, one to untar), until you've got the MPCarrier folder. Once MPCarrier in your Aircraft directory, you will find a new &amp;quot;aircraft&amp;quot; called 'nimitz' in your aircraft list.&lt;br /&gt;
# Make sure that the AI scenario nimitz_demo is active.&lt;br /&gt;
# To see a mp carrier, set the property: /sim/mp-carriers/nimitz-callsign (see below &amp;quot;important&amp;quot;)&lt;br /&gt;
# Optional: To get a MPCarrier dialog entry in the Network menu. Apply the changes in mpcarrier_menubar.diff to FG_ROOT/gui/menubar.xml. The diff is for FlightGear/CVS. However, the structure of menubar.xml is so simple that I expect almost anyone could figure out how to add the menu entry :)&lt;br /&gt;
&lt;br /&gt;
==Commander/Captain of the Carrier==&lt;br /&gt;
===Starting FlightGear ===&lt;br /&gt;
Command the Nimitz:&lt;br /&gt;
 % fgfs --aircraft=nimitz&lt;br /&gt;
Command the Eisenhower:&lt;br /&gt;
 % fgfs --aircraft=eisenhower&lt;br /&gt;
&lt;br /&gt;
(same for Clemenceau and Vinson).&lt;br /&gt;
&lt;br /&gt;
Command the Nimitz for MP operation:&lt;br /&gt;
 % fgfs --aircraft=nimitz --callsign='Nimitz7' --multiplay=...&lt;br /&gt;
&lt;br /&gt;
===Commanding the Carrier ===&lt;br /&gt;
Here are some principal tips:&lt;br /&gt;
*First see the aircraft help. Press '?'.&lt;br /&gt;
*To change orientation and position of the carrier (apart from using the rudder and speed, but that take a long time to cross ocean :) ), you can use the properties. You need to change the properties of the ai-carrier you are driving, e.g. for the Nimitz,find the /ai/models/carrier[i] that got Nimitz as name. Use the [[Property_browser]] to do so:&lt;br /&gt;
** In /ai/models/carrier[i]/position/ you can change lat, and lon to put it where you want (note that specifying lon/lat on the command line or in menu &amp;quot;Location-&amp;gt;Position Aircaft in Air&amp;quot; will not have an effect).&lt;br /&gt;
** In /ai/models/carrier[i]/orientation you can make it face wind. Facing wind is important (with real weather fetch) to make the FLOLS green on approach.&lt;br /&gt;
*Set speed using PgUp/PgDown in manual control.&lt;br /&gt;
*To have a better sync between the pilots using the Nimitz, consider keeping a speed of 0 so that there's no drift between pilots.&lt;br /&gt;
&lt;br /&gt;
==Pilot Using the Carrier==&lt;br /&gt;
&lt;br /&gt;
=== On 2024.1 and later===&lt;br /&gt;
&lt;br /&gt;
Things will work without any special configuration.&lt;br /&gt;
&lt;br /&gt;
Flightgear will automatically enable the appropriate matching AI scenario when an MP carrier appears.&lt;br /&gt;
&lt;br /&gt;
====Latching carriers====&lt;br /&gt;
&lt;br /&gt;
By default Flightgear uses Nasal to periodically change the AI carrier's velocity to make it approximately follow the MP carrier.&lt;br /&gt;
&lt;br /&gt;
One can instead force the AI carrier to exactly follow the position and orientation of the MP carrier (done in C++ in each frame), by checking '''Always latch MP and AI carrier''' in the '''Multiplayer Settings''' dialogue (menu '''Multiplayer/Multiplayer Settings''').&lt;br /&gt;
&lt;br /&gt;
This can work much better but requires that MP motion is smooth, e.g. by using [[Real Time manual|Real Time]] or [[Simple-time]] - see menu '''File/Time Mode'''.&lt;br /&gt;
&lt;br /&gt;
For more information, see: {{flightgear file|docs-mini/README-mp-carriers.md}}&lt;br /&gt;
&lt;br /&gt;
===On 2020.3 and earlier ===&lt;br /&gt;
&lt;br /&gt;
NB: You need to know which callsign and which carrier model to use. &lt;br /&gt;
&lt;br /&gt;
Make sure to enable the AI scenario for the corresponding carrier (e.g. nimitz_demo if the model is the Nimitz).&lt;br /&gt;
&lt;br /&gt;
====From the Launcher====&lt;br /&gt;
The easiest way to configure your FlightGear session for an MP carrier is to use the Launcher like in the picture (the model is the Vinson and the callsign is OPFOR21 in the example). [[File:MP carrier settings in launcher.png|thumb|In the &amp;quot;Settings&amp;quot; tab under &amp;quot;Additional Settings&amp;quot; provide the necessary command-line arguments]] &lt;br /&gt;
&lt;br /&gt;
==== From the Command Line====&lt;br /&gt;
It is also possible to select MP carrier players from the command line using the following --prop: argument (change &amp;quot;nimitz&amp;quot; in 2 places to the carrier actually in use):&lt;br /&gt;
 % fgfs --ai-scenario=nimitz_demo --prop:/sim/mp-carriers/nimitz-callsign=&amp;lt;callsign of the player commanding mp-nimitz&amp;gt;  --multiplay=.....&lt;br /&gt;
&lt;br /&gt;
For the Vinson it could e.g. be:&lt;br /&gt;
 % fgfs --ai-scenario=vinson_demo --prop:/sim/mp-carriers/vinson-callsign=MP-029X  --multiplay=.....&lt;br /&gt;
&lt;br /&gt;
There is no need that the callsign reflects the TACAN setting - it is just a possible pattern do make it easier for others to use. There is no need to specify the --multiplay option either, if you are using the FlightGear launcher.&lt;br /&gt;
&lt;br /&gt;
====Within the Session====&lt;br /&gt;
An alternative way to enable MP control of a carrier when on the multiplayer network use the MP carrier dialog available from Multiplayer-&amp;gt;&amp;quot;MPCarrier selection&amp;quot; to select which MP carrier players you wish to see. A pre-requisite is that you already have the parameters set-up as per above.&lt;br /&gt;
&lt;br /&gt;
[[File:MPCarrier-dialog.png|thumb|center|The MPCarrier selection dialog. The user 'Nimitz' is currently selected as the controller of the carrier Nimitz.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Important====&lt;br /&gt;
&lt;br /&gt;
As a pilot you have to run by the books:&lt;br /&gt;
*Have the MPCarrier downloaded (The fact that you see the carrier when running AI scenarios is not enough proof that you actually have the MPCarrier. Try to find it in the aircraft dialog. If it is there, then you are good).&lt;br /&gt;
*You need to set the --prop:/... correct (note the carrier model name in the string before &amp;quot;-callsign&amp;quot;). This ensures that MPCarriers won't interfer with the normal AI scenarios.&lt;br /&gt;
*You need to have the corresponding AI scenario activated.&lt;br /&gt;
*In the AI scenarios you can find the carrier from 30+ nm with TACAN. In MP you might find it only from ca. 15+nm (as of 2020.1 version).&lt;br /&gt;
&lt;br /&gt;
[[Category:Multiplayer]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:FlightGear_FGAddon_MPCarrier.png&amp;diff=143982</id>
		<title>File:FlightGear FGAddon MPCarrier.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:FlightGear_FGAddon_MPCarrier.png&amp;diff=143982"/>
		<updated>2026-04-13T21:38:26Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Uploaded own work with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Screenshot of the FlightGear Launcher, version 2024.2 (nightly), showing 4 aircraft. The second one is highlighted, and is the MP Carrier package.}}&lt;br /&gt;
|date=2026-04-13&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:SammySkycrafts|Rhys Ackerman]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{self|cc-by-sa-4.0}}&lt;br /&gt;
&lt;br /&gt;
[[Category:FGAddon hangar]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=143960</id>
		<title>Discord</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=143960"/>
		<updated>2026-04-13T13:31:09Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Removed A350 server. There has not been any active users with admin access for years, and the server is regularly being targeted by scam bots, whose content can not be deleted. As a result of the spam, there has also not been any content relating to a350&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Discord''' is used in the FlightGear community as an alternative to [[Mumble]], [[TeamSpeak]], [[FGCom]] or [[Ventrilo]].&lt;br /&gt;
&lt;br /&gt;
Discord is a free voice and chat software that can be downloaded as an app or [https://discord.do/web/ used in a browser].&lt;br /&gt;
&lt;br /&gt;
== Invite links ==&lt;br /&gt;
{{note|1=Its advised that you create a permanent account, instead of creating guest accounts as some people create duplicate accounts which clogs up the member logs and makes it more difficult to @mention people.}}&lt;br /&gt;
&lt;br /&gt;
Furthermore many other FlightGear servers exist that you may need an personal invite to join. The easiest way to find them is to go to the FlightGear server and ask or ask in forums.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Communities on Discord ==&lt;br /&gt;
&lt;br /&gt;
=== General, Help and Support, Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear&lt;br /&gt;
| https://discord.gg/rzuV2DR&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Community&lt;br /&gt;
| https://discord.gg/RyMyQA6ZDm&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear FDM School&lt;br /&gt;
| https://discord.gg/Uyrtsar&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Virtual Alliance&lt;br /&gt;
| https://discord.gg/VqzTG2N&lt;br /&gt;
|-&lt;br /&gt;
| FG Events&lt;br /&gt;
| https://discord.gg/GY4N6Cu&lt;br /&gt;
|-&lt;br /&gt;
| FG FDM School&lt;br /&gt;
| https://discord.gg/U5KXyMU&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Republic, A friendly community about FlightGear.&lt;br /&gt;
| https://discord.gg/sBJy46Uq7z&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear soaring club&lt;br /&gt;
|https://discord.gg/NvJjmzMfRP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Military Aviation Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Operation Red Flag military FG community (OPRF)&lt;br /&gt;
| https://discord.gg/ptVapkE&lt;br /&gt;
|-&lt;br /&gt;
| Combined Joint Task Force 50 (OPRF event planning/hosting and more)&lt;br /&gt;
| https://discord.gg/2nxjb6y&lt;br /&gt;
|-&lt;br /&gt;
|FIRST AIR FORCE&lt;br /&gt;
|https://discord.gg/firstairforce &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Country Specific Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Australia &lt;br /&gt;
| [https://discord.gg/8MY6cmDQbK https://discord.gg/nG76HMDjUE]&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Italia (ITA Mercenaries)&lt;br /&gt;
| https://discord.gg/5RzyXRf&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Germany&lt;br /&gt;
| https://discord.gg/FNnpjCPSze&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Indian Community&lt;br /&gt;
| https://discord.gg/Tu7n5FmG5S&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Asia&lt;br /&gt;
| https://discord.gg/7saCkA2jQj&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Hong Kong&lt;br /&gt;
| https://discord.gg/9QVKcT6skU&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Myanmar&lt;br /&gt;
|https://discord.gg/VbT88KEGrk&lt;br /&gt;
|-&lt;br /&gt;
|[[FlightGear Polska]]&lt;br /&gt;
|https://discord.gg/5J7uVYRhZV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Aircraft-specific ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Aircraft !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Aermacchi MB-339&lt;br /&gt;
| https://discord.gg/vNZ5ZPv&lt;br /&gt;
|-&lt;br /&gt;
| Boeing F/A-18C Hornet&lt;br /&gt;
|&lt;br /&gt;
https://discord.gg/8GzpdK4j8P&lt;br /&gt;
|-&lt;br /&gt;
|F-111 Aardvark&lt;br /&gt;
|https://discord.gg/DSrSbmx&lt;br /&gt;
|-&lt;br /&gt;
|[[General Dynamics F-16 Fighting Falcon]]&lt;br /&gt;
|https://discord.gg/8RcYnjA&lt;br /&gt;
|-&lt;br /&gt;
|Octal450 Hangar Development&lt;br /&gt;
|https://discord.gg/gxAhC3j&lt;br /&gt;
|-&lt;br /&gt;
|[[Mikoyan-Gurevich MiG-21bis]]&lt;br /&gt;
|https://discord.gg/bs8xyz3&lt;br /&gt;
|-&lt;br /&gt;
|[[Mirage 2000]]&lt;br /&gt;
|https://discord.gg/xZ3r2KR&lt;br /&gt;
|-&lt;br /&gt;
|Panavia Tornado&lt;br /&gt;
|https://discord.gg/SYxgzkCrSG&lt;br /&gt;
|-&lt;br /&gt;
|[[Saab 37 Viggen]]&lt;br /&gt;
|&lt;br /&gt;
https://discord.gg/RJTwS9a&lt;br /&gt;
|-&lt;br /&gt;
|SEPECAT Jaguar&lt;br /&gt;
|https://discord.gg/G5q5XYN&lt;br /&gt;
|-&lt;br /&gt;
|FG-1000 Stealth Fighter&lt;br /&gt;
| https://discord.gg/3MFZauxyPW&lt;br /&gt;
|-&lt;br /&gt;
|Boeing 777&lt;br /&gt;
|https://discord.gg/k5RXxFgGDA&lt;br /&gt;
|-&lt;br /&gt;
|A-10 Warthog&lt;br /&gt;
|https://discord.gg/RmtjmsT5vS&lt;br /&gt;
|-&lt;br /&gt;
|Soviet Aviation for FGFS&lt;br /&gt;
|https://discord.gg/YC2EYGK5Xf&lt;br /&gt;
|-&lt;br /&gt;
|B-1 Lancer&lt;br /&gt;
|https://discord.gg/d2bhwFCnX2&lt;br /&gt;
|-&lt;br /&gt;
|[[PZL-Koliber-family | PZL Koliber family]]&lt;br /&gt;
|https://discord.gg/beADn2sWM6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*https://discord.com/ Official website&lt;br /&gt;
&lt;br /&gt;
[[de:Discord]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Nasal_optimisation&amp;diff=143942</id>
		<title>Nasal optimisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Nasal_optimisation&amp;diff=143942"/>
		<updated>2026-04-10T01:44:46Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Fix Typo of &amp;quot;April&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Nasal Navigation}}&lt;br /&gt;
&lt;br /&gt;
= Introduction to writing Nasal for optimum performance =&lt;br /&gt;
&lt;br /&gt;
Writing optimal performing code in a real time system (in any language) is usually related to minmising the per frame impact of any given set of code; which may end up with slightly slower code but the point is to ensure that the real time frame rate does not degrade.&lt;br /&gt;
&lt;br /&gt;
The basic techniques are as follows;&lt;br /&gt;
&lt;br /&gt;
# Measure and locate (profile) code.&lt;br /&gt;
# Do less&lt;br /&gt;
# Cache more&lt;br /&gt;
# Spread out workload&lt;br /&gt;
# Avoid garbage collection&lt;br /&gt;
&lt;br /&gt;
Inside each [[Nasal]] frame the programmer needs to ensure that the minimum necessary work is performed; ideally a predictable workload to ensure that Nasal processing per frame is constant - because otherwise there can be frame pauses - which is where an occasional frame will take much longer than usual.&lt;br /&gt;
&lt;br /&gt;
Splitting any given task across frames is the normal way of ensuring that performance remains good; unfortunately a lot of Nasal doesn't do this and instead will process everything each frame. This is what the PartitionProcessor is designed to help with&lt;br /&gt;
&lt;br /&gt;
Do not use getprop or setprop - these are very slow; instead use the props.nas module to refer to the property tree. &lt;br /&gt;
&lt;br /&gt;
All property tree access is much slower than using native Nasal variables; and it is therefore wise to only read each property from the tree once per frame. This is what the FrameNotification is designed to help with.&lt;br /&gt;
&lt;br /&gt;
Writing data to Canvas displays can be considered to be a slow operation; so only write values that are changed. props.UpdateManager can help with this.&lt;br /&gt;
&lt;br /&gt;
Generally using props.UpdateManager (with the FrameNotification hash) can be generally used to perform OnChange processing that is more efficient than the property listeners - however property listeners should still be used to perform occasional actions (rather than per frame actions)&lt;br /&gt;
&lt;br /&gt;
== Using the built in performance monitor ==&lt;br /&gt;
You can do this from the debug menu '''Monitor System Performance''' and currently the GUI only shows the top level.&lt;br /&gt;
&lt;br /&gt;
When the performance monitor is active either by having the GUI on display or because &amp;lt;code&amp;gt;/sim/performance-monitor/enabled&amp;lt;/code&amp;gt;is true overruns will be logged at ALRT level. An overrun is defined as exceeding&amp;lt;code&amp;gt;/sim/performance-monitor/max-time-per-frame-ms&amp;lt;/code&amp;gt;).  &lt;br /&gt;
&lt;br /&gt;
Setting &amp;lt;code&amp;gt;/sim/performance-monitor/dump-stats&amp;lt;/code&amp;gt; to non-zero will cause detailed performance info will be output to the log.&lt;br /&gt;
&lt;br /&gt;
Note that it is generally a good idea not to use the integrated UI to display these stats (aka no PUI/Canvas). Instead, consider using Phi or the telnet/props interface, so that performance isn't degraded even more by displaying all these stats via the main loop.&lt;br /&gt;
&lt;br /&gt;
== fdm-initialized listener == &lt;br /&gt;
It is important to realise that sim/fdm-initialized will be set to true every time the model is repositioned; i.e. it does not fire just once. When sim/fdm-initialized is set to false the model should clean up all previously initialised listeners, threads, timers etc.&lt;br /&gt;
&lt;br /&gt;
Generally it is much better to set timers, listeners (etc) at module level scope inside any Nasal file; as these will be executed only once. Using the Emesary FrameNotification can further simplify per frame processing because there is no need to use a timer per module and instead any modules can register themselves for frame processing simply by using GlobalNotifier.Register and all of the details are abstracted away and all that needs to happen is to handle the received notifications.&lt;br /&gt;
&lt;br /&gt;
This is an example of acquiring and releasing listeners and timers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var l1 = nil;&lt;br /&gt;
var timer_loopTimer  = nil;&lt;br /&gt;
var fdm_init = func(v) {&lt;br /&gt;
&lt;br /&gt;
# always clean up values that aren't nil - this is safe&lt;br /&gt;
    if (l1 != nil)&lt;br /&gt;
      removelistener(l1);&lt;br /&gt;
    l1 = nil;&lt;br /&gt;
&lt;br /&gt;
    if (timer_loopTimer != nil)&lt;br /&gt;
        timer_loopTimer.stop();&lt;br /&gt;
    timer_loopTimer = nil;&lt;br /&gt;
&lt;br /&gt;
# then acquire new values&lt;br /&gt;
    if (v.getValue()){&lt;br /&gt;
        print(&amp;quot;Initializing Systems&amp;quot;);&lt;br /&gt;
        l1 = setlistener(&amp;quot;/some-prop&amp;quot;, listener_func);&lt;br /&gt;
        timer_loopTimer = maketimer(0.25, timer_loop);&lt;br /&gt;
        timer_loopTimer.start();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        # now perform any other cleanup.&lt;br /&gt;
        print(&amp;quot;Cleaning up&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setlistener(&amp;quot;sim/signals/fdm-initialized&amp;quot;, fdm_init);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However the above can be better written as follows;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var l1 = setlistener(&amp;quot;/some-prop&amp;quot;, listener_func);&lt;br /&gt;
var timer_loopTimer = maketimer(0.25, timer_loop);&lt;br /&gt;
&lt;br /&gt;
var fdm_init = func(v) {&lt;br /&gt;
    if (v.getValue()){&lt;br /&gt;
        timer_loopTimer.start();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        timer_loopTimer.stop();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
setlistener(&amp;quot;sim/signals/fdm-initialized&amp;quot;, fdm_init);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nasal threads ==&lt;br /&gt;
&lt;br /&gt;
Nasal threads are of limited use because most of the time it is property tree access and other API calls that are slow and a lot of the API library (including properties) are not thread safe and should not be called from outside the main loop.&lt;br /&gt;
&lt;br /&gt;
= Optimisation techniques = &lt;br /&gt;
&lt;br /&gt;
The F-15 I think is the reference implementation of my three main Nasal optimisation techniques;  &lt;br /&gt;
&lt;br /&gt;
== Nasal Profiling ==&lt;br /&gt;
&lt;br /&gt;
As yet there isn't a profiler available so instead there is an OperationTimer that is ships as part of emexec (2020.3 or later released after April 2022).&lt;br /&gt;
&lt;br /&gt;
This makes it easy to output (via logprint) information about how much time a module is taking. &lt;br /&gt;
&lt;br /&gt;
To create an instance of a timer there are two parameters, the first is the ident and the second the log level (3=info, 2=debug)&lt;br /&gt;
 &amp;lt;code&amp;gt;var ot = emexec.OperationTimer.new(&amp;quot;VSD&amp;quot;,2);&amp;lt;/code&amp;gt;&lt;br /&gt;
The output is a cumulative number of milliseconds since the OperationTimer was reset.&lt;br /&gt;
 &amp;lt;ot.reset();&lt;br /&gt;
 ot.log(&amp;quot;Start&amp;quot;);&lt;br /&gt;
 &amp;lt;some code to time&amp;gt;&lt;br /&gt;
 ot.log(&amp;quot;1&amp;quot;);&lt;br /&gt;
 &amp;lt;more code&amp;gt;&lt;br /&gt;
 ot.log(&amp;quot;ed&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emesary real time executive ==&lt;br /&gt;
&lt;br /&gt;
Starting from 2020.3 released after April 2022 FGdata includes the emexec module which provides an easy to use object scheduler that uses Emesary to do most of the work. &lt;br /&gt;
&lt;br /&gt;
By default it is recommended to use the built in scheduler &amp;lt;code&amp;gt;emexec.ExecModule&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The scheduler will adjust the frequency from 50hz right down to 4hz. &lt;br /&gt;
&lt;br /&gt;
Any object that wishes to be invoked simply needs to provide an &amp;lt;code&amp;gt;update(notification)&amp;lt;/code&amp;gt; method and register itself via ExecModule.register method.&lt;br /&gt;
&lt;br /&gt;
The register method takes the following arguments&lt;br /&gt;
&lt;br /&gt;
# ident - text to identify this object registration&lt;br /&gt;
# properties_to_monitor : a key value pair hash of properties to include in the notification. This helps to optimise property tree access (see FrameNotification below for the format)&lt;br /&gt;
# object : an instance of an objec that has an update(notification) method&lt;br /&gt;
# rate : frame skip rate (1/rate is the effective rate)&lt;br /&gt;
# frame_offset : frame skip offset. Must be less than rate and when used with rate it can allow interleaving of modules (usually for performance)&lt;br /&gt;
&lt;br /&gt;
During development it would be usual to set the overrun detection active emexec.ExecModule.transmitter.OverrunDetection(9) for a warning (log leve info) of any frame that exceeds 9 ms&lt;br /&gt;
&lt;br /&gt;
== FrameNotification ==&lt;br /&gt;
&lt;br /&gt;
The FrameNotification is a notification sent out at defined intervals that contains a hash with property values.&lt;br /&gt;
&lt;br /&gt;
Use the FrameNotificationAddProperty to request that certain properties are contained within the FrameNotification.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
notifications.FrameNotificationAddProperty.new(&amp;quot;F15-HUD&amp;quot;, **[HASH-Name]**, **[property-string]**)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new(&amp;quot;F15-HUD&amp;quot;, &amp;quot;AirspeedIndicatorIndicatedMach&amp;quot;, &amp;quot;instrumentation/airspeed-indicator/indicated-mach&amp;quot;));`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
although more typically used by having a hash that contains the keys and properties that you want to monitor and then using a loop to send out the FrameNotificationAddProperty; e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
input = {&lt;br /&gt;
        AirspeedIndicatorIndicatedMach          : &amp;quot;instrumentation/airspeed-indicator/indicated-mach&amp;quot;,&lt;br /&gt;
        Alpha                                   : &amp;quot;orientation/alpha-indicated-deg&amp;quot;,&lt;br /&gt;
        AltimeterIndicatedAltitudeFt            : &amp;quot;instrumentation/altimeter/indicated-altitude-ft&amp;quot;,&lt;br /&gt;
        ArmamentAgmCount                        : &amp;quot;sim/model/f15/systems/armament/agm/count&amp;quot;,&lt;br /&gt;
        ArmamentAim120Count                     : &amp;quot;sim/model/f15/systems/armament/aim120/count&amp;quot;,&lt;br /&gt;
        ArmamentAim7Count                       : &amp;quot;sim/model/f15/systems/armament/aim7/count&amp;quot;,&lt;br /&gt;
        ArmamentAim9Count                       : &amp;quot;sim/model/f15/systems/armament/aim9/count&amp;quot;,&lt;br /&gt;
        ArmamentRounds                          : &amp;quot;sim/model/f15/systems/gun/rounds&amp;quot;,&lt;br /&gt;
        AutopilotRouteManagerActive             : &amp;quot;autopilot/route-manager/active&amp;quot;,&lt;br /&gt;
        AutopilotRouteManagerWpDist             : &amp;quot;autopilot/route-manager/wp/dist&amp;quot;,&lt;br /&gt;
        AutopilotRouteManagerWpEtaSeconds       : &amp;quot;autopilot/route-manager/wp/eta-seconds&amp;quot;,&lt;br /&gt;
        CadcOwsMaximumG                         : &amp;quot;fdm/jsbsim/systems/cadc/ows-maximum-g&amp;quot;,&lt;br /&gt;
        ControlsArmamentMasterArmSwitch         : &amp;quot;sim/model/f15/controls/armament/master-arm-switch&amp;quot;,&lt;br /&gt;
        ControlsArmamentWeaponSelector          : &amp;quot;sim/model/f15/controls/armament/weapon-selector&amp;quot;,&lt;br /&gt;
        ControlsGearBrakeParking                : &amp;quot;controls/gear/brake-parking&amp;quot;,&lt;br /&gt;
        ControlsGearGearDown                    : &amp;quot;controls/gear/gear-down&amp;quot;,&lt;br /&gt;
        ControlsHudBrightness                   : &amp;quot;sim/model/f15/controls/HUD/brightness&amp;quot;,&lt;br /&gt;
        ControlsHudSymRej                       : &amp;quot;sim/model/f15/controls/HUD/sym-rej&amp;quot;,&lt;br /&gt;
        ElectricsAcLeftMainBus                  : &amp;quot;fdm/jsbsim/systems/electrics/ac-left-main-bus&amp;quot;,&lt;br /&gt;
        HudNavRangeDisplay                      : &amp;quot;sim/model/f15/instrumentation/hud/nav-range-display&amp;quot;,&lt;br /&gt;
        HudNavRangeETA                          : &amp;quot;sim/model/f15/instrumentation/hud/nav-range-eta&amp;quot;,&lt;br /&gt;
        OrientationHeadingDeg                   : &amp;quot;orientation/heading-deg&amp;quot;,&lt;br /&gt;
        OrientationPitchDeg                     : &amp;quot;orientation/pitch-deg&amp;quot;,&lt;br /&gt;
        OrientationRollDeg                      : &amp;quot;orientation/roll-deg&amp;quot;,&lt;br /&gt;
        OrientationSideSlipDeg                  : &amp;quot;orientation/side-slip-deg&amp;quot;,&lt;br /&gt;
        RadarActiveTargetAvailable              : &amp;quot;sim/model/f15/instrumentation/radar-awg-9/active-target-available&amp;quot;,&lt;br /&gt;
        RadarActiveTargetCallsign               : &amp;quot;sim/model/f15/instrumentation/radar-awg-9/active-target-callsign&amp;quot;,&lt;br /&gt;
        RadarActiveTargetClosure                : &amp;quot;sim/model/f15/instrumentation/radar-awg-9/active-target-closure&amp;quot;,&lt;br /&gt;
        RadarActiveTargetDisplay                : &amp;quot;sim/model/f15/instrumentation/radar-awg-9/active-target-display&amp;quot;,&lt;br /&gt;
        RadarActiveTargetRange                  : &amp;quot;sim/model/f15/instrumentation/radar-awg-9/active-target-range&amp;quot;,&lt;br /&gt;
        RadarActiveTargetType                   : &amp;quot;sim/model/f15/instrumentation/radar-awg-9/active-target-type&amp;quot;,&lt;br /&gt;
        InstrumentedG                           : &amp;quot;instrumentation/g-meter/instrumented-g&amp;quot;,&lt;br /&gt;
        VelocitiesAirspeedKt                    : &amp;quot;velocities/airspeed-kt&amp;quot;,&lt;br /&gt;
};&lt;br /&gt;
foreach (var name; keys(input)) {&lt;br /&gt;
    emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new(&amp;quot;F15-HUD&amp;quot;, name, input[name]));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The idea of the FrameNotification is that it provides an easy way to run your update logic; simply by registering with the GlobalTransmitter and then processing the FrameNotification you can call your update logic in an efficient manner;&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var HUDRecipient =&lt;br /&gt;
{&lt;br /&gt;
    new: func(_ident)&lt;br /&gt;
    {&lt;br /&gt;
        var new_class = emesary.Recipient.new(_ident);&lt;br /&gt;
        new_class.MainHUD = nil;&lt;br /&gt;
        new_class.Receive = func(notification)&lt;br /&gt;
        {&lt;br /&gt;
            if (notification.NotificationType == &amp;quot;FrameNotification&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                if (new_class.MainHUD == nil)&lt;br /&gt;
                  new_class.MainHUD = F15HUD.new(&amp;quot;Nasal/HUD/HUD.svg&amp;quot;, &amp;quot;HUDImage1&amp;quot;);&lt;br /&gt;
                if (!math.mod(notifications.frameNotification.FrameCount,2)){&lt;br /&gt;
                    new_class.MainHUD.update(notification);&lt;br /&gt;
                }&lt;br /&gt;
                return emesary.Transmitter.ReceiptStatus_OK;&lt;br /&gt;
            }&lt;br /&gt;
            return emesary.Transmitter.ReceiptStatus_NotProcessed;&lt;br /&gt;
        };&lt;br /&gt;
        return new_class;&lt;br /&gt;
    },&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
and then register that function with the Emesary Global transmitter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
emesary.GlobalTransmitter.Register(HUDRecipient.new(&amp;quot;F15-HUD&amp;quot;));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
== props.UpdateManager ==&lt;br /&gt;
&lt;br /&gt;
This will monitor one or more property, or values from a hash and call a function (or inline function) when the value or a value changes more than a defined amount.&lt;br /&gt;
&lt;br /&gt;
e.g. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
       obj.update_items = [&lt;br /&gt;
            props.UpdateManager.FromHashList([&amp;quot;ElectricsAcLeftMainBus&amp;quot;,&amp;quot;ControlsHudBrightness&amp;quot;] , 0.01, func(val)&lt;br /&gt;
                                      {&lt;br /&gt;
                                          if (val.ElectricsAcLeftMainBus &amp;lt;= 0 &lt;br /&gt;
                                              or val.ControlsHudBrightness &amp;lt;= 0) {&lt;br /&gt;
                                              obj.svg.setVisible(0);&lt;br /&gt;
                                          } else {&lt;br /&gt;
                                              obj.svg.setVisible(1);&lt;br /&gt;
                                          }&lt;br /&gt;
                                      }),&lt;br /&gt;
            props.UpdateManager.FromHashValue(&amp;quot;AltimeterIndicatedAltitudeFt&amp;quot;, 1, func(val)&lt;br /&gt;
                                             {&lt;br /&gt;
                                                 obj.alt_range.setTranslation(0, val * alt_range_factor);&lt;br /&gt;
                                             }),&lt;br /&gt;
&lt;br /&gt;
            props.UpdateManager.FromHashValue(&amp;quot;VelocitiesAirspeedKt&amp;quot;, 0.1, func(val)&lt;br /&gt;
                                      {&lt;br /&gt;
                                          obj.ias_range.setTranslation(0, val * ias_range_factor);&lt;br /&gt;
                                      }),&lt;br /&gt;
            props.UpdateManager.FromHashValue(&amp;quot;ControlsHudSymRej&amp;quot;, 0.1, func(val)&lt;br /&gt;
                                             {&lt;br /&gt;
                                                 obj.symbol_reject = val;&lt;br /&gt;
                                             }),&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and then in the update method &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
       foreach(var update_item; me.update_items)&lt;br /&gt;
        {&lt;br /&gt;
            update_item.update(notification);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As you can see above the update method is called from the recipient of the frame notification.&lt;br /&gt;
&lt;br /&gt;
== PartitionProcessor ==&lt;br /&gt;
&lt;br /&gt;
When working with lists (arrays) of data that can get quite long (e.g. targets from radar) the partition processor is an easy way to only process a part of that list each frame.&lt;br /&gt;
&lt;br /&gt;
What it does is to manage the processing of data in a manner suitable for real time operations.  Given a data array [0..size] this will process a number of array elements each time it is called This allows for a simple way    to split up intensive processing across multiple frames.&lt;br /&gt;
   &lt;br /&gt;
The limit is the number of elements to process per frame (invocation of .process method) or to limit the processing to a specified amount of time using a Nasal timestamp to measure the amount (in usec)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example usage (object);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var VSD_Device =&lt;br /&gt;
{&lt;br /&gt;
    new : func(designation, model_element, target_module_id, root_node)&lt;br /&gt;
    {&lt;br /&gt;
...&lt;br /&gt;
       # new : func(_name, _size, _timestamp=nil)&lt;br /&gt;
       obj.process_targets = PartitionProcessor.new(&amp;quot;VSD-targets&amp;quot;, 20, nil);&lt;br /&gt;
       obj.process_targets.set_max_time_usec(500);&lt;br /&gt;
...&lt;br /&gt;
     me.process_targets.set_timestamp(notification.Timestamp);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then invoke.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
     # process : func (object, data, init_method, process_method, complete_method)&lt;br /&gt;
&lt;br /&gt;
     me.process_targets.process(me, awg_9.tgts_list, &lt;br /&gt;
                                func(pp, obj, data){&lt;br /&gt;
                                    initialisation; called before processing element[0]&lt;br /&gt;
                                    params&lt;br /&gt;
                                     pp is the partition processor that called this&lt;br /&gt;
                                     obj is the reference object (first argument in the .process)&lt;br /&gt;
                                     data is the entire data array.&lt;br /&gt;
                                }&lt;br /&gt;
                                ,&lt;br /&gt;
                                func(pp, obj, element){&lt;br /&gt;
                                    process individual element; &lt;br /&gt;
                                    params&lt;br /&gt;
                                     pp is the partition processor that called this&lt;br /&gt;
                                     obj is the reference object (first argument in the .process)&lt;br /&gt;
                                     element is the element data[pp.data_index]&lt;br /&gt;
                                    return 0 to stop processing any more elements and call the completed method&lt;br /&gt;
                                    return 1 to continue processing.&lt;br /&gt;
                                },&lt;br /&gt;
                                func(pp, obj, data)&lt;br /&gt;
                                {&lt;br /&gt;
                                    completed; called after the last element processed&lt;br /&gt;
                                    params&lt;br /&gt;
                                     pp is the partition processor that called this&lt;br /&gt;
                                     obj is the reference object (first argument in the .process)&lt;br /&gt;
                                     data is the entire data array.&lt;br /&gt;
                                });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Animate_models&amp;diff=143538</id>
		<title>Howto:Animate models</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Animate_models&amp;diff=143538"/>
		<updated>2026-01-18T00:15:02Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: /* Vertex Ordering */ Change 2020.4 to 2024.1 to reflect release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The real world is full of motion. To simulate this in [[FlightGear]], '''models must be animated'''.&lt;br /&gt;
&lt;br /&gt;
FlightGear allows you to animate models in response to property changes: for example, the propellers can spin when the engine is on and the elevators can move up and down with your controller. There is no fixed limit on what parts can be animated: the only requirements are that the part is named in the 3D model file, and that there is a property in the main tree that you can use to get the positioning information. &lt;br /&gt;
&lt;br /&gt;
This document provides basic information for all kind of animations. When animating your model, it is very helpful to find an aircraft with parts similar to yours and use it as an example. Cut and paste the code into your wrapper file and then edit to suit.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
=== File name of main model and animation XML file ===&lt;br /&gt;
{{main article|Aircraft-set.xml#Not used for loading multiplayer aircraft}}&lt;br /&gt;
The file name of the main model and animation XML file, or the .ac file if there is no XML file, (in essence the property &amp;lt;code&amp;gt;/sim/model/path&amp;lt;/code&amp;gt;) will be the name of the aircraft that is transmitted when using [[multiplayer]] and will also be used for loading multiplayer aircraft.&lt;br /&gt;
&lt;br /&gt;
There is also a mechanism to substitute a full aircraft model with a simpler AI aircraft model if one is available at the same file path (including for example &amp;lt;code&amp;gt;Models/Boeing-797-800.xml&amp;lt;/code&amp;gt;), but in &amp;lt;code&amp;gt;[[$FG_ROOT]]/'''AI'''/Aircraft/&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$FG_ROOT/Aircraft/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== .ac files ===&lt;br /&gt;
{{Main article|AC files: Understanding and changing .ac code#Identifying an object}}&lt;br /&gt;
&lt;br /&gt;
When referring to an .ac file in your xml animation, it is important that the &amp;lt;code&amp;gt;&amp;lt;object-name&amp;gt;&amp;lt;/code&amp;gt; exactly matches the object named in the .ac file (this includes cases!). &lt;br /&gt;
&lt;br /&gt;
'''Note for SketchUp users:''' The spatial reference X/Y/Z used in animation to locate an object or a point are different from the ones in AC3D ie X values are the same in both but Y in animation must be matched to AC3D's -Z (Z value but opposite sign) and Z value in animation must be matched to AC3D's Y value. &lt;br /&gt;
&lt;br /&gt;
'''Note for SketchUp users:''' when exporting to AC3D in Sketchup, the .ac file will name the objects in your model to &amp;quot;blah&amp;quot; by default. You need to amend the relevant object names in your .ac file using text edit, so that the xml will work.&lt;br /&gt;
&lt;br /&gt;
=== Animation order ===&lt;br /&gt;
Animations are executed by FlightGear in the order that they are read in the model's .xml file. Therefore, it is very important to pay attention to the order, especially when multiple animations are applied to the same object(s). Wrong ordering of animations might cause [[Howto:Animate models#Timed|timed]] animations (used to create flashing lights) to not work. For further details see this [https://sourceforge.net/p/flightgear/mailman/message/37090714/ thread] on the development mailing list. Updated [https://scenery.flightgear.org/app.php?c=Models&amp;amp;a=browse&amp;amp;shared=18 shared Effects models] will be available very soon.&lt;br /&gt;
&lt;br /&gt;
Similar problems can be encountered with the dist-scale instead of the timed animation.&lt;br /&gt;
== Tags used in most animations ==&lt;br /&gt;
=== Name ===&lt;br /&gt;
With a name animation, you can group multiple objects. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;Collection1&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object1&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object2&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object3&amp;lt;/object-name&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above creates a &amp;quot;virtual object&amp;quot; with the name Collection1. In animation, we can animate this group of objects, by using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;object-name&amp;gt;Collection1&amp;lt;/object-name&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Object-name ===&lt;br /&gt;
These names are set in the 3D model. Each single object has a unique name; for easy identification it is advised to use descriptive names (LeftElevator, Rudder etc.). Animations are only applied to those objects that are mentioned in an object-name line (one object per line!). Animations lacking those, will be applied to the entire model.&lt;br /&gt;
&lt;br /&gt;
=== Property ===&lt;br /&gt;
Each animation must be associated with exactly one property from the main FlightGear property tree (remember that the properties in the wrapper file are not part of the main tree), using &amp;lt;code&amp;gt;&amp;lt;property&amp;gt;&amp;lt;/code&amp;gt; to provide the property path:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Rudder&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;controls/rudder&amp;lt;/property&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the omission of the leading slash '/' when referring to the property. This assures that when the model is used for AI or multiplayer traffic the animations will follow that of the AI controller instead of that of the user.&lt;br /&gt;
&lt;br /&gt;
=== Axis ===&lt;br /&gt;
An axis part is required in every animation that involves a rotating or moving thing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The axis are similar to the ones of the 3D model. There is a difference between rotation and translation:&lt;br /&gt;
* In rotation animations, the axis part defines around what axis the object rotates. Negative/positive values make the difference between counterclockwise and clockwise rotations.&lt;br /&gt;
* In translate animations, the part defines along what axis the object moves. If the x-axis is poiting backwards, an x-value of -1 will result in forward motion.&lt;br /&gt;
&lt;br /&gt;
You could also define two points, between which FlightGear will calculate the correct axis. This makes the use of a [[#Center|&amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;&amp;lt;/nowiki&amp;gt;]] tag redundant! Such coordinates are extremely useful for animating control surfaces (rudder, elevators etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;   &lt;br /&gt;
   &amp;lt;x1-m&amp;gt; 4.9&amp;lt;/x1-m&amp;gt;&lt;br /&gt;
   &amp;lt;y1-m&amp;gt; 7.1&amp;lt;/y1-m&amp;gt;&lt;br /&gt;
   &amp;lt;z1-m&amp;gt;-1.0&amp;lt;/z1-m&amp;gt;&lt;br /&gt;
   &amp;lt;x2-m&amp;gt; 5.9&amp;lt;/x2-m&amp;gt;&lt;br /&gt;
   &amp;lt;y2-m&amp;gt;11.2&amp;lt;/y2-m&amp;gt;&lt;br /&gt;
   &amp;lt;z2-m&amp;gt;-0.5&amp;lt;/z2-m&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Center ===&lt;br /&gt;
Various animations ([[#Rotate|rotate]], [[#Spin|spin]], [[#Scale|scale]]) move around a center point.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The axis are similar to the ones of the 3D model, so finding coordinates is easily done in 3D modeling software.&lt;br /&gt;
&lt;br /&gt;
=== Using a geometry object for axis and centre (2017.2) ===&lt;br /&gt;
&lt;br /&gt;
Added in V2017.2 is support to allow a geometry object (a line segment with two vertices) that is used to define both the centre and the axis for an animation. This will work with rotate, spin, translate and knob animations.&lt;br /&gt;
&lt;br /&gt;
{{Note|Since SimGear commit 6ca9141083e62be1161d0ca2d1e3b918494dd6ad on next, this feature can also be used for slider (usage equivalent to that for a translate animation) and for any of the &amp;lt;*-center&amp;gt; / &amp;lt;*-axis&amp;gt; tags of a locked-track animation.}}&lt;br /&gt;
&lt;br /&gt;
When used for translate animations, the axis line should be normalized (i.e. be 1 meter long) as its length acts as a factor for the translation distance.&lt;br /&gt;
&lt;br /&gt;
The XML syntax for this is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;axis&amp;gt;&lt;br /&gt;
    &amp;lt;object-name&amp;gt;some-object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
&amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;code&amp;gt;&amp;lt;axis&amp;gt;...&amp;lt;/axis&amp;gt;&amp;lt;/code&amp;gt; section is omitted entirely, &amp;lt;code&amp;gt;{object-name}-axis&amp;lt;/code&amp;gt; will be used by default, where &amp;lt;code&amp;gt;{object-name}&amp;lt;/code&amp;gt; is the name of the object being animated (if we are animating more than one object, the first object is used). In the earlier example this would be &amp;lt;code&amp;gt;Rudder-axis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Vertex Ordering ==== &lt;br /&gt;
&lt;br /&gt;
With FG &amp;lt;= 2020.3 the order of the points in the vertex will be sorted based on their X coordinate and when the X coordinate is equal the order will be that of the vertices in the model. &lt;br /&gt;
&lt;br /&gt;
This has been improved in 2024.1 by adding some new tags that can be used in the &amp;lt;axis&amp;gt; section.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;order-by-xyz/&amp;gt; - use the new sorting rules&lt;br /&gt;
# &amp;lt;order-by-x/&amp;gt; - use the 2020.3 sorting rules&lt;br /&gt;
# &amp;lt;swap-axis-direction/&amp;gt; - when the animation goes the wrong way this is an elegant way to fix it.&lt;br /&gt;
&lt;br /&gt;
There is also a new top level tag &amp;lt;defaults&amp;gt; that can have either &amp;lt;axis-animation-vertex-order-xyz/&amp;gt; or &amp;lt;axis-animation-vertex-order-x/&amp;gt;. These defaults will affect all animations in the .xml and also any included models unless the included model also has a &amp;lt;defaults&amp;gt; section.&lt;br /&gt;
&lt;br /&gt;
So for modelers that want to use the new definitive vertex sorting rules adding the following to the main model is sufficient.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;defaults&amp;gt;&lt;br /&gt;
        &amp;lt;axis-animation-vertex-order-xyz/&amp;gt;&lt;br /&gt;
    &amp;lt;/defaults&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Adding the axis animation 3d object to a model ==== &lt;br /&gt;
&lt;br /&gt;
In the '''.ac''' file, specify a SURF with type (bottom 4 bits, 0=polygon, 1=closedline, 2=line) set to 2, and two vertices that define the axis. For example:&lt;br /&gt;
&lt;br /&gt;
    OBJECT poly&lt;br /&gt;
    name &amp;quot;aileron.l-axis&amp;quot;&lt;br /&gt;
    numvert 2&lt;br /&gt;
    3.2077502191170844 0.18160835055097943 4.055616960642423&lt;br /&gt;
    2.6758650763079 0.28024033462188946 6.477876098622225&lt;br /&gt;
    numsurf 1&lt;br /&gt;
    SURF 0x12&lt;br /&gt;
    mat 0&lt;br /&gt;
    refs 2&lt;br /&gt;
    0 0 0&lt;br /&gt;
    1 0 0&lt;br /&gt;
    kids 0&lt;br /&gt;
&lt;br /&gt;
Once the object-name used for the axis has been processed the geometry object will be hidden. This also allows a visual check for any axis objects that are not yet assigned.&lt;br /&gt;
&lt;br /&gt;
It is possible to reuse the same object definition multiple times within a single XML file. &lt;br /&gt;
&lt;br /&gt;
[[File:Canopy-animation-axis-object.png|small|Illustration of where an axis object (2017.2) can be placed for a canopy]]&lt;br /&gt;
&lt;br /&gt;
[[File:Gauges-knobs-animation-axis-object.png|small|Illustration of where an axis object (2017.2) can be placed for cockpit elements]]&lt;br /&gt;
&lt;br /&gt;
== Additional tags that can be used in most animations ==&lt;br /&gt;
=== Conditions ===&lt;br /&gt;
Multiple animations can make use of a conditional. Check &amp;lt;tt&amp;gt;$FGDATA/Docs/README.conditions&amp;lt;/tt&amp;gt; for some more details.&lt;br /&gt;
&lt;br /&gt;
* '''equals:''' property value (or second property) is equal to value/(first)property.&lt;br /&gt;
* '''greater-than:''' property value (or second property) is larger than value/(first)property.&lt;br /&gt;
* '''greater-than-equals:''' property value (or second property) is greater than or equal to value/(first)property.&lt;br /&gt;
* '''less-than:''' property value (or second property) is smaller than value/(first)property.&lt;br /&gt;
* '''less-than-equals:''' property value (or second property) is smaller than or equal to value/(first)property.&lt;br /&gt;
&lt;br /&gt;
The example below is true when n1 has a value greater than 25.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;engines/engine[1]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;value&amp;gt;25&amp;lt;/value&amp;gt;&lt;br /&gt;
   &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then there are some special tags:&lt;br /&gt;
&lt;br /&gt;
* '''and:'''&lt;br /&gt;
* '''not:'''&lt;br /&gt;
* '''or:'''&lt;br /&gt;
&lt;br /&gt;
In the example below, the condition is true when either n1 is greater than 25% or equal to 0%.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;or&amp;gt;&lt;br /&gt;
    &amp;lt;greater-than&amp;gt;&lt;br /&gt;
     &amp;lt;property&amp;gt;engines/engine[1]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
     &amp;lt;value&amp;gt;25&amp;lt;/value&amp;gt;&lt;br /&gt;
    &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;equals&amp;gt;&lt;br /&gt;
     &amp;lt;property&amp;gt;engines/engine[1]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
     &amp;lt;value&amp;gt;0&amp;lt;/value&amp;gt;&lt;br /&gt;
    &amp;lt;/equals&amp;gt;&lt;br /&gt;
   &amp;lt;/or&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of implementation into an animation looks as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;suface-positions/left-aileron-pos-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;suface-positions/left-aileron-pos-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;value&amp;gt;10&amp;lt;/value&amp;gt;&lt;br /&gt;
   &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interpolation ===&lt;br /&gt;
For non-fixed factors, an interpolation &amp;quot;table&amp;quot; can be created. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;interpolation&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt; 0.0&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt; 0.0&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt; 0.667&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt; 0.0&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt; 1.0&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt; 0.5&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
  &amp;lt;/interpolation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The lines above represent the following table:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Input&lt;br /&gt;
!Output&lt;br /&gt;
|-&lt;br /&gt;
|0.0&lt;br /&gt;
|0.0&lt;br /&gt;
|-&lt;br /&gt;
|0.667&lt;br /&gt;
|0.0&lt;br /&gt;
|-&lt;br /&gt;
|1.0&lt;br /&gt;
|0.5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can add as many entries as you need. Interpolation tables are often used for gear animations (eg. to open doors during gear-movements and close them again once the gear is either retracted or fully extended).&lt;br /&gt;
&lt;br /&gt;
=== Expressions ===&lt;br /&gt;
For some animations it is possible to define complex animations by using [[Expressions|Expressions]]. This even allows to drive the animation from multiple properties without the need for additional Nasal scripts. Here is an example for a translate animation depending on two properties and the cosine function:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
     &amp;lt;type&amp;gt;translate&amp;lt;/type&amp;gt;&lt;br /&gt;
     &amp;lt;expression&amp;gt;&lt;br /&gt;
       &amp;lt;product&amp;gt;&lt;br /&gt;
         &amp;lt;property&amp;gt;/my/factor-property&amp;lt;/property&amp;gt;&lt;br /&gt;
         &amp;lt;cos&amp;gt;&lt;br /&gt;
           &amp;lt;deg2rad&amp;gt;&lt;br /&gt;
             &amp;lt;property&amp;gt;/my/angular-property&amp;lt;/property&amp;gt;&lt;br /&gt;
           &amp;lt;/deg2rad&amp;gt;&lt;br /&gt;
         &amp;lt;/cos&amp;gt;&lt;br /&gt;
       &amp;lt;/product&amp;gt;&lt;br /&gt;
     &amp;lt;/expression&amp;gt;&lt;br /&gt;
     [..]more elements[..]&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Animations which can utilize [[Expressions|Expressions]] are: &lt;br /&gt;
* [[Howto:Animate_models#Translate|Translate]]&lt;br /&gt;
* [[Howto:Animate_models#Rotate|Rotate]]&lt;br /&gt;
* [[Howto:Animate_models#Scale|Scale]]&lt;br /&gt;
* [[Howto:Animate_models#Range|Range]]&lt;br /&gt;
* [[Howto:Animate_models#Blend|Blend]]&lt;br /&gt;
* [[Howto:Animate_models#Material animation|Material]]&lt;br /&gt;
* [[Howto:Animate_models#PBR animation|PBR]]&lt;br /&gt;
&lt;br /&gt;
See more detailed info at [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
As of January 2021 FlightGear supports multiple light sources just like Project Rembrandt has always done.&lt;br /&gt;
[[Compositor#Lights|Adding lights to a model]]&lt;br /&gt;
&lt;br /&gt;
== Object animations ==&lt;br /&gt;
=== Alpha-test ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;alpha-test&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;alpha-factor&amp;gt;0.01&amp;lt;/alpha-factor&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This &amp;quot;animation&amp;quot; is a way to set an alpha test on a model branch. The effect is to avoid depth buffer writing of pixel that are not seen because they are transparent. This is particulary useful when modeling a metallic structure or a tree with a billboard. The threshold of transparency is set with the &amp;lt;alpha-factor&amp;gt; element.  See also [[Pixel testing in effects]].&lt;br /&gt;
&lt;br /&gt;
=== Blend ===&lt;br /&gt;
Blends an object with the surrounding. Comparable to a translucency animation. A value of 0 corresponds to no transparency, i.e. and ordinary solid object, and a value of 1 makes the object fully transparent, i.e., not visible at all.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;blend&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;/velocities/airspeed-kt&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;0.00025&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;min&amp;gt;0.2&amp;lt;/min&amp;gt;&lt;br /&gt;
  &amp;lt;max&amp;gt;0.7&amp;lt;/max&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''property:'''&lt;br /&gt;
* '''factor:'''&lt;br /&gt;
* '''min:'''&lt;br /&gt;
* '''max:'''&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
Note that when using the Project Rembrandt renderer, all transparent and translucent objects must be registered to display properly.  [[Project_Rembrandt#Registering_all_translucent_surfaces|More information here.]]&lt;br /&gt;
&lt;br /&gt;
=== Billboard ===&lt;br /&gt;
This faces an object towards the viewer. Often used on 2D objects, like clouds, trees and lights.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;billboard&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;spherical type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/spherical&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''spherical:'''&lt;br /&gt;
&lt;br /&gt;
=== Dist-scale ===&lt;br /&gt;
Used to scale an object, based on the distance to the viewer. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;ind&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;dep&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (independent and dependent) are the distance in meters and the scale at that distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;dist-scale&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;interpolation&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt;0&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt;1&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt;300&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt;4&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt;1500&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt;8&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
  &amp;lt;/interpolation&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can optionally add [[#Center|&amp;amp;lt;center&amp;amp;gt;]] coordinates, to scale the object around that point.&lt;br /&gt;
&lt;br /&gt;
=== Flash ===&lt;br /&gt;
&lt;br /&gt;
Used to scale an object based on the cosine of the angle between the axis provided in the animation and the view vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;flash&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;offset&amp;gt;0.0&amp;lt;/offset&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;1.0&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;power&amp;gt;2&amp;lt;/power&amp;gt;&lt;br /&gt;
  &amp;lt;two-sides type=&amp;quot;bool&amp;quot;&amp;gt;false&amp;lt;/two-sides&amp;gt;&lt;br /&gt;
  &amp;lt;min&amp;gt;0.0&amp;lt;/min&amp;gt;&lt;br /&gt;
  &amp;lt;max&amp;gt;1.0&amp;lt;/max&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;0.0&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;0.0&amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;0.0&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0.0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;-1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0.1&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''offset:'''&lt;br /&gt;
* '''factor:'''&lt;br /&gt;
* '''power:'''&lt;br /&gt;
* '''two-sides:''' if false, nothing is drawn if the cosine is negative.&lt;br /&gt;
* '''min:'''&lt;br /&gt;
* '''max:'''&lt;br /&gt;
&lt;br /&gt;
scale = factor * pow( cosine, power ) + offset&lt;br /&gt;
&lt;br /&gt;
scale is then clamped between min and max.&lt;br /&gt;
&lt;br /&gt;
and this scale factor is applied to the object, from the center specified. It works best if scale is less than 1. Otherwise, there will be clipping issues.&lt;br /&gt;
&lt;br /&gt;
=== Noshadow ===&lt;br /&gt;
This animation is used to make sure an object will cast no shadow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;noshadow&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Range ===&lt;br /&gt;
: ''See also [[Modeling - Getting Started#Level of Detail (LOD)]].''&lt;br /&gt;
&lt;br /&gt;
To prevent objects -like instruments- being drawn when the aircraft is actually too far away for them to be seen anyway, a range animation is used. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;range&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;min-m&amp;gt;0&amp;lt;/min-m&amp;gt;&lt;br /&gt;
  &amp;lt;max-m&amp;gt;30&amp;lt;/max-m&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''min-m:''' the shortest distance (in meters) from the object center at which it is visible.&lt;br /&gt;
* '''max-m:''' the largest distance (in meters) from the object center at which it is visible.&lt;br /&gt;
&lt;br /&gt;
You could also use the generic level of detail (LOD) properties, which can be set by the user through View &amp;gt; Adjust LOD rangers: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Description&lt;br /&gt;
! Default value&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;/sim/rendering/static-lod/bare&amp;lt;/tt&amp;gt;&lt;br /&gt;
| only a rough exterior model&lt;br /&gt;
| 30,000 m&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;/sim/rendering/static-lod/rough&amp;lt;/tt&amp;gt; &lt;br /&gt;
| most should be visible&lt;br /&gt;
| 9,000 m&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;/sim/rendering/static-lod/detailed&amp;lt;/tt&amp;gt; &lt;br /&gt;
| all details should be visible&lt;br /&gt;
| 1,500 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The animation code will look like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;range&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;min-m&amp;gt;0&amp;lt;/min-m&amp;gt;&lt;br /&gt;
  &amp;lt;max-property&amp;gt;sim/rendering/static-lod/bare&amp;lt;/max-property&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can have both ranges (max and min) bound to a property, or just one of them.&lt;br /&gt;
* '''min-property:''' &lt;br /&gt;
* '''max-property:'''&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Rotate ===&lt;br /&gt;
One of the most important and frequently used animations of all. It rotates an object to an absolute position in degrees, as provided by the property-value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;surface-positions/left-aileron-pos-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-deg&amp;gt;25&amp;lt;/offset-deg&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''factor:''' is optional.&lt;br /&gt;
* '''offset-deg:''' is optional. Offset in degrees.&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Scale ===&lt;br /&gt;
A scale animation scales (resizes) an object. This can be either property-value dependant (first example) or a fixed scale (second example).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;scale&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;sim/time/sun-angle-rad&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;x-min&amp;gt;1.0&amp;lt;/x-min&amp;gt;&lt;br /&gt;
  &amp;lt;y-min&amp;gt;1.0&amp;lt;/y-min&amp;gt;&lt;br /&gt;
  &amp;lt;z-min&amp;gt;1.0&amp;lt;/z-min&amp;gt;&lt;br /&gt;
  &amp;lt;x-factor&amp;gt;1.4&amp;lt;/x-factor&amp;gt;&lt;br /&gt;
  &amp;lt;y-factor&amp;gt;1.4&amp;lt;/y-factor&amp;gt;&lt;br /&gt;
  &amp;lt;z-factor&amp;gt;2.0&amp;lt;/z-factor&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ?-min: the mimimum scale factor for each axis. If the property value would result in a smaller factor than this setting, the scale animation will hold.&lt;br /&gt;
* ?-factor: the scale factor for each axis (factor*property=scale factor).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;scale&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;x-offset&amp;gt;0.5&amp;lt;/x-offset&amp;gt;&lt;br /&gt;
  &amp;lt;y-offset&amp;gt;0.5&amp;lt;/y-offset&amp;gt;&lt;br /&gt;
  &amp;lt;z-offset&amp;gt;0.5&amp;lt;/z-offset&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* x.offset: the scale factor.&lt;br /&gt;
* Add [[#Center|&amp;amp;lt;center&amp;amp;gt;]] coordinates, to scale the object around that point.&lt;br /&gt;
* '''You can optionally use an [[Howto:Animate_models#Expressions|expression]] in the &amp;lt;factor&amp;gt; or &amp;lt;offset&amp;gt; inputs.''' For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Select ===&lt;br /&gt;
This animation selects (or unselects) objects when certain conditions are true (or false). The example below shows the object when the n1 of engine[1] is higher than 25%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;select&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;engines/engine[0]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;value&amp;gt;25&amp;lt;/value&amp;gt;&lt;br /&gt;
   &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shader ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;shader&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;shader&amp;gt;chrome&amp;lt;/shader&amp;gt;&lt;br /&gt;
  &amp;lt;texture&amp;gt;chrome2.png&amp;lt;/texture&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''shader:''' &lt;br /&gt;
* '''texture:''' path to the texture used by the shader.&lt;br /&gt;
&lt;br /&gt;
=== Spin ===&lt;br /&gt;
Very similar to [[#Rotate|rotate]], but the property provides a value in revolutions per minute (RPM) rather than an absolute position in degrees, and offset cannot be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;spin&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;engines/engine[0]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''factor:''' is optional.&lt;br /&gt;
&lt;br /&gt;
=== Timed ===&lt;br /&gt;
Swtiches between objects at specified intervals. This example switches between a lights-on model and a lights-off model. Lights on are shown 0.2 seconds, while lights off are displayed for 0.8 seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;timed&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;BacklightOn&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;BacklightOff&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;use-personality type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/use-personality&amp;gt;&lt;br /&gt;
  &amp;lt;branch-duration-sec&amp;gt;0.8&amp;lt;/branch-duration-sec&amp;gt;&lt;br /&gt;
  &amp;lt;branch-duration-sec&amp;gt;0.2&amp;lt;/branch-duration-sec&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tracking ===&lt;br /&gt;
A ''locked-track animation'' can do exactly the same thing as the [https://docs.blender.org/manual/en/latest/animation/constraints/tracking/locked_track.html Locked Track constraint] available in Blender and can also be used to simulate simple inverse kinematic systems consisting of two bones connected with a revolute joint (aka hinge). For details see: [[Howto:Animate gear scissors using the tracking animation]]&lt;br /&gt;
&lt;br /&gt;
=== Translate ===&lt;br /&gt;
This animation moves an object along an axis (not to be confused with the &amp;lt;code&amp;gt;textranslate&amp;lt;/code&amp;gt; animation which only moves the texture on the UV map, not the geometry). The example below will move an object in the Y direction:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
!Property value&lt;br /&gt;
!Output&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| -2.5&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 2.5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 7.5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;translate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;controls/seat/pilot/position-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;5&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-m&amp;gt;2.5&amp;lt;/offset-m&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using interpolation tables such as:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;interpolation&amp;gt;&lt;br /&gt;
	&amp;lt;entry&amp;gt;&amp;lt;ind&amp;gt;0.0&amp;lt;/ind&amp;gt;&amp;lt;dep&amp;gt; 0&amp;lt;/dep&amp;gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;
	&amp;lt;entry&amp;gt;&amp;lt;ind&amp;gt;0.666&amp;lt;/ind&amp;gt;&amp;lt;dep&amp;gt;0.18&amp;lt;/dep&amp;gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;
	&amp;lt;entry&amp;gt;&amp;lt;ind&amp;gt;1.0&amp;lt;/ind&amp;gt;&amp;lt;dep&amp;gt;0.27&amp;lt;/dep&amp;gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/interpolation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The first figure (&amp;lt;code&amp;gt;&amp;lt;ind&amp;gt;&amp;lt;/code&amp;gt;) refers to the value of the property associated with the object and the second figure (&amp;lt;code&amp;gt;&amp;lt;dep&amp;gt;&amp;lt;/code&amp;gt;) refers to the amount that the object moves in metres. For example, in this case, the object moves 18cm when the value reads 0.66 and 27cm when the value is 1.&lt;br /&gt;
&lt;br /&gt;
'''IF used WTIHOUT property''' : The object is placed at some (Value of Offset) meters away from its original position, along the virtual axis formed by said original position and the point with coordinates x/y/z defined in the &amp;lt;axis&amp;gt; tag.&lt;br /&gt;
Mathematically, assuming the Object to translate is (in the model space) placed at point A (x1, y1, z1) and you want to relocate it to point B (x2, y2, z2) then x2,y2,z2 are the values in the &amp;lt;axis&amp;gt; tag of the Translate animation and &amp;lt;offset&amp;gt; can be computed as SQRT((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''factor:''' is optional.&lt;br /&gt;
* '''offset-m:''' is optional. Offset in meters.&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
== PBR animation ==&lt;br /&gt;
&lt;br /&gt;
Animate the PBR (Physically-Based Rendering) materials. Keep in mind that your model must use the model-pbr.eff Effect or be a [[glTF]] model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;pbr&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property-base&amp;gt;sim/model/c172p/material/&amp;lt;/property-base&amp;gt;&lt;br /&gt;
  &amp;lt;base-color-factor&amp;gt;&lt;br /&gt;
    &amp;lt;r&amp;gt;1.0&amp;lt;/r&amp;gt;&lt;br /&gt;
    &amp;lt;g&amp;gt;0.3&amp;lt;/g&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;0.1&amp;lt;/b&amp;gt;&lt;br /&gt;
    &amp;lt;a&amp;gt;1.0&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/base-color-factor&amp;gt;&lt;br /&gt;
  &amp;lt;metallic-factor&amp;gt;0.0&amp;lt;/metallic-factor&amp;gt;&lt;br /&gt;
  &amp;lt;roughness-factor&amp;gt;0.3&amp;lt;/roughness-factor&amp;gt;&lt;br /&gt;
  &amp;lt;emissive-factor&amp;gt;&lt;br /&gt;
    &amp;lt;r&amp;gt;&amp;lt;property&amp;gt;panel-brightness&amp;lt;/property&amp;gt;&amp;lt;/r&amp;gt;&lt;br /&gt;
    &amp;lt;g&amp;gt;&amp;lt;property&amp;gt;panel-brightness&amp;lt;/property&amp;gt;&amp;lt;/g&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;&amp;lt;property&amp;gt;panel-brightness&amp;lt;/property&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;/emissive-factor&amp;gt;&lt;br /&gt;
&amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;property-base&amp;lt;/tt&amp;gt;: All other properties of this animation will be relative to this property node.&lt;br /&gt;
* &amp;lt;tt&amp;gt;base-color-factor&amp;lt;/tt&amp;gt;: The base color texture will be multiplied by this value. Should be an RGBA color.&lt;br /&gt;
* &amp;lt;tt&amp;gt;metallic-factor&amp;lt;/tt&amp;gt;: The metallic texture will be multiplied by this value. Should be a single floating point value.&lt;br /&gt;
* &amp;lt;tt&amp;gt;roughness-factor&amp;lt;/tt&amp;gt;: The roughness texture will be multiplied by this value. Should be a single floating point value.&lt;br /&gt;
* &amp;lt;tt&amp;gt;emissive-factor&amp;lt;/tt&amp;gt;: The emissive texture will be multiplied by this value. Should be an RGB color.&lt;br /&gt;
&lt;br /&gt;
For each of the color components you can use an [[expression]]. Every parameter is '''optional'''.&lt;br /&gt;
&lt;br /&gt;
== Material animation ==&lt;br /&gt;
Animate the material properties of an object, such as it's texture, shininess or color.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt; &lt;br /&gt;
  &amp;lt;type&amp;gt;material&amp;lt;/type&amp;gt; &lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property-base&amp;gt;sim/model/c172p/material&amp;lt;/property-base&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  lines as mentioned below&lt;br /&gt;
  ...&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Optional:'''&lt;br /&gt;
* '''property-base:''' All other properties of this animation will be relative to this property node.&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Numbers are clamped to 0.0 - 1.0, except &amp;lt;code&amp;gt;shininess&amp;lt;/code&amp;gt;, which is clamped to 0 - 128.&lt;br /&gt;
* By appending &amp;lt;tt&amp;gt;-prop&amp;lt;/tt&amp;gt; each of the material properties can read its value from another property.&lt;br /&gt;
* '''New since SimGear commit &amp;lt;code&amp;gt;51149bf&amp;lt;/code&amp;gt;''': For each of the color components (&amp;lt;code&amp;gt;ambient&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;diffuse&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;emission&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;specular&amp;lt;/code&amp;gt;), the &amp;lt;code&amp;gt;red&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;green&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;blue&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;factor&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; tags can each contain an [[Expressions|expression]] instead of a value.&lt;br /&gt;
&lt;br /&gt;
=== Ambient ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;ambient&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
  &amp;lt;/ambient&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diffuse ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;diffuse&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
  &amp;lt;/diffuse&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Emission ===&lt;br /&gt;
{{Main article|Howto: Illuminate faces}}&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;emission&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
   &amp;lt;factor-prop&amp;gt;controls/lighting/panel-norm&amp;lt;/factor-prop&amp;gt;&lt;br /&gt;
  &amp;lt;/emission&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emission colors are multiplied by the factor-prop value. 1 is maximum color intensity, while 0 is the minimum. Colors are calculated according to the [http://en.wikipedia.org/wiki/RGB_color_model RGB color model].&lt;br /&gt;
&lt;br /&gt;
=== Specular ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;specular&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
  &amp;lt;/specular&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Transparency ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;transparency&amp;gt;&lt;br /&gt;
   &amp;lt;alpha-prop&amp;gt;rotors/tail/rpm&amp;lt;/alpha-prop&amp;gt;&lt;br /&gt;
   &amp;lt;factor&amp;gt;-0.0015&amp;lt;/factor&amp;gt;&lt;br /&gt;
   &amp;lt;offset&amp;gt;1&amp;lt;/offset&amp;gt;&lt;br /&gt;
  &amp;lt;/transparency&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shininess ===&lt;br /&gt;
Shininess is clamped to 0-128.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;shininess&amp;gt;105&amp;lt;/shininess&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Threshold ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;threshold&amp;gt;0.001&amp;lt;/threshold&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Texture ===&lt;br /&gt;
Used for the [[Livery over MP]] system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;property-base&amp;gt;sim/model/livery&amp;lt;/property-base&amp;gt; &lt;br /&gt;
  &amp;lt;texture-prop&amp;gt;engine&amp;lt;/texture-prop&amp;gt; &lt;br /&gt;
  &amp;lt;texture&amp;gt;KLM.png&amp;lt;/texture&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Texture Animations ==&lt;br /&gt;
Applying different matrix transformations to the textures of an object.&lt;br /&gt;
&lt;br /&gt;
=== Textranslate ===&lt;br /&gt;
A very important animation for cockpits! This animation moves textures over a surface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;textranslate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;autopilot/settings/target-speed-kt&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;bias&amp;gt;0.0001&amp;lt;/bias&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;0.001&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;step&amp;gt;100&amp;lt;/step&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bias:''' Adds an offset to the property before factor/step. A small value is needed to compensate for [http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems floating point accuracy].&lt;br /&gt;
* '''factor:''' property * factor * texture width/height = the amount of pixels that the texture should be translated. If your texture is 256 pixels, an textranslate of 0.1 will result in the texture moving with 26 pixels, into the direction specified by the axis settings.&lt;br /&gt;
* '''step:''' the step size at which the texture is translated. If this is set to 0.1, the texture will only be translated at 0.1, 0.2, 0.3 etc.&lt;br /&gt;
* '''axis:''' the direction in which the texture is translated. Y is up/down, while X is left/right.&lt;br /&gt;
&lt;br /&gt;
=== Texrotate ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;texrotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;some/property/path&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-deg&amp;gt;25&amp;lt;/offset-deg&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
    &amp;lt;x&amp;gt;0.5&amp;lt;/x&amp;gt;&lt;br /&gt;
    &amp;lt;y&amp;gt;0.5&amp;lt;/y&amp;gt;&lt;br /&gt;
    &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
    &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
    &amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;&lt;br /&gt;
    &amp;lt;z&amp;gt;1&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Textrapezoid ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;textrapezoid&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;HUD.l.canvas&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;/hud/trapezoid-correction&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;side&amp;gt;bottom&amp;lt;/side&amp;gt;&lt;br /&gt;
&amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''side''': side of quad which should be scaled (''top'' (default)/''right''/''bottom''/''left'')&lt;br /&gt;
&lt;br /&gt;
=== Texmultiple ===&lt;br /&gt;
&lt;br /&gt;
Only one texture matrix can be applied to each object. With ''textmultiple'' multiple texture animations can be combined into a single matrix, applied to the specified object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;texmultiple&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;HUD.l.canvas&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;transform&amp;gt;&lt;br /&gt;
    &amp;lt;subtype&amp;gt;textranslate&amp;lt;/subtype&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/hud/offset-x&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;axis&amp;gt;&lt;br /&gt;
     &amp;lt;x&amp;gt;1&amp;lt;/x&amp;gt;&lt;br /&gt;
     &amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;&lt;br /&gt;
     &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
   &amp;lt;/axis&amp;gt;&lt;br /&gt;
  &amp;lt;/transform&amp;gt;&lt;br /&gt;
  &amp;lt;transform&amp;gt;&lt;br /&gt;
    &amp;lt;subtype&amp;gt;textranslate&amp;lt;/subtype&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/hud/offset-y&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;axis&amp;gt;&lt;br /&gt;
     &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
     &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
     &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
   &amp;lt;/axis&amp;gt;&lt;br /&gt;
  &amp;lt;/transform&amp;gt;&lt;br /&gt;
  &amp;lt;transform&amp;gt;&lt;br /&gt;
    &amp;lt;subtype&amp;gt;textrapezoid&amp;lt;/subtype&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/hud/trapezoid-correction&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;/transform&amp;gt;&lt;br /&gt;
&amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object interaction animations ==&lt;br /&gt;
=== Enable-hot ===&lt;br /&gt;
Scenery objects are automatically defined as solid by FlightGear, meaning that an aircraft can taxi on them and/or crash when touching. For certain objects (groundmarkings, beacon light-beams etc.) this might be an unwanted feature. The solidness can be disabled with the following animation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;enable-hot type=&amp;quot;bool&amp;quot;&amp;gt;false&amp;lt;/enable-hot&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''enable-hot:''' can be either true or false. Remember that objects are automatically solid, so it should not be necessary to set this at all when wanting solidness.&lt;br /&gt;
&lt;br /&gt;
=== Interactions ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt; &lt;br /&gt;
  &amp;lt;type&amp;gt;interaction&amp;lt;/type&amp;gt; &lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt; &lt;br /&gt;
  &amp;lt;interaction-type&amp;gt;carrier-wire&amp;lt;/interaction-type&amp;gt; &lt;br /&gt;
 &amp;lt;/animation&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''interaction-type:''' can have the following values:&lt;br /&gt;
**'''carrier-catapult:'''&lt;br /&gt;
** '''carrier-wire:''' makes the object act as an arresting wire, as used on [[aircraft carrier]]s.&lt;br /&gt;
&lt;br /&gt;
== Direct manipulation animations ==&lt;br /&gt;
=== Knob / slider (v. 2.11-) ===&lt;br /&gt;
{{Main article|Knob / slider animation}}&lt;br /&gt;
&lt;br /&gt;
=== Pick ===&lt;br /&gt;
{{Main article|Howto: Make a clickable panel#Pick}}&lt;br /&gt;
&lt;br /&gt;
=== Touch ===&lt;br /&gt;
&lt;br /&gt;
The touch animation provides the normalized coordinates of a touch (or click) event on a 2d surface. The coordinates are passed in the argument and can be accessed using cmdarg() in Nasal.&lt;br /&gt;
&lt;br /&gt;
* Touch animation is designed to work with a quad that is being used as a Canvas placement (display).&lt;br /&gt;
* The touch animation must not be combined with a pick animation on the same object.&lt;br /&gt;
* More info here: [[Touch Animation]]&lt;br /&gt;
&lt;br /&gt;
==== touch example ====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;animation&amp;gt;&lt;br /&gt;
        &amp;lt;type&amp;gt;touch&amp;lt;/type&amp;gt;&lt;br /&gt;
        &amp;lt;visible&amp;gt;true&amp;lt;/visible&amp;gt;&lt;br /&gt;
        &amp;lt;object-name&amp;gt;CanvasPlacement&amp;lt;/object-name&amp;gt;&lt;br /&gt;
        &amp;lt;action&amp;gt;&lt;br /&gt;
            &amp;lt;touch&amp;gt;0&amp;lt;/touch&amp;gt;&lt;br /&gt;
            &amp;lt;repeatable&amp;gt;false&amp;lt;/repeatable&amp;gt;&lt;br /&gt;
            &amp;lt;binding&amp;gt;&lt;br /&gt;
                &amp;lt;command&amp;gt;nasal&amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;script&amp;gt;print(&amp;quot;touch input (&amp;quot;,cmdarg().getNode(&amp;quot;x&amp;quot;).getValue(),&amp;quot;,&amp;quot;,cmdarg().getNode(&amp;quot;y&amp;quot;).getValue())&amp;lt;/script&amp;gt;&lt;br /&gt;
            &amp;lt;/binding&amp;gt;&lt;br /&gt;
        &amp;lt;/action&amp;gt;&lt;br /&gt;
    &amp;lt;/animation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shadow Handling ==&lt;br /&gt;
There exist several possibilites for handling of shadows. &amp;lt;br /&amp;gt;&lt;br /&gt;
See '''[[ALS_technical_notes|ALS Technical Notes]]''' and more specific '''[[ALS_technical_notes#ALS_fuselage_shadow_effect|Fuselage Shadow Effect with ALS]]''' for a relatively simple shadow handling.&amp;lt;br /&amp;gt;&lt;br /&gt;
See '''[[Project Rembrandt]]''' which - amongst other functionality - implements a very realistic shadow mapping.&lt;br /&gt;
As of January 2021 Project Rembrandt was replaced by the '''[[Compositor]]''' renderer which combines both Project Rembrandt and ALS in a single rendering engine. This also means that the Fuselage Shadow Effect with ALS is now deprecated.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix|all|&lt;br /&gt;
* {{cite web |url=http://www.opensubscriber.com/message/flightgear-devel@flightgear.org/958955.html |title=&amp;quot;material&amp;quot; animation (and the bo105 as an example) |first=Melchior |last=Franz |date=22 March 2005 |work=FlightGear-devel mailinglist }}&lt;br /&gt;
* {{cite web |url=http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg01546.html |title=flash animation |first=Frederic |last=Bouvier |date=22 Feb 2006 |work=FlightGear-devel mailinglist }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[MP Fallback models]]&lt;br /&gt;
* [[Howto:Animate gear scissors]]&lt;br /&gt;
* [[Howto:Animate helicopters]]&lt;br /&gt;
* [[Howto:Creating 3D instruments]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=37353|title=3d models, how to produce them in an understandable way}} (April 2020-) - Touches on the subject of not using LOD range animations in scenery models.&lt;br /&gt;
* {{forum link|t=36545|title=speedo Drum settings}} (November 2019) - Animating a mechanical multi-digit drum counter&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement|Animate models]]&lt;br /&gt;
[[Category:Howto|Animate models]]&lt;br /&gt;
[[Category:Modeling|Animate models]]&lt;br /&gt;
[[Category:Scenery enhancement|Animate models]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Compositor&amp;diff=143108</id>
		<title>Compositor</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Compositor&amp;diff=143108"/>
		<updated>2025-12-02T02:41:32Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Clarify HDR specific lighting paramaters replace legacy paramaters rather than complement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{forum|47|Effects &amp;amp; Shaders}}&lt;br /&gt;
&lt;br /&gt;
{{infobox subsystem&lt;br /&gt;
|image       = Compositor logo.png&lt;br /&gt;
|name        = Compositor Framework&lt;br /&gt;
|started     = 01/2018 (Available since FlightGear 2020.4)&lt;br /&gt;
|description = Dynamic rendering pipeline configured via the [[Property tree]] and [[PropertyList XML File|XML]]&lt;br /&gt;
|status      = Stable (merged and actively maintained)&lt;br /&gt;
|developers  = Fernando García Liñán &amp;lt;ref&amp;gt;https://sourceforge.net/u/fgarlin/profile/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|changelog = https://sourceforge.net/u/fgarlin/profile/feed.rss&lt;br /&gt;
|folders = &lt;br /&gt;
* {{simgear file|simgear/scene/viewer}}&lt;br /&gt;
* {{flightgear file|src/Viewer}}&lt;br /&gt;
* {{fgdata file|Compositor}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Rendering}}&lt;br /&gt;
&lt;br /&gt;
The '''Compositor''' aims to bring multi-pass rendering to FlightGear. It encapsulates a rendering pipeline and exposes its parameters to a [[Property Tree]] interface. At startup, FlightGear reads the pipeline definition file for each physical viewport defined on the [[Howto:Configure camera view windows|CameraGroup settings]]. If no Compositor file is specified for a physical camera, the one given by the &amp;lt;code&amp;gt;--compositor=&amp;lt;/code&amp;gt; startup command will be used. If such startup option is not used either, FlightGear will look for a valid Compositor file in &amp;lt;tt&amp;gt;$FG_ROOT/Compositor/default.xml&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The Compositor introduces a new dedicated fgdata directory for new/custom rendering pipelines: {{Fgdata file|Compositor}}.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
First discussed in 03/2012 during the early [[Rembrandt]] days, Zan (Lauri Peltonen) came up with a set of patches demonstrating how to create an XML-configurable rendering pipeline. Back then, this work was considered to look pretty promising &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/28946515/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] [Rembrandt] the plan &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Mathias Fröhlich &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Mar 7th, 2012 &lt;br /&gt;
  |added  =  Mar 7th, 2012 &lt;br /&gt;
  |script_version = 0.36 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt; and at the time plans were discussed to unify this with the ongoing Rembrandt implementation (no longer maintained).&lt;br /&gt;
&lt;br /&gt;
Adopting Zan's approach would have meant that efforts like [[Rembrandt]] (deferred rendering) could have been implemented without requiring C++ space modifications, i.e. purely in [[Base package]] space. Rembrandt's developer (FredB) suggested to extend the format to avoid duplicating the stages when you have more than one viewport, i.e.  specifying a pipeline as a template, with conditions like in effects, and have the current camera layout refer the pipeline that would be duplicated, resized and positioned for each declared viewport &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/28944773/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] [Rembrandt] the plan &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Frederic Bouvier &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Mar 7th, 2012 &lt;br /&gt;
  |added  =  Mar 7th, 2012 &lt;br /&gt;
  |script_version = 0.36 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zan's original patches can still be found in his newcameras branches which allow the user to define the rendering pipeline in preferences.xml: {{gitorious source|proj=fg|repo=zans-flightgear|branch=newcameras|text=FlightGear}}, {{gitorious source|proj=fg|repo=zans-simgear|branch=newcameras|text=SimGear}}. At that point, it didn't have everything Rembrandt's pipeline needs, but most likely could be easily enhanced to support those things. Basically, the original version added support for multiple camera passes, texture targets, texture formats, passing textures from one pass to another etc, while preserving the standard rendering line if user wants that. &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/28944733/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; [Flightgear-devel] [Rembrandt] the plan &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Lauri Peltonen &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Mar 7th, 2012 &lt;br /&gt;
  |added  =  Mar 7th, 2012 &lt;br /&gt;
  |script_version = 0.36 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the early days of Zan's groundwork, providing the (hooks) infrastructure to enable base package developers to prototype, test and develop distinct rendering pipelines without requiring C++ space modifications has been a long-standing idea, especially after the [[Canvas]] system became available in early 2012, which demonstrated how RTT-rendering buffers (FBOs) could be set up, created and manipulated procedurally (i.e. at run-time) using XML, the property tree and [[Nasal]] scripting. &amp;lt;ref&amp;gt;{{forum link|type=search|title=Zan's Rembrandt and Canvas work|keywords=zan+rembrandt+canvas}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The new '''Compositor''' is an improved re-implementation of Zan's original work using not just XML, but also [[Property Tree|properties]] and a handful of [[Canvas]] concepts.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Completely independent of other parts of the simulator, i.e. it's part of [[SimGear]] and can be used in a standalone fashion if needed, ala Canvas.&lt;br /&gt;
* Although independent, its aim is to be fully compatible with the current rendering framework in FG. This includes the [[Effects]] system, [[Howto:Configure camera view windows|CameraGroup]], [[Rembrandt]], [[ALS]] and [[Canvas]].&lt;br /&gt;
* Its functionality overlaps Rembrandt: what can be done with Rembrandt can be done with the Compositor, but not vice versa.&lt;br /&gt;
* Fully configurable via an XML interface without compromising performance (ala Effects, using [[PropertyList XML File|PropertyList files]]).&lt;br /&gt;
* Flexible, expandable and compatible with modern graphics.&lt;br /&gt;
* It doesn't increase the hardware requirements, it expands the hardware range FG can run on. People with integrated GPUs (Intel HD etc) can run a Compositor with a single pass that renders directly to the screen like before, while people with more powerful cards can run a Compositor that implements deferred rendering, for example.&lt;br /&gt;
* Static branching support. Every pipeline element can be enabled/disabled at startup via a [[Conditions|&amp;lt;condition&amp;gt; block]].&lt;br /&gt;
* The entire rendering pipeline can be reloaded via an fgcommand (&amp;lt;tt&amp;gt;reload-compositor&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== How to enable the Compositor ==&lt;br /&gt;
&lt;br /&gt;
The Compositor is now the default renderer framework in FlightGear since 2020/11/17. It will be included as part of version 2020.4 onwards.&lt;br /&gt;
&lt;br /&gt;
If you compile FlightGear from source, you can already try the Compositor. Make sure you are pulling the latest version of the 'next' branch. You can also try out the latest nightly build from the [[FlightGear build server]].&lt;br /&gt;
&lt;br /&gt;
== Notes for aircraft developers ==&lt;br /&gt;
&lt;br /&gt;
=== Lights ===&lt;br /&gt;
&lt;br /&gt;
The Compositor introduces a new way of defining lights that is renderer agnostic, so every rendering pipeline will be able to access the lights that have been implemented like this. The resulting light volumes can be visualized for debugging purposes by setting the property &amp;lt;tt&amp;gt;/sim/debug/show-light-volumes&amp;lt;/tt&amp;gt; to true.&lt;br /&gt;
&lt;br /&gt;
You can edit existing lights with the '''[[Illuminator addon|Illuminator]]''', but you have to define them first e.g. in your aircraft. The Illuminator add-on is meant for fine-tuning the light parameters.&lt;br /&gt;
&lt;br /&gt;
[[Project Rembrandt]] light definitions are also read by the Compositor for backwards compatibility reasons. However, it is not recommended to use the old syntax for new/updated projects.&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=10|&lt;br /&gt;
|valign=top style=&amp;quot;width: 20%;&amp;quot;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;light&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;my-spotlight&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;spot&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;position&amp;gt;&lt;br /&gt;
    &amp;lt;x-m&amp;gt;-7.7476&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;y-m&amp;gt;0&amp;lt;/y-m&amp;gt;&lt;br /&gt;
    &amp;lt;z-m&amp;gt;-1.7990&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/position&amp;gt;&lt;br /&gt;
  &amp;lt;direction&amp;gt;&lt;br /&gt;
    &amp;lt;x&amp;gt;-1.0&amp;lt;/x&amp;gt;&lt;br /&gt;
    &amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;&lt;br /&gt;
    &amp;lt;z&amp;gt;-0.013&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/direction&amp;gt;&lt;br /&gt;
  &amp;lt;ambient&amp;gt;&lt;br /&gt;
    &amp;lt;r&amp;gt;0.03&amp;lt;/r&amp;gt;&lt;br /&gt;
    &amp;lt;g&amp;gt;0.03&amp;lt;/g&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;0.03&amp;lt;/b&amp;gt;&lt;br /&gt;
    &amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/ambient&amp;gt;&lt;br /&gt;
  &amp;lt;diffuse&amp;gt;&lt;br /&gt;
    &amp;lt;r&amp;gt;0.95&amp;lt;/r&amp;gt;&lt;br /&gt;
    &amp;lt;g&amp;gt;0.9&amp;lt;/g&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;0.9&amp;lt;/b&amp;gt;&lt;br /&gt;
    &amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/diffuse&amp;gt;&lt;br /&gt;
  &amp;lt;specular&amp;gt;&lt;br /&gt;
    &amp;lt;r&amp;gt;0.95&amp;lt;/r&amp;gt;&lt;br /&gt;
    &amp;lt;g&amp;gt;0.9&amp;lt;/g&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;0.9&amp;lt;/b&amp;gt;&lt;br /&gt;
    &amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/specular&amp;gt;&lt;br /&gt;
  &amp;lt;attenuation&amp;gt;&lt;br /&gt;
    &amp;lt;c&amp;gt;1.0&amp;lt;/c&amp;gt;&lt;br /&gt;
    &amp;lt;l&amp;gt;0.09&amp;lt;/l&amp;gt;&lt;br /&gt;
    &amp;lt;q&amp;gt;0.032&amp;lt;/q&amp;gt;&lt;br /&gt;
  &amp;lt;/attenuation&amp;gt;&lt;br /&gt;
  &amp;lt;spot-exponent&amp;gt;5&amp;lt;/spot-exponent&amp;gt;&lt;br /&gt;
  &amp;lt;spot-cutoff&amp;gt;40&amp;lt;/spot-cutoff&amp;gt;&lt;br /&gt;
  &amp;lt;range-m&amp;gt;50&amp;lt;/range-m&amp;gt;&lt;br /&gt;
  &amp;lt;dim-factor&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;controls/lighting/instruments-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;/dim-factor&amp;gt;&lt;br /&gt;
&amp;lt;/light&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|valign=top style=&amp;quot;width: 80%;&amp;quot;|&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''name'''&amp;lt;/tt&amp;gt;. An {{tag|animation}} will be able to reference the light by this name. Most [[Howto:Animate_models|animations]] will work as expected (rotate, translate, spin etc). Material animations are not supported.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''type'''&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;spot&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;point&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''position'''&amp;lt;/tt&amp;gt;. The position of the light source in model space and in meters.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''direction'''&amp;lt;/tt&amp;gt;. Only available in &amp;lt;tt&amp;gt;spot&amp;lt;/tt&amp;gt; lights. It indicates the direction of the spotlight. This parameter can be specified in three different ways:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 1px solid darkgray;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:33%;&amp;quot; |Direction vector&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:33%;&amp;quot; |Look-at point&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:33%;&amp;quot; |Rotation angles&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px&amp;quot; | A vector in model space that specifies the direction. Doesn't have to be normalized.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x&amp;gt;-1.0&amp;lt;/x&amp;gt;&lt;br /&gt;
&amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;&lt;br /&gt;
&amp;lt;z&amp;gt;-0.013&amp;lt;/z&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| style=&amp;quot;padding: 10px&amp;quot; | The spotlight will calculate its direction by looking at this position from the light position. The point is in model space and in meters.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lookat-x-m&amp;gt;-8.031&amp;lt;/lookat-x-m&amp;gt;&lt;br /&gt;
&amp;lt;lookat-y-m&amp;gt;0&amp;lt;/lookat-y-m&amp;gt;&lt;br /&gt;
&amp;lt;lookat-z-m&amp;gt;-2&amp;lt;/lookat-z-m&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| style=&amp;quot;padding: 10px&amp;quot; | A three angle rotation in degrees that rotates the spotlight around the three axes. A 0 degree angle in all axes makes the spotlight point downwards (negative Z).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pitch-deg&amp;gt;90&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
&amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
&amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''ambient'''&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;'''diffuse'''&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;'''specular'''&amp;lt;/tt&amp;gt;. Four-component vectors that specify the light color.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''attenuation'''&amp;lt;/tt&amp;gt;. Three-component vector where &amp;lt;code&amp;gt;&amp;lt;c&amp;gt;&amp;lt;/code&amp;gt; specifies the constant factor, &amp;lt;code&amp;gt;&amp;lt;l&amp;gt;&amp;lt;/code&amp;gt; specifies the linear factor and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;q&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; specifies the quadratic factor. These factors are plugged into the OpenGL light attenuation formula [[File:Spotlight_attenuation.png]] where d is the distance of the fragment to the light source. See this [http://wiki.ogre3d.org/tiki-index.php?page=-Point+Light+Attenuation table] for a list of attenuation values based on the range of the light.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''range-m'''&amp;lt;/tt&amp;gt;. Maximum range from the light source position in meters. This value will be used by the renderers to determine if a fragment is illuminated by this source. Every fragment outside this range isn't guaranteed to be affected by the light, even if the attenuation factor isn't 0 in that particular fragment.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''spot-cutoff'''&amp;lt;/tt&amp;gt;. Only available in &amp;lt;tt&amp;gt;spot&amp;lt;/tt&amp;gt; lights. It specifies the maximum spread angle of a light source. Only values in the range 0 90 are accepted. If the angle between the direction of the light and the direction from the light to the fragment being lighted is greater than the spot cutoff angle, it won't be lit.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''spot-exponent'''&amp;lt;/tt&amp;gt;. Only available in &amp;lt;tt&amp;gt;spot&amp;lt;/tt&amp;gt; lights. Higher spot exponents result in a more focused light source, regardless of the spot cutoff angle.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''dim-factor'''&amp;lt;/tt&amp;gt; ('''Optional'''). Controls the dimming of the light source through an [[Expressions|expression]].&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''debug-color'''&amp;lt;/tt&amp;gt; ('''Optional'''). Sets the color of the debug light volume. By default it's red.&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Important: &amp;lt;/span&amp;gt;'''The following parameters are '''only''' available in the [[HDR Pipeline]].&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''color'''&amp;lt;/tt&amp;gt;. The color or hue of emitted light. It is expected to be in the sRGB color space.&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''intensity'''&amp;lt;/tt&amp;gt;. The brightness of the light. This value can be (and will almost always be) higher than 1.&lt;br /&gt;
When using the [[HDR Pipeline]], these parameters replace the legacy paramaters: '''ambient''', '''diffuse''', '''specular''', and '''attenuation'''.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Shadows ===&lt;br /&gt;
&lt;br /&gt;
The shadow mapping algorithm can be customized entirely by the rendering pipeline. This means that each pipeline will have its own requirements when it comes to shadows. Here are some general recommendations:&lt;br /&gt;
&lt;br /&gt;
* Use the [[Howto:Animate models#Noshadow|&amp;lt;tt&amp;gt;noshadow&amp;lt;/tt&amp;gt; animation]] to disable shadows on objects that don't need them. An example would be billboarded lights (light sprites) or really small cockpit elements that don't need shadows and would cause degraded performance.&lt;br /&gt;
If the casted aircraft shadow appears blocky then there probably are some objects which need the noshadow animation applied. Most notably are billboarded lights which include [[ALS_technical_notes#ALS procedural lights|ALS procedural lights]].&lt;br /&gt;
* Try to mark as many cockpit objects as possible as &amp;lt;tt&amp;gt;interior&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;model&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;interior&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;usage&amp;gt;interior&amp;lt;/usage&amp;gt;&lt;br /&gt;
  &amp;lt;path&amp;gt;Aircraft/JA37/Models/ja37-interior.xml&amp;lt;/path&amp;gt; &amp;lt;!-- All the objects that should only be seen when inside the cockpit are in this file --&amp;gt;&lt;br /&gt;
&amp;lt;/model&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Unlike in Rembrandt, polygons facing the Sun are the ones used to generate the shadow map, so single sided surfaces and non-closed objects should be rendered correctly.&lt;br /&gt;
&lt;br /&gt;
== Effects and Shaders ==&lt;br /&gt;
&lt;br /&gt;
=== Schemes ===&lt;br /&gt;
&lt;br /&gt;
Effects can have different implementations depending on the Compositor pipeline being used. For example, a grass Effect implemented for a high quality pipeline might have much more detail than one that targets low specification machines. Still, they both implement the &amp;quot;look&amp;quot; of grass, so they share the same Effect file (grass.eff).&lt;br /&gt;
&lt;br /&gt;
The Compositor chooses which implementation of an Effect to render based on the &amp;lt;tt&amp;gt;&amp;lt;scheme&amp;gt;&amp;lt;/tt&amp;gt; of the techniques.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;technique n=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;scheme&amp;gt;test-scheme&amp;lt;/scheme&amp;gt;&lt;br /&gt;
  [...]&lt;br /&gt;
&amp;lt;/technique&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the technique will be chosen if the Compositor pipeline &amp;lt;tt&amp;gt;&amp;lt;scene&amp;gt;&amp;lt;/tt&amp;gt; pass uses the &amp;lt;tt&amp;gt;test-scheme&amp;lt;/tt&amp;gt; Effect scheme. Consequently, porting an Effect to a Compositor pipeline will require knowing which Effect schemes it uses and writing a technique for each one. The only exception to this is the Classic/default pipeline, which uses techniques with no scheme.&lt;br /&gt;
&lt;br /&gt;
=== Built-in uniforms ===&lt;br /&gt;
&lt;br /&gt;
The Compositor provides a set of built-in uniforms that are passed along to every shader. These uniforms must '''not''' be defined in the Effect file, as they are defined and updated in C++.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_TextureMatrix&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Texture matrix that replaces the old fixed-function behaviour. If no texture animations are present it corresponds to the identity matrix.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_Viewport&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Viewport geometry for the current pass (x, y, width, height).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_PixelSize&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec2&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Inverse of the width and height of the viewport.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_ViewMatrix&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|View matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_ViewMatrixInverse&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Inverse of the view matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_ProjectionMatrix&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Projection matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_ProjectionMatrixInverse&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Inverse of the projection matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_PrevViewMatrix&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Previous frame view matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_PrevViewMatrixInverse&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Previous frame inverse of the view matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_PrevProjectionMatrix&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Previous frame projection matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_PrevProjectionMatrixInverse&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;mat4&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Previous frame inverse of the projection matrix given by CameraGroup for this Compositor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_CameraPositionCart&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Position of the camera in world space, expressed in cartesian coordinates.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_CameraPositionGeod&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Position of the camera in world space, expressed in geodesic coordinates (longitude in radians, latitude in radians, elevation in meters).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_CameraDistanceToEarthCenter&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Distance from the camera to the center of the Earth in meters.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_CameraWorldUp&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Camera up vector in world space.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_CameraViewUp&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Camera up vector in view space.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_EarthRadius&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Earth radius right below the camera position in meters.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_NearFar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec2&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Near and far clipping planes in meters. x component is the near plane, y component is the far plane.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_Fcoef&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Used by logarithmic depth.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_FOVScale&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec2&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Used by logarithmic depth.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_SunDirection&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Normalized Sun (directional light) direction in view space.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_SunDirectionWorld&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Normalized Sun (directional light) direction in world space.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_SunZenithCosTheta&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Dot product between the Sun direction and the up vector at the camera position.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_MoonDirection&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Normalized Moon (directional light) direction in view space.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_MoonDirectionWorld&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;vec3&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Normalized Moon (directional light) direction in world space.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;fg_MoonZenithCosTheta&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Dot product between the Moon direction and the up vector at the camera position.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating a custom rendering pipeline ==&lt;br /&gt;
&lt;br /&gt;
Since the Compositor is completely data-driven, new rendering pipelines can be created by writing a custom XML pipeline definition. This section tries to document most of the available parameters, but the best and most up-to-date resource is the Compositor parsing code in SimGear ({{simgear file|simgear/scene/viewer}}). See existing pipelines in {{fgdata file|Compositor}} for practical examples on how to use these parameters.&lt;br /&gt;
&lt;br /&gt;
Also keep in mind that every pipeline element can be enabled/disabled through a [[Conditions|&amp;lt;condition&amp;gt; block]]. This allows for dynamic rendering pipelines that have toggleable features. However, the pipeline can't be updated in real-time: the simulator has to be restarted or the Compositor has to be reloaded through the &amp;lt;tt&amp;gt;reload-compositor&amp;lt;/tt&amp;gt; [[Fgcommands|fgcommand]].&lt;br /&gt;
&lt;br /&gt;
=== Buffers ===&lt;br /&gt;
&lt;br /&gt;
A buffer represents a texture or, more generically, a region of GPU memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
| Passes will be able to address the buffer by this name&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;type&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| &amp;lt;tt&amp;gt;1d, 2d, 2d-array, 2d-multisample, 3d, rect, cubemap&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Any texture type allowed by OpenGL&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;width&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| Any unsigned integer or &amp;lt;tt&amp;gt;screen&amp;lt;/tt&amp;gt; to use the physical viewport width. The &amp;lt;code&amp;gt;&amp;lt;property&amp;gt;&amp;lt;/code&amp;gt; tag can also be used to use a property value&lt;br /&gt;
|&lt;br /&gt;
| Texture width&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;screen-width-scale&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| float&lt;br /&gt;
| &amp;lt;tt&amp;gt;1.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
| If &amp;lt;tt&amp;gt;screen&amp;lt;/tt&amp;gt; was used, this controls the width scaling factor&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;height&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| Any unsigned integer or &amp;lt;tt&amp;gt;screen&amp;lt;/tt&amp;gt; to use the physical viewport height. The &amp;lt;code&amp;gt;&amp;lt;property&amp;gt;&amp;lt;/code&amp;gt; tag can also be used to use a property value&lt;br /&gt;
|&lt;br /&gt;
| Texture height&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;screen-height-scale&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| float&lt;br /&gt;
| &amp;lt;tt&amp;gt;1.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
| If &amp;lt;tt&amp;gt;screen&amp;lt;/tt&amp;gt; was used, this controls the height scaling factor&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;depth&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| Any unsigned integer. The &amp;lt;code&amp;gt;&amp;lt;property&amp;gt;&amp;lt;/code&amp;gt; tag can also be used to use a property value&lt;br /&gt;
|&lt;br /&gt;
| Texture depth&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;format&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| See {{simgear file|simgear/scene/viewer/CompositorBuffer.cxx}} for the latest available values&lt;br /&gt;
| &amp;lt;tt&amp;gt;rgba8&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Specifies the texture format. It corresponds to the ''internalformat'', ''format'' and ''type'' arguments of the OpenGL function ''glTexImage2D''&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;min-filter, mag-filter&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| &amp;lt;tt&amp;gt;linear, linear-mipmap-linear, linear-mipmap-nearest, nearest, nearest-mipmap-linear, nearest-mipmap-nearest&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;linear&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Change the minification and magnification filtering respectively&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;wrap-s, wrap-t, wrap-r&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| &amp;lt;tt&amp;gt;clamp, clamp-to-edge, clamp-to-border, repeat, mirror&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;clamp-to-border&amp;lt;/tt&amp;gt;&lt;br /&gt;
| They change the wrap mode for each coordinate&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;anisotropy&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| float&lt;br /&gt;
| &amp;lt;tt&amp;gt;1.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;border-color&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| vec4&lt;br /&gt;
| &amp;lt;tt&amp;gt;(0.0f, 0.0f, 0.0f, 0.0f)&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;shadow-comparison&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| bool&lt;br /&gt;
| &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;shadow-texture-mode&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| &amp;lt;tt&amp;gt;luminance, intensity, alpha&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;luminance&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;shadow-compare-func&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| &amp;lt;tt&amp;gt;never, less, equal, lequal, greater, notequal, gequal, always&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;lequal&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Passes ===&lt;br /&gt;
&lt;br /&gt;
A pass wraps around an [http://public.vrac.iastate.edu/vancegroup/docs/OpenSceneGraphReferenceDocs-3.0/a00089.html osg::Camera]. Passes all have some common parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;clear-color, clear-accum, clear-depth and clear-stencil&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| vec4&lt;br /&gt;
| black, black, &amp;lt;tt&amp;gt;1.0&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt; respectively&lt;br /&gt;
| Pass clear colors&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;clear-mask&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| &amp;lt;tt&amp;gt;color, stencil, depth, accum&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;color depth&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Pass clear mask&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;effect-scheme&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| Valid effect scheme name&lt;br /&gt;
| None&lt;br /&gt;
| The pass will try to use the specified effect scheme to draw every object.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Passes can render to a buffer (Render to Texture), to several buffers (Multiple Render Targets) or directly to the framebuffer. This is accomplished by the &amp;lt;code&amp;gt;&amp;lt;attachment&amp;gt;&amp;lt;/code&amp;gt; tag. Possible parameters of an attachment are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;buffer&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| Valid buffer name&lt;br /&gt;
| &lt;br /&gt;
| The name of the buffer to output to&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;component&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| &amp;lt;tt&amp;gt;color, color0&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;color15, depth, stencil, depth-stencil&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| FBO attachment point&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;level&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Mipmap level of the texture that is attached&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;face&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Face of cube map texture or z-level of 3d texture&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;mipmap-generation&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| bool&lt;br /&gt;
| &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Whether mipmap generation should be done for texture&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;multisample-samples&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Multisample anti-aliasing (MSAA) samples&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;multisample-color-samples&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Multisample anti-aliasing (MSAA) color samples&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Passes can also receive buffers as input and use them in their shaders. This is accomplished by the &amp;lt;code&amp;gt;&amp;lt;binding&amp;gt;&amp;lt;/code&amp;gt; tag, which has the following parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;buffer&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| Valid buffer name&lt;br /&gt;
| &lt;br /&gt;
| The name of the buffer to bind&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;unit&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| int&lt;br /&gt;
| &lt;br /&gt;
| The texture unit to place the texture on. Effects will be able to access the buffer on this texture unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are specific pass types, each with their own set of custom parameters.&lt;br /&gt;
&lt;br /&gt;
==== scene ====&lt;br /&gt;
Renders the scene from the point of view given by the CameraGroup.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;cull-mask&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| A 32 bit number. See {{simgear file|simgear/scene/util/RenderConstants.hxx}} to know which bits enable what&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xffffffff&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Specifies the cull mask to be used in the underlying &amp;lt;tt&amp;gt;osg::Camera&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;z-near, z-far&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| float&lt;br /&gt;
| 0.0 uses the value given by the CameraGroup&lt;br /&gt;
| Sets a custom near and far values. Useful for implementing depth partition and limiting the depth range on cubemap passes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;cubemap-face&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; (don't use cubemap)&lt;br /&gt;
| Ignores the given view and projection matrices and uses a custom one that renders the scene as if it was seen from inside a cubemap looking towards the specified face&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;use-shadow-pass&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| string&lt;br /&gt;
| Empty&lt;br /&gt;
| Name of a shadow mapping pass. Exposes shadow mapping related uniforms to the shaders of the current pass&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Scene passes can also use the tag &amp;lt;code&amp;gt;&amp;lt;clustered-shading&amp;gt;&amp;lt;/code&amp;gt; to enable clustered shading (lights). The following parameters are available:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;max-pointlights&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| 1024&lt;br /&gt;
| Maximum amount of point light sources allowed on the entire scene&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;max-spotlights&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| 1024&lt;br /&gt;
| Maximum amount of spot light sources allowed on the entire scene&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;max-light-indices&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| 256&lt;br /&gt;
| Size of the light indices texture. Keep in mind that it is a 2D texture, so the total size will be e.g. 256x256&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;tile-size&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| 128&lt;br /&gt;
| Size of each clustered shading tile&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;num-threads&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| Number of threads to use during the light culling process. Keep in mind that a high thread count when there aren't many lights will worsen performance due to the thread creation overhead&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;depth-slices&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| Number of slices to partition the view frustum in the Z axis. Higher numbers will cull lights more aggressively, increasing performance if there are many lights further out that don't contribute much to the overall scene's lighting&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== quad ====&lt;br /&gt;
Renders a fullscreen quad with an optional [[Effects|effect]] applied. Useful for screen space shaders (like SSAO, Screen Space Reflections or bloom) and deferred rendering.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;geometry&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| float values for &amp;lt;code&amp;gt;&amp;lt;x&amp;gt;, &amp;lt;y&amp;gt;, &amp;lt;width&amp;gt;, &amp;lt;height&amp;gt;, &amp;lt;scale&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;0.0, 0.0, 1.0, 1.0, 1.0&amp;lt;/tt&amp;gt; respectively&lt;br /&gt;
| Size of the fullscreen quad inside the viewport using normalized coordinates.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;effect&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| Valid Effect file&lt;br /&gt;
| None&lt;br /&gt;
| This Effect will be applied to the quad geometry&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csm ====&lt;br /&gt;
Implements Cascaded Shadow Mapping by rendering the scene from a light's point of view (the Sun by default). For now it only supports directional light sources. There has to be one &amp;lt;tt&amp;gt;csm&amp;lt;/tt&amp;gt; pass for each cascade.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; font-size: 85%; width: auto; table-layout: fixed;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Parameter Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Optional&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Default Value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;light-name&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| Valid light name that exists in the scene graph&lt;br /&gt;
| &amp;lt;tt&amp;gt;FGLightSource&amp;lt;/tt&amp;gt; (Sun)&lt;br /&gt;
| The name of the &amp;lt;tt&amp;gt;osg::LightSource&amp;lt;/tt&amp;gt; to use for this shadow map&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;render-at-night&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
| bool&lt;br /&gt;
| true&lt;br /&gt;
| Whether to render the shadows at night or not&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;tt&amp;gt;near-m, far-m&amp;lt;/tt&amp;gt;&lt;br /&gt;
| {{No}}&lt;br /&gt;
| float (meters)&lt;br /&gt;
|&lt;br /&gt;
| They specify the range of the shadow map&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[HDR Pipeline]]&lt;br /&gt;
* [[glTF]]&lt;br /&gt;
* [[Canvas View Camera Element]]&lt;br /&gt;
* [[CompositeViewer Support]]&lt;br /&gt;
* [[Uniform Buffer Objects]]&lt;br /&gt;
* [[FlightGear CIGI Support (Common Image Generator Interface)]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=36269|text=The Compositor}}&lt;br /&gt;
* {{forum link|t=35095|text=Clustered Forward Rendering}} (12/2018)&lt;br /&gt;
* {{forum link|t=33045|text=Getting started with RTT}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Compositor]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Devuan&amp;diff=142066</id>
		<title>Building FlightGear - Devuan</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Devuan&amp;diff=142066"/>
		<updated>2025-07-05T19:06:14Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: fix fgdata repo link typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How-To build [[FlightGear]] on [https://devuan.org/ Devuan] GNU/Linux Stable (Daedalus). Instructions probably apply to [https://debian.org/ Debian] GNU/Linux Bookworm, too.&lt;br /&gt;
&lt;br /&gt;
The meaning of this article is to be a short, ''checklist'' like, overview of the specific steps to compile FlightGear and components on Devuan. For more detailed information please refer to the main article [[Building_FlightGear_-_Linux | Building FlightGear on Linux]].&lt;br /&gt;
&lt;br /&gt;
[[File:Zeichen_144_icon.png|21px]] For beginners with compiling it is highly recommended to follow this guide step by step. Any modification to most of the herein used commands will cause trouble.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
A bunch of packages (as well as some of their dependencies) are required to compile FlightGear:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools'''&lt;br /&gt;
 su - -c &amp;quot;apt-get install cmake g++ gcc git make sed&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dependencies'''&lt;br /&gt;
: If you prefer you might replace &amp;lt;code&amp;gt;libcurl4-openssl-dev&amp;lt;/code&amp;gt; by &amp;lt;code&amp;gt;libcurl4-gnutls-dev&amp;lt;/code&amp;gt;.&lt;br /&gt;
: On Debian replace &amp;lt;code&amp;gt;libeudev-dev&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;libudev-dev&amp;lt;/code&amp;gt;.&lt;br /&gt;
: For VR support add package &amp;lt;code&amp;gt;libopenxr-dev&amp;lt;/code&amp;gt; to the list below.&lt;br /&gt;
: [[File:Zeichen_144_icon.png|21px]] During installation development packages of libraries which are going to be compiled ''must not'' be installed. They can safely be re-installed after compilation. Namely these are &amp;lt;code&amp;gt;libc-ares-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;libplib-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;libpopenscenegraph-dev&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;libsimgear-dev&amp;lt;/code&amp;gt;.&lt;br /&gt;
 su - -c &amp;quot;apt-get remove libc-ares-dev libopenscenegraph-dev libplib-dev libsimgear-dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 su - -c &amp;quot;apt-get install freeglut3-dev libavcodec-dev libavformat-dev libboost-dev libcurl4-openssl-dev libdbus-1-dev libeudev-dev libevent-dev libfreetype6-dev libglew-dev libjpeg62-turbo-dev liblzma-dev libopenal-dev libqt5quick5 libqt5svg5-dev librsvg2-dev libswscale-dev libxi-dev libxmu-dev pkg-config qtbase5-dev qtbase5-private-dev qtdeclarative5-dev qttools5-dev zlib1g-dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
Some things require customisation. We'll use [https://wiki.debian.org/EnvironmentVariables environment variables] for them: &amp;lt;br /&amp;gt;&lt;br /&gt;
: '''FG_VERSION''' – The version of FlightGear to build and install. This is either &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt; (for the bleeding edge development branch) or a release number in the form &amp;lt;code&amp;gt;release/2024.1&amp;lt;/code&amp;gt;. For a list of valid releases see [https://sourceforge.net/p/flightgear/flightgear/ref/next/branches/ here]. &amp;lt;br /&amp;gt;&lt;br /&gt;
: '''FG_SRC_DIR''' – The absolute path to the directory which is supposed to hold the source codes. In case your user belongs to the group ''staff'', &amp;lt;code&amp;gt;/usr/local/src/&amp;lt;/code&amp;gt; would be an appropriate location. But any location is fine, too, e.g. &amp;lt;code&amp;gt;$HOME/src/&amp;lt;/code&amp;gt;. In any case the user has to have write access there.&amp;lt;br /&amp;gt;&lt;br /&gt;
: '''FG_INSTALL_DIR''' – The absolute path to where FlightGear is going to be installed. Again, &amp;lt;code&amp;gt;/usr/local/&amp;lt;/code&amp;gt; is appropriate, if your user belongs to ''staff''. But any location where the user has write access is ok, e.g. &amp;lt;code&amp;gt;$HOME/FlightGear/&amp;lt;/code&amp;gt;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Examples, adapt to your own needs:&lt;br /&gt;
 export FG_VERSION=release/2024.1   #OR#   export FG_VERSION=next&lt;br /&gt;
 export FG_SRC_DIR=$HOME/src/&lt;br /&gt;
 export FG_INSTALL_DIR=$HOME/FlightGear/&lt;br /&gt;
: Remember to export these variables in each console you use in the process.&lt;br /&gt;
From here on it should™ be possible to just copy and paste the entire content of each code box at once into the console.&lt;br /&gt;
 # Create specified directories if they do not exist:&lt;br /&gt;
 mkdir -p $FG_SRC_DIR&lt;br /&gt;
 mkdir -p $FG_INSTALL_DIR&lt;br /&gt;
&lt;br /&gt;
For more/advanced cmake options and SimGear's and FlightGear's optional features see the [[Building_using_CMake#Optional_Features|cmake]] article.&lt;br /&gt;
&lt;br /&gt;
[[File:Zeichen_144_icon.png|21px]] Do '''not''' mix versions for SimGear, FlighGear and fgdata! Mixing versions will almost certainly break the installation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libc-ares ===&lt;br /&gt;
This step is only required to compile FlightGear 'next':&lt;br /&gt;
 cd $FG_SRC_DIR&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone https://github.com/c-ares/c-ares.git libc-ares.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd libc-ares.git&lt;br /&gt;
 git checkout v1.34.2&lt;br /&gt;
 mkdir -p $FG_SRC_DIR/build-c-ares &amp;amp;&amp;amp; cd $FG_SRC_DIR/build-c-ares&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=&amp;quot;$FG_INSTALL_DIR&amp;quot; $FG_SRC_DIR/libc-ares.git&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[plib|libplib]] ===&lt;br /&gt;
While just installing package libplib-dev should work, it's  [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg20793.html recommended] to build it from source. In this case libplib-dev ''must not'' be installed during the installation process of Simgear and Flightgear!&lt;br /&gt;
 cd $FG_SRC_DIR&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone git://git.code.sf.net/p/libplib/code libplib.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd libplib.git&lt;br /&gt;
 echo &amp;quot;1.8.6&amp;quot; &amp;gt; version&lt;br /&gt;
 sed s/PLIB_TINY_VERSION\ \ 5/PLIB_TINY_VERSION\ \ 6/ -i src/util/ul.h&lt;br /&gt;
 git commit --all --message &amp;quot;Increase tiny version to 6.&amp;quot;&lt;br /&gt;
 mkdir -p $FG_SRC_DIR/build-plib &amp;amp;&amp;amp; cd $FG_SRC_DIR/build-plib&lt;br /&gt;
 cmake -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$FG_INSTALL_DIR&amp;quot; $FG_SRC_DIR/libplib.git&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[OpenSceneGraph]] ===&lt;br /&gt;
To compile FlightGear release version branch &amp;lt;code&amp;gt;release/2024-build&amp;lt;/code&amp;gt; is required, for FlightGear next branch &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt;.&lt;br /&gt;
 if [ &amp;quot;$FG_VERSION&amp;quot; = &amp;quot;release/2024.1&amp;quot; ]; then export FG_OSG_VERSION=release/2024-build; fi&lt;br /&gt;
 if [ &amp;quot;$FG_VERSION&amp;quot; = &amp;quot;next&amp;quot; ]; then export FG_OSG_VERSION=next; fi&lt;br /&gt;
&lt;br /&gt;
 cd $FG_SRC_DIR&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone https://gitlab.com/flightgear/openscenegraph.git FG-OpenSceneGraph.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd FG-OpenSceneGraph.git&lt;br /&gt;
 git checkout $FG_OSG_VERSION&lt;br /&gt;
 mkdir -p $FG_SRC_DIR/build-osg &amp;amp;&amp;amp; cd $FG_SRC_DIR/build-osg&lt;br /&gt;
 cmake -D LIB_POSTFIX=&amp;quot;&amp;quot; -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$FG_INSTALL_DIR&amp;quot; $FG_SRC_DIR/FG-OpenSceneGraph.git&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
libgdal-dev libsdl2-dev libcairo2-dev libgtk2.0-dev libgtkglext1-dev libxrandr-dev libxinerama-dev libdcmtk-dev libgles2-mesa-dev libcoin-dev&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[SimGear]] ===&lt;br /&gt;
 cd $FG_SRC_DIR&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone https://gitlab.com/flightgear/simgear.git simgear.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd simgear.git&lt;br /&gt;
 git checkout $FG_VERSION&lt;br /&gt;
 mkdir -p $FG_SRC_DIR/build-sg &amp;amp;&amp;amp; cd $FG_SRC_DIR/build-sg&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$FG_INSTALL_DIR&amp;quot; $FG_SRC_DIR/simgear.git&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
&amp;lt;!-- -D ENABLE_SWIFT:BOOl=OFF --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[FGData|FlightGear data]] ===&lt;br /&gt;
 mkdir -p $FG_INSTALL_DIR/share &amp;amp;&amp;amp; cd $FG_INSTALL_DIR/share&lt;br /&gt;
 git clone https://gitlab.com/flightgear/fgdata&amp;lt;nowiki/&amp;gt;.git fgdata&lt;br /&gt;
 cd fgdata&lt;br /&gt;
 git checkout $FG_VERSION&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FlightGear source ===&lt;br /&gt;
 cd $FG_SRC_DIR&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone https://gitlab.com/flightgear/flightgear.git flightgear.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd flightgear.git&lt;br /&gt;
 git checkout $FG_VERSION&lt;br /&gt;
 mkdir -p $FG_SRC_DIR/build-fg &amp;amp;&amp;amp; cd $FG_SRC_DIR/build-fg&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=Release -D FG_BUILD_TYPE=Release -D FG_DATA_DIR:PATH=&amp;quot;$FG_INSTALL_DIR/share/fgdata&amp;quot; -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$FG_INSTALL_DIR&amp;quot; $FG_SRC_DIR/flightgear.git&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
&amp;lt;!-- -D ENABLE_HID_INPUT=OFF --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Trial run and finishing process ==&lt;br /&gt;
When all the builds are done and the data download has finished it is time for a test run. In case your FG_INSTALL_DIR is &amp;lt;code&amp;gt;/usr/local/&amp;lt;/code&amp;gt;, just run &amp;lt;code&amp;gt;fgfs --launcher&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In case it's anywhere else on the system, things are a tad more complicated:&lt;br /&gt;
 export LD_LIBRARY_PATH=$FG_INSTALL_DIR/lib/:$LD_LIBRARY_PATH&lt;br /&gt;
 $FG_INSTALL_DIR/bin/fgfs --launcher&lt;br /&gt;
: The &amp;lt;code&amp;gt;fgfs&amp;lt;/code&amp;gt; binary needs to find our self compiled libraries at runtime and therefore we have to tell the linker (ld) where to find them. That is what the first line here does.&lt;br /&gt;
: Since [http://www.linfo.org/path_env_var.html $PATH] most likely does not cover the FG_INSTALL_DIR, the full path to the fgfs binary is required to run it.&lt;br /&gt;
: Even though it's a tad more laborious than installing it to &amp;lt;code&amp;gt;/usr/local/&amp;lt;/code&amp;gt;, this approach has the advantage of easlily managing several FlightGear installations.&lt;br /&gt;
&lt;br /&gt;
To make it permanent and less complicated one option would be to create an alias:&lt;br /&gt;
 echo -e &amp;quot;alias fgfs='LD_LIBRARY_PATH=$FG_INSTALL_DIR/lib/:$LD_LIBRARY_PATH $FG_INSTALL_DIR/bin/fgfs' \n&amp;quot; &amp;gt;&amp;gt; $HOME/.bashrc&lt;br /&gt;
 source $HOME/.bashrc&lt;br /&gt;
: Now running &amp;lt;code&amp;gt;fgfs --launcher&amp;lt;/code&amp;gt; will start the simulator.&lt;br /&gt;
&lt;br /&gt;
To keep the source code git repos up to date have a look at our [[Git_for_Laymen#Keeping_it_current|git for laymen]] section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
To uninstall Flightgear and its components from e.g. &amp;lt;code&amp;gt;/usr/local/&amp;lt;/code&amp;gt;, run &amp;lt;code&amp;gt;make uninstall&amp;lt;/code&amp;gt; inside each software's build directory:&lt;br /&gt;
 cd $FG_SRC_DIR/build-fg &amp;amp;&amp;amp; make uninstall&lt;br /&gt;
 cd $FG_SRC_DIR/build-sg &amp;amp;&amp;amp; make uninstall&lt;br /&gt;
 cd $FG_SRC_DIR/build-osg &amp;amp;&amp;amp; make uninstall; rm -R $FG_SRC_DIR/lib/osgPlugins-3.6.5&lt;br /&gt;
 rm -RI $FG_INSTALL_DIR/include/plib; rm $FG_INSTALL_DIR/lib/libplib*.a&lt;br /&gt;
 rm -RI $FG_INSTALL_DIR/share/fgdata&lt;br /&gt;
&lt;br /&gt;
Please report issues or any kind of feedback to the [[Talk:Building_FlightGear_-_Devuan|talk page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Addon&amp;diff=141444</id>
		<title>Addon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Addon&amp;diff=141444"/>
		<updated>2025-02-28T16:00:06Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update wording for launcher method of addon installation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Fgaddonslogo202x89.png|right]] &lt;br /&gt;
To make it easier to create '''addons''' there is since FlightGear 2017.3 a new way to create addons.  In essence FlightGear will load an overlay XML into the property tree and start a well known Nasal function.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314620#p314620 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: New Feature: Addon - &amp;quot;API&amp;quot; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We now have a simple way to add addons to FlightGear without the need to mess around with &amp;lt;code&amp;gt;FGData/Nasal&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;FGHome/Nasal&amp;lt;/code&amp;gt; directories.&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314563#p314563 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; New Feature: Addon - &amp;quot;API&amp;quot; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 18th, 2017 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
&lt;br /&gt;
== Installing and using an addon ==&lt;br /&gt;
Download and copy the addon to a directory on your computer.&lt;br /&gt;
&lt;br /&gt;
If you use the launcher, select the Add-ons page from the icon bar on the left, then find the section Add-on Module folders and click the Add(+) button. Select the folder where you put the addon. Once the addon is shown in the list, make sure its check box is selected.&lt;br /&gt;
&lt;br /&gt;
Or alternatively, use the command line switch &amp;lt;code&amp;gt;--addon=/path/to/some/addon&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;/&amp;gt; if you are not using the launcher.&lt;br /&gt;
&lt;br /&gt;
== Creating an addon ==&lt;br /&gt;
There is a very simple Skeleton addon available in FGAddon to be used as a template.&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;/&amp;gt; See {{fgaddon source|path=Addons/Skeleton}}.&lt;br /&gt;
&lt;br /&gt;
A leading slash (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;) in this section indicates the base directory of the directory structure of the addon.&lt;br /&gt;
&lt;br /&gt;
=== Minimum configuration ===&lt;br /&gt;
An addon may be installed in a directory anywhere on your hard disk and need at least two files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-config.xml&amp;lt;/code&amp;gt; - A standard [[PropertyList XML files|PropertyList XML file]] to be used to populate or modify the [[property tree]]. (Same as to be used in &amp;lt;code&amp;gt;--config=foo.xml&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-main.nas&amp;lt;/code&amp;gt; - The Nasal hook for the logic. This file needs a function called &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt; which will be called from the global addon initializer (&amp;lt;code&amp;gt;addons.nas&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Additional common files ===&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-metadata.xml&amp;lt;/code&amp;gt; - A PropertyList XML file with metadata about the addon it.&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-menubar-items.xml&amp;lt;/code&amp;gt; - A PropertyList XML file describing menus to be added to the FlightGear menu bar.&lt;br /&gt;
* &amp;lt;code&amp;gt;/gui/dialogs/&amp;amp;lt;my-foobar-dialog&amp;amp;gt;.xml&amp;lt;/code&amp;gt; - PropertyList XML files to create custom dialogs.&lt;br /&gt;
&lt;br /&gt;
=== Good to know ===&lt;br /&gt;
The new addon mechanism lets you add a &amp;lt;code&amp;gt;addon-config.xml&amp;lt;/code&amp;gt; to override the settings in &amp;lt;code&amp;gt;defaults.xml&amp;lt;/code&amp;gt; and other files.&lt;br /&gt;
&lt;br /&gt;
That will allow an addon to&lt;br /&gt;
*  Override key bindings (as in the spoken ATC addon)&lt;br /&gt;
*  Add or override autopilots and property rules&lt;br /&gt;
*  Introduce XML state machines&lt;br /&gt;
&lt;br /&gt;
Unless your really want to add/change/remove those at runtime, this should cater for most use cases.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314902#p314902 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Spoken  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 23rd, 2017 &lt;br /&gt;
  |added  =  Jul 23rd, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have some instructions how to use SVN [[FGAddon|in our wiki]]. It covers mostly aircraft development but the workflow is pretty much the same for addons.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314647#p314647 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Spoken ATC &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sound Support ===&lt;br /&gt;
Sound support is available using fgcommand's.&lt;br /&gt;
&lt;br /&gt;
See [[Nasal FAQ]] &amp;quot;play-audio-sample&amp;quot;&lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/p/flightgear/flightgear/ci/5acf2e26d085b7553b2387b9753e9253e8b4bff4&lt;br /&gt;
&lt;br /&gt;
[[Hackathon Proposal:Addon specific Sound Queues]]&lt;br /&gt;
&lt;br /&gt;
== Addon initialization ==&lt;br /&gt;
On initialization fgfs takes care of:&lt;br /&gt;
* Through {{flightgear source|path=src/Main/options.cxx|text=&amp;lt;code&amp;gt;options.cxx&amp;lt;/code&amp;gt;}}:&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;/&amp;gt;&lt;br /&gt;
** Creating a property under &amp;lt;code&amp;gt;/addons/addon[n]/path=/path/to/some/addon&amp;lt;/code&amp;gt;&lt;br /&gt;
** Loading &amp;lt;code&amp;gt;/path/to/some/addon/addon-config.xml&amp;lt;/code&amp;gt; into the property tree (same as &amp;lt;code&amp;gt;--config=/path/to/some/addon/addon-config.xml&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Adding &amp;lt;code&amp;gt;/path/to/some/addon&amp;lt;/code&amp;gt; to the list of allowed directories (same as &amp;lt;code&amp;gt;--fg-aircraft=/path/to/some/addon&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Through {{fgdata source|path=Nasal/addons.nas|text=&amp;lt;code&amp;gt;addons.nas&amp;lt;/code&amp;gt;}}:&lt;br /&gt;
** Loading &amp;lt;code&amp;gt;/foo/bar/baz/addon-main.nas&amp;lt;/code&amp;gt; into namespace &amp;lt;code&amp;gt;__addon[ADDON_ID]__&amp;lt;/code&amp;gt;&lt;br /&gt;
** Calling &amp;lt;code&amp;gt;main(addonGhost)&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;/foo/bar/baz/addon-main.nas&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Aircraft specific config (addon-hints) ==&lt;br /&gt;
Some addons need per-aircraft configuration. While addons should strive to be self-contained (ie. the addon should contain means to&lt;br /&gt;
detect different aircraft and apply config from whithin the addon) there is also the possibility for the addon to read so called &amp;quot;addon-hints&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For this, a special property tree exists: &amp;lt;code&amp;gt;/sim/addon-hints/&amp;lt;addon&amp;gt;/...&amp;lt;/code&amp;gt;&lt;br /&gt;
The tree is expected to be populated from the aircraft.xml file. The addon can then read the properties from a common place regardless of loaded aircraft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;addon-hints&amp;gt;&lt;br /&gt;
    &amp;lt;my-addon&amp;gt;&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/my-addon&amp;gt;&lt;br /&gt;
  &amp;lt;/addon-hints&amp;gt;&lt;br /&gt;
&amp;lt;/sim&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
{{hatnote|For more details about these APIs, see the readme file, {{readme file|add-ons}}.}}&lt;br /&gt;
=== C++ API ===&lt;br /&gt;
There is a C++ API on FlightGear's side that handle some on the addon related tasks manly through the &amp;lt;code&amp;gt;AddonManager()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Addon()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AddonVersion()&amp;lt;/code&amp;gt; classes.&lt;br /&gt;
&lt;br /&gt;
=== Nasal API ===&lt;br /&gt;
The Nasal add-on API lives in the 'addons' namespace and can for example do queries to &amp;lt;code&amp;gt;AddonManager()&amp;lt;/code&amp;gt; and read data from &amp;lt;code&amp;gt;addons.Addon&amp;lt;/code&amp;gt; objects.  It can for example compare addon versions if there is dependencies.&lt;br /&gt;
&lt;br /&gt;
See: {{Repo link|site=gitlab|proj=flightgear|repo=fgdata|branch=next|path=Nasal/addons.nas}}&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
{{See also|Howto:Creating a simple modding framework}}&lt;br /&gt;
&lt;br /&gt;
ATC chatter was removed in 2015, see fgdata commit: [https://sourceforge.net/p/flightgear/fgdata/ci/81607f734e13add9be02816ddaec305d05bc4e47/ 81607f734e13add9be02816ddaec305d05bc4e47]&lt;br /&gt;
&lt;br /&gt;
And the devel list messages referenced in the commit log.&lt;br /&gt;
the other relevant commit is this: b60736ba7add2a7cd39af3d8a974d5be3ea46e8b&lt;br /&gt;
It would not be very difficult to restore this functionality, or even generalize/improve it significantly (which was the scope of the original discussion on the devel list)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=288388#p288388 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Whatever happened to radom radio  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Hooray &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jun 11th, 2016 &lt;br /&gt;
  |added  =  Jun 11th, 2016 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The restored functionality could be distributed as a tarball that is extracted into $FG_ROOT - alternatively, into $FG_HOME, because Nasal files there are treated as overlays, which basically means that you can install user-specific extensions there without having to tamper with $FG_ROOT, it would only take  very minor changes to turn the chatter feature into a corresponding &amp;quot;addon&amp;quot; - not unlike fgcamera ...&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=288392#p288392 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Whatever happened to radom radio  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Hooray &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jun 11th, 2016 &lt;br /&gt;
  |added  =  Jun 11th, 2016 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We should absolutely stop telling anyone to edit preferences.xml in FG_ROOT; any documentation or advice which says to should be changes ASAP. &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=192632#p192632 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: NavCache:init failed:Sqlite error:Sqlite API abuse &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; zakalawe &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 26th, 2013 &lt;br /&gt;
  |added  =  Oct 26th, 2013 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of 12/2017, the addon API is in the process of being significantly updated &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36146017/&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36150159/&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36150444/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List of Addons ==&lt;br /&gt;
You can find the official repository at {{fgaddon source|path=Addons}}&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-hudheli Additional Heli HUD's] - ([https://github.com/slawekmikula/flightgear-addon-hudheli/blob/master/doc/manual.md manual]) - encapsulation of HeliHUD package as an addon&lt;br /&gt;
* [https://github.com/PlayeRom/flightgear-addon-aerotow-everywhere Aerotow Everywhere] AI towing aircraft for gliders at every airport.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?t=40742&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Aerotow Everywhere &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Roman Ludwicki (PlayeRom) &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Aug 14th, 2022&lt;br /&gt;
  |added  =  Aug 14th, 2022&lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://github.com/SP-NTX/AnotherGUI AnotherGUI] - An add-on that adds a new GUI style.&lt;br /&gt;
* ATC Chatter (ported by Torsten) {{progressbar|100}}&lt;br /&gt;
* [[Blacklist add-on]] - Automatically ignore pilots with certain callsigns or multiplayer models.&lt;br /&gt;
* [[Cargo Towing Addon]] &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?t=36824&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Cargo Towing Addon &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Wayne Bragg (wlbragg) &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  &lt;br /&gt;
  |added  =  &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* cockpit-view (work in progress by wkitty42)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=316498#p316498 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; wkitty42 &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Aug 13th, 2017 &lt;br /&gt;
  |added  =  Aug 13th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Earthview#Customization]] - High resolution customization&lt;br /&gt;
* [[FaceTrackNoIR]] (ported by HHS)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36454826/&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Unknown, HHS&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |date   =  Nov 1th, 2018 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt; - An addon to interface this [[Head tracking|head tracker]] with FlightGear&lt;br /&gt;
* [https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=24792 Fencemaker] (Eases creating Fence-like scenery objects. Originally by VaLeo, converted to an addon by sfr) - ([https://www.mediafire.com/file/cf0la63v9g352md/fencemaker_addon.zip/file download])&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    = https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=24792&amp;amp;start=45#p390066&lt;br /&gt;
  |title  = &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |author = &amp;lt;nowiki&amp;gt; Stefan Frank &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |maintainer = &amp;lt;nowiki&amp;gt; Stefan Frank &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |date   = Aug 8th, 2021&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://github.com/PlayeRom/flightgear-addon-fgcamera FGCamera] - ([https://github.com/PlayeRom/flightgear-addon-fgcamera/blob/master/Docs/manual.md manual]) - [[FGCamera | Wiki Page]]&lt;br /&gt;
* [[FGPlot]]&lt;br /&gt;
* [[Ground Services]] (ported by ThomasS)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=316400#p316400 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; ThomasS &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Aug 12th, 2017 &lt;br /&gt;
  |added  =  Aug 12th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* {{fgaddon source|path=Addons/Headtracker/|text=Headtracker addon}} Helps integrate FaceTrackNoIR and opentrack with FlightGear.&lt;br /&gt;
* [[HighAirTrader]] An in-sim mini game in which you transport goods to different airports.&lt;br /&gt;
* [https://github.com/tdammers/fg-hoppie-acars Hoppie ACARS client] - connect to [http://www.hoppie.nl/acars Hoppie's ACARS], used on VATSIM and other networks.&lt;br /&gt;
* [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Addons/Illuminator/ Illuminator] - configure lights attached to 3D models (e.g. taxi light, landing light or a light attached to a scenery model like a light pole) at runtime.&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-protocolkml KML Exporter (Google Earth)] - ([https://github.com/slawekmikula/flightgear-addon-protocolkml/blob/master/doc/manual.md manual])&lt;br /&gt;
* [[Landing Rate addon]] [https://forum.flightgear.org/viewtopic.php?f=6&amp;amp;t=33101&amp;amp;p=327787#p327787]&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-linuxtrack LinuxTrack Head Tracker integration] - ([https://github.com/slawekmikula/flightgear-addon-linuxtrack/blob/master/doc/manual.md manual])&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-littlenavmap LittleNavMap integration] - ([https://github.com/slawekmikula/flightgear-addon-littlenavmap/blob/master/doc/manual.md manual])&lt;br /&gt;
* [https://github.com/PlayeRom/flightgear-addon-logbook Logbook] all your flights to CSV file.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?t=41070&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Logbook Add-on &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Roman Ludwicki (PlayeRom) &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Dec 11th, 2022&lt;br /&gt;
  |added  =  Dec 11th, 2022&lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Log time-stamper add-on]] - Will print simulated UTC time, real local time, and/or real UTC time time-stamps at configurable intervals to the console and log.&lt;br /&gt;
* [https://gitlab.com/mdanil/flightgear-hax mdanilov hax!]: landing evaluation and aircraft development tools, TerraSync toggler&lt;br /&gt;
* [[Model Cockpit View]] &lt;br /&gt;
* [https://github.com/SP-NTX/MPChatImprovments MPChatImprovments] Multi-key commands for Multiplayer, new features for chat,...&lt;br /&gt;
* [https://github.com/hbeni/fgfs-noGroundDamage noGroundDamage] - Addon to temporarily disable damage after landing and for ground operations for the c172/c182&lt;br /&gt;
* [[Oscilloscope addon]] - Allows displaying a property of Nasal function over time&lt;br /&gt;
* [[PAR instrument]] - Precision Approach Radar and Ground Controlled Approach&lt;br /&gt;
* [[Red Griffin ATC]] - Speaking Air Traffic Controller&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?f=6&amp;amp;t=36755 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; RedGriffin &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 6th, 2020 &lt;br /&gt;
  |added  =  Jan 6th, 2020 &lt;br /&gt;
  |script_version = 1.0.0 RC2 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://github.com/tdammers/fg-simbrief-addon SimBrief import] - Import flightplans, weights, fuel, and winds alof, from SimBrief.&lt;br /&gt;
* [[Spoken ATC]] (ported by Torsten)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314095#p314095 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 10th, 2017 &lt;br /&gt;
  |added  =  Jul 10th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Spoken GCA]] - An offline ground controlled approach (GCA) addon&lt;br /&gt;
* [https://gitlab.com/mdanil/flightgear-mickey Tiny HUD for mouse flying in FlightGear] - Visual feedback for mouse flying, to make up for mouse's lack of self-centering&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-vfrflight VFRFlight integration] - ([https://github.com/slawekmikula/flightgear-addon-vfrflight/blob/master/doc/manual.md manual])&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-vfrnavigator VFR Flying Helper] - ([https://github.com/slawekmikula/flightgear-addon-vfrnavigator/blob/master/doc/usage.md manual])&lt;br /&gt;
* [[YASim Development Tools]] (by jsb)&lt;br /&gt;
&lt;br /&gt;
== Experimental Addons ==&lt;br /&gt;
&lt;br /&gt;
Addons which are in the development stage/unfinished but can be used as a quick view of addon functionality&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-missions FlightGear Missions addon] - Add-on for missions/adventures code&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
=== Hooking into features using legacy OpenGL code ===&lt;br /&gt;
{{See also|Unifying the 2D rendering backend via canvas}}&lt;br /&gt;
In 09/2018, James suggested that legacy features using raw OpenGL calls (e.g. HUD/2D panels) could be easily replaced via scripted Canvas/Nasal solutions at the mere cost of providing a mechanism to hook into the legacy code implementing these features (namely, the HUD/instrumentation subsystems) &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36399261/&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36399261/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Catalog &amp;amp; Package Manager support ===&lt;br /&gt;
if this works with more complex, pre-existing addons such as [[Bombable]], where the file layout is a replica of the old FGData layout, these types of mature addons might be better as SourceForge FlightGear sub-projects rather than being copied into FGAddon. Maybe the config file and nasal script could be used to automate the installation process ?&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35953179/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] Simple API for creating FlightGear&lt;br /&gt;
 addons/plugins &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Edward d'Auvergne &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
The [[Bombable]] addon is one of the most popular addons out there, and a large number of aircraft in FGAddon have bombable support, so it is worth not forgetting about. Especially if the addon system one day becomes automated through a [[Catalog metadata|catalog.xml type system]]&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35953650/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] Simple API for creating FlightGear&lt;br /&gt;
 addons/plugins &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Edward d'Auvergne &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[FG Add-on FAQ]]&lt;br /&gt;
* [[Modules.nas]]&lt;br /&gt;
* [[FlightGear configuration via XML]]&lt;br /&gt;
* [[FlightGear configuration via XML#preferences.xml]]&lt;br /&gt;
* [[Nasal]]&lt;br /&gt;
* [[Property tree]]&lt;br /&gt;
* [[Properties persistent between sessions]]&lt;br /&gt;
* [[PropertyList XML File]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=32561|title=New Feature: Addon - &amp;quot;API&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Readme files ===&lt;br /&gt;
* {{readme file|add-ons}}&lt;br /&gt;
* {{readme file|gui}} - Details on how to add menus and custom dialogs.&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
==== FGAddon ====&lt;br /&gt;
* {{fgaddon source|path=Addons/Skeleton}} - Skeleton addon to be used as a template.&lt;br /&gt;
&lt;br /&gt;
==== FGData ====&lt;br /&gt;
* {{fgdata source|path=Nasal/addons.nas}}&lt;br /&gt;
&lt;br /&gt;
==== FlightGear ====&lt;br /&gt;
* {{flightgear source|path=src/Main/options.cxx}}&lt;br /&gt;
* {{flightgear source|path=src/Add-ons/}}&lt;br /&gt;
&lt;br /&gt;
[[Category:FlightGear addons| ]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Install_aircraft&amp;diff=141416</id>
		<title>Howto:Install aircraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Install_aircraft&amp;diff=141416"/>
		<updated>2025-02-28T00:17:20Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Remove &amp;quot;Modify FGData&amp;quot; method of installing aircraft, replace with Launcher Folder option and explain the benefits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{installing}}&lt;br /&gt;
&lt;br /&gt;
The preferred option to install the latest official [[aircraft]] is through the ''Aircraft'' tab in the [[FlightGear Qt launcher|built-in launcher]], as explained in the following video. The remainder of this article describes the manual process, only to be performed when you don't use the aircrafts from the official FGAddon hangar.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|a-UIrw7nEy4}}&lt;br /&gt;
&lt;br /&gt;
== Manual installation process ==&lt;br /&gt;
Aircraft packages are available on [http://www.flightgear.org/download/ FlightGear.org Aircraft]. These require unzipping software to extract from a compressed file format. Then these must be manually installed in a FlightGear software installation to use. The details depend on the method of download, operating system, and user setup.&lt;br /&gt;
&lt;br /&gt;
Alternatively if you are using the [[FlightGear Build Server|nightly builds]] or a [[Building FlightGear|version controlled copy of FlightGear]], or you wish to manage your aircraft collection using version control tools, the aircraft can be obtained directly from the [[FGAddon|official FlightGear aircraft repository - FGAddon]].&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
(Ubuntu 12.04) &lt;br /&gt;
# Download the aircraft&lt;br /&gt;
# Create a directory to store your aircraft if you have not already done so. Make sure this directory is outside &amp;lt;tt&amp;gt;/usr/share/games/flightgear/&amp;lt;/tt&amp;gt;. For example, use &amp;lt;tt&amp;gt;/home/{YourUserName}/FlightGear/CustomAircraft&amp;lt;/tt&amp;gt;. &lt;br /&gt;
# Extract your aircraft file into the folder (the one you created above)&lt;br /&gt;
#: unzip XXXXX.zip&lt;br /&gt;
# Start up FlightGear with Launcher. In Launcher, go to the ''Add-ons'' tab. In the ''Additional aircraft folders'' section, click the ''Add'' button and select the main folder for additional aircrafts (in our case &amp;lt;tt&amp;gt;/home/{YourUserName}/FlightGear/CustomAircraft&amp;lt;/tt&amp;gt;). Now your plane should appear on the list of planes, otherwise restart FlightGear.&lt;br /&gt;
&lt;br /&gt;
Now, you just need to unzip the next downloaded aircraft in the same directory and it should already be visible on FlightGear.&lt;br /&gt;
&lt;br /&gt;
=== Macintosh OS X ===&lt;br /&gt;
&lt;br /&gt;
# Download the aircraft&lt;br /&gt;
# Create a directory to store your aircraft if you have not already done so. Make sure this directory is somewhere you can find easily, For example, use &amp;lt;code&amp;gt;/Users/{YourUserName}/Aircraft&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Extract your aircraft file into the folder (the one you created above)&lt;br /&gt;
# Start up FlightGear with Launcher. In Launcher, go to the ''Add-ons'' tab. In the ''Additional aircraft folders'' section, click the ''Add'' button and select the main folder for additional aircrafts (in our case &amp;lt;code&amp;gt;/Users/{YourUserName}/Aircraft&amp;lt;/code&amp;gt;). Now your plane should appear on the list of planes, otherwise restart FlightGear.&lt;br /&gt;
&lt;br /&gt;
Now, you just need to unzip the next downloaded aircraft in the same directory and it should already be visible on FlightGear. This method is preferred over modifying FGData as it allows you to more easily access the aircrafts files, as well as having the benefit of persisting across FG updates, saving the hassle of having to redownload and install your aircraft each time you update FlightGear.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
# Download an aircraft and save it on your desktop.&lt;br /&gt;
# Unzip the file using a file archiver, for example the open source file archiver [http://www.7-zip.org/ 7-Zip].&lt;br /&gt;
# Create a directory to store your aircraft if you have not already done so. Make sure this directory is outside your &amp;lt;tt&amp;gt;[[$FG_ROOT]]&amp;lt;/tt&amp;gt; directory. For example, use &amp;lt;tt&amp;gt;C:\Users\{YourUserName}\FlightGear\CustomAircraft&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Move the unzipped folder (usually the aircraft's name) to your that aircraft directory.&lt;br /&gt;
# Start up FlightGear with Launcher. In Launcher, go to the ''Add-ons'' tab. In the ''Additional aircraft folders'' section, click the ''Add'' button and select the main folder for additional aircrafts (in our case &amp;lt;tt&amp;gt;C:\Users\{YourUserName}\FlightGear\CustomAircraft&amp;lt;/tt&amp;gt;). Now your plane should appear on the list of planes, otherwise restart FlightGear.&lt;br /&gt;
&lt;br /&gt;
Now, you just need to unzip the next downloaded aircraft in the same directory and it should already be visible on FlightGear.&lt;br /&gt;
&lt;br /&gt;
=== From the command line ===&lt;br /&gt;
Launching FlightGear from the command line, use the &amp;lt;code&amp;gt;--fg-aircraft=path&amp;lt;/code&amp;gt; option, which in our case can be: &amp;lt;code&amp;gt;--fg-aircraft=/home/{YourUserName}/FlightGear/CustomAircraft&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== When installing an aircraft fails ==&lt;br /&gt;
=== Rename aircraft folder ===&lt;br /&gt;
If FlightGear fails to start with the new aircraft you have installed, or if it starts but the aircraft is invisible you might have to rename the folder where the aircraft files are.&lt;br /&gt;
This issue is most often encountered when downloading a .zip file from some online git repository. In those cases you will most likely end up with a folder name of the following form MyZippedRepo-[branch]. In this case you should rename the folder to be just '''MyZippedRepo'''.&lt;br /&gt;
&lt;br /&gt;
If the above doesn't work, or for other cases, check for a readme file and have a look there for instructions.&lt;br /&gt;
 &lt;br /&gt;
Otherwise open the aircraft-set.xml file and search in it for paths containing '''Aircraft/AircraftFolderName'''. The name of the folder should match '''AircraftFolderName'''. &lt;br /&gt;
&lt;br /&gt;
For instance if in the imaginary-set.xml you would find an instance like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;splash-texture&amp;gt;Aircraft/MyCreation/splash1.png&amp;lt;/splash-texture&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
that means that you should rename the folder where imaginary-set.xml is to '''MyCreation'''.&lt;br /&gt;
&lt;br /&gt;
=== XML files with wrong encoding === &lt;br /&gt;
If you start FlightGear with the new plane you installed and there is no cockpit or exterior, this may be because the XML files are in the wrong encoding.&lt;br /&gt;
&lt;br /&gt;
To fix this on Linux try this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 $ cd path/to/aircraft/directory/&lt;br /&gt;
 $ find . -name &amp;quot;*.xml&amp;quot; -print | xargs sed -i 's/&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;/&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;/g'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If any of the methods above do not work, ask around on the [[Howto:Multiplayer#Multiplayer chat|multiplayer chat]], [[FlightGear IRC channel|IRC]] or on the {{forum link|f=11|text=forum}}.&lt;br /&gt;
&lt;br /&gt;
== Choosing aircraft ==&lt;br /&gt;
If you are looking for information to decide what aircraft to download, try:&lt;br /&gt;
* [[Aircraft]]&lt;br /&gt;
* [[Helicopter]]&lt;br /&gt;
* [[Vehicle]]&lt;br /&gt;
* [[Table of models]]&lt;br /&gt;
External links to third party aircraft can be found at [[FlightGear hangars]]. Remember that the latest aircraft may not load with previous versions. If you happen to use an older version of FlightGear, look for older aircraft in the links section.&lt;br /&gt;
&lt;br /&gt;
==Video tutorial by the community==&lt;br /&gt;
{{#ev:youtube|OiqGjc8W880|480px||Tutorial on downloading and installing aircraft from Github pages by PINTO. Adding manually downloaded aircraft folders in the [[FlightGear_Qt_launcher|qt-launcher]] is pretty much the same for non-github downloads too. Aircraft are often developed on Github. This shows you to the download Github versions of aircraft that are not in FGAddon yet for whatever reason, and the latest work-in-progress state of some aircraft in FGAddon for testing and feedback. (September 2019)}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
* [[Installing Scenery]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|Install aircraft]]&lt;br /&gt;
&lt;br /&gt;
[[de:Howto:Flugzeuge Installieren]]&lt;br /&gt;
[[es:Cómo:Instalar_aviones]]&lt;br /&gt;
[[fr:Howto Installer un avion]]&lt;br /&gt;
[[pl:Instalowanie_samolotów]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Triaging_and_improving_bug_reports&amp;diff=141249</id>
		<title>Triaging and improving bug reports</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Triaging_and_improving_bug_reports&amp;diff=141249"/>
		<updated>2025-01-16T19:00:36Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update FG Issue Tracker link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Testing and triaging tickets ==&lt;br /&gt;
&lt;br /&gt;
We use [https://gitlab.com/groups/flightgear/-/issues GitLab Issues] to track FlightGear bugs.&lt;br /&gt;
&lt;br /&gt;
We encourage people to file tickets into the system, but some people report a ticket and then vanish or don't follow it up. Therefore we have a large collection of older bug reports to re-check and classify, and help with this is appreciated. If you're unsure about details, do ask on the developer list or similar. It's quite okay to ask 'what might be causing this?' and get more opinions. You need to ask for permissions to edit certain features of bugs, ask one of the admins for permissions.&lt;br /&gt;
&lt;br /&gt;
We do also collect aircraft and scenery bug reports in the tracker, but these don't always make sense. For an aircraft which is unmaintained it's reasonable to track issues ourselves, but where development occurs in another place, or with an active development team, it's better to close the issue in our tracker, after pointing the aircraft developers at the issue. For scenery bug reports there is usually nothing we can do without a full scenery rebuild, unfortunately (trees on airport, taxiway underwater, missing new runways, etc).&lt;br /&gt;
&lt;br /&gt;
Feature-request tickets also need handling: the tracker is not really ideal for these, better to propose them on the forum or the developer list and see if anyone is interested to work on them, or add them to a wiki page of requests. But they can be tagged with the 'feature' label and then marked as 'WontFix' : this gives us a way to find them with a query, but avoids them being counted towards the open bug totals for a milestone.&lt;br /&gt;
&lt;br /&gt;
== Add missing data ==&lt;br /&gt;
&lt;br /&gt;
Especially, add labels for the area: replay, launcher, Canvas, crashes.&lt;br /&gt;
Set the affected milestone: since SF only allows one milestone, not multiple, set the milestone the bug occurs in now: we don't care when the bug first appeared.. That likely means the current release.&lt;br /&gt;
Consider renaming the ticket if the title is not accurate: new users often don't pick clear titles for bugs, since they focus on the wrong issue&lt;br /&gt;
&lt;br /&gt;
For crashes, try to get a crash-trace with symbols, either from the reporter or if you can reproduce, your own build. For other bugs, ask to get the log file if it makes sense: especially FDM issues, or visual ones (missing texture or shaders that don't compile)&lt;br /&gt;
&lt;br /&gt;
For visual things (broken GUI), screenshots are very helpful.&lt;br /&gt;
&lt;br /&gt;
For aircraft, please ask for which version of the aircraft was tested: it needs to be a defined version in FGAddon or a git-repo, not just 'the latest F-14', since that changes continuously. Same for any add-on or custom scenery.&lt;br /&gt;
&lt;br /&gt;
== Check the bug still occurs ==&lt;br /&gt;
&lt;br /&gt;
This is the most important: follow the steps to reproduce the bug. If you can't, ask the original reporter for more info, or find a friend to check (eg on a different platform or with a different video card). If multiple people can't reproduce the issue, consider closing the bug as 'not reproducible', but take care to allow for bugs which depend on the system configuration, eg language, OS, or other factors which are hard to identify. &lt;br /&gt;
&lt;br /&gt;
If the steps to reproduce are unclear, set the state as 'Need Info' and ping the original reporter. If you find a bug which is in this state (waiting for more info from the original reporter) and they didn't update the ticket in say six months (or maybe a year), consider closing the ticket as 'WontFix', since there is no value in tracking such tickets. Often you need to check with the reporter how their system differs from a known working setup: are the running from a network share, have they changed their download directory, do they have a firewall from their ISP which blocks certain ports?&lt;br /&gt;
&lt;br /&gt;
If you can reproduce the bug in the current version, update the milestone. &lt;br /&gt;
&lt;br /&gt;
== Simplification ==&lt;br /&gt;
&lt;br /&gt;
Try to eliminate possible causes: if the bug was reported with a complex aircraft, does it also happen with the UFO? If it happens with a high shader setting, does it go away with a lower one? It does help to avoid strange customizations in your test setup: try to be testing something as close to stock as possible. This likely means keeping an unmodified version of the current and previous versions around, don't use a development build for triaging. Fortunately SSDs got cheap, you might need more disk space.&lt;br /&gt;
&lt;br /&gt;
== De-duplication ==&lt;br /&gt;
&lt;br /&gt;
This requires some knowledge of other bugs, so consider asking on the developer list, but if the bug is about one aircraft, consider if the same bug might exist in other aircraft. For example, if sounds are broken in one aircraft, do they work in another one? Is something broken in all gliders, or all Yasim helicopters, or just this one particular aircraft? Since many aircraft copy code from each other, ask or check if the function is common and see what other aircraft might be affected. Search on similar labels or titles, unfortunately the SF tracker search is not very smart. (This is why good titles are important, to help finding duplicates)&lt;br /&gt;
&lt;br /&gt;
If you do find a duplicate, add a comment on both tickets with a link to the other one. That way, when the original ticket is fixed, both bugs can be verified.&lt;br /&gt;
&lt;br /&gt;
== Expired / ancient bugs ==&lt;br /&gt;
&lt;br /&gt;
If the bug is more than two years old, and is not moving forward (no way to reproduce, no further info from the original reporter), close it as 'expired' or 'invalid'. If it's a feature request which no one seems interested in after a year, close it as 'wont-fix'. Or if you feel someone might be be interested to work on it, raise on the developer list or forum. &lt;br /&gt;
&lt;br /&gt;
== Regressions ==&lt;br /&gt;
&lt;br /&gt;
If possible, check the behaviour in older versions to see if it's a regression or always behaved the same way. This can take more time so be strategic about it : test 2020.3 first, and then decide if it's worth checking older or newer versions. But it's probably more useful to check twenty tickets in the current version, than spend four hours installing a historical one, to research a very old ticket.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=HDR_Pipeline&amp;diff=140916</id>
		<title>HDR Pipeline</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=HDR_Pipeline&amp;diff=140916"/>
		<updated>2024-11-08T23:21:48Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Change version number of next&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{forum|47|Effects &amp;amp; Shaders}}&lt;br /&gt;
&lt;br /&gt;
{{infobox subsystem&lt;br /&gt;
|image       = HDR pipeline c172p over TFFF.png&lt;br /&gt;
|name        = HDR Pipeline&lt;br /&gt;
|started     = 04/2021&lt;br /&gt;
|description = A modern rendering pipeline that targets relatively powerful systems&lt;br /&gt;
|status      = In development&lt;br /&gt;
|developers  = Fernando García Liñán &amp;lt;ref&amp;gt;https://sourceforge.net/u/fgarlin/profile/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|changelog = https://sourceforge.net/u/fgarlin/profile/feed.rss&lt;br /&gt;
|folders = &lt;br /&gt;
* {{fgdata file|Compositor/HDR}}&lt;br /&gt;
* {{fgdata file|Effects/HDR}}&lt;br /&gt;
* {{fgdata file|Shaders/HDR}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Rendering}}&lt;br /&gt;
&lt;br /&gt;
The '''HDR Pipeline''' is a [[Compositor]]-based rendering pipeline that attempts to bring modern rendering techniques to FlightGear, namely {{wikipedia|High dynamic range|high dynamic range (HDR)}} and {{wikipedia|Physically based rendering|physically based rendering (PBR)}}. It is implemented entirely in [[$FG_ROOT]] using XML for the Compositor pipeline definition and [[Effects]], and GLSL for shaders and is only available on 'next' branch or nightly builds (2024.2). The pipeline can be enabled with the command line argument &amp;lt;code&amp;gt;--compositor=Compositor/HDR/hdr&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
The [[Classic Pipeline]] relies on legacy [[OpenGL]] features, so rather than improving or reworking it, the idea of creating an entirely separate rendering pipeline from scratch started taking shape. The [[Compositor]] played the biggest role in enabling this effort as it allows the creation of new rendering pipelines entirely in FGData space without any C++ changes whatsoever, greatly reducing the amount of work that had to be done and making the iterative process of testing and debugging much faster.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
'''Last updated: 11/2023'''&lt;br /&gt;
&lt;br /&gt;
The HDR pipeline is more or less stable, and is currently available on &amp;lt;tt&amp;gt;next&amp;lt;/tt&amp;gt; for anyone adventurous enough to try it. Version 2024.1 will not support HDR.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that the HDR pipeline might not work in your system until we finish [[FlightGear and OpenGL Core Profile|moving to the OpenGL core profile]]. AMD graphics cards (regardless of age) and Intel integrated GPUs are known to be problematic.&lt;br /&gt;
&lt;br /&gt;
== Notes for aircraft developers ==&lt;br /&gt;
&lt;br /&gt;
The HDR pipeline handles lighting in a completely different manner compared to [[Atmospheric light scattering|ALS]]. The pipeline will attempt to &amp;quot;translate&amp;quot; classic Effects so they display correctly by making some assumptions. These assumptions are not always correct, so your aircraft might not display correctly under the HDR pipeline. In this section we describe some steps you can follow to leverage all the power of the HDR pipeline.&lt;br /&gt;
&lt;br /&gt;
=== PBR and glTF ===&lt;br /&gt;
&lt;br /&gt;
Physically-based rendering (PBR) refers to the concept of using realistic shading/lighting models along with measured surface values to accurately represent real-world materials. See this [https://marmoset.co/posts/physically-based-rendering-and-you-can-too/ webpage] for an extensive introduction to PBR and how you can create physically-based assets for your aircraft.&lt;br /&gt;
&lt;br /&gt;
This pipeline introduces a PBR Effect ({{fgdata file|Effects/model-pbr.eff}}). However, you don't need to assign this Effect manually. You can export your model from Blender to the [[glTF]] format and use it directly. The Blender exporter will take care of exporting the necessary textures and the FlightGear parser will automatically assign the PBR Effect to your model. Your model XML file would contain something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
    &amp;lt;path&amp;gt;my-aircraft.gltf&amp;lt;/path&amp;gt;&lt;br /&gt;
    [...]&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although '''not recommended''', the PBR effect can be assigned as usual by adding an &amp;lt;tt&amp;gt;&amp;lt;effect&amp;gt;&amp;lt;/tt&amp;gt; tag in the model XML and configuring it like you would configure [[Model-combined effect|model-combined]].&lt;br /&gt;
&lt;br /&gt;
=== Lights ===&lt;br /&gt;
&lt;br /&gt;
Lights are defined using the [[Compositor#Lights|Compositor syntax]]. However, since we are dealing with physically-based values, the ambient/diffuse/specular values are ignored and the &amp;lt;tt&amp;gt;color&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;intensity&amp;lt;/tt&amp;gt; parameters are used instead. The &amp;lt;tt&amp;gt;attenuation&amp;lt;/tt&amp;gt; parameter is also ignored.&lt;br /&gt;
&lt;br /&gt;
It is possible to have a light definition that is compatible with both ALS and HDR by defining all parameters at the same time. This might be troublesome though because the same values might yield different results under each pipeline.&lt;br /&gt;
&lt;br /&gt;
An example light definition is shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;light&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;my-spotlight&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;spot&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;position&amp;gt;&lt;br /&gt;
    &amp;lt;x-m&amp;gt;-7.7476&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;y-m&amp;gt;0&amp;lt;/y-m&amp;gt;&lt;br /&gt;
    &amp;lt;z-m&amp;gt;-1.7990&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/position&amp;gt;&lt;br /&gt;
  &amp;lt;direction&amp;gt;&lt;br /&gt;
    &amp;lt;x&amp;gt;-1.0&amp;lt;/x&amp;gt;&lt;br /&gt;
    &amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;&lt;br /&gt;
    &amp;lt;z&amp;gt;-0.013&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/direction&amp;gt;&lt;br /&gt;
  &amp;lt;color&amp;gt;&lt;br /&gt;
    &amp;lt;r&amp;gt;1.0&amp;lt;/r&amp;gt;&lt;br /&gt;
    &amp;lt;g&amp;gt;0.0&amp;lt;/g&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;0.0&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;/color&amp;gt;&lt;br /&gt;
  &amp;lt;intensity&amp;gt;10&amp;lt;/intensity&amp;gt;&lt;br /&gt;
  &amp;lt;spot-exponent&amp;gt;5&amp;lt;/spot-exponent&amp;gt;&lt;br /&gt;
  &amp;lt;spot-cutoff&amp;gt;40&amp;lt;/spot-cutoff&amp;gt;&lt;br /&gt;
  &amp;lt;range-m&amp;gt;50&amp;lt;/range-m&amp;gt;&lt;br /&gt;
&amp;lt;/light&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
* [[Compositor]]&lt;br /&gt;
* [[glTF]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Compositor Pipelines]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Fairchild_Republic_A-10_Thunderbolt_II&amp;diff=140514</id>
		<title>Fairchild Republic A-10 Thunderbolt II</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Fairchild_Republic_A-10_Thunderbolt_II&amp;diff=140514"/>
		<updated>2024-09-26T14:29:06Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update development status and make clearer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|For the A-10 under current development, please see https://wiki.flightgear.org/Fairchild_Republic_A-10_Thunderbolt_II,_OPRF_Version|width=125}}{{:{{PAGENAME}}/info}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Fairchild A-10 Thunderbolt II''' (aka '''Warthog''') offers a wide variety of features and controls. Special features include the ability to simulate ordnance use, and a detailed 3D textured cockpit. Many of the A-10's flight systems are modeled as well, such as support for [[Tactical_Air_Navigation|TACAN]].&lt;br /&gt;
&lt;br /&gt;
== About the aircraft ==&lt;br /&gt;
The Fairchild Republic A-10, also named Warthog, is a U.S. single-seat, twin-engine, very robust jet aircraft designed for ground attack.&lt;br /&gt;
&lt;br /&gt;
== User's Manual ==&lt;br /&gt;
In the current version, the aircraft simulation begins with the aircraft powered down.&lt;br /&gt;
&lt;br /&gt;
The electrical power systems and the {{Abbr|APU's|Auxiliary Power Unit's}} operation are simulated to a large extent. [[Howto:Aerial_refueling|Mid-air refueling]] is also implemented.&lt;br /&gt;
&lt;br /&gt;
The navigation instruments are [[Tactical_Air_Navigation|TACAN]], {{Abbr|ILS|Instrument Landing System}} and also a VHF so you can have homing on a VOR station.&lt;br /&gt;
&lt;br /&gt;
Several external loads are available and the [[HUD]] provides a {{abbr|CCIP|Continuous Computed Impact Point}}. &lt;br /&gt;
&lt;br /&gt;
=== Electrical power with APU starting procedure ===&lt;br /&gt;
[[File:A-10-electrical-power-control-panel.jpg|thumb|Electrical control panel]]&lt;br /&gt;
At FlightGear startup, both electrical power and APU are shut down and there is no external power supplied.&lt;br /&gt;
&lt;br /&gt;
You, might see, early on, some needles spinning back on the engines gauges panel and the VSI ... this is only a software initialization artifact.&lt;br /&gt;
&lt;br /&gt;
So, look at the right console, there is a panel with 6 switches, that's the Main Electrical Control Panel. Hit Ctrl-c and you will have a view of where to click.&lt;br /&gt;
&lt;br /&gt;
Let's connect the battery: switch on the battery switch. A few indicators should light up, but not all of them. Now with the battery connected you can start the APU. &lt;br /&gt;
&lt;br /&gt;
The APU start/stop switch is located near the throttle on the left console. Switch it on. Now check the APU's tachometer and EGT on the engine gauge panel.&lt;br /&gt;
&lt;br /&gt;
If the APU has started successfuly you should see the EGT (Exhaust Gas Temperature) rapidly climb to 800/900&amp;amp;nbsp;°C and then stabilize when the RPMs reach 60%.&lt;br /&gt;
&lt;br /&gt;
[[File:A-10-throttle-engine-start.jpg|thumb|Throttle, engines operation and APU panel]]&lt;br /&gt;
&lt;br /&gt;
Now the APU has sufficient RPMs to provide electrical power through its generator. So let's turn on the APU generator. This one is on the main electrical control panel, upper left corner of the electrical control panel, right console again.&lt;br /&gt;
&lt;br /&gt;
With the APU generator powered up most of the instruments receive electrical power and now the AOA]] indexer lights up and the HSI (the compass) and ADI (artificial horizon) look much better.&lt;br /&gt;
&lt;br /&gt;
At 85% RPM the APU supplies enough bleed air to start the engines.&lt;br /&gt;
&lt;br /&gt;
[[File:engine-gauges.jpg|thumb|APU running, Engines gauges at stop.]]&lt;br /&gt;
&lt;br /&gt;
=== Engines starting procedure ===&lt;br /&gt;
Now that we have minimum electrical power and bleed air supplied by the APU, starting the engines is straight forward.&lt;br /&gt;
&lt;br /&gt;
Just click on one of the throttle rails (Ctrl-c to see them), the throttle will move from stop to idle and the engine start. Wait for the starting cycle light to turn off, turn on the corresponding generator and repeat with the second engine. &lt;br /&gt;
&lt;br /&gt;
Now the complete electrical circuit is powered and you can stop the APU to save some fuel. It wont be useful anymore. (This could change with future development of engines failures...)&lt;br /&gt;
&lt;br /&gt;
=== Fuel System ===&lt;br /&gt;
FlightGear A-10 starts with all internal tanks full.&lt;br /&gt;
&lt;br /&gt;
2 wing tanks (left and right), 2 fuselage tanks: left main (aft) linked to left system and right main (forward) linked to right system, up to 3 external tanks (2 wings and 1 fuselage).&lt;br /&gt;
&lt;br /&gt;
Normally the left wing and left main tanks feed the left engine and the APU. The right wing and right main tanks feed the right engine. The two feed lines can be interconnected by opening the cross feed valve ('''E''' switch).&lt;br /&gt;
&lt;br /&gt;
The wing boost pumps ('''G''' switch) supply the respective engines until the wing tanks are empty, then the wing boost pumps automatically shut off. The main boost pumps then supply the respective engines with the remainder fuel in main tanks.&lt;br /&gt;
&lt;br /&gt;
In case of a wing tank boost pump failure, the wing tank fuel will gravity feed its respective main tank if the main tank fuel level is below 600 lbs. Check valves prevent reverse fuel flow from the main tanks to the wing tanks.&lt;br /&gt;
&lt;br /&gt;
In case of a main tank boost pump failure, the affected engine will suction-feed from the affected tank for all power setting up to an altitude of nearly 10,000 feet.&lt;br /&gt;
&lt;br /&gt;
Unequal fuel level between left (aft) main and right (forward) main tank (imbalance superior 750 lbs) will cause a longitudinal CG shift that may exceed allowable limits. In this case, opening the valve &amp;quot;tank gate&amp;quot; create a link between the two main tanks.&lt;br /&gt;
&lt;br /&gt;
Fuel from the external tanks is transfered to the wing or main tanks by pressure from the bleed air system. Wing tanks can be topped when the fuel level is below 1590 lbs.&lt;br /&gt;
Main tanks can be topped when the fuel level is below 3034 lbs.&lt;br /&gt;
The cycling is repeated until fuel is depleted from the external wing tanks first, and external fuselage tank secondly.&lt;br /&gt;
&lt;br /&gt;
For negative G flight, collector tanks will supply the engine with sufficient fuel for 10 seconds operation at MAX power.&lt;br /&gt;
&lt;br /&gt;
With fully loaded fuel tanks and a full load of armament, the A-10 is heavy--about 50,000 pounds. At this weight the plane is quite difficult to fly. Symptoms you would notice are difficult to take off, difficulty gaining altitude, difficult to manoeuvre without triggering stall warnings or actual stalls.&lt;br /&gt;
&lt;br /&gt;
To avoid these problems, if you choose to equip the plane with full armament you may wish to fill the tanks only half full or so--the plane becomes much easier to fly and half fuel is still enough for a reasonably long flight.&lt;br /&gt;
&lt;br /&gt;
[[File:A-10-fuel-control-doc.jpg|thumb|Fuel Control panel.]]&lt;br /&gt;
&lt;br /&gt;
The '''Fuel Control panel''' is located on the forward part of left console. 1 lever, 4 push buttons and 8 switches are functional.&lt;br /&gt;
&lt;br /&gt;
: ('''A''') Fill Disable buttons, left and right wings tanks. Here fill disabled (button up showing red stripe). Refuel disabled for the wings tanks.&lt;br /&gt;
&lt;br /&gt;
: ('''B''') Fill Disable buttons, left and right main tanks (practically forward and aft fuselage tanks). Here fill enabled (button down hiding red stripe). Refuel enabled for the main tanks.&lt;br /&gt;
&lt;br /&gt;
: ('''C''') Refuel Receiver Door lever.&lt;br /&gt;
&lt;br /&gt;
: ('''D''') External Tanks switches, Wings and Fuselage. Set to OFF to un-pressurize external tanks&lt;br /&gt;
&lt;br /&gt;
: ('''E''') Cross Feed switch, allow any operating boost pump to feed both engines.&lt;br /&gt;
&lt;br /&gt;
: ('''F''') Tank Gate switch, open a valve linking the left (aft) and right (forward) main fuel tanks. &lt;br /&gt;
&lt;br /&gt;
: ('''G''') Boost Pumps (Wing) &lt;br /&gt;
&lt;br /&gt;
: ('''H''') Boost Pumps (Main)&lt;br /&gt;
&lt;br /&gt;
=== HUD ===&lt;br /&gt;
[[File:A-10-hud-control-panel.jpg|thumb|HUD Control panel]]&lt;br /&gt;
&lt;br /&gt;
The Head Up Display is turned off by default at aircraft startup. To turn it on electrical power on at least one of the three generator is needed as it isn't wired to the battery.&lt;br /&gt;
&lt;br /&gt;
The '''HUD Control panel''' is located on the upper left corner of the main instrument panel. Three knobs are functional.&lt;br /&gt;
&lt;br /&gt;
: ('''A''') Mode Selector Switch: OFF, TEST (standard display), NAV (standard display), CCIP (standard display + Countinuous Computed Impact Point), CCRP (standard display), EXP (standard display), STBY (standard display). Actually you will mostly use NAV and CCIP as other modes are not modeled yet. See later in Weapons System about reticles use.&lt;br /&gt;
&lt;br /&gt;
: ('''B''') INTEN knob: Adjust the HUD luminosity.&lt;br /&gt;
&lt;br /&gt;
: ('''C''') DEPR knob: Changes the vertical position of the primary aiming reticle in the HUD, There is a digital index in the HUD showing its position, range from -1.00 to 1.00 followed by the letter &amp;quot;D&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
'''HUD Symbology:'''&lt;br /&gt;
&lt;br /&gt;
[[File:A-10-hud-symbology.jpg|thumb|HUD Symbology]]&lt;br /&gt;
&lt;br /&gt;
: ('''D''') Pitch ladder.&lt;br /&gt;
&lt;br /&gt;
: ('''E''') Indicated Air Speed, Kts.&lt;br /&gt;
&lt;br /&gt;
: ('''F''') Primary Aiming Reticle.&lt;br /&gt;
&lt;br /&gt;
: ('''G''') Horizon Line&lt;br /&gt;
&lt;br /&gt;
: ('''H''') Primary Aiming Reticle Digital index.&lt;br /&gt;
&lt;br /&gt;
: ('''I''') Magnetic Heading Tape. &lt;br /&gt;
&lt;br /&gt;
: ('''J''') Indicated Altitude in feet (ASL). &lt;br /&gt;
&lt;br /&gt;
: ('''K''') Radar Altitude in feet (AGL) followed by letter &amp;quot;R&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
: ('''I''') Aircraft Pitch in degrees, boxed.&lt;br /&gt;
&lt;br /&gt;
: ('''M''') Total Velocity Vector indicator. &lt;br /&gt;
&lt;br /&gt;
: ('''N''') Pointer showing the rudders deflection.&lt;br /&gt;
&lt;br /&gt;
=== Weapons system ===&lt;br /&gt;
[[File:A-10-arm-1.jpg|thumb|Armament panel]]&lt;br /&gt;
Be sure to have energy before trying to use the armament panel. The gun's rounds counter ('''A''') should be lighted in blue and the HUD should be active.&lt;br /&gt;
&lt;br /&gt;
There is actually 2 AIM-9, the GAU9 gatling gun, and MK85 250 pound bombs.&lt;br /&gt;
&lt;br /&gt;
First of all push up the Master Switch to ARM ('''B''').&lt;br /&gt;
&lt;br /&gt;
For the gun, push up the Gun Rate Switch to HI (right of the rounds counter). You should have on the left side of the main panel a red light indicating 'Gun Ready'. Press key 'e' on the keyboard to fire the gun.&lt;br /&gt;
&lt;br /&gt;
For AIM-9, turn ('''C''') the AIM-9 Mode Knob to SEL (click on the right side of the knob). Now a big circle appears on the HUD symbology, that the searching aera of the AIM-9. Now select Pylon #11, you should ear the seeker sound. This sound is audible only when an AIM-9 is available, selected and searching. Press key ',' to fire the AIM-9.&lt;br /&gt;
&lt;br /&gt;
(In Flightgear, the key ',' is usaly used for left brake, in the A-10 a nasal script intercepts the binding for weapons release, this is not a definitive solution).&lt;br /&gt;
&lt;br /&gt;
You can also choose to fly without the AIM-9s and the ECM pod, press Tab or Ctrl-I on the keyboard to display the config menu.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
[[A-10 Thunderbolt II FDM]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://brenthugh.com/flightgear/Sun_Valley_Tank_Invasion1.zip Several ground bombing scenarios suitable for the A-10, involving moving and static tank formations, explodable M1 Abrams tanks, etc.]&lt;br /&gt;
&lt;br /&gt;
{{air-to-air refueling}}&lt;br /&gt;
&lt;br /&gt;
[[Fr:Fairchild Republic A-10 Thunderbolt II]]&lt;br /&gt;
[[Ru:Fairchild Republic A-10 Thunderbolt II]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Fairchild_Republic_A-10_Thunderbolt_II,_OPRF_Version&amp;diff=140513</id>
		<title>Fairchild Republic A-10 Thunderbolt II, OPRF Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Fairchild_Republic_A-10_Thunderbolt_II,_OPRF_Version&amp;diff=140513"/>
		<updated>2024-09-26T14:24:00Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update repository link, update Weapon information for upgraded weapons system&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Fairchild A-10 Thunderbolt II''' (aka '''Warthog''') offers a wide variety of features and controls. Special features include the ability to simulate ordnance use, and a detailed 3D textured cockpit. Many of the A-10's flight systems are modeled as well, such as support for [[Tactical_Air_Navigation|TACAN]].&lt;br /&gt;
{{infobox aircraft&lt;br /&gt;
| name           = Fairchild A-10&lt;br /&gt;
| hangar         = OPRF&lt;br /&gt;
| aircraft       = A-10&lt;br /&gt;
| image          = A-10-3.png&lt;br /&gt;
| alt            = The &amp;quot;Warthog&amp;quot;&lt;br /&gt;
| image2         = A-1-1.png&lt;br /&gt;
| alt2           = A-10 Warthog Taking off from KXTA&lt;br /&gt;
| type           = Military aircraft/Attack aircraft&lt;br /&gt;
| config         = Low wing aircraft&lt;br /&gt;
| propulsion     = Twinjet&lt;br /&gt;
| manufacturer   = Fairchild Republic&lt;br /&gt;
| authors        = Lee Elliott/Alexis Bory/David Bastien/Pinto/Steve Brown/Rudolf/J Maverick 16/Zorka/EAGLE01/Wolf&lt;br /&gt;
| fdm            = YASim&lt;br /&gt;
| fgname         = A-10&lt;br /&gt;
| status-fdm     = 3&lt;br /&gt;
| status-systems = 5&lt;br /&gt;
| status-cockpit = 4&lt;br /&gt;
| status-model   = 4&lt;br /&gt;
| ready          = airrefuel/Emesary&lt;br /&gt;
| wikipedia      = Fairchild Republic A-10 Thunderbolt II&lt;br /&gt;
| navbar         = 1&lt;br /&gt;
|download=https://github.com/l0k1/A-10/archive/refs/heads/master.zip|devel-repo=https://github.com/l0k1/A-10}}&lt;br /&gt;
This is the version used by [[Operation Red Flag|OPRF (Operation Red Flag)]] and is the branch that is being actively developed. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==About the aircraft==&lt;br /&gt;
The Fairchild Republic A-10, nicknamed &amp;quot;Warthog,&amp;quot; is a U.S. single-seat, twin-engine, very robust jet aircraft designed for ground attack. &lt;br /&gt;
==User's Manual==&lt;br /&gt;
In the current version, the aircraft simulation begins with the aircraft powered down and [[Emesary|damage]] disabled.&lt;br /&gt;
&lt;br /&gt;
The electrical power systems and the {{Abbr|APU's|Auxiliary Power Unit's}} operation are simulated to a large extent. [[Howto:Aerial_refueling|Mid-air refueling]] is also implemented.&lt;br /&gt;
&lt;br /&gt;
The navigation instruments are [[Tactical_Air_Navigation|TACAN]], {{Abbr|ILS|Instrument Landing System}} and also a VHF so you can have homing on a VOR station.&lt;br /&gt;
&lt;br /&gt;
Several external loads are available and the [[HUD]] provides a {{abbr|CCIP|Continuous Computed Impact Point}}. &lt;br /&gt;
&lt;br /&gt;
== Keybinds ==&lt;br /&gt;
&amp;lt;code&amp;gt;j/k&amp;lt;/code&amp;gt; Extend/Retract Speedbrakes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[/]&amp;lt;/code&amp;gt; Extend/Retract Flaps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; Slats&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; Trigger&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Shift+q&amp;lt;/code&amp;gt; Flares&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Electrical power with APU starting procedure===&lt;br /&gt;
[[File:A-10-electrical-power-control-panel.jpg|thumb|Electrical control panel]]At FlightGear startup, both electrical power and APU are shut down and there is no external power supplied.&lt;br /&gt;
&lt;br /&gt;
You, might see, early on, some needles spinning back on the engines gauges panel and the VSI ... this is only a software initialization artifact.&lt;br /&gt;
&lt;br /&gt;
So, look at the right console, there is a panel with 6 switches, that's the Main Electrical Control Panel. Hit Ctrl-c and you will have a view of where to click.&lt;br /&gt;
&lt;br /&gt;
Let's connect the battery: switch on the battery switch. A few indicators should light up, but not all of them. Now with the battery connected you can start the APU. &lt;br /&gt;
&lt;br /&gt;
The APU start/stop switch is located near the throttle on the left console. Switch it on. Now check the APU's tachometer and EGT on the engine gauge panel.&lt;br /&gt;
&lt;br /&gt;
If the APU has started successfuly you should see the EGT (Exhaust Gas Temperature) rapidly climb to 800/900&amp;amp;nbsp;°C and then stabilize when the RPMs reach 60%.[[File:A-10-throttle-engine-start.jpg|thumb|Throttle, engines operation and APU panel]]Now the APU has sufficient RPMs to provide electrical power through its generator. So let's turn on the APU generator. This one is on the main electrical control panel, upper left corner of the electrical control panel, right console again.&lt;br /&gt;
&lt;br /&gt;
With the APU generator powered up most of the instruments receive electrical power and now the AOA]] indexer lights up and the HSI (the compass) and ADI (artificial horizon) look much better.&lt;br /&gt;
&lt;br /&gt;
At 85% RPM the APU supplies enough bleed air to start the engines.&lt;br /&gt;
&lt;br /&gt;
[[File:engine-gauges.jpg|thumb|APU running, Engines gauges at stop.]]&lt;br /&gt;
===Engines starting procedure===&lt;br /&gt;
Now that we have minimum electrical power and bleed air supplied by the APU, starting the engines is straight forward.&lt;br /&gt;
&lt;br /&gt;
Just click on one of the throttle rails (Ctrl-c to see them), the throttle will move from stop to idle and the engine start. Wait for the starting cycle light to turn off, turn on the corresponding generator and repeat with the second engine. &lt;br /&gt;
&lt;br /&gt;
Now the complete electrical circuit is powered and you can stop the APU to save some fuel. It wont be useful anymore. (This could change with future development of engines failures...)&lt;br /&gt;
&lt;br /&gt;
===Fuel System===&lt;br /&gt;
FlightGear A-10 starts with all internal tanks full.&lt;br /&gt;
&lt;br /&gt;
2 wing tanks (left and right), 2 fuselage tanks: left main (aft) linked to left system and right main (forward) linked to right system, up to 3 external tanks (2 wings and 1 fuselage).&lt;br /&gt;
&lt;br /&gt;
Normally the left wing and left main tanks feed the left engine and the APU. The right wing and right main tanks feed the right engine. The two feed lines can be interconnected by opening the cross feed valve ('''E''' switch).&lt;br /&gt;
&lt;br /&gt;
The wing boost pumps ('''G''' switch) supply the respective engines until the wing tanks are empty, then the wing boost pumps automatically shut off. The main boost pumps then supply the respective engines with the remainder fuel in main tanks.&lt;br /&gt;
&lt;br /&gt;
In case of a wing tank boost pump failure, the wing tank fuel will gravity feed its respective main tank if the main tank fuel level is below 600 lbs. Check valves prevent reverse fuel flow from the main tanks to the wing tanks.&lt;br /&gt;
&lt;br /&gt;
In case of a main tank boost pump failure, the affected engine will suction-feed from the affected tank for all power setting up to an altitude of nearly 10,000 feet.&lt;br /&gt;
&lt;br /&gt;
Unequal fuel level between left (aft) main and right (forward) main tank (imbalance superior 750 lbs) will cause a longitudinal CG shift that may exceed allowable limits. In this case, opening the valve &amp;quot;tank gate&amp;quot; create a link between the two main tanks.&lt;br /&gt;
&lt;br /&gt;
Fuel from the external tanks is transfered to the wing or main tanks by pressure from the bleed air system. Wing tanks can be topped when the fuel level is below 1590 lbs. Main tanks can be topped when the fuel level is below 3034 lbs. The cycling is repeated until fuel is depleted from the external wing tanks first, and external fuselage tank secondly.&lt;br /&gt;
&lt;br /&gt;
For negative G flight, collector tanks will supply the engine with sufficient fuel for 10 seconds operation at MAX power.&lt;br /&gt;
&lt;br /&gt;
With fully loaded fuel tanks and a full load of armament, the A-10 is heavy--about 50,000 pounds. At this weight the plane is quite difficult to fly. Symptoms you would notice are difficult to take off, difficulty gaining altitude, difficult to manoeuvre without triggering stall warnings or actual stalls.&lt;br /&gt;
&lt;br /&gt;
To avoid these problems, if you choose to equip the plane with full armament you may wish to fill the tanks only half full or so--the plane becomes much easier to fly and half fuel is still enough for a reasonably long flight.[[File:A-10-fuel-control-doc.jpg|thumb|Fuel Control panel.]]The '''Fuel Control panel''' is located on the forward part of left console. 1 lever, 4 push buttons and 8 switches are functional.&lt;br /&gt;
&lt;br /&gt;
:('''A''') Fill Disable buttons, left and right wings tanks. Here fill disabled (button up showing red stripe). Refuel disabled for the wings tanks.&lt;br /&gt;
:('''B''') Fill Disable buttons, left and right main tanks (practically forward and aft fuselage tanks). Here fill enabled (button down hiding red stripe). Refuel enabled for the main tanks.&lt;br /&gt;
:('''C''') Refuel Receiver Door lever.&lt;br /&gt;
:('''D''') External Tanks switches, Wings and Fuselage. Set to OFF to un-pressurize external tanks&lt;br /&gt;
:('''E''') Cross Feed switch, allow any operating boost pump to feed both engines.&lt;br /&gt;
:('''F''') Tank Gate switch, open a valve linking the left (aft) and right (forward) main fuel tanks.&lt;br /&gt;
:('''G''') Boost Pumps (Wing)&lt;br /&gt;
:('''H''') Boost Pumps (Main)&lt;br /&gt;
:&lt;br /&gt;
===HUD===&lt;br /&gt;
[[File:A-10-hud-control-panel.jpg|thumb|HUD Control panel]]The Head Up Display is turned off by default at aircraft startup. To turn it on electrical power on at least one of the three generator is needed as it isn't wired to the battery.&lt;br /&gt;
&lt;br /&gt;
The '''HUD Control panel''' is located on the upper left corner of the main instrument panel. Three knobs are functional.&lt;br /&gt;
&lt;br /&gt;
:('''A''') Mode Selector Switch: Modes available are: &lt;br /&gt;
:* OFF &lt;br /&gt;
:* TEST - Currently shows a placeholder &amp;quot;Initializing&amp;quot; screen. In the real aircraft this is used mainly to control the LASTE (Weapon and Navigation system) menu, however this is currently not implemented&lt;br /&gt;
:* NAV - Standard display, shows speed, altitude, distance and time to next waypoint aswell as navigation to the steerpoint.&lt;br /&gt;
:* CCIP - Same as NAV with the addition of CCIP (Continuiously Computed Impact Point) weapon symbology&lt;br /&gt;
:* CCRP - Not Implemented&lt;br /&gt;
:* EXP - Not Implemented&lt;br /&gt;
:* STBY - Not Implemented&lt;br /&gt;
:('''B''') INTEN knob: Adjust the HUD luminosity.&lt;br /&gt;
:('''C''') DEPR knob: Not Implemented&lt;br /&gt;
&lt;br /&gt;
'''HUD Symbology:'''[[File:A-10-hud-symbology.jpg|thumb|HUD Symbology]]&lt;br /&gt;
:('''D''') Pitch ladder.&lt;br /&gt;
:('''E''') Indicated Air Speed, Kts.&lt;br /&gt;
:('''F''') Primary Aiming Reticle.&lt;br /&gt;
:('''G''') Horizon Line&lt;br /&gt;
:('''H''') Primary Aiming Reticle Digital index.&lt;br /&gt;
:('''I''') Magnetic Heading Tape.&lt;br /&gt;
:('''J''') Indicated Altitude in feet (ASL).&lt;br /&gt;
:('''K''') Radar Altitude in feet (AGL) followed by letter &amp;quot;R&amp;quot;.&lt;br /&gt;
:('''I''') Aircraft Pitch in degrees, boxed.&lt;br /&gt;
:('''M''') Total Velocity Vector indicator.&lt;br /&gt;
:('''N''') Pointer showing the rudders deflection.&lt;br /&gt;
:&lt;br /&gt;
===Weapons system===&lt;br /&gt;
Weapons Currently Available:&lt;br /&gt;
&lt;br /&gt;
* LAU-68 (Launcher with 7 High-Explosive rockets)&lt;br /&gt;
* Mk-82 (Available in single and triple racks, High drag and Low drag)&lt;br /&gt;
* MK-84&lt;br /&gt;
* CBU-87&lt;br /&gt;
* AGM-64B&lt;br /&gt;
* AIM-9M (A/A Missile, available in dual racks)&lt;br /&gt;
* AN/ALQ-131 (ECM pod, currently no use)&lt;br /&gt;
&lt;br /&gt;
[[File:A-10-arm-1.jpg|thumb|Armament panel]]Be sure to have electric power before trying to use the armament panel. The gun's rounds counter ('''A''') should be lighted in blue and the HUD should be in CCIP mode. This is needed to see targeting symbology for your weapons, there will be no symbology in NAV mode.&lt;br /&gt;
&lt;br /&gt;
First of all push up the Master Switch to ARM ('''B''').&lt;br /&gt;
&lt;br /&gt;
To use the gun, push up the Gun Rate Switch to HI (right of the rounds counter). At the top/left of the main panel a green light indicating 'Gun Ready' will light up. Press &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; to fire the gun. Aiming is done with the circle on the HUD which will indicate close to where the rounds will land. As you get closer the circle symbology changes to indicate your range. If you are using the gun for Air to Air, switch the AIM-9 Mode Knob to SEL. This will put the weapon system into Air to Air mode and the gunning symbology will change to something more useful for Air to Air use.&lt;br /&gt;
&lt;br /&gt;
To release the Mk-82s and fire the LAU-68s, select the green squares in the center of the weapons panel and press &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt; to fire. Keep in mind that only one type of weapon can be selected at one time, and the order in which you select the pylons will affect the order in which the ordnance on them is released.&lt;br /&gt;
&lt;br /&gt;
To use the AIM-9s, turn the AIM-9 Mode Knob ('''C''') to SEL (click on the right side of the knob). Then select the pylons with AIM-9s mounted. There will be a small circle about a 3rd of the way down the HUD - This is your Seeker. Maneuver the aircraft to place the seeker near an enemy aircraft and if the missile has a good enough lock on it, it will track it and the tone will change to a higher pitched tone. At this point you can fire. It is best to fire within 7 miles if the aircraft is hot, or coming towards you, and around 3 if the aircraft is cold, or going way from you. The other aircraft maneuvering will also affect missile performance so you may want to wait until you ger closer for a higher chance of a likk  As soon as you turn the knob past the first mode, OFF, the AIM-9's will start to cool. This takes around 30 seconds. You can still use the AIM-9s in this time however their range and effectiveness in keeping a lock will be reduced. If the AIM-9 system has not been powered on, the missile will not track and will fly unguided and unarmed.&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Hawg-5.png&lt;br /&gt;
File:Hawg-3.png&lt;br /&gt;
File:Hawg-1.png&lt;br /&gt;
File:Hawg-2.png&lt;br /&gt;
File:Hawg-4.png&lt;br /&gt;
File:A-10-2.png|A-10 using its GAU-8 30mm Gun&lt;br /&gt;
File:A-10 Warthog in Bombable.png|alt=A-10 in Bombable|A-10 in Bombable&lt;br /&gt;
File:A-10.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work In Progress ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Task            &lt;br /&gt;
!Status   &lt;br /&gt;
!Remarks                &lt;br /&gt;
|-&lt;br /&gt;
|Rewrite Weapon System handling code&lt;br /&gt;
|Done! ✅&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Add additional weapon loadouts (something guided? GBU-12/AGM-65?)&lt;br /&gt;
|{{Progressbar|percentage=90}}&lt;br /&gt;
|CBUs, Mk-82R, AGM-65, Mk-84 and ECM pods have been added&lt;br /&gt;
|-&lt;br /&gt;
|Paintkit fix&lt;br /&gt;
|Done! ✅ &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Weapons Graphical update&lt;br /&gt;
|Done! ✅ &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Full cockpit functionality&lt;br /&gt;
|{{Progressbar|percentage=60}}&lt;br /&gt;
|Getting there, Maverick screen still needs work...&lt;br /&gt;
|-&lt;br /&gt;
|FDM rework&lt;br /&gt;
|{{Progressbar|percentage=90}}&lt;br /&gt;
|JSB file is there, just needs some refining and implementation&lt;br /&gt;
|-&lt;br /&gt;
|Canvas HUD rewrite&lt;br /&gt;
|Done! ✅&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Additional Liveries&lt;br /&gt;
|{{Progressbar|percentage=50}}&lt;br /&gt;
|Got a lot, thanks to Bat. Still need some more!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:A-10–clusters.png|Full load of CBU-87s&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[A-10 Thunderbolt II FDM]]&lt;br /&gt;
==External links==&lt;br /&gt;
*&lt;br /&gt;
*A-10 Development Discord Server: https://discord.gg/RmtjmsT5vS&lt;br /&gt;
{{air-to-air refueling}}&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=PUI&amp;diff=140508</id>
		<title>PUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=PUI&amp;diff=140508"/>
		<updated>2024-09-24T23:48:36Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update version to reflect 2024.1 LTS being last planned version to contain PUI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Feature to be removed|version=2024.2|reason=[[Plib]]/PUI is to be removed and replaced by a [[Canvas widget matrix|Canvas/Nasal based solution]] to help improve compatibility with [[OSG]] 3.6+ and [[OpenGL]] 4.x ([[Core Profile support|OpenGL Core Profile]], see [[2022.X Release plan]] ) and improve performance by [[Unifying the 2D rendering backend via canvas|phasing out legacy OpenGL code]]. Therefore, people should be careful when extending the '''PUI''' based legacy GUI engine&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/34921495/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35157325/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] GUI options (Was: Aircraft center) &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten Dreyer &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jun 14th, 2016 &lt;br /&gt;
  |added  =  Jun 14th, 2016 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt; and coordinate any related work with the devel mailing list first-this applies particularly to adding any [[Template:PUI_widget|additional hard-coded PUI widgets]]. }}&lt;br /&gt;
[[File:Exit.png|thumb|FlightGear GUI dialog (exit.xml)stored in $FG_ROOT/gui/dialogs]]&lt;br /&gt;
{{GUI Navbar}}&lt;br /&gt;
&lt;br /&gt;
[[File:Custom-autopilot-dialog.png|right|200px]]&lt;br /&gt;
[[PUI]] is the standard GUI engine used in FlightGear, it is part of [[PLIB]] and is using raw, fixed-pipeline, [[OpenGL]] code internally (no [[OpenSceneGraph]]). As of mid 2021, FlightGear is in the process of working towards adopting the OpenGL Core Profile, this means that [[PUI]] is causing trouble and needs to be replaced/disabled or ported.&lt;br /&gt;
&lt;br /&gt;
PUI provides a fairly basic, but robust, set of widgets. PUI is also used for rendering the [[Menubar]].&lt;br /&gt;
&lt;br /&gt;
FlightGear uses a GUI widget set that is implemented on top of raw (legacy) [[OpenGL]]. This has many advantages from a portability standpoint and from the standpoint of integrating with window systems.  [[PUI]] doesn't have every feature under the sun, but it was never meant to.  It's relatively small, lean, mean, and written on top of [[OpenGL]] which makes life *much* easier for us.&lt;br /&gt;
&lt;br /&gt;
[[PUI]] already is a separate distinct library within Plib.  It depends on some central utility stuff, but that's about it.  So it is pretty stripped down and separate already.&amp;lt;ref&amp;gt;https://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg26011.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are to some extent hamstrung by the rather old GUI toolkit we use. However, replacing that is going to be non-trivial, and it would affect not just the core GUI but also all the dialog boxes that have been set up for particular aircraft.&amp;lt;ref&amp;gt;https://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg25985.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flightgear can look amazing when you use the HDR pipeline. We absolutely need this to stay relevant. The problem is that HDR is not compatible with OpenGL1 PUI. Work on getting rid of PUI has been going on for over a decade (longer than it took to implement it).&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37727346/&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:menubar2.jpg|517px]]&lt;br /&gt;
&lt;br /&gt;
== Replacement status ==&lt;br /&gt;
{{See also|FlightGear_and_OpenGL_ES#Example:_disabling_PUI}}&lt;br /&gt;
&lt;br /&gt;
{{Note| Update 09/2022: The PUI replacement [[QtQuick_use_in_FlightGear#Background|was going to be Qt]] but it started to get very complicated with changes in Qt 5.15 + Qt 6, so James is going with a more light-weight Canvas based approach now.&lt;br /&gt;
&lt;br /&gt;
Qt added support for Vulkan / Metal / D3D starting in 5.15, but FlightGear / OpenSceneGraph can’t support those, so integrating the two renderers went from being ‘complicated but ok’  to ‘very very complicated’. &lt;br /&gt;
&lt;br /&gt;
So now James is going with something much more lightweight using some C++ compatibility code, some Nasal for styling and the existing [[Canvas widgets|Canvas widget rendering]] from Thomas Geymayer (TheTom) with [[Canvas Widget Matrix|some extensions and additions]], based on the [[Howto:Processing_legacy_PUI_dialogs_using_Canvas#Original_Discussion|plans originally discussed when the Canvas GUI system was added to FlightGear]]: some pieces are in FlightGear &amp;amp; FGData already. &lt;br /&gt;
&lt;br /&gt;
James has basic dialogs working okay but not the more complex ones and everything looks kind of ugly, he needs to improve the visual look before he shares screenshots to avoid everyone freaking out :) The disadvantage of this approach is James is far from expert at creating visual appearances this way, so it’s kind on unrewarding and slow for him. If someone likes messing with CSS-type styling, border-images and hover-states, ping him since we could probably move things also faster &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37701750/&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
{{Main article|Core Profile support}}&lt;br /&gt;
&lt;br /&gt;
The bigger issue here is we need to ditch [[PUI]] (which is in progress) and some OpenGL 1.0 code (HUD, 2D panels especially - can be #ifdef for now) so we can enable Core profile on Mac - since Mac 4.x support (we only hit about 4.3 alas, but with some extensions to get in sight of 4.5) is Core profile only, no Compatibility mode.&lt;br /&gt;
&lt;br /&gt;
Improving the frame-rate and modernised 3D rendering, can’t be worked on until the PUI code, 2D panels and Shiva are removed, but doing so is a frustrating slow path&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35623408/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] canvas non svg-elements broken &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 24th, 2017 &lt;br /&gt;
  |added  =  Jan 24th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|There is now an alternative to ShivaVG in SimGear - ShaderVG, which is working pretty much as good as ShivaVG. It can be enabled by passing -DENABLE_SHADERVG to cmake when building SImGear from source.}}&lt;br /&gt;
&lt;br /&gt;
Given that with many graphics drivers PUI doesn't render correctly when higher shader quality is on, many people are convinced PUI needs to be replaced.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35624918/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] canvas non svg-elements broken &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Thorsten Renk &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 25th, 2017 &lt;br /&gt;
  |added  =  Jan 25th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Canvas Emulation ==&lt;br /&gt;
{{See also|Canvas widget matrix}}&lt;br /&gt;
'''Last updated: 04/2023 &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37805054/&amp;lt;/ref&amp;gt;&lt;br /&gt;
'''&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
About-dialog-xmldialog-04-2023.png|about.xml PUI/XML dialog parsed/rendered via the [[Canvas GUI]] and the underlying XMLDialog.nas parser/translator (04-2023)&lt;br /&gt;
Logging-dialog-via-xmldialog-04-2023.png|logging.xml PUI/XML dialog parsed/rendered via the [[Canvas GUI]] and the underlying XMLDialog.nas parser/translator (04-2023)&lt;br /&gt;
Failures-dialog-via-xmldialog-04-2023.png|failures dialog-via-xmldialog-04-2023.png{{!}}thumb{{!}}logging.xml PUI/XML dialog parsed/rendered via the [[Canvas GUI]] and the underlying XMLDialog.nas parser/translator (04-2023)&lt;br /&gt;
Environment-dlg-via-canvas-bridge-04-2023.png|Screen shot showing the XMLDialog.nas bridge in use to parse/render the environment.xml PUI/XML dialog (unmodified)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
As of 01/2023, the replacement for PUI is making good progress&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37765706/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In February 2022, James reported having something in progress locally, and that should even be something we can try in March/April 2022. Hopefully that’s quick enough, knowing it has been a long time coming.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37606439/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There's now an XML to Nasal bridge, to keep PUI dialogs working (Disabled by a CMake option). This is implemented on top of the [[Canvas]] system.&lt;br /&gt;
&lt;br /&gt;
This builds equivalent C++ objects to what the [[PUI]] dialogs build, with properties exposed to Nasal. Peer objects are created by Nasal [[callbacks]], which can implement the various dialog functions needed to keep compatibility, especially the [[#Background|‘update’ and ‘apply’ hooks]].&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/flightgear/ci/cbd5ef9e7b8f433dbc1ba97bae7d7cfc894e7cef/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For remaining work to be done, please refer to [https://sourceforge.net/p/flightgear/mailman/message/37881226/]&lt;br /&gt;
&lt;br /&gt;
{{Note|The PUI Compatible Canvas GUI is a compile time option: Use the following [[Building using CMake|cmake option]] to enable this code: {{CMake Build Option|option=ENABLE_PUICOMPAT|default=ON|description=This requires latest SG/FG AND FGDATA}}. But this is all highly fluid and most of it really developer only. At one point they will become default or be accessible in the launcher.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37834004/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you compiled with PUICompatibility enabled, but still don't see any dialogs - only the menubar, you might need to enable the GUI module in defaults.xml:{{PropArg}}&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37833149/&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
The new Compatibility files can now be found in $FG_SRC/GUI:&lt;br /&gt;
&lt;br /&gt;
* {{flightgear file|src/GUI/FGPUICompatDialog.cxx }}&lt;br /&gt;
* {{flightgear file|src/GUI/FGPUICompatDialog.hxx }}&lt;br /&gt;
* {{flightgear file|src/GUI/PUICompatObject.cxx  }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;01/2023: James is slowly working on creating the pop-up menu and combo-box widgets [...]&amp;lt;/s&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;One of the major things slowing down James' work on the popup-menu and combo box is time to restart the simulator for each change, he is looking for some solution to re-load the widget Nasal code independently. &amp;lt;ref&amp;gt;&amp;lt;https://sourceforge.net/p/flightgear/mailman/message/37756183/&amp;lt;/ref&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;James has done about 75% (hah!) of the C++ work to enable live reloading of modules this way, but unfortunately there are some code paths that would become crashy if you use the feature for the Canvas: because it would reference the ‘old’ (pre-reload) Nasal code, and not the new one, and therefore you’d get a weird mix of old and new, and then just crash the sim. To fix it properly I need to track down those places that store a reference to Canvas and give them a re-init method, so we don’t keep the stale references.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;The general non-fun-ness of that kind of debugging is James has been making such slow progress on my PUI replacement widgets recently &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37756263/&amp;lt;/ref&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Popup menus and combo box widgets are working now - also, the simulator doesn't have to be restarted anymore - any Nasal module (including the canvas module can now be reloaded live:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fgcommand(&amp;quot;nasal-reload&amp;quot;, {&amp;quot;module&amp;quot;: &amp;quot;canvas&amp;quot;})&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Todo ===&lt;br /&gt;
&amp;lt;s&amp;gt;Nothing in particular: help debugging the grid layout (which is in simgear) would be good. For now, you could create a grid layout manually using some Nasal.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The grid layout is now mostly working (from my experience) but it behaves weirdly when there isn't enough place to accommodate all widgets.&lt;br /&gt;
&lt;br /&gt;
Global menu keybindings won’t worry but don’t touch that, I have a separate plan for it.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37805736/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of 04/2023, remaining items on the todo list are: &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37805060/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grid layout&lt;br /&gt;
** GridLayout needs debugged: After this, the basic UI is usable, would probably make it a switchable option on ‘next’ (I can already use the simulator with the new UI today, but all the sizes are off in the grid layouts which we use everywhere)&lt;br /&gt;
&lt;br /&gt;
*  list {{Done}}&lt;br /&gt;
*  table (and tree ?) models corresponding views&lt;br /&gt;
* waypoint list&lt;br /&gt;
* Re-write the waypoint list and airport dialog to work again (since these use custom widgets):&lt;br /&gt;
** log list &lt;br /&gt;
** airport-list equivalents&lt;br /&gt;
*  Nasal access to the menu i18n functions&lt;br /&gt;
*  selection support for single- and multi-line text (which is being worked on -&amp;gt; CanvasPangoText){{Note|For the LineEdit widget, a hack has been implemented to provide more-or-less working selection highlighting while the PangoText element isn't done.}}&lt;br /&gt;
* Keyboard shortcut handling, although this is not really a PUI vs replacement issue, to me we should handle UI shortcuts in the same was normal keyboard.xml shortcuts&lt;br /&gt;
** this previously worked because PUI got ‘first chance’ at handling key input. But we always had duplication between keyboard.xml and other places, so I would rather standardise on keyboard.xml, but allow a UI element to set a scope for shortcuts. (So that Copy/paste shortcuts etc can work in a text input, at least … but probably some other standard ones) &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37805188/&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Ensure all the places which use the PUI combo-box and list-widget work : there’s a few of these.&lt;br /&gt;
&lt;br /&gt;
The CanvasPangoText stuff is needed but we can perfectly well run the UI on next without it.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37805176/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parser ===&lt;br /&gt;
{{Main article|pui2canvas}}&lt;br /&gt;
The corresponding Nasal/Canvas module to dynamically &amp;quot;translate&amp;quot; legacy PUI/XML dialogs into Canvas dialogs (at runtime), is to be found in {{fgdata file|Nasal/gui/XMLDialog.nas}} &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/fgdata/ci/fe7c87b21a69f88ddb87d89453c48d12b69660e2/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
{{Main article|Howto:Creating a Canvas GUI Widget}}&lt;br /&gt;
&lt;br /&gt;
It’s split between Simgear (see classes with widget / layout in the name) and in FGData. (Eg widgets/Button.nas). To be able to use the existing dialog XML files un-modified (which is a design goal), James is extending the widget types with many additional ones (eg PUI has slider, dial, combo-box, checkbox, all of which need to be created, see [[Canvas widget matrix]].&lt;br /&gt;
&lt;br /&gt;
Thomas’s canvas widgets have a very good separation of API + state from appearance, so all styling is in its own file, and James is being very strict about maintaining this separation, so we also retain the re-styling feature of the PUI UI, which many people also rely on. This does make the process of adding new widgets more complex, however.&lt;br /&gt;
&lt;br /&gt;
{{See also|Canvas widgets}}&lt;br /&gt;
&lt;br /&gt;
=== Layouting ===&lt;br /&gt;
The other thing is to preserve all the layouting: James has added a grid layout to Simgear, since that is supported by the existing PUI code (even though the layouts are not actually part of PUI itself). The problem is getting the sizing / hinting of all the widgets to match the PUI values, so that dialogs look approximately the same under the new UI as they did with PUI; again this a design goal so that all existing dialogs in aircraft and add-ons, which we can’t update, continue to work and be usable. Debugging that is also proving quite tricky, since there’s all kinds of hard-coded assumptions built into PUI widgets about pixels, font-sizes etc which are not true in the new system.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37701792/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
In FlightGear, PUI dialogs are standard [[PropertyList XML File]]s that are stored in $FG_ROOT/gui/dialogs, they can contain the widgets mentioned in {{readme file|gui}}, using a simple layout engine discussed in {{readme file|layout}}, and bindings using a combination of so called fgcommands operating on properties (see {{readme file|commands}}) and custom [[Nasal]] (FlightGear scripting) code. &lt;br /&gt;
&lt;br /&gt;
In addition, each PUI/XML dialog may contain Nasal script sections that are executed when opening/closing the dialog, a feature which is commonly used for procedurally creating/updating widgets using the [[Nasal_library#cmdarg.28.29|cmdarg() API]], which allows the dialog tree to be traversed and manipulated prior to the dialog being rendered.&lt;br /&gt;
Widgets can be conditionally hidden/shown using a wrapper for [[Conditions|SGCondition]] in [[Nasal_library/props|props.nas]] &lt;br /&gt;
The &amp;lt;code&amp;gt;canvas&amp;lt;/code&amp;gt; widget also supports its own embedded Nasal code section to execute arbitrary widget specific Nasal code upon opening/closing the dialog/widget.&lt;br /&gt;
&lt;br /&gt;
PUI/XML dialogs can be loaded, dynamically created, updated and closed using a handful of fgcommands:&lt;br /&gt;
* {{fgcommand|dialog-new}}&lt;br /&gt;
* {{fgcommand|dialog-show}}&lt;br /&gt;
* {{fgcommand|dialog-update}}&lt;br /&gt;
* {{fgcommand|dialog-apply}}&lt;br /&gt;
* {{fgcommand|dialog-close}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PUI related OpenGL code is particularly infamous for causing rendering artifacts for people on AMD/ATI and Intel hardware (especially in combination with certain fonts/styles and [[Effects|effects]]/[[Shaders|shaders]]), see {{Issue|2213}}.&lt;br /&gt;
&lt;br /&gt;
PUI is also known to affect rendering performance quite significantly (see {{search |keywords=anthrax+gui}}), while also preventing FlightGear from using a more recent version of OpenGL&amp;lt;ref&amp;gt;http://sourceforge.net/p/flightgear/mailman/message/34532040/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://forum.flightgear.org/viewtopic.php?f=71&amp;amp;t=24046&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, improving the frame-rate and modernised 3D rendering,  can’t be worked on until the PUI code, 2D panels and Shiva are removed, but doing so is a frustrating slow path&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35623408/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] canvas non svg-elements broken &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 24th, 2017 &lt;br /&gt;
  |added  =  Jan 24th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Besides, while most people seem to agree PUI needs to be replaced, it sounds as if the fallout from doing so would be more painful (cumulatively) than the pain its existence causes.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35623408/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] canvas non svg-elements broken &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 24th, 2017 &lt;br /&gt;
  |added  =  Jan 24th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But given that with many graphics drivers PUI doesn't render correctly when higher shader quality is on, graphics folks are also convinced it needs to be replaced.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35624918/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] canvas non svg-elements broken &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Thorsten Renk &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 25th, 2017 &lt;br /&gt;
  |added  =  Jan 25th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition, [[OpenSceneGraph]] (OSG) can obviously not help optimize any PUI related GL code and PUI widgets are generally considered to be pretty archaic and not easy to extend&amp;lt;ref&amp;gt;http://sourceforge.net/p/flightgear/mailman/message/26832164/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://sourceforge.net/p/flightgear/mailman/message/10587120/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://sourceforge.net/p/flightgear/mailman/message/10587272/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|We use the GUI code from PLIB, which doesn't know anything about OSG. See the SGPuDrawable class in $FG_SRC/Viewer/renderer.cxx for the implementation. The one catch is that OSG has a strong notion of separation between the update of a &amp;quot;scene&amp;quot; and its rendering, and that might not play well with arbitrary existing OpenGL code. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As of late 2015, there is heavy activity towards providing alternatives to a PUI-based UI:&lt;br /&gt;
* [[Integrated Web GUI]] (external, browser-based - fully asynchronous)&lt;br /&gt;
* [[Howto:Processing legacy PUI dialogs using Canvas]] (internal, using the [[Canvas]] system and a simple [[Nasal]] parser to deal with existing PUI/XML dialogs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
Early-Phi-screen shot.PNG|Screenshot showing [[Phi]]&lt;br /&gt;
About-dialog-rendered-by-canvas.png|Screenshot showing a dialog rendered by the [[Howto:Processing legacy PUI dialogs using Canvas|pui2canvas parser]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
{{See also|QtQuick use in FlightGear}}&lt;br /&gt;
{{Caution|This is merely kept for future reference, many of the ideas discussed below have become obsolete as of 09/2022, if in doubt, please get in touch via devel-list.}}&amp;lt;small&amp;gt;&lt;br /&gt;
=== 2021 ===&lt;br /&gt;
In early 2021, James did a brief evaluation of [https://github.com/ocornut/imgui ImGUI] as a possibility - he's also evaluating it in some projects at his day job. &lt;br /&gt;
&lt;br /&gt;
The API is interesting if you’re starting from scratch and only exclusively in C++, but it’s not a great fit for how we define GUIs in FG (via [[XML]]/[[Nasal]]): there is no back door that he could find, to access the persistent state of the GUI, or build it up in a data-driven way. So making a mapping to keep our existing GUI XML working (and updating correctly) becomes a bit of a chore.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37295586/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pretty much all of the FlightGear GUI is defined in XML space, except for a few oddments. Let’s say 95% at this point.&lt;br /&gt;
&lt;br /&gt;
Additionally, even if we were to change that for the core sim (and James' current plan is to keep the XML syntax and just extend it), the installed base of '''aircraft''' ship their own XML dialogs (eg., replacing the autopilot dialog with a custom one, or just adding their own aircraft-specific helper controls for doors / lights / cargo / whatever). So even if we found the most sublimely beautiful, intuitive, compact GUI description language in the world, we have to keep the XML syntax working as-is, for the foreseeable future.&lt;br /&gt;
&lt;br /&gt;
Given this, James' intention is to replace the output side [[PUI]] but keep the front-end side (XML / properties / bindings) unchanged, and therefore backwards compatible, and simply add some new types / options / widget types going forward. This will mean we still have to deal with the slightly cumbersome XML+Nasal syntax, but, well, it’s not *that* cumbersome. &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37296280/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In mid 2021, James reported that he is working on some ‘PUICompat’ classes which hold/own/represent the GUI state in C++, but which can be used with [[Nasal/CppBind|Nasal CppBind]]. And of course we could indeed expose those later on. &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37297727/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In July 2021, James suggested not to worry about the existing GUI code, it’s going in the bin.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37325905/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For the time being, the in-sim GUi can’t do Unicode yet, but James is working on it, hopefully available soon.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37328200/&amp;lt;/ref&amp;gt;&lt;br /&gt;
Also, the in-sim menubar will change with the new GUI, *and* we use a native menubar on macOS. Until James replaces the PUI fonts we can’t use Unicode symbols. So, will have to come back to it once the new GUI is merged.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37327237/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2020 ===&lt;br /&gt;
As of 03/2020, the PLIB replacement was reported to be in the backlog &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36951255/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt;Re: [Flightgear-devel] C++ and/or OSG question &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Scott Giese &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Mar 18th, 2020 &lt;br /&gt;
  |added  =  Mar 18th, 2020 &lt;br /&gt;
  |script_version = 0.50 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With PLIB replacement work likely being re-scheduled for [[Post FlightGear 2020.2 LTS changes]] &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36985375/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt;Re: [Flightgear-devel] Working Group Proposal - Boost and PLIB replacement - Delegation and Teamwork &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  April 18th, 2020 &lt;br /&gt;
  |added  =  April 18th, 2020 &lt;br /&gt;
  |script_version = 1.10 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In 08/2020, James stated that he was still working (exceptionally slowly!) on replacing PUI (as part of removing legacy OpenGL code (PUI, HUD, 2d panels, porting Canvas away form ShivaVG), so we can switch to Vulkan/VSG at some point (ideally at some point before Apple turn off OpenGL support…)), and that he doesn't think /any/ of us *want* to be working on these features particularly, but projects like these need to be done before anyone can have fun with VSG or Vulkan (personally James would be very enthusiastic about working on VSG support (being on macOS, I also have the most to lose / gain from it)). Sometimes that’s just how it goes. Equally they will all benefit the project ultimately, but the payoff both for the individual and the project is very drawn out. &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37077158/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 10/2020, the estimation is that PUI should be going away really ‘soon’, the replacement code is already in next / 2020.2. (There’s no plan to actually /use/ the new UI code in 2020.2, but if the bugs in it prove simple, we could actually turn it for specific dialog: it seems very unlikely this makes sense for a stable release however)&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37123818/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fixed-function removal, is actively in hand (Gaetan is working on the 2D panel part, and James is going to focus on PUI in the rest of 2020). James hopes that means next year he can focus on Vulkan, or at least, using OSG as if /were/ VSG, so the migration in a year or two when VSG is stable, is not so painful.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37129098/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PUI UI and replacement can co-exist in the same build (they already do, effectively.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37131297/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 11/2020, James suggested not to worry about details such as PUI styling/theming etc: we’re not making such changes for the LTS, and PUI should be gone before the next release.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37142225/&amp;lt;/ref&amp;gt; Also, he recommended (to everyone) to stop touching GUI stuff for a few weeks, as he's about to turn it all on its head.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37142356/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2019 ===&lt;br /&gt;
The new GUI has been incubating for a few years, but there's apparently been a lot of progress as of 10/2019.&lt;br /&gt;
&lt;br /&gt;
It is likely the new GUI will be a user opt-in feature - at least initially. The sunset of the PLIB library _could_ happen relatively soon, but &lt;br /&gt;
people will need to see the new GUI and react to it before we could commit to PLIB removal &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36784489/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt;Re: [Flightgear-devel] in Flightgear/Simgear C++ Code: What needs Doing? What are YOU Doing? What would you do if you had the time? &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Scott Giese &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 14th, 2019&lt;br /&gt;
  |added  =  Oct 14th, 2019 &lt;br /&gt;
  |script_version = 0.50 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In 02/2019, James stated that the new UI is coming quite soon. &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36589420/&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] Lagging &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Feb 17th, 2019 &lt;br /&gt;
  |added  =  Feb 17th, 2019&lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2018 ===&lt;br /&gt;
{{See also|QtQuick use in FlightGear}}&lt;br /&gt;
&lt;br /&gt;
According to James, we have to accept that changes like testing or making [[PUI]] a modular thing or moving the JS code tend to have an immediate pain for some people (because strange stuff gets broken, and takes some time to get fixed), whereas the payoff in terms of improved joystick handling or replacing the UI or testing of all subsystems will take some months or years to be felt.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36323240/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
James said he was in the middle of porting the launcher’s final tab (location) to the new UI scheme, once that’s done he will start sketching out the ‘in sim’ settings UI using the same pieces. He’ll send a request for contributions around about that in the next three-four weeks, once he has enough templates &amp;amp; examples that there is a clear pattern to follow.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/2d10f16c-ddc8-07f3-07e7-eca2a0a0d55f%40zaretto.com/#msg36293586&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
James announced that the launcher is now feature complete with the QtQuick UI, he’ll keep making bug-fixes of course as people report them, but my todo list for the core features is now done&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36355833/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 2017 ===&lt;br /&gt;
&lt;br /&gt;
In 10/2017, James said he was getting really close to having the PUI replacement UI suitable for beta-testing.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36067646/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] PLIB features in plib svn but not in any&lt;br /&gt;
 release &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 7th, 2017 &lt;br /&gt;
  |added  =  Oct 7th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Originally, James was hoping to land the PUI replacement GUI in the last dev cycle in 2017 (at least as a proof-of-concept, probably not as the default UI), so wouldn’t expend lots of effort on things like collapsible sections which might be a lot of work with the current PUI/Canvas approaches, but are trivial with the new [[QtQuick use in FlightGear|QtQuick based UI scheme]].&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36059822/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] Canvas MapLayer for OpenStreetMap, OpenAIP,&lt;br /&gt;
 VFR Sectionals &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 1st, 2017 &lt;br /&gt;
  |added  =  Oct 1st, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once the basic new UI is in place we can experiment with different re-arrangements easily, without being limited by PUI. (James expects PUI to live on as the default / alternate UI while this happens)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36061229/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] FGFS macOS Menubar &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 2nd, 2017 &lt;br /&gt;
  |added  =  Oct 2nd, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technically, this entails replacing dialog.cxx with some code which builds up some special ‘PUI-Emulation’ QtQuick controls, so that existing dialogs (especially from Aircraft) continue to work. This mode will look somewhat ugly but hopefully no more ugly than PUI! And it helps that the set of widgets we have in PUI is limited, and the ‘tricky’ widgets (map, scrolling list, etc) are in the dialogs will will replace with new ones first.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36068767/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] PLIB features in plib svn but not in any&lt;br /&gt;
 release &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; James Turner &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 8th, 2017 &lt;br /&gt;
  |added  =  Oct 8th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This PUI emulation isn't going to use any code from PLIB&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36985303/&amp;lt;/ref&amp;gt;, so what will remain from it in FG afterwards will be the FNT and JS components (reworked).&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36068817/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] PLIB features in plib svn but not in any&lt;br /&gt;
 release &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Florent Rougon &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 8th, 2017 &lt;br /&gt;
  |added  =  Oct 8th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2016 ===&lt;br /&gt;
We need to explore if Qt Quick or widgets is the better way to go, with a preference towards Qt Quick, since it will allow things closer to current PUI (semi-transparent widgets on top of the 3D content). It still allows creating separate windows too (Erik’s use case), but means we get consistent, custom theming on all platforms, since standard desktop look is not so nice for a flight-sim.&lt;br /&gt;
&lt;br /&gt;
James intention is to make a QML-hosting OSG-drawable, and add this as a concept in Qt-enabled builds, then port some PUI dialogs to it, and see how easy / painful the process is. Hell create some QObjects which expose commands and the property tree and Nasal.&lt;br /&gt;
&lt;br /&gt;
This has the advantage of not touching the OSG window at all, QtQuick simply provides some additional OpenGL rendering on top, which we pass events to - pretty much exactly the same as what we already do for PUI, and hopefully can co-exist with it. James got this working in a local OSG tree in a standalone demo, but that’s based on osgQt - he wants to see if he can make it work on a normal, non-Qt OSG window inside FlightGear.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/35156051/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The idea is to host an XML dialog (Currently done with PUI) from Qt also. The question is if that can be done keeping ‘source compatibility’ exactly with the current UI XML and Nasal interface. It probably can be, but many of the PUI widgets have really ugly APIs, especially for combo-boxes, drop-down menus and scrolling lists, where it makes sense to map a Nasal class to a Qt ItemModel, which would be more elegant and easy to work with in both Nasal and integrate on the Qt side. But obviously would mean changing the dialog sources.&lt;br /&gt;
&lt;br /&gt;
Of course, aircraft dialogs tend to be simpler, and not use the more complex PUI widgets, precisely for reasons like this, but that’s a limitation it would be best to remove.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/35155721/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
[[Category:PUI| ]]&lt;br /&gt;
[[Category:Rendering roadblocks]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=139261</id>
		<title>Discord</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=139261"/>
		<updated>2024-03-12T15:48:31Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: /* Aircraft-specific */ Update Tonka server invite link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Discord''' is used in the FlightGear community as an alternative to [[Mumble]], [[TeamSpeak]], [[FGCom]] or [[Ventrilo]].&lt;br /&gt;
&lt;br /&gt;
Discord is a free voice and chat software that can be downloaded as an app or used in a browser.&lt;br /&gt;
&lt;br /&gt;
== Invite links ==&lt;br /&gt;
{{note|1=Its advised that you create a permanent account, instead of creating guest accounts as some people create duplicate accounts which clogs up the member logs and makes it more difficult to @mention people.}}&lt;br /&gt;
&lt;br /&gt;
Furthermore many other FlightGear servers exist that you may need an personal invite to join. The easiest way to find them is to go to the FlightGear server and ask or ask in forums.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Communities on Discord ==&lt;br /&gt;
&lt;br /&gt;
=== General, Help and Support, Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear&lt;br /&gt;
| https://discord.gg/rzuV2DR&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear FDM School&lt;br /&gt;
| https://discord.gg/Uyrtsar&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Air Race League&lt;br /&gt;
| https://discord.gg/HCAuU9D&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Virtual Alliance&lt;br /&gt;
| https://discord.gg/VqzTG2N&lt;br /&gt;
|-&lt;br /&gt;
| FG Events&lt;br /&gt;
| https://discord.gg/GY4N6Cu&lt;br /&gt;
|-&lt;br /&gt;
| FG FDM School&lt;br /&gt;
| https://discord.gg/U5KXyMU&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Republic, A friendly community about FlightGear.&lt;br /&gt;
| https://discord.gg/sBJy46Uq7z&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear soaring club&lt;br /&gt;
|https://discord.gg/NvJjmzMfRP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Military Aviation Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Operation Red Flag military FG community (OPRF)&lt;br /&gt;
| https://discord.gg/ptVapkE&lt;br /&gt;
|-&lt;br /&gt;
| Combined Joint Task Force 50 (OPRF event planning/hosting and more)&lt;br /&gt;
| https://discord.gg/2nxjb6y&lt;br /&gt;
|-&lt;br /&gt;
| Warbirds, WWII-era aircraft&lt;br /&gt;
| https://discord.gg/yJaP5Wn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Country Specific Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Australia (Scenery Development &amp;amp; Community)&lt;br /&gt;
| https://discord.gg/JzTEXsZ&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Italia (ITA Mercenaries)&lt;br /&gt;
| https://discord.gg/5RzyXRf&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Germany&lt;br /&gt;
| https://discord.gg/FNnpjCPSze&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Indian Community&lt;br /&gt;
| https://discord.gg/Tu7n5FmG5S&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Asia&lt;br /&gt;
| https://discord.gg/7saCkA2jQj&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Hong Kong&lt;br /&gt;
| https://discord.gg/9QVKcT6skU&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Myanmar&lt;br /&gt;
|https://discord.gg/VbT88KEGrk&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Poland (FlightGear Polska)&lt;br /&gt;
|https://discord.gg/5J7uVYRhZV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Aircraft-specific ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Aircraft !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Aermacchi MB-339&lt;br /&gt;
| https://discord.gg/vNZ5ZPv&lt;br /&gt;
|-&lt;br /&gt;
| Airbus [[Airbus A320 Family|A320]] &amp;amp; A330 Development&lt;br /&gt;
| https://discord.gg/7kzg9Te&lt;br /&gt;
|-&lt;br /&gt;
| Airbus A350 Development&lt;br /&gt;
| https://discord.gg/vK5f2s6&lt;br /&gt;
|-&lt;br /&gt;
| Boeing F/A-18C Hornet&lt;br /&gt;
| https://discord.gg/8GzpdK4j8P&lt;br /&gt;
|-&lt;br /&gt;
| LincolnWorks (747 and A380)&lt;br /&gt;
| https://discord.gg/2DMVpnJ&lt;br /&gt;
|-&lt;br /&gt;
| F-111 Aardvark&lt;br /&gt;
| https://discord.gg/DSrSbmx&lt;br /&gt;
|-&lt;br /&gt;
| [[General Dynamics F-16 Fighting Falcon]]&lt;br /&gt;
| https://discord.gg/8RcYnjA&lt;br /&gt;
|-&lt;br /&gt;
| [[PZL-Koliber-family | PZL Koliber family]]&lt;br /&gt;
| https://discord.gg/beADn2sWM6&lt;br /&gt;
|-&lt;br /&gt;
| Octal450 Hangar Development&lt;br /&gt;
| https://discord.gg/gxAhC3j&lt;br /&gt;
|-&lt;br /&gt;
| [[Mikoyan-Gurevich MiG-21bis]]&lt;br /&gt;
| https://discord.gg/bs8xyz3&lt;br /&gt;
|-&lt;br /&gt;
| [[Mirage 2000]]&lt;br /&gt;
| https://discord.gg/xZ3r2KR&lt;br /&gt;
|-&lt;br /&gt;
| Panavia Tornado&lt;br /&gt;
| https://discord.gg/SYxgzkCrSG&lt;br /&gt;
|-&lt;br /&gt;
| [[Saab 37 Viggen]]&lt;br /&gt;
| https://discord.gg/RJTwS9a&lt;br /&gt;
|-&lt;br /&gt;
| SEPECAT Jaguar&lt;br /&gt;
| https://discord.gg/G5q5XYN&lt;br /&gt;
|-&lt;br /&gt;
| FG-1000 Stealth Fighter&lt;br /&gt;
| https://discord.gg/3MFZauxyPW&lt;br /&gt;
|-&lt;br /&gt;
|Boeing 777&lt;br /&gt;
|https://discord.gg/8McTuYdK&lt;br /&gt;
|-&lt;br /&gt;
|A-10 Warthog&lt;br /&gt;
|https://discord.gg/RmtjmsT5vS&lt;br /&gt;
|-&lt;br /&gt;
|Soviet Aviation for FGFS&lt;br /&gt;
|https://discord.gg/YC2EYGK5Xf&lt;br /&gt;
|-&lt;br /&gt;
|B-1 Lancer&lt;br /&gt;
|https://discord.gg/d2bhwFCnX2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*https://discord.com/ Official website&lt;br /&gt;
&lt;br /&gt;
[[de:Discord]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=$FG_HOME&amp;diff=138990</id>
		<title>$FG HOME</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=$FG_HOME&amp;diff=138990"/>
		<updated>2024-01-21T22:12:28Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Update macOS hidden folder information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Broken image [[File:Fghome.png|400px|right|Screen shot showing structure of [[$FG_HOME]] ]] --&amp;gt;&lt;br /&gt;
[[File:Fghome-3.7.png|400px|right|Screen shot showing typical structure [[$FG_HOME]]]]&lt;br /&gt;
&lt;br /&gt;
The [[Environment variables|environment variable]]&amp;lt;code&amp;gt;'''$FG_HOME'''&amp;lt;/code&amp;gt; is a '''setting''' indicating the main location where user-specific FlightGear data is stored (not application data). &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; is a notable place were FlightGear data is written to. &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; is also where large amounts of data downloaded by FlightGear like [[TerraSync]] scenery or Aircraft data is written to, by default. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; should not be confused with  &amp;lt;code&amp;gt;[[$FG_ROOT]]&amp;lt;/code&amp;gt;, which is generally read-only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; is normally used to refer to the operating system specific location for some settings/folders. Its default value is determined by the &amp;lt;code&amp;gt;fgfs&amp;lt;/code&amp;gt; binary during startup and is a directory that varies with the operating system supported by FG (Windows, OS X and Linux). ''It is [https://sourceforge.net/p/flightgear/mailman/message/34995089/ highly recommended] to rely on the default value (i.e., not setting &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; yourself in any way), unless you Really Know What You Are Doing™.'' &lt;br /&gt;
&lt;br /&gt;
Very advanced users (i.e. power users and developers) who wish to run parallel installs of FlightGear can specify a different &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; for each install as described below. &lt;br /&gt;
&lt;br /&gt;
{{note|The &amp;lt;code&amp;gt;/sim/fg-home&amp;lt;/code&amp;gt; property should be considered read-only, for similar reasons why &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; shouldn't be explicitly set by users.}}&lt;br /&gt;
{{note|FlightGear reads the &amp;lt;code&amp;gt;[[Fgfsrc|fgfsrc]]&amp;lt;/code&amp;gt; config file from &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; if it exists (&amp;lt;tt&amp;gt;fgfsrc&amp;lt;/tt&amp;gt; without any leading dot), in addition to &amp;lt;tt&amp;gt;.fgfsrc&amp;lt;/tt&amp;gt; from &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; (with a leading dot in this case).}}&lt;br /&gt;
&lt;br /&gt;
== Content ==&lt;br /&gt;
In &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; is information stored between sessions.  That information is for example configuration/preferences, properties marked with the &amp;lt;code&amp;gt;user-archive&amp;lt;/code&amp;gt; attribute and aircraft-specific settings (using the data helper class in &amp;lt;code&amp;gt;aircraft.nas&amp;lt;/code&amp;gt;).  &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; is also the location for the SQLite-based [[Navdata cache|navdata cache]].&lt;br /&gt;
&lt;br /&gt;
== Common paths ==&lt;br /&gt;
You can determine the location of your &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; by using the [[property browser]] and checking the value of &amp;lt;code&amp;gt;/sim/fg-home&amp;lt;/code&amp;gt;, but the usual paths are shown below.&lt;br /&gt;
&lt;br /&gt;
You can also use the [[Nasal Console]] to print out &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var path = getprop(&amp;quot;/sim/fg-home&amp;quot;);&lt;br /&gt;
print(&amp;quot;Your $FG_HOME is at: &amp;quot;, path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sim/&amp;lt;/code&amp;gt; property subtree is also the place where you can find other folders, such as &amp;lt;code&amp;gt;fg-root&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fg-scenery&amp;lt;/code&amp;gt; and the current working directory (&amp;lt;code&amp;gt;fg-current&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&amp;lt;code&amp;gt;~/.fgfs/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&amp;lt;code&amp;gt;~/Library/Application Support/FlightGear&amp;lt;/code&amp;gt; (`~/Library` is a hidden folder by default. In versions of macOS newer than 10.12, you can use the shortcut `Cmd + Shift + .` to view hidden folders. For older versions, see [http://www.mikesel.info/show-hidden-files-mac-os-x-10-7-lion/])&lt;br /&gt;
&lt;br /&gt;
As all future FlightGear versions will take their preferences from here, it is a good idea to have their access available easily.&lt;br /&gt;
&lt;br /&gt;
Desktop/Finder/Go/Go to Folder is where you need to start.&lt;br /&gt;
&lt;br /&gt;
When given the option, input:  &amp;lt;code&amp;gt;~/Library/Application Support/FlightGear&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is probably a good idea to have &amp;lt;code&amp;gt;~/Library/Application Support/FlightGear&amp;lt;/code&amp;gt; saved on a Stickies note just in case you forget it.&lt;br /&gt;
&lt;br /&gt;
If you want/need to refer to any of these files frequently, you could make an alias of a file, or the whole folder, and place it somewhere easier to access. TerraSync data is stored in &amp;lt;code&amp;gt;$FG_HOME/TerraSync&amp;lt;/code&amp;gt; in the default configuration, see [[TerraSync]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
==== FlightGear 2020.3 and later ====&lt;br /&gt;
&amp;lt;code&amp;gt;%userprofile%\FlightGear&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;%userprofile%&amp;lt;/code&amp;gt; is the directory that contains the [https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/bb776892(v=vs.85) Windows user profile] ([http://web.archive.org/web/20210320110758/https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/bb776892%28v=vs.85%29 perm])&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;Ways to find the&amp;lt;code&amp;gt;%userprofile%&amp;lt;/code&amp;gt; directory: 1). Press &amp;lt;code&amp;gt;Windows key+R&amp;lt;/code&amp;gt;or bring up the RUN box. Type &amp;lt;code&amp;gt;%userprofile%&amp;lt;/code&amp;gt; to open. 2). In command prompt, type &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;%userprofile%&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;%userprofile%&amp;lt;/code&amp;gt; is&amp;lt;code&amp;gt;%homedrive%\Users\''User name''&amp;lt;/code&amp;gt; by default. Usually on most peoples systems: &amp;lt;Code&amp;gt;%homedrive%&amp;lt;/Code&amp;gt; is C:\. &lt;br /&gt;
&lt;br /&gt;
For example if your user profile was called &amp;lt;code&amp;gt;MyUserProfile&amp;lt;/code&amp;gt;, it would most often be located under &amp;lt;code&amp;gt;C:\Users\MyUserProfile&amp;lt;/code&amp;gt; . Then the path to &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;C:\Users\MyUserProfile\FlightGear.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 2020.3.x the [[FlightGear Qt launcher|qt-launcher]] will notify users who have data in the old location under &amp;lt;code&amp;gt;%userprofile%\Documents\FlightGear&amp;lt;/code&amp;gt;, and prompt users to move files to the new location under &amp;lt;code&amp;gt;%userprofile%\FlightGear&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== FlightGear 3.0 and later ====&lt;br /&gt;
&amp;lt;code&amp;gt;%userprofile%\Documents\FlightGear&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;%userprofile%&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;%homedrive%\Users\''User name''&amp;lt;/code&amp;gt; by default, and &amp;lt;Code&amp;gt;%homedrive%&amp;lt;/code&amp;gt; is usually C:\.&lt;br /&gt;
&lt;br /&gt;
==== Before FlightGear 3.0 ====&lt;br /&gt;
&amp;lt;code&amp;gt;%APPDATA%\flightgear.org\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;%APPDATA%&amp;lt;/code&amp;gt; is another environment variable that depends on your Windows version. On XP and older, it can be found under &amp;lt;code&amp;gt;C:\Documents and Settings\''User name''\Application Data&amp;lt;/code&amp;gt;. On Vista and later it can be found under &amp;lt;code&amp;gt;C:\Users\''User name''\AppData\Roaming&amp;lt;/code&amp;gt;. The folder is hidden by default. See [http://windows.microsoft.com/en-US/windows-vista/show-hidden-files these instructions] to show the folder.&lt;br /&gt;
&lt;br /&gt;
== Use in troubleshooting ==&lt;br /&gt;
As one user once said, &amp;quot;When in doubt delete &amp;lt;code&amp;gt;$FG_HOME&amp;lt;/code&amp;gt;&amp;quot;. Many problems, including corrupted databases, broken [[TerraSync]] and many others can be fixed by deleting &amp;lt;code&amp;gt;fgfs_0.txt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgfs.txt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;terrasync_cache&amp;lt;/code&amp;gt;, and the [[Navdata cache|navdata cache]].&lt;br /&gt;
&lt;br /&gt;
When you encounter problems, try deleting the files, but '''always''' keep the &amp;lt;code&amp;gt;[[Commonly used debugging tools#fgfs.log|fgfs.log]]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fgfs_0.log&amp;lt;/code&amp;gt; log files to help in troubleshooting.&lt;br /&gt;
&lt;br /&gt;
== Power Users ==&lt;br /&gt;
&lt;br /&gt;
=== Parallel installs of FlightGear ===&lt;br /&gt;
Note you can also override FG_HOME in the environment, to have totally distinct installs - this would be my recommend approach to running multiple versions in parallel.&lt;br /&gt;
(The installers will always replace the stable / dev version as other commenters pointed out, so you can't use those so easily, you need to copy files around - I'm nota Windows expert so I don't know if there something that could be changed or improved here)&lt;br /&gt;
If you start multiple instances (the same version or different) of FGFS using the same value of FG_HOME (whether that be the default or a custom one), we use a lock file to ensure only one (the first) has write access. The rest will go into read-only mode, and as you can maybe guess, treat FG_HOME as read-only.&lt;br /&gt;
Sharing of aircraft / scenery is entirely about which paths are configured, BTW. However, one final caveat is that having multiple instances both running TerraSync, using the same terrasync dir, would likely act a bit funny. It ought to actually work, but it might download some things twice, and it's not a tested or supported configuration for the moment.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=304170#p304170 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Is it possible to install multiple instanes of FG in Win &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; zakalawe &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 25th, 2017 &lt;br /&gt;
  |added  =  Jan 25th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the same [[TerraSync|TerraSyn]]&amp;lt;nowiki/&amp;gt;c directory can save a lot of downloading and disk space. You can use the --terrasync-dir=path [[Command line options|command line]] option. For example --terrasync-dir=C:\Path\to\my\separate\terrasync\folder\TerraSync. It's possible to add this option in the &amp;lt;code&amp;gt;Settings &amp;gt; Additional Settings&amp;lt;/code&amp;gt; section of the [[qt-launcher]].&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[FlightGear configuration via XML]]&lt;br /&gt;
* [[$FG_ROOT]]&lt;br /&gt;
* [[Property browser]]&lt;br /&gt;
* [[Properties persistent between sessions]]&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Special directories|HOME]]&lt;br /&gt;
[[Category:Environment variables]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=138688</id>
		<title>Discord</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=138688"/>
		<updated>2023-11-18T15:38:08Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Add B-1 Development server and change name of A-10 server&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Discord''' is used in the FlightGear community as an alternative to [[Mumble]], [[TeamSpeak]], [[FGCom]] or [[Ventrilo]].&lt;br /&gt;
&lt;br /&gt;
Discord is a free voice and chat software that can be downloaded as an app or used in a browser.&lt;br /&gt;
&lt;br /&gt;
== Invite links ==&lt;br /&gt;
{{note|1=Its advised that you create a permanent account, instead of creating guest accounts as some people create duplicate accounts which clogs up the member logs and makes it more difficult to @mention people.}}&lt;br /&gt;
&lt;br /&gt;
Furthermore many other FlightGear servers exist that you may need an personal invite to join. The easiest way to find them is to go to the FlightGear server and ask or ask in forums.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Communities on Discord ==&lt;br /&gt;
&lt;br /&gt;
=== General, Help and Support, Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear&lt;br /&gt;
| https://discord.gg/rzuV2DR&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear FDM School&lt;br /&gt;
| https://discord.gg/Uyrtsar&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Air Race League&lt;br /&gt;
| https://discord.gg/HCAuU9D&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Virtual Alliance&lt;br /&gt;
| https://discord.gg/VqzTG2N&lt;br /&gt;
|-&lt;br /&gt;
| FG Events&lt;br /&gt;
| https://discord.gg/GY4N6Cu&lt;br /&gt;
|-&lt;br /&gt;
| FG FDM School&lt;br /&gt;
| https://discord.gg/U5KXyMU&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Republic, A friendly community about FlightGear.&lt;br /&gt;
| https://discord.gg/sBJy46Uq7z&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear soaring club&lt;br /&gt;
|https://discord.gg/NvJjmzMfRP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Military Aviation Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Operation Red Flag military FG community (OPRF)&lt;br /&gt;
| https://discord.gg/ptVapkE&lt;br /&gt;
|-&lt;br /&gt;
| Combined Joint Task Force 50 (OPRF event planning/hosting and more)&lt;br /&gt;
| https://discord.gg/2nxjb6y&lt;br /&gt;
|-&lt;br /&gt;
| Warbirds, WWII-era aircraft&lt;br /&gt;
| https://discord.gg/yJaP5Wn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Country Specific Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Australia (Scenery Development &amp;amp; Community)&lt;br /&gt;
| https://discord.gg/JzTEXsZ&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Italia (ITA Mercenaries)&lt;br /&gt;
| https://discord.gg/5RzyXRf&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Germany&lt;br /&gt;
| https://discord.gg/FNnpjCPSze&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Indian Community&lt;br /&gt;
| https://discord.gg/Tu7n5FmG5S&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Asia&lt;br /&gt;
| https://discord.gg/7saCkA2jQj&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Hong Kong&lt;br /&gt;
| https://discord.gg/9QVKcT6skU&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Myanmar&lt;br /&gt;
|https://discord.gg/VbT88KEGrk&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Poland (FlightGear Polska)&lt;br /&gt;
|https://discord.gg/5J7uVYRhZV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Aircraft-specific ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Aircraft !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Aermacchi MB-339&lt;br /&gt;
| https://discord.gg/vNZ5ZPv&lt;br /&gt;
|-&lt;br /&gt;
| Airbus [[Airbus A320 Family|A320]] &amp;amp; A330 Development&lt;br /&gt;
| https://discord.gg/7kzg9Te&lt;br /&gt;
|-&lt;br /&gt;
| Airbus A350 Development&lt;br /&gt;
| https://discord.gg/vK5f2s6&lt;br /&gt;
|-&lt;br /&gt;
| Boeing F/A-18C Hornet&lt;br /&gt;
| https://discord.gg/8GzpdK4j8P&lt;br /&gt;
|-&lt;br /&gt;
| LincolnWorks (747 and A380)&lt;br /&gt;
| https://discord.gg/2DMVpnJ&lt;br /&gt;
|-&lt;br /&gt;
| F-111 Aardvark&lt;br /&gt;
| https://discord.gg/DSrSbmx&lt;br /&gt;
|-&lt;br /&gt;
| [[General Dynamics F-16 Fighting Falcon]]&lt;br /&gt;
| https://discord.gg/8RcYnjA&lt;br /&gt;
|-&lt;br /&gt;
| [[PZL-Koliber-family | PZL Koliber family]]&lt;br /&gt;
| https://discord.gg/beADn2sWM6&lt;br /&gt;
|-&lt;br /&gt;
| MD-11, MD-80, ITAF by Octal&lt;br /&gt;
| https://discord.gg/gxAhC3j&lt;br /&gt;
|-&lt;br /&gt;
| [[Mikoyan-Gurevich MiG-21bis]]&lt;br /&gt;
| https://discord.gg/bs8xyz3&lt;br /&gt;
|-&lt;br /&gt;
| [[Mirage 2000]]&lt;br /&gt;
| https://discord.gg/xZ3r2KR&lt;br /&gt;
|-&lt;br /&gt;
| Panavia Tornado&lt;br /&gt;
| https://discord.gg/26rvkr2&lt;br /&gt;
|-&lt;br /&gt;
| [[Saab 37 Viggen]]&lt;br /&gt;
| https://discord.gg/RJTwS9a&lt;br /&gt;
|-&lt;br /&gt;
| SEPECAT Jaguar&lt;br /&gt;
| https://discord.gg/G5q5XYN&lt;br /&gt;
|-&lt;br /&gt;
| FG-1000 Stealth Fighter&lt;br /&gt;
| https://discord.gg/3MFZauxyPW&lt;br /&gt;
|-&lt;br /&gt;
|Boeing 777&lt;br /&gt;
|https://discord.gg/8McTuYdK&lt;br /&gt;
|-&lt;br /&gt;
|A-10 Warthog&lt;br /&gt;
|https://discord.gg/RmtjmsT5vS&lt;br /&gt;
|-&lt;br /&gt;
|Soviet Aviation for FGFS&lt;br /&gt;
|https://discord.gg/YC2EYGK5Xf&lt;br /&gt;
|-&lt;br /&gt;
|B-1 Lancer&lt;br /&gt;
|https://discord.gg/d2bhwFCnX2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*https://discord.com/ Official website&lt;br /&gt;
&lt;br /&gt;
[[de:Discord]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Carrier_over_MP&amp;diff=138439</id>
		<title>Carrier over MP</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Carrier_over_MP&amp;diff=138439"/>
		<updated>2023-10-01T14:03:54Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Change titles to make it clearer that the &amp;quot;older versions&amp;quot; actually includes LTS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Carrier over MP''' is available in [[FlightGear]] 2.0.0 and later and makes it possible to command the [[Howto: Carrier|Nimitz]] and other [[aircraft carrier]]s. Other pilots on the [[Howto: Multiplayer|multiplayer network]] can ''elect'' to be able to see and land on the carrier controlled by the MP carrier player.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
===FlightGear 2.0.0 and later===&lt;br /&gt;
NB: It is not enough that you can see carriers in AI mode. You have to have MPCarrier in your aircraft path.&lt;br /&gt;
&lt;br /&gt;
This can easily be accomplished by using the [[FlightGear_Qt_launcher]] directly accessing [[FGAddon]] and downloading the MP Carriers.&lt;br /&gt;
&lt;br /&gt;
Alternatively: Download from the FGAddon archive in [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Aircraft/MPCarrier/].&lt;br /&gt;
&lt;br /&gt;
=== FlightGear 1.9.1 ===&lt;br /&gt;
&lt;br /&gt;
The download the [http://www.gidenstam.org/FlightGear/misc/Carrier_over_MP/MPCarrier_fgfs1.9.1.tar.gz MPCarrier aircraft archive] available here: [http://www.gidenstam.org/FlightGear/misc/Carrier_over_MP/ http://www.gidenstam.org/FlightGear/misc/Carrier_over_MP/]&lt;br /&gt;
&lt;br /&gt;
# Unpack the archive into &amp;lt;tt&amp;gt;data/Aircraft&amp;lt;/tt&amp;gt;. For windows users, you can use 7zip and apply it twice (one to unzip, one to untar), until you've got the MPCarrier folder. Once MPCarrier in your Aircraft directory, you will find a new &amp;quot;aircraft&amp;quot; called 'nimitz' in your aircraft list.&lt;br /&gt;
# Make sure that the AI scenario nimitz_demo is active.&lt;br /&gt;
# To see a mp carrier, set the property: /sim/mp-carriers/nimitz-callsign (see below &amp;quot;important&amp;quot;)&lt;br /&gt;
# Optional: To get a MPCarrier dialog entry in the Network menu. Apply the changes in mpcarrier_menubar.diff to FG_ROOT/gui/menubar.xml. The diff is for FlightGear/CVS. However, the structure of menubar.xml is so simple that I expect almost anyone could figure out how to add the menu entry :)&lt;br /&gt;
&lt;br /&gt;
== Commander/Captain of the Carrier ==&lt;br /&gt;
=== Starting FlightGear ===&lt;br /&gt;
Command the Nimitz:&lt;br /&gt;
 % fgfs --aircraft=nimitz&lt;br /&gt;
Command the Eisenhower:&lt;br /&gt;
 % fgfs --aircraft=eisenhower&lt;br /&gt;
&lt;br /&gt;
(same for Clemenceau and Vinson).&lt;br /&gt;
&lt;br /&gt;
Command the Nimitz for MP operation:&lt;br /&gt;
 % fgfs --aircraft=nimitz --callsign='Nimitz7' --multiplay=...&lt;br /&gt;
&lt;br /&gt;
=== Commanding the Carrier ===&lt;br /&gt;
Here are some principal tips:&lt;br /&gt;
* First see the aircraft help. Press '?'.&lt;br /&gt;
* To change orientation and position of the carrier (apart from using the rudder and speed, but that take a long time to cross ocean :) ), you can use the properties. You need to change the properties of the ai-carrier you are driving, e.g. for the Nimitz,find the /ai/models/carrier[i] that got Nimitz as name. Use the [[Property_browser]] to do so:&lt;br /&gt;
** In /ai/models/carrier[i]/position/ you can change lat, and lon to put it where you want (note that specifying lon/lat on the command line or in menu &amp;quot;Location-&amp;gt;Position Aircaft in Air&amp;quot; will not have an effect).&lt;br /&gt;
** In /ai/models/carrier[i]/orientation you can make it face wind. Facing wind is important (with real weather fetch) to make the FLOLS green on approach.&lt;br /&gt;
* Set speed using PgUp/PgDown in manual control.&lt;br /&gt;
* To have a better sync between the pilots using the Nimitz, consider keeping a speed of 0 so that there's no drift between pilots.&lt;br /&gt;
&lt;br /&gt;
== Pilot Using the Carrier ==&lt;br /&gt;
&lt;br /&gt;
=== On next ===&lt;br /&gt;
&lt;br /&gt;
[as of 2021-10-25]&lt;br /&gt;
&lt;br /&gt;
Things will work without any special configuration.&lt;br /&gt;
&lt;br /&gt;
Flightgear will automatically enable the appropriate matching AI scenario when an MP carrier appears.&lt;br /&gt;
&lt;br /&gt;
==== Latching carriers ====&lt;br /&gt;
&lt;br /&gt;
By default Flightgear uses Nasal to periodically change the AI carrier's velocity to make it approximately follow the MP carrier.&lt;br /&gt;
&lt;br /&gt;
One can instead force  the AI carrier to exactly follow the position and orientation of the MP carrier (done in C++ in each frame), by checking '''Always latch MP and AI carrier''' in the '''Multiplayer Settings''' dialogue (menu '''Multiplayer/Multiplayer Settings''').&lt;br /&gt;
&lt;br /&gt;
This can work much better but requires that MP motion is smooth, e.g. by using [[Real_Time_manual]] or [[SimpleTime]] - see menu '''File/Time Mode'''.&lt;br /&gt;
&lt;br /&gt;
For more information, see: {{flightgear file|docs-mini/README-mp-carriers.md}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On 2020.3 and earlier ===&lt;br /&gt;
&lt;br /&gt;
NB: You need to know which callsign and which carrier model to use. &lt;br /&gt;
&lt;br /&gt;
Make sure to enable the AI scenario for the corresponding carrier (e.g. nimitz_demo if the model is the Nimitz).&lt;br /&gt;
&lt;br /&gt;
==== From the Launcher====&lt;br /&gt;
The easiest way to configure your FlightGear session for an MP carrier is to use the Launcher like in the picture (the model is the Vinson and the callsign is OPFOR21 in the example). [[File:MP carrier settings in launcher.png|thumb|In the &amp;quot;Settings&amp;quot; tab under &amp;quot;Additional Settings&amp;quot; provide the necessary command-line arguments]] &lt;br /&gt;
&lt;br /&gt;
==== From the Command Line====&lt;br /&gt;
It is also possible to select MP carrier players from the command line using the following --prop: argument (change &amp;quot;nimitz&amp;quot; in 2 places to the carrier actually in use):&lt;br /&gt;
 % fgfs --ai-scenario=nimitz_demo --prop:/sim/mp-carriers/nimitz-callsign=&amp;lt;callsign of the player commanding mp-nimitz&amp;gt;  --multiplay=.....&lt;br /&gt;
&lt;br /&gt;
For the Vinson it could e.g. be:&lt;br /&gt;
 % fgfs --ai-scenario=vinson_demo --prop:/sim/mp-carriers/vinson-callsign=MP-029X  --multiplay=.....&lt;br /&gt;
&lt;br /&gt;
There is no need that the callsign reflects the TACAN setting - it is just a possible pattern do make it easier for others to use. There is no need to specify the --multiplay option either, if you are using the FlightGear launcher.&lt;br /&gt;
&lt;br /&gt;
==== Within the Session ====&lt;br /&gt;
An alternative way to enable MP control of a carrier when on the multiplayer network use the MP carrier dialog available from Multiplayer-&amp;gt;&amp;quot;MPCarrier selection&amp;quot; to select which MP carrier players you wish to see. A pre-requisite is that you already have the parameters set-up as per above.&lt;br /&gt;
&lt;br /&gt;
[[File:MPCarrier-dialog.png|thumb|center|The MPCarrier selection dialog. The user 'Nimitz' is currently selected as the controller of the carrier Nimitz.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Important ====&lt;br /&gt;
&lt;br /&gt;
As a pilot you have to run by the books:&lt;br /&gt;
* Have the MPCarrier downloaded (The fact that you see the carrier when running AI scenarios is not enough proof that you actually have the MPCarrier. Try to find it in the aircraft dialog. If it is there, then you are good).&lt;br /&gt;
* You need to set the --prop:/... correct (note the carrier model name in the string before &amp;quot;-callsign&amp;quot;). This ensures that MPCarriers won't interfer with the normal AI scenarios.&lt;br /&gt;
* You need to have the corresponding AI scenario activated.&lt;br /&gt;
* In the AI scenarios you can find the carrier from 30+ nm with TACAN. In MP you might find it only from ca. 15+nm (as of 2020.1 version).&lt;br /&gt;
&lt;br /&gt;
[[Category:Multiplayer]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Hardware_recommendations&amp;diff=134850</id>
		<title>Hardware recommendations</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Hardware_recommendations&amp;diff=134850"/>
		<updated>2022-03-26T23:07:59Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: /* Recommendations for FlightGear in 2021 (2020.3 LTS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Disclaimer|id=final-fixed-function-release}}&lt;br /&gt;
&lt;br /&gt;
These '''hardware recommendations for [[FlightGear]]''' are based on community feedback, be sure to consult other sources before making serious decisions regarding computer hardware.&lt;br /&gt;
&lt;br /&gt;
The performance of FlightGear depends on three main components in your computer: the CPU (processor), which makes all the computations; the graphics card, which renders the visual aspect of FlightGear, and RAM (also known as memory) which generally allows FlightGear to have more information running (for the lack of a more technical phrase).&lt;br /&gt;
&lt;br /&gt;
You may also want to check out the following article on building your own FlightGear box based on decommissioned and refurbished server at [[Howto: Build a cheap FlightGear box]], and also learn about how the FlightGear project handles old hardware support at [[FlightGear and old Hardware]] - see [[Minimal Startup Profile]] to start with a bare minumum and turn up settings one by one.&lt;br /&gt;
&lt;br /&gt;
Also see: [[FlightGear Benchmark]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Recommendations for FlightGear in 2022 (2020.3 LTS) ==&lt;br /&gt;
{{Stub|section=yes}}&lt;br /&gt;
FlightGear can scale the quality to run on a huge range of hardware at different quality settings. &lt;br /&gt;
&lt;br /&gt;
''Note for old hardware'': Towards the less powerful end of the range, for FlightGear to run smoothly, it requires a video card with OpenGL drivers 2.0 or higher. You need to spend some time learning settings, and tweaking for bottlenecks, to run FlightGear on very old systems. See [[Minimal Startup Profile]] to start with a bare minimum and then turn settings up.&lt;br /&gt;
&lt;br /&gt;
Quick notes:&lt;br /&gt;
&lt;br /&gt;
* The LTS you should be running is the current 2020.3.12+ LTS. (February 2022).&lt;br /&gt;
&lt;br /&gt;
* People buying new hardware with FlightGear in mind are encouraged to wait until LTS ''after'' the current 2020.3 LTS, ''if possible'' - that is, if they imagine they will be using the hardware for a long while so it makes a difference.&lt;br /&gt;
*# Future performance requirements will not be known until the LTS after the current LTS. Some of the big projects underway on the FlightGear next branch need to be finished before requirements can be determined. These projects include moving to: the new [[Compositor]] rendering framework,  the [[World Scenery 3.0 roadmap|next generation scenery]] rendering and data format, a higher version of OpenGL, in-sim UI replacement, and so on.&lt;br /&gt;
*# Hardware prices will be expected to drop once the situation with the pandemic eases. Hardware is getting steadily faster. Hardware with the same performance is getting cheaper. You should never buy hardware for a ''future'' version of FlightGear or any other program. It's always better to wait until the application releases (and until the hardware purchase is justifiable as you have time to start using it properly).&lt;br /&gt;
*# There is a 1st rollout of buildings, roads, and objects for the world based on OSM data. Please don't buy hardware based on this rollout. The performance in future rollouts will improve drastically as objects are changed to a newer format.  See [[OSM2City 1st Worldbuild]] for details.&lt;br /&gt;
* For current hardware requirements (with scenery layers containing the new OSM2City world-build disabled): FlightGear 2020.3 LTS is faster than the 2018.3 LTS. The 2018.3 LTS hardware profile below is valid - but only one profile and hardware build is available in the 2018.3 LTS section as of writing this.&lt;br /&gt;
* The DDS texture cache should be turned on: &lt;br /&gt;
:&amp;lt;code&amp;gt;[[Qt-launcher|Qt Launcher]] &amp;gt; Settings tab &amp;gt; Rendering &amp;gt; Show more &amp;gt; enable Cache graphics for faster loading&amp;lt;/code&amp;gt; '''or''',&lt;br /&gt;
:&amp;lt;code&amp;gt;in-sim menu &amp;gt; View &amp;gt; Rendering &amp;gt; enable Use disk space for faster loading (DDS texture cache)&amp;lt;/code&amp;gt;.&lt;br /&gt;
:The DDS texture cache makes loading faster, and can make the sim feel smoother. it also helps older systems - as it reduces VRAM usage on the Graphics card (GPU), as well as reducing RAM usage. The DDS texture cache will grow in size mainly as you try new aircraft. It will grow in size a bit as you visit new locations, if you have scenery objects like landmarks enabled.&lt;br /&gt;
* There is a new graphics profile system being developed for future FlightGear. This will at least have some named settings presets which can be associated with some hardware and performance categories.&lt;br /&gt;
&lt;br /&gt;
== Recommended hardware for FlightGear 2018.3 LTS ==&lt;br /&gt;
Only one target performance and settings profile has been written below. Other settings profiles are to-do. FlightGear can scale the quality to run on a huge range of hardware at different quality settings.&lt;br /&gt;
&lt;br /&gt;
''Note for old hardware:'' Towards the less powerful end of the range, for FlightGear to run smoothly, it requires a video card with OpenGL drivers 2.0 or higher. You need to spend some time learning settings, and tweaking for bottlenecks, to run FlightGear on very old systems. See [[Minimal Startup Profile]] to start with a bare minimum and then turn settings up.&lt;br /&gt;
&lt;br /&gt;
Before selecting a GPU and CPU have a look at the benchmark lists in the [[Hardware recommendations#Mostly high and Max settings with 2015.2B mid range GPU|profile]] below for an approximate idea of performance. If you are choosing a laptop see the manufacturers website for that model to find out your GPU and CPU, and check the list. Remember the slowest component will be the limiting component. For example: if you want high graphics but your GPU is slow, having a very fast CPU will not help. Higher resolutions need faster GPUs: for example, you can't run FlightGear at 4k resolution with a laptop if your manufacturer has not included a very fast GPU, even if they have included a reasonably fast dedicated GPU - in these laptops you need to run FlightGear at lower resolution, or find a laptop with faster GPU. If you run out of RAM then you cannot have really high visibility ranges or object densities even if your GPU and CPU is fast. The tips in the sections below about avoiding Intel integrated GPUs, mobile laptop GPUs, and low range NVIDIA GPUs (xx10, xx20, xx30, xx40) apply.&lt;br /&gt;
&lt;br /&gt;
''Note on hardware requirements''&lt;br /&gt;
&lt;br /&gt;
Requirements are only valid for a target FPS, monitor resolution, usage, and graphics / simulation quality settings. People have a huge range of hardware. &lt;br /&gt;
&lt;br /&gt;
For flight simulators the usage can vary depending on the craft used, how the craft is used, and over what scenery the craft is used. The visibility range can change with altitude, and how fast the scenery is loaded can change with speeds. How complex the visuals are depends on how much vegetation, or man-made buildings/objects, are in the visible scenery. The following all place different demands: slow and low with a balloon/[[pterosaur]]/glider/wingsuit/ground effect vehicle, slightly faster and higher in a single prop [[Cessna 172P|C172P]]/[[Cessna 182S|C182]]/[[Piper J3 Cub|Cub]]/[[Piper PA28 Warrior II|PA]], fast and low in a supersonic [[Saab 37 Viggen|Viggen]]/[[Grumman F-14 Tomcat|F-14]] jet, higher altitude but slower in a [[Airbus A320 Family|A320]] airliner, fast and high in a Concorde, extremely fast and high in suborbital craft like the [[X-15]] , or using a [[Space Shuttle|Shuttle]] or [[Vostok-1]] space craft that is fast enough to reach orbit. View distances can vary from [[:File:EC135 Heer.jpeg|individual grass blades]] in airport keep to seeing [[:Category:Screenshots of Earthview|entire continents]] from orbit using a separate orbital renderer. Flying over a dense forest can mean [[:File:Alouette-lll over the Carpathian Mountains in Romania in Autumn (Flightgear 2018.x).jpg|vast]] amounts of trees are in view, while flying over a barren desert or ocean can mean there are few objects. You can always fly with a lower scenery loading distance and/or a lower visibility distance. A cloudless day can mean there are fewer clouds to draw and also may be lighter on CPU to simulate as Advanced Weather tracks lifecyles of individual clouds. On very old systems turning down cloud density and visibility range can help - as can turning off parts of the Advanced Weather simulation, or using basic weather. If you are flying at night using instruments for navigation, you can turn down graphics settings a lot :) . Different craft place different demands on CPU and GPU. Some craft have detailed electrical, electronic, and mechanical systems which are demanding on the CPU to simulate, while a craft like a glider does not. Some craft have high fidelity graphics and complex electronic displays - these can be demanding on the CPU and loading times, not just the GPU!. Some craft have options to reduce graphics. Some craft have options to reduce CPU usage by making parts of the simulation less responsive or less fine-grained - but these craft tend to be craft which are demanding on the CPU to start with. &lt;br /&gt;
&lt;br /&gt;
Tip: If you have a slow GPU or CPU, you may be able to find craft that are less demanding for your bottleneck. Different aspects of craft can be demanding on the GPU or CPU - systems &amp;amp; instruments, aircraft interior art, aircraft exterior art, or flight dynamics model (FDM). For example, some craft may have detailed systems and instruments but have simple interior art. Some research projects just produce a flight dynamics model with no art and simple systems. Don't worry about the CPU time taken by the flight dynamics model - it isn't really heavy on CPU to simulate - think of an offline flight dynamics engine like JSBSim as a photo viewer for digital fine-art - it may take hours, days or weeks to render a fine-art quality ray-traced [https://commons.wikimedia.org/wiki/File:Raytraced_image_of_several_glass_objects.png digital image] but your web browser can display it very quickly - similarly JSBSim can take the results of computational fluid dynamics done on a supercomputing cluster (like a ray-traced digital image), or taken from windtunnel data (like taking a photo), and simulate flight dynamics quite quickly. Tip: You can use the filter in &amp;lt;code&amp;gt;[[FlightGear Qt launcher|FlightGear Qt Launcher]] &amp;gt; Air craft tab &amp;gt; Browse &amp;gt; Filter using ratings &amp;gt; click Adjust minimum ratings&amp;lt;/code&amp;gt; ([[FlightGear Qt launcher#Community video walkthroughs|video tutorial]]) to lower minimum ratings and look for craft which have e.g. good systems and flight dynamics model but simpler art - but this only gives a ''small'' clue - some craft like a glider may not have much systems to simulate or have a simple model so they are not demanding even when recreated in detail.&lt;br /&gt;
&lt;br /&gt;
Without target FPS, monitor resolution, usage, and settings, requirements are meaningless other than for maximum settings (i.e. meaningless for what hardware people actually have) - even maximum settings are hard to predict as they depend on what scenery a flight can take place. It's not trivial to find exact specifications, even for commercial applications with lots of test systems. Some commercial 3d applications do give out specifications for less than max settings but these mostly do not give target performance/quality/usage at all, and a lot of 3d applications like games have limited usage patterns making it easier to check - since commercial screenshot galleries tend to be on the most powerful systems at time of release without stating hardware, not giving detailed performance/quality/usage targets is also a way of making people forget quality may not look anything like advertised on their hardware. The topic of quality and performance is not as simple as commercial applications make it out to be in their advertising. People should consider that a bit of time spent tweaking settings for the performance bottlenecks in your hardware, for your typical usages, can make a huge difference to visuals and FPS.&lt;br /&gt;
&lt;br /&gt;
=== Mostly high and Max settings with 2015+ mid range GPU ===&lt;br /&gt;
&lt;br /&gt;
==== Target performance: ====&lt;br /&gt;
&lt;br /&gt;
* '''20-30 FPS''' with default [[Cessna 172P|C172P]]. Monitor resolution 1920 by 1080 (also known as 1080p , Full HD, or FHD). &lt;br /&gt;
** Note: actual smoothness depends on frame-spacing spikes - average FPS helps lower overall frame spacing.&lt;br /&gt;
&lt;br /&gt;
==== Target settings: rendering and scenery: ====&lt;br /&gt;
&lt;br /&gt;
* Renderer: [[Atmospheric light scattering|ALS]] (advanced renderer)&lt;br /&gt;
* &amp;lt;code&amp;gt;View &amp;gt; rendering&amp;lt;/code&amp;gt; dialog:&lt;br /&gt;
** Maximum shaders: all shader sliders maxed (i.e. overlays: on).&lt;br /&gt;
** Scenery layers: Vegetation density: Very High (if you run into RAM issues try turning this down).&lt;br /&gt;
** Scenery layers: Vegetation shadows: on.&lt;br /&gt;
** Scenery layers: Buildings: Random buildings - or OSM2City with light scenery near small towns, but not OSM2City near areas dense with big buildings (heavier scenery needs a faster CPU). Tweaking random building density: Try setting&amp;lt;code&amp;gt;/sim/rendering/building-density&amp;lt;/code&amp;gt; in the range of 1-10. You can set this in the [[property browser]], or as a [[Command line options|command-line option]] set in various ways including the [[FlightGear Qt launcher|Qt launcher]],&lt;br /&gt;
** Scenery layers: everything else on: Scenery objects (includes airport terminals), roads and railways, pylons, random scenery objects&lt;br /&gt;
** Cloud density and visibility range sliders: max.&lt;br /&gt;
* &amp;lt;code&amp;gt;View menu &amp;gt; Adjust LOD ranges&amp;lt;/code&amp;gt; dialog&lt;br /&gt;
**[[Level Of Detail (LOD) Ranges#Scenery ranges|Level of detail ranges]]: default (single prop planes): 1.5km/9km/30km.&lt;br /&gt;
* [[Anti-aliasing]]: 4x or 8x Multi-sampling(MSAA). [[Anti-aliasing#Transparency anti-aliasing|Transparency anti-aliasing]] (called Adaptive anti-aliasing on AMD GPUs): Multisample. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Environment &amp;gt; weather &amp;gt; detailed weather&amp;lt;/code&amp;gt; dialog:&lt;br /&gt;
**[[Weather#Advanced Weather|Advanced Weather]]: on.&lt;br /&gt;
** [[Weather#Advanced configuration|Advanced settings]] dialog: Enabled features: All: &amp;lt;code&amp;gt;Cloud shadows&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Realistic visibility&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;Generate thermals&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Terrain effects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Terrain pre-sampling&amp;lt;/code&amp;gt;, etc. &amp;lt;code&amp;gt;Max visibility&amp;lt;/code&amp;gt; : 250km&lt;br /&gt;
&lt;br /&gt;
=== Hardware build: ===&lt;br /&gt;
&lt;br /&gt;
* '''GPU''' (Graphics Processing Unit, or Graphics Card): A GTX 960 or 1050 Ti - or equivalent performance. More than 3000 ratings in this list: as of [http://web.archive.org/web/20210412095421/https://benchmarks.ul.com/compare/best-gpus April 2021]. [https://benchmarks.ul.com/compare/best-gpus Direct link] (Note: ratings numbers and list may have changed by the time you see it). Note: a GPU with this performance is capable of much more than 30 FPS.&lt;br /&gt;
* '''CPU''': 4 core Intel Sandybridge [https://en.wikipedia.org/wiki/Sandy_Bridge#Desktop_platform i5 2500] (released 2012) or faster. This build will be '''limited by the CPU''' . Try to get a newer generation [https://en.wikipedia.org/wiki/Intel_Core Intel CPU], or equivalent AMD Ryzen CPU, if possible - e.g. a 4th generation Intel [https://en.wikipedia.org/wiki/Haswell_(microarchitecture)#Desktop_processors Haswell] (4xxx) i5 CPU, or faster. For a fairly approximate idea of CPU performance needed (Sandybridge i5 2500 has a rating of ~1700) see this archived copy of a single-core benchmark list: [http://web.archive.org/web/20210412100323/https://www.cpubenchmark.net/singleThread.html April 2021] . [https://www.cpubenchmark.net/singleThread.html Direct link] (Note: this direct list may have changed ratings numbers by the time you see it). This list only gives single-core performance - and it is approximate - for example, when an application uses more than one core processor the frequency will drop slightly lowering performance. The only reason a 2012 Sandybridge 2500 can manage 20-30FPS is because core performance hasn't gone up that much - it has increased by about 2x. FlightGear uses multiple cores. Some people may be able to get FG to run fine with a fast high clock 2 core CPU from a newer generation of CPU. But a 4 core is recommended as future FlightGear will use cores even more.&lt;br /&gt;
&lt;br /&gt;
*'''Memory''' (RAM): 8GB (12-16 GB preferred). If you lack RAM you need to reduce the level of detail ranges so less scenery is displayed.&lt;br /&gt;
*'''Disk:''' to do! .&lt;br /&gt;
&lt;br /&gt;
=== FlightGear settings tips: ===&lt;br /&gt;
&lt;br /&gt;
* This build is '''limited by CPU'''. If your CPU is not faster (newer generation), at least you can try turning up graphics more to give the GPU something to do (try increasing Anti-aliasing, turning up transparency anti-aliasing by selecting super-sampling variety, increasing tree density).&lt;br /&gt;
* GPU limited: Try turning down the resolution and [[anti-aliasing]] if you are GPU limited. The higher the resolution the more work the GPU must do. A 4k (UHD) resolution is like the pixel shader load of rendering on four 1080p screens at once! See [[Anti-aliasing#The%20trade%20off%20between%20graphics%20content.2C%20FPS.2C%20and%20graphics%20settings%20like%20anti-aliasing|The trade off between graphics content, FPS, and graphics settings like anti-aliasing]] &lt;br /&gt;
* GPU: For '''4k monitors''': Try reducing resolution to 1080p. A lot of laptops come with slow GPUs but have 4k screens. You should try the equivalent of a GTX 1080/2070 or a rating of about 7800 in this archived list, but you may have to tweak settings a bit: [http://web.archive.org/web/20210412095421/https://benchmarks.ul.com/compare/best-gpus April 2021]. [https://benchmarks.ul.com/compare/best-gpus Direct link] (Note: ratings numbers and list may have changed by the time you see it). See the advice on the [[Anti-aliasing#Tips on using anti-aliasing settings|anti-aliasing]] page.&lt;br /&gt;
** Notes: It's overlays and tree density that can put stress on the GPU.&lt;br /&gt;
* GPU: overlays require strong GPU power (that level of detail is not trivial). &lt;br /&gt;
* CPU: Aircraft that are heavier on CPU than than the C172P can drag down performance more if you are CPU limited.&lt;br /&gt;
* RAM &amp;amp; GPU: Trees at ultra consume a lot of RAM. They need GPU power too.&lt;br /&gt;
* RAM: If you run into RAM issues try turning down : [[Level Of Detail (LOD) Ranges#Scenery ranges|LoD:Rough]] (in &amp;lt;code&amp;gt;View menu &amp;gt; Adjust LOD range&amp;lt;/code&amp;gt;), tree density, and LoD: bare.&lt;br /&gt;
* CPU &amp;amp; RAM: Using OSM2City scenery can also use up RAM and CPU. OSM2City version 2017.2 is compatible with FlightGear 2018.3 LTS. Try turning off roads and pylons if you are CPU limited. Try turning down LoD:rough if you are RAM/CPU limited. Random scenery objects can be heavy on CPU, try turning them off.&lt;br /&gt;
* GPU: ALS shaders sliders can be maxed in a lot dedicated GPUs, even quite old ones provided they are dedicated GPUs (and not integrated/mobile GPUs). It's mostly the scenery layer settings including tree density and LoD ranges that can be intensive.&lt;br /&gt;
* GPU / Disk space: turn on the &amp;lt;code&amp;gt;View &amp;gt; rendering &amp;gt; texture cache&amp;lt;/code&amp;gt; for smoother FPS frame spacing and faster loading. This will take up extra space.&lt;br /&gt;
* ...what does this look like? Only the screenshots that have been uploaded to the wiki by volunteers are available right now. There is a wiki category with '''roughly''' [[:Category:Screenshots at high settings|high settings screenshots]]. Note: a lot of these screenshots use settings that are below this profile, the overlays screenshots typically have transparency anti-aliasing higher than multisampling, some screenshots are with a much older FlightGear, a substantial amount of screenshots laptops with weaker GPUs or computers with less than 16 GB of RAM, some screenshots are at slightly higher settings than this profile or at 4k resolution.To get to the highest settings in the category at 1080p and trees at ultra, you would need a GTX 1060 or higher (about [http://web.archive.org/web/20210314111800/https://benchmarks.ul.com/compare/best-gpus 4100] in ratings), 12-16 GB of RAM - lowering LoD ranges will help (low ranges are fine for low altitude flights especially in mountain areas). Not turning up transparency AA will help. The CPU would be maybe a bit faster than i5 2500 to populate trees quickly at ultra e.g. a fast Haswell i5, or an overclocked Sandybridge i5 2500k @ close to 5GhZ.&lt;br /&gt;
&lt;br /&gt;
== Recommended hardware for FlightGear 3.20+ ==&lt;br /&gt;
{{See also|SIMD Support}}&lt;br /&gt;
Generally, if you want to see frame rates in the 20's and above and medium/high graphical settings, which is typically preferred, you should have a budget of at least $1000. The following list is recommended hardware. It is not required to any degree; however, if you're purchasing a new computer dedicated to FlightGear, it is highly recommended that you get a computer with at least these requirements.&lt;br /&gt;
; Display&lt;br /&gt;
* A screen with a resolution of at least 1024x768 @32bpp (most GUI dialogs cannot be used otherwise currently)&lt;br /&gt;
; Graphics processing unit&lt;br /&gt;
* A 3D video card (with AMD or NVIDIA chipset) with support for [[OpenGL]] 2.1 or better and at least 1024-2048MB of dedicated DDR3+ (DDR5 preferred) VRAM (i.e. 512 Mb VRAM minimum). FlightGear requires an '''OpenGL 2.1-compliant''' hardware-accelerated 3D video card to run at reasonable frame-rates. Most modern PCs have hardware-accelerated 3D cards. If your FlightGear video is not running smoothly, see [[Graphics drivers configuration]].&lt;br /&gt;
* See [[Supported Video Cards]] for a list of video cards known to work with FlightGear. &lt;br /&gt;
* Cards with working GLSL/shader support will enable FlightGear to run with more visual effects. &lt;br /&gt;
* If you are serious about running FlightGear, you should [[Problematic Video Cards#Intel GMA|avoid Intel HD/GMA cards]] at all costs - these are integrated chipsets that provide only basic OpenGL/GLSL support. See [[problematic video cards]] for a list of video cards that may not properly run.&lt;br /&gt;
; Processor&lt;br /&gt;
* At least 2-4 Gb '''free''' RAM (and more is better: when building/buying a new system, consider 6-8gb total the absolute minimum these days). FlightGear uses more than 500 Mb of RAM by default. If less free RAM is available, FlightGear would be slowed down significantly due to OS swapping. &lt;br /&gt;
* At least a quad core processor with ~ 2 GHz each, 64 bit architecture (and operating system) recommended (multi-core processors have benefits for some FlightGear components such as the threaded tile loader). When buying a new computer, buying at least a quad core computer (i.e. i7) is a good idea these days.&lt;br /&gt;
; Storage disk&lt;br /&gt;
* 5 Gb HD space for a minimum installation, approx. 10 Gb if you want to compile it yourself, plus up to 80 Gb for optional world-wide scenery. More space is required for people wanting to check out the latest base package from [[Git]]. People using [[Scripted Compilation on Linux Debian/Ubuntu]], will approximately need 30 Gb of disk space in total.&lt;br /&gt;
; Input devices&lt;br /&gt;
* A three button mouse or two button mouse with scroll wheel&lt;br /&gt;
* An optional [[joystick]]/yoke and/or pedals - Gameport or USB (HID compatible), see &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Input&amp;lt;/tt&amp;gt; for a list of input hardware known to work with FlightGear.&lt;br /&gt;
; Sound card&lt;br /&gt;
* An optional sound card, Soundblaster compatible, preferably with EAX support.&lt;br /&gt;
&lt;br /&gt;
== NVIDIA ==&lt;br /&gt;
''April 2021 note:'' Check a GPU benchmark list like this for a '''rough''' idea of performance: [https://benchmarks.ul.com/compare/best-gpus Direct link] ([http://web.archive.org/web/20210412095421/https://benchmarks.ul.com/compare/best-gpus April 2021 archive]). If you are selecting a laptop find out what your GPU is - ask or check the manufacturers website page for the model of the laptop. Laptop GPUs: Laptops with NVIDIA 9xx and earlier series GPUs often have the mobile &amp;quot;M&amp;quot; variant. These are a lot slower than the normal version e.g. a GTX 960M is slower than a GTX 960. NVIDIA 10xx series and later use desktop equivalents in all laptops, or close to it. This is due to recent GPU technology using less power making it easier on laptop batteries. There are also Q-MAX variants that are only slightly slower than normal versions but use less battery - e.g. a GTX 1060 Q-MAX is only slightly slower than a GTX 1060 - see benchmarks. (April 2021)    &lt;br /&gt;
&lt;br /&gt;
Recent NVIDIA price/performance trends (March 2021):    &lt;br /&gt;
&lt;br /&gt;
* Each GPU slot tends to get the performance of the GPU slot above it from the last generation. e.g. A GTX 1650 (xx50 slot) will get the a the performance of a GTX 1060 (xx60 slot).    &lt;br /&gt;
* The price and performance sweet spot are the midrange cards xx50, XX50 Ti and xx60. xx50 Ti might be around the best slot.     &lt;br /&gt;
* The fastest cards are released first each GPU generation (e.g. xx80 Ti or xx90), and are priced high to sell to enthusiasts - for GPU chips yields are also low to start so there's a limited number of hardware.GPUs are released in decreasing order of performance to tempt people to buy a performance range that they don't need. AMD follows the same pattern.    &lt;br /&gt;
* Hardware prices are expected to drop as the situation with the global pandemic eases.    &lt;br /&gt;
&lt;br /&gt;
Stay away from nVidia GPUs with a low second digit (x20, xx20, x40, xx40). Higher 2nd digit means more CUDA cores. &lt;br /&gt;
&lt;br /&gt;
The number of CUDA cores matters much more than a few Mhz in frequency, since you can process more, in parallel. &lt;br /&gt;
Also watch out for bus width, as that has a big impact on data throughput. The more CUDA cores it has, the better. A GTX680 is lots and lots and lots more important than a CPU with a zillion cores.&lt;br /&gt;
&lt;br /&gt;
In case of doubt, go for an older generation x60 (460, or 560), even a 260 would be much more of an improvement than the 620. Basically, Nvidia cards compile GLSL shaders and OpenCL kernels into CUDA kernels (sort of), so more CUDA kernels = more shader power. &lt;br /&gt;
&lt;br /&gt;
Whatever GPU (and other hardware) you get, first of all make sure that it is fully supported by your OS of choice.&lt;br /&gt;
Thorsten mentioned in another thread that he purchased a computer with an NVIDIA GTX670 that ended up not being fully supported under Linux, so I'd suggest to be really careful here.&lt;br /&gt;
&lt;br /&gt;
== Notebooks ==&lt;br /&gt;
If you are interested in running FlightGear on a notebook, you may also want to check out [[Notebooks known to run FlightGear]]. A regular notebook is not recommended if you plan to fly often on FlightGear.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
Your overall experience on FlightGear generally depends on these components:&lt;br /&gt;
*Your '''CPU''', which makes all the calculations. This component isn't as important as your graphics card. However, you should keep in mind that your CPU is the brain of your computer. As stated above, it's recommended that you purchase a CPU that has at least 4 cores.&lt;br /&gt;
*Your '''graphics card''', which renders the visuals of FlightGear. This component is extremely important. If you have an amazing CPU but a lackluster graphics card, your framerate will be low. Also, it's recommended that you purchase a relatively new graphics card, as old ones (even if very powerful) have been known to cause rendering glitches.&lt;br /&gt;
*Your '''RAM''' (memory), which allows temporary storage of information. Memory is probably least important of the three when it comes to framerate; however, any less than 4 GB memory has been known to cause crashes in FlightGear.&lt;br /&gt;
&lt;br /&gt;
=== Should I purchase a computer or build my own? ===&lt;br /&gt;
It is generally recommended that you build your own computer. Your money will get you much farther. However, it is also recommended that if you build your own computer, you know someone who knows their way around computers. Buying parts that you ''think'' may be powerful but truthfully are not, or worse case, not compatible, can lead to disappointment.&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
* [[Supported Video Cards]]&lt;br /&gt;
* [[Graphics drivers configuration]]&lt;br /&gt;
* [[Troubleshooting Problems]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles to be updated for each release]]&lt;br /&gt;
[[Category:Hardware|Recommendations]]&lt;br /&gt;
&lt;br /&gt;
[[de:Hardwareempfehlungen]]&lt;br /&gt;
[[es:Recomendaciones de hardware]]&lt;br /&gt;
[[fr:Hardware Recommendations]]&lt;br /&gt;
[[pl:Wymagania systemowe‎]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=134232</id>
		<title>Discord</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=134232"/>
		<updated>2021-12-24T18:38:56Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: /* Aircraft-specific */ Corrected &amp;quot;Boeing&amp;quot; Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Discord''' is used in the FlightGear community as an alternative to [[Mumble]], [[TeamSpeak]], [[FGCom]] or [[Ventrilo]].&lt;br /&gt;
&lt;br /&gt;
Discord is a free voice and chat software that can be downloaded as an app or used in a browser.&lt;br /&gt;
&lt;br /&gt;
== Invite links ==&lt;br /&gt;
{{note|1=Its advised that you create a permanent account, instead of creating guest accounts as some people create duplicate accounts which clogs up the member logs and makes it more difficult to @mention people.}}&lt;br /&gt;
&lt;br /&gt;
Furthermore many other FlightGear servers exist that you may need an personal invite to join. The easiest way to find them is to go to the FlightGear server and ask or ask in forums.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Communities on Discord ==&lt;br /&gt;
&lt;br /&gt;
=== General, Help and Support, Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear&lt;br /&gt;
| https://discord.gg/rzuV2DR&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear FDM School&lt;br /&gt;
| https://discord.gg/Uyrtsar&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Air Race League&lt;br /&gt;
| https://discord.gg/HCAuU9D&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Virtual Alliance&lt;br /&gt;
| https://discord.gg/VqzTG2N&lt;br /&gt;
|-&lt;br /&gt;
| FG Events&lt;br /&gt;
| https://discord.gg/GY4N6Cu&lt;br /&gt;
|-&lt;br /&gt;
| FG FDM School&lt;br /&gt;
| https://discord.gg/U5KXyMU&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Republic, A friendly community about FlightGear.&lt;br /&gt;
| https://discord.gg/sBJy46Uq7z&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Military Aviation Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Operation Red Flag military FG community (OPRF)&lt;br /&gt;
| https://discord.gg/ptVapkE&lt;br /&gt;
|-&lt;br /&gt;
| Combined Joint Task Force 50 (OPRF event planning/hosting and more)&lt;br /&gt;
| https://discord.gg/2nxjb6y&lt;br /&gt;
|-&lt;br /&gt;
| Warbirds, WWII-era aircraft&lt;br /&gt;
| https://discord.gg/yJaP5Wn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Country Specific Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Australia (Scenery Development &amp;amp; Community)&lt;br /&gt;
| https://discord.gg/JzTEXsZ&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Italia (ITA Mercenaries)&lt;br /&gt;
| https://discord.gg/5RzyXRf&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Germany&lt;br /&gt;
| https://discord.gg/FNnpjCPSze&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Indian Community&lt;br /&gt;
| https://discord.gg/Tu7n5FmG5S&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Asia&lt;br /&gt;
| https://discord.gg/7saCkA2jQj&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Hong Kong&lt;br /&gt;
| https://discord.gg/9QVKcT6skU&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Myanmar&lt;br /&gt;
|https://discord.gg/VbT88KEGrk&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Aircraft-specific ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Aircraft !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Aermacchi MB-339&lt;br /&gt;
| https://discord.gg/vNZ5ZPv&lt;br /&gt;
|-&lt;br /&gt;
| Airbus [[Airbus A320 Family|A320]] &amp;amp; A330 Development&lt;br /&gt;
| https://discord.gg/7kzg9Te&lt;br /&gt;
|-&lt;br /&gt;
| Airbus A350 Development&lt;br /&gt;
| https://discord.gg/vK5f2s6&lt;br /&gt;
|-&lt;br /&gt;
| Boeing F/A-18C Hornet&lt;br /&gt;
| https://discord.gg/8GzpdK4j8P&lt;br /&gt;
|-&lt;br /&gt;
| LincolnWorks (747 and A380)&lt;br /&gt;
| https://discord.gg/2DMVpnJ&lt;br /&gt;
|-&lt;br /&gt;
| F-111 Aardvark&lt;br /&gt;
| https://discord.gg/DSrSbmx&lt;br /&gt;
|-&lt;br /&gt;
| [[General Dynamics F-16 Fighting Falcon]]&lt;br /&gt;
| https://discord.gg/8RcYnjA&lt;br /&gt;
|-&lt;br /&gt;
| MD-11 and Autoflight by Octal&lt;br /&gt;
| https://discord.gg/gxAhC3j&lt;br /&gt;
|-&lt;br /&gt;
| [[Mikoyan-Gurevich MiG-21bis]]&lt;br /&gt;
| https://discord.gg/bs8xyz3&lt;br /&gt;
|-&lt;br /&gt;
| [[Mirage 2000]]&lt;br /&gt;
| https://discord.gg/xZ3r2KR&lt;br /&gt;
|-&lt;br /&gt;
| Panavia Tornado&lt;br /&gt;
| https://discord.gg/26rvkr2&lt;br /&gt;
|-&lt;br /&gt;
| [[Saab 37 Viggen]]&lt;br /&gt;
| https://discord.gg/RJTwS9a&lt;br /&gt;
|-&lt;br /&gt;
| SEPECAT Jaguar&lt;br /&gt;
| https://discord.gg/G5q5XYN&lt;br /&gt;
|-&lt;br /&gt;
| FG-1000 Stealth Fighter&lt;br /&gt;
| https://discord.gg/3MFZauxyPW&lt;br /&gt;
|-&lt;br /&gt;
|Boeing 777&lt;br /&gt;
|https://discord.gg/8McTuYdK&lt;br /&gt;
|-&lt;br /&gt;
|A-10A Warthog&lt;br /&gt;
|https://discord.gg/RmtjmsT5vS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* https://discord.com/ Official website&lt;br /&gt;
&lt;br /&gt;
[[de:Discord]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Animate_models&amp;diff=134201</id>
		<title>Howto:Animate models</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Animate_models&amp;diff=134201"/>
		<updated>2021-12-19T22:31:39Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: /* Lights */ Corrected typo in &amp;quot;FlightGear&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The real world is full of motion. To simulate this in [[FlightGear]], '''models must be animated'''.&lt;br /&gt;
&lt;br /&gt;
FlightGear allows you to animate models in response to property changes: for example, the propellers can spin when the engine is on and the elevators can move up and down with your controller. There is no fixed limit on what parts can be animated: the only requirements are that the part is named in the 3D model file, and that there is a property in the main tree that you can use to get the positioning information. &lt;br /&gt;
&lt;br /&gt;
This document provides basic information for all kind of animations. When animating your model, it is very helpful to find an aircraft with parts similar to yours and use it as an example. Cut and paste the code into your wrapper file and then edit to suit.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
=== File name of main model and animation XML file ===&lt;br /&gt;
{{main article|Aircraft-set.xml#Not used for loading multiplayer aircraft}}&lt;br /&gt;
The file name of the main model and animation XML file, or the .ac file if there is no XML file, (in essence the property &amp;lt;code&amp;gt;/sim/model/path&amp;lt;/code&amp;gt;) will be the name of the aircraft that is transmitted when using [[multiplayer]] and will also be used for loading multiplayer aircraft.&lt;br /&gt;
&lt;br /&gt;
There is also a mechanism to substitute a full aircraft model with a simpler AI aircraft model if one is available at the same file path (including for example &amp;lt;code&amp;gt;Models/Boeing-797-800.xml&amp;lt;/code&amp;gt;), but in &amp;lt;code&amp;gt;[[$FG_ROOT]]/'''AI'''/Aircraft/&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$FG_ROOT/Aircraft/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== .ac files ===&lt;br /&gt;
{{Main article|AC files: Understanding and changing .ac code#Identifying an object}}&lt;br /&gt;
&lt;br /&gt;
When referring to an .ac file in your xml animation, it is important that the &amp;lt;code&amp;gt;&amp;lt;object-name&amp;gt;&amp;lt;/code&amp;gt; exactly matches the object named in the .ac file (this includes cases!). &lt;br /&gt;
&lt;br /&gt;
'''Note for SketchUp users:''' The spatial reference X/Y/Z used in animation to locate an object or a point are different from the ones in AC3D ie X values are the same in both but Y in animation must be matched to AC3D's -Z (Z value but opposite sign) and Z value in animation must be matched to AC3D's Y value. &lt;br /&gt;
&lt;br /&gt;
'''Note for SketchUp users:''' when exporting to AC3D in Sketchup, the .ac file will name the objects in your model to &amp;quot;blah&amp;quot; by default. You need to amend the relevant object names in your .ac file using text edit, so that the xml will work.&lt;br /&gt;
&lt;br /&gt;
=== Animation order ===&lt;br /&gt;
Animations are executed by FlightGear in the order that they are read in the model's .xml file. Therefore, it is very important to pay attention to the order, especially when multiple animations are applied to the same object(s). Wrong ordering of animations might cause [[Howto:Animate models#Timed|timed]] animations (used to create flashing lights) to not work. For further details see this [https://sourceforge.net/p/flightgear/mailman/message/37090714/ thread] on the development mailing list. Updated [https://scenery.flightgear.org/app.php?c=Models&amp;amp;a=browse&amp;amp;shared=18 shared Effects models] will be available very soon.&lt;br /&gt;
&lt;br /&gt;
Similar problems can be encountered with the dist-scale instead of the timed animation.&lt;br /&gt;
== Tags used in most animations ==&lt;br /&gt;
=== Name ===&lt;br /&gt;
With a name animation, you can group multiple objects. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;Collection1&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object1&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object2&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object3&amp;lt;/object-name&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above creates a &amp;quot;virtual object&amp;quot; with the name Collection1. In animation, we can animate this group of objects, by using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;object-name&amp;gt;Collection1&amp;lt;/object-name&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Object-name ===&lt;br /&gt;
These names are set in the 3D model. Each single object has a unique name; for easy identification it is advised to use descriptive names (LeftElevator, Rudder etc.). Animations are only applied to those objects that are mentioned in an object-name line (one object per line!). Animations lacking those, will be applied to the entire model.&lt;br /&gt;
&lt;br /&gt;
=== Property ===&lt;br /&gt;
Each animation must be associated with exactly one property from the main FlightGear property tree (remember that the properties in the wrapper file are not part of the main tree), using &amp;lt;code&amp;gt;&amp;lt;property&amp;gt;&amp;lt;/code&amp;gt; to provide the property path:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Rudder&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;controls/rudder&amp;lt;/property&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the omission of the leading slash '/' when referring to the property. This assures that when the model is used for AI or multiplayer traffic the animations will follow that of the AI controller instead of that of the user.&lt;br /&gt;
&lt;br /&gt;
=== Axis ===&lt;br /&gt;
An axis part is required in every animation that involves a rotating or moving thing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The axis are similar to the ones of the 3D model. There is a difference between rotation and translation:&lt;br /&gt;
* In rotation animations, the axis part defines around what axis the object rotates. Negative/positive values make the difference between counterclockwise and clockwise rotations.&lt;br /&gt;
* In translate animations, the part defines along what axis the object moves. If the x-axis is poiting backwards, an x-value of -1 will result in forward motion.&lt;br /&gt;
&lt;br /&gt;
You could also define two points, between which FlightGear will calculate the correct axis. This makes the use of a [[#Center|&amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;&amp;lt;/nowiki&amp;gt;]] tag redundant! Such coordinates are extremely useful for animating control surfaces (rudder, elevators etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;   &lt;br /&gt;
   &amp;lt;x1-m&amp;gt; 4.9&amp;lt;/x1-m&amp;gt;&lt;br /&gt;
   &amp;lt;y1-m&amp;gt; 7.1&amp;lt;/y1-m&amp;gt;&lt;br /&gt;
   &amp;lt;z1-m&amp;gt;-1.0&amp;lt;/z1-m&amp;gt;&lt;br /&gt;
   &amp;lt;x2-m&amp;gt; 5.9&amp;lt;/x2-m&amp;gt;&lt;br /&gt;
   &amp;lt;y2-m&amp;gt;11.2&amp;lt;/y2-m&amp;gt;&lt;br /&gt;
   &amp;lt;z2-m&amp;gt;-0.5&amp;lt;/z2-m&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Center ===&lt;br /&gt;
Various animations ([[#Rotate|rotate]], [[#Spin|spin]], [[#Scale|scale]]) move around a center point.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The axis are similar to the ones of the 3D model, so finding coordinates is easily done in 3D modeling software.&lt;br /&gt;
&lt;br /&gt;
=== Using a geometry object for axis and centre (2017.2) ===&lt;br /&gt;
&lt;br /&gt;
Added in V2017.2 is support to allow a geometry object (a line segment with two vertices) that is used to define both the centre and the axis for an animation. This will work with rotate, translate and the knob animations.&lt;br /&gt;
&lt;br /&gt;
The axis line should be balanced, i.e. it should protrude equal amounts. The axis line should be normalized (i.e. 1m) as its length acts as a factor (affecting translate animations).&lt;br /&gt;
&lt;br /&gt;
The syntax for this is &lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;axis&amp;gt;&lt;br /&gt;
    &amp;lt;object-name&amp;gt;some-object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
&amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the object-name used for the axis has been processed the geometry object will be hidden. This also allows a visual check for any axis objects that are not yet assigned.&lt;br /&gt;
&lt;br /&gt;
It is possible to reuse the same object definition multiple times within a single XML file. &lt;br /&gt;
&lt;br /&gt;
[[File:Canopy-animation-axis-object.png|small|Illustration of where an axis object (2017.2) can be placed for a canopy]]&lt;br /&gt;
&lt;br /&gt;
[[File:Gauges-knobs-animation-axis-object.png|small|Illustration of where an axis object (2017.2) can be placed for cockpit elements]]&lt;br /&gt;
&lt;br /&gt;
== Additional tags that can be used in most animations ==&lt;br /&gt;
=== Conditions ===&lt;br /&gt;
Multiple animations can make use of a conditional. Check &amp;lt;tt&amp;gt;$FGDATA/Docs/README.conditions&amp;lt;/tt&amp;gt; for some more details.&lt;br /&gt;
&lt;br /&gt;
* '''equals:''' property value (or second property) is equal to value/(first)property.&lt;br /&gt;
* '''greater-than:''' property value (or second property) is larger than value/(first)property.&lt;br /&gt;
* '''greater-than-equals:''' property value (or second property) is greater than or equal to value/(first)property.&lt;br /&gt;
* '''less-than:''' property value (or second property) is smaller than value/(first)property.&lt;br /&gt;
* '''less-than-equals:''' property value (or second property) is smaller than or equal to value/(first)property.&lt;br /&gt;
&lt;br /&gt;
The example below is true when n1 has a value greater than 25.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;engines/engine[1]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;value&amp;gt;25&amp;lt;/value&amp;gt;&lt;br /&gt;
   &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then there are some special tags:&lt;br /&gt;
&lt;br /&gt;
* '''and:'''&lt;br /&gt;
* '''not:'''&lt;br /&gt;
* '''or:'''&lt;br /&gt;
&lt;br /&gt;
In the example below, the condition is true when either n1 is greater than 25% or equal to 0%.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;or&amp;gt;&lt;br /&gt;
    &amp;lt;greater-than&amp;gt;&lt;br /&gt;
     &amp;lt;property&amp;gt;engines/engine[1]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
     &amp;lt;value&amp;gt;25&amp;lt;/value&amp;gt;&lt;br /&gt;
    &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;equals&amp;gt;&lt;br /&gt;
     &amp;lt;property&amp;gt;engines/engine[1]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
     &amp;lt;value&amp;gt;0&amp;lt;/value&amp;gt;&lt;br /&gt;
    &amp;lt;/equals&amp;gt;&lt;br /&gt;
   &amp;lt;/or&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of implementation into an animation looks as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;suface-positions/left-aileron-pos-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;suface-positions/left-aileron-pos-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;value&amp;gt;10&amp;lt;/value&amp;gt;&lt;br /&gt;
   &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interpolation ===&lt;br /&gt;
For non-fixed factors, an interpolation &amp;quot;table&amp;quot; can be created. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;interpolation&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt; 0.0&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt; 0.0&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt; 0.667&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt; 0.0&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt; 1.0&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt; 0.5&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
  &amp;lt;/interpolation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The lines above represent the following table:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Input&lt;br /&gt;
!Output&lt;br /&gt;
|-&lt;br /&gt;
|0.0&lt;br /&gt;
|0.0&lt;br /&gt;
|-&lt;br /&gt;
|0.667&lt;br /&gt;
|0.0&lt;br /&gt;
|-&lt;br /&gt;
|1.0&lt;br /&gt;
|0.5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can add as many entries as you need. Interpolation tables are often used for gear animations (eg. to open doors during gear-movements and close them again once the gear is either retracted or fully extended).&lt;br /&gt;
&lt;br /&gt;
=== Expressions ===&lt;br /&gt;
For some animations it is possible to define complex animations by using [[Expressions|Expressions]]. This even allows to drive the animation from multiple properties without the need for additional Nasal scripts. Here is an example for a translate animation depending on two properties and the cosine function:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
     &amp;lt;type&amp;gt;translate&amp;lt;/type&amp;gt;&lt;br /&gt;
     &amp;lt;expression&amp;gt;&lt;br /&gt;
       &amp;lt;product&amp;gt;&lt;br /&gt;
         &amp;lt;property&amp;gt;/my/factor-property&amp;lt;/property&amp;gt;&lt;br /&gt;
         &amp;lt;cos&amp;gt;&lt;br /&gt;
           &amp;lt;deg2rad&amp;gt;&lt;br /&gt;
             &amp;lt;property&amp;gt;/my/angular-property&amp;lt;/property&amp;gt;&lt;br /&gt;
           &amp;lt;/deg2rad&amp;gt;&lt;br /&gt;
         &amp;lt;/cos&amp;gt;&lt;br /&gt;
       &amp;lt;/product&amp;gt;&lt;br /&gt;
     &amp;lt;/expression&amp;gt;&lt;br /&gt;
     [..]more elements[..]&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Animations which can utilize [[Expressions|Expressions]] are: &lt;br /&gt;
* [[Howto:Animate_models#Translate|Translate]]&lt;br /&gt;
* [[Howto:Animate_models#Rotate|Rotate]]&lt;br /&gt;
* [[Howto:Animate_models#Scale|Scale]]&lt;br /&gt;
* [[Howto:Animate_models#Range|Range]]&lt;br /&gt;
* [[Howto:Animate_models#Blend|Blend]]&lt;br /&gt;
&lt;br /&gt;
See more detailed info at [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
As of January 2021 FlightGear supports multiple light sources just like Project Rembrandt has always done.&lt;br /&gt;
[[Compositor#Lights|Adding lights to a model]]&lt;br /&gt;
&lt;br /&gt;
== Object animations ==&lt;br /&gt;
=== Alpha-test ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;alpha-test&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;alpha-factor&amp;gt;0.01&amp;lt;/alpha-factor&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This &amp;quot;animation&amp;quot; is a way to set an alpha test on a model branch. The effect is to avoid depth buffer writing of pixel that are not seen because they are transparent. This is particulary useful when modeling a metallic structure or a tree with a billboard. The threshold of transparency is set with the &amp;lt;alpha-factor&amp;gt; element.  See also [[Pixel testing in effects]].&lt;br /&gt;
&lt;br /&gt;
=== Blend ===&lt;br /&gt;
Blends an object with the surrounding. Comparable to a translucency animation. A value of 0 corresponds to no transparency, i.e. and ordinary solid object, and a value of 1 makes the object fully transparent, i.e., not visible at all.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;blend&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;/velocities/airspeed-kt&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;0.00025&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;min&amp;gt;0.2&amp;lt;/min&amp;gt;&lt;br /&gt;
  &amp;lt;max&amp;gt;0.7&amp;lt;/max&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''property:'''&lt;br /&gt;
* '''factor:'''&lt;br /&gt;
* '''min:'''&lt;br /&gt;
* '''max:'''&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
Note that when using the Project Rembrandt renderer, all transparent and translucent objects must be registered to display properly.  [[Project_Rembrandt#Registering_all_translucent_surfaces|More information here.]]&lt;br /&gt;
&lt;br /&gt;
=== Billboard ===&lt;br /&gt;
This faces an object towards the viewer. Often used on 2D objects, like clouds, trees and lights.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;billboard&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;spherical type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/spherical&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''spherical:'''&lt;br /&gt;
&lt;br /&gt;
=== Dist-scale ===&lt;br /&gt;
Used to scale an object, based on the distance to the viewer. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;ind&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;dep&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (independent and dependent) are the distance in meters and the scale at that distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;dist-scale&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;interpolation&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt;0&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt;1&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt;300&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt;4&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
   &amp;lt;entry&amp;gt;&lt;br /&gt;
    &amp;lt;ind&amp;gt;1500&amp;lt;/ind&amp;gt;&lt;br /&gt;
    &amp;lt;dep&amp;gt;8&amp;lt;/dep&amp;gt;&lt;br /&gt;
   &amp;lt;/entry&amp;gt;&lt;br /&gt;
  &amp;lt;/interpolation&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can optionally add [[#Center|&amp;amp;lt;center&amp;amp;gt;]] coordinates, to scale the object around that point.&lt;br /&gt;
&lt;br /&gt;
=== Flash ===&lt;br /&gt;
&lt;br /&gt;
Used to scale an object based on the cosine of the angle between the axis provided in the animation and the view vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;flash&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;offset&amp;gt;0.0&amp;lt;/offset&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;1.0&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;power&amp;gt;2&amp;lt;/power&amp;gt;&lt;br /&gt;
  &amp;lt;two-sides type=&amp;quot;bool&amp;quot;&amp;gt;false&amp;lt;/two-sides&amp;gt;&lt;br /&gt;
  &amp;lt;min&amp;gt;0.0&amp;lt;/min&amp;gt;&lt;br /&gt;
  &amp;lt;max&amp;gt;1.0&amp;lt;/max&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;0.0&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;0.0&amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;0.0&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0.0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;-1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0.1&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''offset:'''&lt;br /&gt;
* '''factor:'''&lt;br /&gt;
* '''power:'''&lt;br /&gt;
* '''two-sides:''' if false, nothing is drawn if the cosine is negative.&lt;br /&gt;
* '''min:'''&lt;br /&gt;
* '''max:'''&lt;br /&gt;
&lt;br /&gt;
scale = factor * pow( cosine, power ) + offset&lt;br /&gt;
&lt;br /&gt;
scale is then clamped between min and max.&lt;br /&gt;
&lt;br /&gt;
and this scale factor is applied to the object, from the center specified. It works best if scale is less than 1. Otherwise, there will be clipping issues.&lt;br /&gt;
&lt;br /&gt;
=== Noshadow ===&lt;br /&gt;
This animation is used to make sure an object will cast no shadow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;noshadow&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Range ===&lt;br /&gt;
: ''See also [[Modeling - Getting Started#Level of Detail (LOD)]].''&lt;br /&gt;
&lt;br /&gt;
To prevent objects -like instruments- being drawn when the aircraft is actually too far away for them to be seen anyway, a range animation is used. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;range&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;min-m&amp;gt;0&amp;lt;/min-m&amp;gt;&lt;br /&gt;
  &amp;lt;max-m&amp;gt;30&amp;lt;/max-m&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''min-m:''' the shortest distance (in meters) from the object center at which it is visible.&lt;br /&gt;
* '''max-m:''' the largest distance (in meters) from the object center at which it is visible.&lt;br /&gt;
&lt;br /&gt;
You could also use the generic level of detail (LOD) properties, which can be set by the user through View &amp;gt; Adjust LOD rangers: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Description&lt;br /&gt;
! Default value&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;/sim/rendering/static-lod/bare&amp;lt;/tt&amp;gt;&lt;br /&gt;
| only a rough exterior model&lt;br /&gt;
| 30,000 m&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;/sim/rendering/static-lod/rough&amp;lt;/tt&amp;gt; &lt;br /&gt;
| most should be visible&lt;br /&gt;
| 9,000 m&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;/sim/rendering/static-lod/detailed&amp;lt;/tt&amp;gt; &lt;br /&gt;
| all details should be visible&lt;br /&gt;
| 1,500 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The animation code will look like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;range&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;min-m&amp;gt;0&amp;lt;/min-m&amp;gt;&lt;br /&gt;
  &amp;lt;max-property&amp;gt;sim/rendering/static-lod/bare&amp;lt;/max-property&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can have both ranges (max and min) bound to a property, or just one of them.&lt;br /&gt;
* '''min-property:''' &lt;br /&gt;
* '''max-property:'''&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Rotate ===&lt;br /&gt;
One of the most important and frequently used animations of all. It rotates an object to an absolute position in degrees, as provided by the property-value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;surface-positions/left-aileron-pos-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-deg&amp;gt;25&amp;lt;/offset-deg&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''factor:''' is optional.&lt;br /&gt;
* '''offset-deg:''' is optional. Offset in degrees.&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Scale ===&lt;br /&gt;
A scale animation scales (resizes) an object. This can be either property-value dependant (first example) or a fixed scale (second example).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;scale&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;sim/time/sun-angle-rad&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;x-min&amp;gt;1.0&amp;lt;/x-min&amp;gt;&lt;br /&gt;
  &amp;lt;y-min&amp;gt;1.0&amp;lt;/y-min&amp;gt;&lt;br /&gt;
  &amp;lt;z-min&amp;gt;1.0&amp;lt;/z-min&amp;gt;&lt;br /&gt;
  &amp;lt;x-factor&amp;gt;1.4&amp;lt;/x-factor&amp;gt;&lt;br /&gt;
  &amp;lt;y-factor&amp;gt;1.4&amp;lt;/y-factor&amp;gt;&lt;br /&gt;
  &amp;lt;z-factor&amp;gt;2.0&amp;lt;/z-factor&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ?-min: the mimimum scale factor for each axis. If the property value would result in a smaller factor than this setting, the scale animation will hold.&lt;br /&gt;
* ?-factor: the scale factor for each axis (factor*property=scale factor).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;scale&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;x-offset&amp;gt;0.5&amp;lt;/x-offset&amp;gt;&lt;br /&gt;
  &amp;lt;y-offset&amp;gt;0.5&amp;lt;/y-offset&amp;gt;&lt;br /&gt;
  &amp;lt;z-offset&amp;gt;0.5&amp;lt;/z-offset&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* x.offset: the scale factor.&lt;br /&gt;
* Add [[#Center|&amp;amp;lt;center&amp;amp;gt;]] coordinates, to scale the object around that point.&lt;br /&gt;
* '''You can optionally use an [[Howto:Animate_models#Expressions|expression]] in the &amp;lt;factor&amp;gt; or &amp;lt;offset&amp;gt; inputs.''' For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Select ===&lt;br /&gt;
This animation selects (or unselects) objects when certain conditions are true (or false). The example below shows the object when the n1 of engine[1] is higher than 25%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;select&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;&lt;br /&gt;
   &amp;lt;greater-than&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;engines/engine[0]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;value&amp;gt;25&amp;lt;/value&amp;gt;&lt;br /&gt;
   &amp;lt;/greater-than&amp;gt;&lt;br /&gt;
  &amp;lt;/condition&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shader ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;shader&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;shader&amp;gt;chrome&amp;lt;/shader&amp;gt;&lt;br /&gt;
  &amp;lt;texture&amp;gt;chrome2.png&amp;lt;/texture&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''shader:''' &lt;br /&gt;
* '''texture:''' path to the texture used by the shader.&lt;br /&gt;
&lt;br /&gt;
=== Spin ===&lt;br /&gt;
Very similar to [[#Rotate|rotate]], but the property provides a value in revolutions per minute (RPM) rather than an absolute position in degrees, and offset cannot be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;spin&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;engines/engine[0]/n1&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;-1.50&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt; 1   &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; 0.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''factor:''' is optional.&lt;br /&gt;
&lt;br /&gt;
=== Timed ===&lt;br /&gt;
Swtiches between objects at specified intervals. This example switches between a lights-on model and a lights-off model. Lights on are shown 0.2 seconds, while lights off are displayed for 0.8 seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;timed&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;BacklightOn&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;BacklightOff&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;use-personality type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/use-personality&amp;gt;&lt;br /&gt;
  &amp;lt;branch-duration-sec&amp;gt;0.8&amp;lt;/branch-duration-sec&amp;gt;&lt;br /&gt;
  &amp;lt;branch-duration-sec&amp;gt;0.2&amp;lt;/branch-duration-sec&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tracking ===&lt;br /&gt;
The new (in 2.11) [[Howto:Animate gear scissors using the tracking animation|''locked-track animation'']] can do exactly the same thing as the [https://docs.blender.org/manual/en/latest/animation/constraints/tracking/locked_track.html Locked Track constraint] available in Blender. However it can also be used to simulate simple inverse kinematic systems consisting of two bones connected with a revolute joint (aka hinge). See [[Howto:Animate gear scissors using the tracking animation|detailed explanation]].&lt;br /&gt;
&lt;br /&gt;
=== Translate ===&lt;br /&gt;
The same as [[#Textranslate|textranslate]], but this animation moves a whole object (so including fixed textures). The example below will move an object in the y-direction:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
!Property value&lt;br /&gt;
!Output&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| -2.5&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 2.5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 7.5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;translate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;controls/seat/pilot/position-norm&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;5&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-m&amp;gt;2.5&amp;lt;/offset-m&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using interpolation tables such as:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;interpolation&amp;gt;&lt;br /&gt;
	&amp;lt;entry&amp;gt;&amp;lt;ind&amp;gt;0.0&amp;lt;/ind&amp;gt;&amp;lt;dep&amp;gt; 0&amp;lt;/dep&amp;gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;
	&amp;lt;entry&amp;gt;&amp;lt;ind&amp;gt;0.666&amp;lt;/ind&amp;gt;&amp;lt;dep&amp;gt;0.18&amp;lt;/dep&amp;gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;
	&amp;lt;entry&amp;gt;&amp;lt;ind&amp;gt;1.0&amp;lt;/ind&amp;gt;&amp;lt;dep&amp;gt;0.27&amp;lt;/dep&amp;gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/interpolation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The first figure (&amp;lt;ind&amp;gt; refers to the value of the property associated with the object and the second figure (in &amp;lt;dep&amp;gt;) refers to the amount that the object moves in metres. For example, in this case, the object moves 18cm when the value reads 0.66 and 27cm when the value is 1.&lt;br /&gt;
&lt;br /&gt;
'''IF used WTIHOUT property''' : The object is placed at some (Value of Offset) meters away from its original position, along the virtual axis formed by said original position and the point with coordinates x/y/z defined in the &amp;lt;axis&amp;gt; tag.&lt;br /&gt;
Mathematically, assuming the Object to translate is (in the model space) placed at point A (x1, y1, z1) and you want to relocate it to point B (x2, y2, z2) then x2,y2,z2 are the values in the &amp;lt;axis&amp;gt; tag of the Translate animation and &amp;lt;offset&amp;gt; can be computed as SQRT((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''factor:''' is optional.&lt;br /&gt;
* '''offset-m:''' is optional. Offset in meters.&lt;br /&gt;
* '''[[Howto:Animate_models#Expressions|expression]]:''' is optional. For more details see [[Expressions|Expressions]]&lt;br /&gt;
&lt;br /&gt;
== Material animation ==&lt;br /&gt;
An animation type that can be used in various ways. Of course you can combine the below mentiond systems into one (big) animation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt; &lt;br /&gt;
  &amp;lt;type&amp;gt;material&amp;lt;/type&amp;gt; &lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property-base&amp;gt;sim/model/c172p/material&amp;lt;/property-base&amp;gt;&lt;br /&gt;
  &amp;lt;global type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/global&amp;gt; &amp;lt;!-- This tag is no longer supported --&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  lines as mentioned below&lt;br /&gt;
  ...&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Optional:'''&lt;br /&gt;
* '''property-base:''' when using prop(erties), you might want to set a property-base. All props will be relative to this path.&lt;br /&gt;
* '''global (deprecated):''' by setting this to &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt;, all objects using the same material as the defined object(s) (via &amp;lt;tt&amp;gt;&amp;lt;object-name&amp;gt;&amp;lt;/tt&amp;gt;) will be affected by the animation. This is preferred to listing several objects in &amp;lt;object-name&amp;gt; tags. It's not only faster, but also doesn't break animations by forcing objects together. &amp;lt;span style=&amp;quot;color:red; text-decoration: underline;&amp;quot;&amp;gt;This tag is no longer supported&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Numbers are clamped to 0.0-1.0, except &amp;quot;shininess&amp;quot;, which is clamped to 0-128.&lt;br /&gt;
* By appending &amp;lt;tt&amp;gt;-prop&amp;lt;/tt&amp;gt; each of the material properties can read its value from another property.&lt;br /&gt;
&lt;br /&gt;
=== Ambient ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;ambient&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
  &amp;lt;/ambient&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diffuse ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;diffuse&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
  &amp;lt;/diffuse&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Emission ===&lt;br /&gt;
{{Main article|Howto: Illuminate faces}}&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;emission&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
   &amp;lt;factor-prop&amp;gt;controls/lighting/panel-norm&amp;lt;/factor-prop&amp;gt;&lt;br /&gt;
  &amp;lt;/emission&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emission colors are multiplied by the factor-prop value. 1 is maximum color intensity, while 0 is the minimum. Colors are calculated according to the [http://en.wikipedia.org/wiki/RGB_color_model RGB color model].&lt;br /&gt;
&lt;br /&gt;
=== Shininess ===&lt;br /&gt;
Shininess is clamped to 0-128.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;shininess&amp;gt;105&amp;lt;/shininess&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Specular ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;specular&amp;gt;&lt;br /&gt;
   &amp;lt;red&amp;gt;1.0&amp;lt;/red&amp;gt;&lt;br /&gt;
   &amp;lt;green&amp;gt;0.2&amp;lt;/green&amp;gt;&lt;br /&gt;
   &amp;lt;blue&amp;gt;0.0&amp;lt;/blue&amp;gt;&lt;br /&gt;
  &amp;lt;/specular&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Texture ===&lt;br /&gt;
Used for the [[Livery over MP]] system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;property-base&amp;gt;sim/model/livery&amp;lt;/property-base&amp;gt; &lt;br /&gt;
  &amp;lt;texture-prop&amp;gt;engine&amp;lt;/texture-prop&amp;gt; &lt;br /&gt;
  &amp;lt;texture&amp;gt;KLM.png&amp;lt;/texture&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Transparency ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;transparency&amp;gt;&lt;br /&gt;
   &amp;lt;alpha-prop&amp;gt;rotors/tail/rpm&amp;lt;/alpha-prop&amp;gt;&lt;br /&gt;
   &amp;lt;factor&amp;gt;-0.0015&amp;lt;/factor&amp;gt;&lt;br /&gt;
   &amp;lt;offset&amp;gt;1&amp;lt;/offset&amp;gt;&lt;br /&gt;
  &amp;lt;/transparency&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Threshold ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
  &amp;lt;threshold&amp;gt;0.001&amp;lt;/threshold&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Texture Animations ==&lt;br /&gt;
&lt;br /&gt;
Applying different matrix transformations to the textures of an object.&lt;br /&gt;
&lt;br /&gt;
=== Textranslate ===&lt;br /&gt;
A very important animation for cockpits! This animation moves textures over a surface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;textranslate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;autopilot/settings/target-speed-kt&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;bias&amp;gt;0.0001&amp;lt;/bias&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;0.001&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;step&amp;gt;100&amp;lt;/step&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bias:''' Adds an offset to the property before factor/step. A small value is needed to compensate for [http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems floating point accuracy].&lt;br /&gt;
* '''factor:''' property * factor * texture width/height = the amount of pixels that the texture should be translated. If your texture is 256 pixels, an textranslate of 0.1 will result in the texture moving with 26 pixels, into the direction specified by the axis settings.&lt;br /&gt;
* '''step:''' the step size at which the texture is translated. If this is set to 0.1, the texture will only be translated at 0.1, 0.2, 0.3 etc.&lt;br /&gt;
* '''axis:''' the direction in which the texture is translated. Y is up/down, while X is left/right.&lt;br /&gt;
&lt;br /&gt;
=== Texrotate ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;texrotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;some/property/path&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;25&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-deg&amp;gt;25&amp;lt;/offset-deg&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
    &amp;lt;x&amp;gt;0.5&amp;lt;/x&amp;gt;&lt;br /&gt;
    &amp;lt;y&amp;gt;0.5&amp;lt;/y&amp;gt;&lt;br /&gt;
    &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
    &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
    &amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;&lt;br /&gt;
    &amp;lt;z&amp;gt;1&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
&amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Textrapezoid ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;textrapezoid&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;HUD.l.canvas&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;/hud/trapezoid-correction&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;side&amp;gt;bottom&amp;lt;/side&amp;gt;&lt;br /&gt;
&amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''side''': side of quad which should be scaled (''top'' (default)/''right''/''bottom''/''left'')&lt;br /&gt;
&lt;br /&gt;
=== Texmultiple ===&lt;br /&gt;
&lt;br /&gt;
Only one texture matrix can be applied to each object. With ''textmultiple'' multiple texture animations can be combined into a single matrix, applied to the specified object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;texmultiple&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;HUD.l.canvas&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;transform&amp;gt;&lt;br /&gt;
    &amp;lt;subtype&amp;gt;textranslate&amp;lt;/subtype&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/hud/offset-x&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;axis&amp;gt;&lt;br /&gt;
     &amp;lt;x&amp;gt;1&amp;lt;/x&amp;gt;&lt;br /&gt;
     &amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;&lt;br /&gt;
     &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
   &amp;lt;/axis&amp;gt;&lt;br /&gt;
  &amp;lt;/transform&amp;gt;&lt;br /&gt;
  &amp;lt;transform&amp;gt;&lt;br /&gt;
    &amp;lt;subtype&amp;gt;textranslate&amp;lt;/subtype&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/hud/offset-y&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;axis&amp;gt;&lt;br /&gt;
     &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;&lt;br /&gt;
     &amp;lt;y&amp;gt;1&amp;lt;/y&amp;gt;&lt;br /&gt;
     &amp;lt;z&amp;gt;0&amp;lt;/z&amp;gt;&lt;br /&gt;
   &amp;lt;/axis&amp;gt;&lt;br /&gt;
  &amp;lt;/transform&amp;gt;&lt;br /&gt;
  &amp;lt;transform&amp;gt;&lt;br /&gt;
    &amp;lt;subtype&amp;gt;textrapezoid&amp;lt;/subtype&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/hud/trapezoid-correction&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;/transform&amp;gt;&lt;br /&gt;
&amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object interaction animations ==&lt;br /&gt;
=== Enable-hot ===&lt;br /&gt;
Scenery objects are automatically defined as solid by FlightGear, meaning that an aircraft can taxi on them and/or crash when touching. For certain objects (groundmarkings, beacon light-beams etc.) this might be an unwanted feature. The solidness can be disabled with the following animation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;enable-hot type=&amp;quot;bool&amp;quot;&amp;gt;false&amp;lt;/enable-hot&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''enable-hot:''' can be either true or false. Remember that objects are automatically solid, so it should not be necessary to set this at all when wanting solidness.&lt;br /&gt;
&lt;br /&gt;
=== Interactions ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt; &lt;br /&gt;
  &amp;lt;type&amp;gt;interaction&amp;lt;/type&amp;gt; &lt;br /&gt;
  &amp;lt;object-name&amp;gt;Object&amp;lt;/object-name&amp;gt; &lt;br /&gt;
  &amp;lt;interaction-type&amp;gt;carrier-wire&amp;lt;/interaction-type&amp;gt; &lt;br /&gt;
 &amp;lt;/animation&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''interaction-type:''' can have the following values:&lt;br /&gt;
**'''carrier-catapult:'''&lt;br /&gt;
** '''carrier-wire:''' makes the object act as an arresting wire, as used on [[aircraft carrier]]s.&lt;br /&gt;
&lt;br /&gt;
== Direct manipulation animations ==&lt;br /&gt;
=== Knob / slider (v. 2.11-) ===&lt;br /&gt;
{{Main article|Knob / slider animation}}&lt;br /&gt;
&lt;br /&gt;
=== Pick ===&lt;br /&gt;
{{Main article|Howto: Make a clickable panel#Pick}}&lt;br /&gt;
&lt;br /&gt;
=== Touch ===&lt;br /&gt;
&lt;br /&gt;
The touch animation provides the normalized coordinates of a touch (or click) event on a 2d surface. The coordinates are passed in the argument and can be accessed using cmdarg() in Nasal.&lt;br /&gt;
&lt;br /&gt;
* Touch animation is designed to work with a quad that is being used as a Canvas placement (display).&lt;br /&gt;
* The touch animation must not be combined with a pick animation on the same object.&lt;br /&gt;
* More info here: [[Touch Animation]]&lt;br /&gt;
&lt;br /&gt;
==== touch example ====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;animation&amp;gt;&lt;br /&gt;
        &amp;lt;type&amp;gt;touch&amp;lt;/type&amp;gt;&lt;br /&gt;
        &amp;lt;visible&amp;gt;true&amp;lt;/visible&amp;gt;&lt;br /&gt;
        &amp;lt;object-name&amp;gt;CanvasPlacement&amp;lt;/object-name&amp;gt;&lt;br /&gt;
        &amp;lt;action&amp;gt;&lt;br /&gt;
            &amp;lt;touch&amp;gt;0&amp;lt;/touch&amp;gt;&lt;br /&gt;
            &amp;lt;repeatable&amp;gt;false&amp;lt;/repeatable&amp;gt;&lt;br /&gt;
            &amp;lt;binding&amp;gt;&lt;br /&gt;
                &amp;lt;command&amp;gt;nasal&amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;script&amp;gt;print(&amp;quot;touch input (&amp;quot;,cmdarg().getNode(&amp;quot;x&amp;quot;).getValue(),&amp;quot;,&amp;quot;,cmdarg().getNode(&amp;quot;y&amp;quot;).getValue())&amp;lt;/script&amp;gt;&lt;br /&gt;
            &amp;lt;/binding&amp;gt;&lt;br /&gt;
        &amp;lt;/action&amp;gt;&lt;br /&gt;
    &amp;lt;/animation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shadow Handling ==&lt;br /&gt;
There exist several possibilites for handling of shadows. &amp;lt;br /&amp;gt;&lt;br /&gt;
See '''[[ALS_technical_notes|ALS Technical Notes]]''' and more specific '''[[ALS_technical_notes#ALS_fuselage_shadow_effect|Fuselage Shadow Effect with ALS]]''' for a relatively simple shadow handling.&amp;lt;br /&amp;gt;&lt;br /&gt;
See '''[[Project Rembrandt]]''' which - amongst other functionality - implements a very realistic shadow mapping.&lt;br /&gt;
As of January 2021 Project Rembrandt was replaced by the '''[[Compositor]]''' renderer which combines both Project Rembrandt and ALS in a single rendering engine. This also means that the Fuselage Shadow Effect with ALS is now deprecated.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix|all|&lt;br /&gt;
* {{cite web |url=http://www.opensubscriber.com/message/flightgear-devel@flightgear.org/958955.html |title=&amp;quot;material&amp;quot; animation (and the bo105 as an example) |first=Melchior |last=Franz |date=22 March 2005 |work=FlightGear-devel mailinglist }}&lt;br /&gt;
* {{cite web |url=http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg01546.html |title=flash animation |first=Frederic |last=Bouvier |date=22 Feb 2006 |work=FlightGear-devel mailinglist }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[MP Fallback models]]&lt;br /&gt;
* [[Howto:Animate gear scissors]]&lt;br /&gt;
* [[Howto:Animate helicopters]]&lt;br /&gt;
* [[Howto:Creating 3D instruments]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=37353|title=3d models, how to produce them in an understandable way}} (April 2020-) - Touches on the subject of not using LOD range animations in scenery models.&lt;br /&gt;
* {{forum link|t=36545|title=speedo Drum settings}} (November 2019) - Animating a mechanical multi-digit drum counter&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement|Animate models]]&lt;br /&gt;
[[Category:Howto|Animate models]]&lt;br /&gt;
[[Category:Modeling|Animate models]]&lt;br /&gt;
[[Category:Scenery enhancement|Animate models]]&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Dassault_Mirage_2000-5&amp;diff=133797</id>
		<title>Dassault Mirage 2000-5</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Dassault_Mirage_2000-5&amp;diff=133797"/>
		<updated>2021-11-21T16:42:45Z</updated>

		<summary type="html">&lt;p&gt;SammySkycrafts: Edited OPRF Site URL to correct dead link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Distinguish|Dassault Mirage 2000}}&lt;br /&gt;
{{Note|The new JSBsim version is now in master.}}&lt;br /&gt;
{{:{{PAGENAME}}/info}}&lt;br /&gt;
The '''Dassault Mirage 2000-5''' is a French multirole, single-engine fourth-generation jet fighter manufactured by Dassault Aviation. An improvement of the [[Mirage 2000]], it was improved by Thomson-CSF (now Thales Group) in the early 1990s in response to the Mirage 2000's ageing compared to the latest [[F-16]] fighter models.&lt;br /&gt;
&lt;br /&gt;
Improvements over the Mirage 2000 include the capability to carry a laser designator pod, new pulse-doppler multi-target radar, new defensive systems, and updated avionics, including a night vision-compatible glass cockpit, wide-angle [[HUD]], and {{Abbr|HOTAS|Hands On Throttle And Stick}} controls.&lt;br /&gt;
&lt;br /&gt;
Coming into service with the French Air Force (''Armée de l'Air''), and exported to several countries, Dassault further improved it by creating the {{Wikipedia|Dassault Mirage 2000#Mirage 2000-5 Mark 2|Mirage 2000-5 Mark 2}}, the most advanced of all Mirage 2000s.&lt;br /&gt;
&lt;br /&gt;
== Keyboard Controls ==&lt;br /&gt;
{| class=&amp;quot;keytable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Function&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|d}} || Open/close canopy (3 positions : opened, closed and half-opened)&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|e}} || Fire weapon&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|e}} || Parachute (landing)&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|j}} || Jettison tank&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|t}} || Toggle ECM &amp;amp; RWR&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|t}} || Change radar distances (10, 20 50, 100, 150)&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|r}} || Activate/deactivate targeting the nearest in the HUD (the target has to be bellow radar range)&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|h}} || Toggle armament circles&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}} || On/off Engines (autostart)&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|l}} || Flare out&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|l}} || Landing lights&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|n}} || Next target&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|n}} || Previous target&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|b}} || Air brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|w}} || Cycle stick weapon mode selector&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
[[File:Mirage 2000-5's colored afturburner.png|thumb|mirage 2000-5's colored afturburner at night]]&lt;br /&gt;
=== General characteristics ===&lt;br /&gt;
* Crew: 1&lt;br /&gt;
* Length: 14.36 m (47 ft 1 in)&lt;br /&gt;
* Wingspan: 9.13 m (29 ft)&lt;br /&gt;
* Height: 5.20 m (17 ft)&lt;br /&gt;
* Wing area: 41 m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; (441.3 ft&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Weight ===&lt;br /&gt;
* Empty weight: 7,500 kg (16,350 lb)&lt;br /&gt;
* Loaded weight: 13,800 kg (30,420 lb)&lt;br /&gt;
* Max. takeoff weight: 17,000 kg (37,500 lb)&lt;br /&gt;
&lt;br /&gt;
=== Engine ===&lt;br /&gt;
* Powerplant: 1 x SNECMA M53-P2 afterburning turbofan &lt;br /&gt;
** Dry thrust: 64.3 kN (14,500 lbf)&lt;br /&gt;
** Thrust with afterburner: 95.1 kN (21,400 lbf)&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
* Maximum speed: &lt;br /&gt;
** High altitude: Mach 2.2 (2,530+ km/h, 1,500+ mph)&lt;br /&gt;
** Low altitude: 1,110 km/h (690 mph)&lt;br /&gt;
* Range: 1,550 km (837 nmi, 963 mi) with drop tanks&lt;br /&gt;
* Ferry range: 3,335 km (1,800 nmi, 2,073 mi) with auxiliary fuel&lt;br /&gt;
* Service ceiling: 17,060 m (59,000 ft)&lt;br /&gt;
* Rate of climb: 285 m/s (56,000 ft/min)&lt;br /&gt;
* Wing loading: 337 kg/m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; (69 lb/ft&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
* Thrust/weight: 0.91&lt;br /&gt;
* Roll Rate: 270 deg/sec &lt;br /&gt;
* G limits: +9.0 g / -3.2 g (override mode: 11 g, structural limit: 12 g)&lt;br /&gt;
&lt;br /&gt;
== Help ==&lt;br /&gt;
=== Weapons ===&lt;br /&gt;
[[File:Mirage 2000-5's weapons.png|thumb|some mirage 2000-5's air-air weapons]]&lt;br /&gt;
Available weapons for FlightGear's Mirage 2000-5 are as follows:&lt;br /&gt;
&lt;br /&gt;
* Guns: 2 x 30 mm (1.18 in) DEFA 554 revolver cannon, 125 rounds per gun&lt;br /&gt;
&lt;br /&gt;
* Missiles:&lt;br /&gt;
** Air-to-air missiles: {{Wikipedia|MBDA MICA}}, {{Wikipedia|R.550 Magic|Matra R.550 Magic 2}}, {{Wikipedia|Super 530|Matra Super 530}} {{clarify}}, {{Wikipedia|AIM-120 AMRAAM}}, {{Wikipedia|AIM-9 Sidewinder}}, {{Wikipedia|AIM-54 Phoenix}}, and the {{Wikipedia|R-73 (missile)#Variants|Vympel R-74}}.&lt;br /&gt;
** Air-to-ground missiles: {{Wikipedia|Storm Shadow}} (''SCALP'' in French service), {{Wikipedia|Sea Eagle (missile)|Sea Eagle}}, {{Wikipedia|AGM-65 Maverick}}, {{Wikipedia|GBU-16}}, and the {{Wikipedia|GBU-12}}.&lt;br /&gt;
&lt;br /&gt;
==== How to fire a guided missile ==== &lt;br /&gt;
# Select your missile on the graphical MFD, with the top button of the left series button.&lt;br /&gt;
# Then, select your weapon mode with {{key press|w}} (cycles through nothing, guns, missiles)&lt;br /&gt;
# Press {{key press|Shift|r}} to activate radar illumination.&lt;br /&gt;
# Acquire your target.&lt;br /&gt;
# Fire with {{key press|e}}.&lt;br /&gt;
&lt;br /&gt;
{{Note|Due to the generic missile script, FlightGear's Mirage 2000-5 can carry missiles not carried on the aircraft in real life.  For a list of weapons available to the aircraft in real life, please see {{Wikipedia|Dassault Mirage 2000#Specifications (Mirage 2000C)}}.}}&lt;br /&gt;
{{Caution|It is a bad idea to fire a missile while under negative G.}}&lt;br /&gt;
&lt;br /&gt;
=== Refueling ===&lt;br /&gt;
The Mirage is capable of [[mid-air refueling]].  You can enter the desired [[TACAN]] code into the right MFD (see second video), and then use both radar and the TACAN to guide you in.&lt;br /&gt;
&lt;br /&gt;
=== Radar ===&lt;br /&gt;
The radar has 5 ranges (10, 20, 50, 100, and 150 nm) which can be switched with {{key press|t}}. It can identify multiple targets and show some information about them.  &lt;br /&gt;
&lt;br /&gt;
=== HUD ===&lt;br /&gt;
The HUD shows both potential targets and the locked target.  It also shows if the undercarriage is extended, the distance to the ground if the altitude is below 5,000 feet, and the Mach speed if the aircraft is going faster than Mach 0.8.&lt;br /&gt;
=== Dual seat in Multiplayer Mode ===&lt;br /&gt;
You can flight in the back seat as a passenger in [[Multiplayer]] mode&lt;br /&gt;
This is under development, the goal is to make the mirage 2000 [[Dual Control]] ready !&lt;br /&gt;
&lt;br /&gt;
how to test multiplayer on same PC ?&lt;br /&gt;
* run flightgear with parameters :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--aircraft=m2000-5B          --multiplay=out,10,127.0.0.1,5000 --multiplay=in,10,127.0.0.1,5001 --callsign=&amp;quot;PILOT&amp;quot; --prop:/sim/remote/pilot-callsign=&amp;quot;NOSA&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* run another instance with parameters :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--aircraft=m2000-5B-backseat --multiplay=out,10,127.0.0.1,5001 --multiplay=in,10,127.0.0.1,5000 --callsign=&amp;quot;NOSA&amp;quot;  --prop:/sim/remote/pilot-callsign=&amp;quot;PILOT&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Mirage2000-5 multiplayer dual seat.png|thumb|mirage 2000-5 multiplayer dual seat]]&lt;br /&gt;
&lt;br /&gt;
FYI : NOSA (Navigateur Officier Systèmes d'Armes) mean Weapons Systems Officer Navigator.&lt;br /&gt;
&lt;br /&gt;
=== Sky Knights Squadron textbook ===&lt;br /&gt;
&lt;br /&gt;
==== I. Weapons use ====&lt;br /&gt;
FOX-3:&lt;br /&gt;
MICA-EM: under 40 NM, choose the radar range just above your enemy's distance. Comparable to AIM-120, but better at a shorter distance. Extremely maneuverable due to thrust vectoring.&lt;br /&gt;
&lt;br /&gt;
FOX-1:&lt;br /&gt;
Super 530D: under 25 NM, rather precise at close range too. Slightly better than the AIM-7.&lt;br /&gt;
&lt;br /&gt;
FOX-2:&lt;br /&gt;
MICA-IR: use under 20 NM, target must be locked with radar. Very useful in dogfights because of its superiority towards the AIM-9. Extremely maneuverable due to thrust vectoring.&lt;br /&gt;
Magic II: under 7 NM, target must be locked with radar. Corrects trajectory every 2/10th of second, rather precise, but inferior to AIM-9.&lt;br /&gt;
&lt;br /&gt;
Guns: 125 rounds, don't waste them by shooting above 1000 meters, shoot at close range only when you have a solution. In a fight against several enemies, you can't be winchester.&lt;br /&gt;
&lt;br /&gt;
WARNING against aircraft like the F-15, the Mirage has a slight disadvantage (less missiles) and it's better if you can go nearer and engage dogfight, in which the Mirage outturns many fighters.&lt;br /&gt;
&lt;br /&gt;
==== II. ACM ====&lt;br /&gt;
The Mirage has a very good turn rate, which means you can keep on with full reheat for several minutes in a high-G turn. Against a fighter like the JA-37 or the F-15, it is recommended to enter a two-circle fight. Against better turning aircraft such as the F-16, it is recommended to choose a one-circle fight.&lt;br /&gt;
When merging with your opponent, it is suggested to throttle up 1 or 2 nautical miles before crossing your enemy, as the engine is a bit slow in response time. Also, the Mirage tends to lose lots of speed when turning: since it is a delta wing, it is basically a flying airbrake.&lt;br /&gt;
Don't waste energy by climbing high, because you lose speed and offer a still target for your enemy. &lt;br /&gt;
The Mirage 's turn rate is best around 250-350kts, and you should have full reheat to keep on turning.&lt;br /&gt;
If you stay close to the ground (where the Mirage is very manoeuverable), the other pursuing you might crash, but pay attention to your speed, if you stall, there’s no way you can regain your speed before crashing at low altitude. Although against other good aircraft at low level, such as the Viggen, it is better to push them to the stall in a one circle fight, as it is slightly under-powered and a formidable opponent at low altitude.&lt;br /&gt;
&lt;br /&gt;
==== III. Checklist for a dogfight ====&lt;br /&gt;
Start-up: &lt;br /&gt;
* Check fuel&lt;br /&gt;
* Switch the battery on&lt;br /&gt;
* Turn on both alternators&lt;br /&gt;
* Turn on the transformator&lt;br /&gt;
* Switch the cut-off and secure it&lt;br /&gt;
* Switch the left and right (G and D) pumps to “M” &lt;br /&gt;
* Switch the “VENT ON” &lt;br /&gt;
* Open the protection of the starter&lt;br /&gt;
* Check that the BP button has been switched&lt;br /&gt;
* Press the starter during 1 second&lt;br /&gt;
* Press the fuel P button&lt;br /&gt;
* Wait about 30 seconds for the fuel pumps to reach the correct level&lt;br /&gt;
* Open the guard and switch the start selector to ON, the engines will spool up&lt;br /&gt;
* Deselect the Fuel P&lt;br /&gt;
The engines are now idle, you can go on to the next part of the tutorial.&lt;br /&gt;
&lt;br /&gt;
Pre-flight:&lt;br /&gt;
* Close the canopy&lt;br /&gt;
* Turn on A/C and set it to 16.9 – 18°C by turning the knob (WARNING: F=froid=cold and C=chaud=hot)&lt;br /&gt;
* Select flight mode to TO&lt;br /&gt;
* Set transponder according to your mission &lt;br /&gt;
* Set the right MFD according to your mission (compass; radio; RWR; engine dialog; map)&lt;br /&gt;
* Set the navigation dialog according to your mission&lt;br /&gt;
* Reload flares and guns&lt;br /&gt;
* Toggle multiplayer shot report&lt;br /&gt;
* Remove automatic missile view &lt;br /&gt;
* Select payload&lt;br /&gt;
&lt;br /&gt;
Engaging:&lt;br /&gt;
* Set link16 accordingly if you have wingmen&lt;br /&gt;
* Master arm on&lt;br /&gt;
* Set the right MFD to RWR&lt;br /&gt;
* Radar active set at the correct distance &lt;br /&gt;
* MICA-EM selected for BVR, guns for WVR&lt;br /&gt;
* FOV 100-120°, looking up a bit so that you keep eye contact with your opponent in dogfight, but keep sight of your RWR&lt;br /&gt;
* Turn the pilot cam view slightly up and decrease FOV so you have a wide angle&lt;br /&gt;
* If incoming missile, launch a few flares/chaffs and push nose down so the missile, anticipating your movements, will crash to the ground. Other missile evading techniques also valid.&lt;br /&gt;
* Try to engage dogfight, as the Mirage is one of the best in this category&lt;br /&gt;
* Try to break off the fight before the bingo. A fight is won when you are back at your base, safe on ground, and the other is down. It’s no use winning if you crash to the ground after this.&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{#ev:youtube|uAhXLSO1tt4|||{{en|Video showing the new features of the Mirage 2000-5 (Feb 2015 version)}}|frame}}&lt;br /&gt;
{{#ev:youtube|i9FXj03IDfs|||{{en|Video explaining how to navigate and use the [[autopilot]] &amp;amp; MFD}}|frame}}&lt;br /&gt;
{{#ev:youtube|clKk-Zb2Okw|||{{en|Little demo to explain how work the sniping pod for GBU}}|frame}}&lt;br /&gt;
&lt;br /&gt;
=== Miscelleanous ===&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
Mirage 2000-5's flight in formation lights.png|mirage 2000-5's flight in formation lights&lt;br /&gt;
Mirage 2000-5 flying over France.png|mirage 2000-5 over France&lt;br /&gt;
Mirage 2000-5's mini-hud and logo &amp;quot;2000-5&amp;quot;.png|mirage 2000-5's mini-hud and logo &amp;quot;2000-5&amp;quot;&lt;br /&gt;
Mirage2000-5 2seats with ground equipment.png|mirage 2000-5 2 seats with ground equipment&lt;br /&gt;
Mirage2000-5 2seats with some stores.png|mirage 2000-5 2 seats with some stores&lt;br /&gt;
Mirage2000-5 2seats landing nellis.png|mirage 2000-5 2 seats landing nellis&lt;br /&gt;
Mirage2000-5 2seats ready to start.png|mirage 2000-5 2 seats ready to start&lt;br /&gt;
Mirage2000-5 2seats takeoff under rain.png|mirage 2000-5 2 seats takeoff under rain&lt;br /&gt;
Mirage2000-5 raindrops1.png|mirage 2000-5 raindrops1&lt;br /&gt;
Mirage2000-5 raindrops2.png|mirage 2000-5 raindrops2&lt;br /&gt;
Mirage2000-5 basse altitude with pod.png|mirage 2000-5 flying low altitude with pod &amp;quot;PDLCT&amp;quot;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Refueling ===&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
M2000-5 Refueling.png|[[Mid-air refueling]] with an A330-MRTT&lt;br /&gt;
Refueling using RADAR TACAN.png|Refuelling using [[TACAN]] and radar&lt;br /&gt;
Mirage-2000-5weapons managment.png|Graphical weapon selection&lt;br /&gt;
M2000-5 EICAS.png|EICAS for engine mamagement&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liveries and logos ===&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
Mirage 2000-5's green-blue ardennes.png|mirage 2000-5's green/blue camo (squadron &amp;quot;Ardennes&amp;quot;)&lt;br /&gt;
Mirage 2000-5's blue-grey camo chimere.png|mirage 2000-5's blue/grey camo (squadron &amp;quot;Chimère d'argent&amp;quot;)&lt;br /&gt;
Mirage 2000-5's desert camo lafayette.png|mirage 2000-5's desert camo (squadron &amp;quot;Lafayette&amp;quot;)&lt;br /&gt;
Mirage2000-5 one seat grey livery.png|mirage 2000-5's grey livery (squadron &amp;quot;Alsace&amp;quot;)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
=== May 2017 version ===&lt;br /&gt;
==== 3D model ====&lt;br /&gt;
* a new two seats version (the mirage 2000B, N and D)&lt;br /&gt;
* new HD (high definition) liveries&lt;br /&gt;
* specific liveries : green digital, snow, black, etc&lt;br /&gt;
* a lot of corrections on littles details (antennas, refueling pole, gears doors, intakes shades, cockpit, wheels, reddish engine) for both versions (one and two seats)&lt;br /&gt;
* ground equipment&lt;br /&gt;
==== effects ====&lt;br /&gt;
* rain effects (sound, raindrops, effects on the fuselage)&lt;br /&gt;
* shakes on high gload, mach 1&lt;br /&gt;
* realistic blackout/redout&lt;br /&gt;
==== Systems ====&lt;br /&gt;
* new improvments on fly by wire systems (the purpose is to obtain maximum realism when flying : pitch limitations on high gload or high angle of attack, pitch and roll limitations when airbrakes are active)&lt;br /&gt;
* more stability with an &amp;quot;auto-trim system&amp;quot;&lt;br /&gt;
* new realistic radar with ground and doppler effects&lt;br /&gt;
* new instruments&lt;br /&gt;
* canvas nav-display&lt;br /&gt;
* partial canvas hud : radar detected targets are designed on the hud&lt;br /&gt;
==== Weapons and stores ====&lt;br /&gt;
* more realistic weapons to dogfight [http://opredflag.com/ OPRF team] : realistic damages, counter measures, missile trajectory&lt;br /&gt;
* new weapons or 3d improvment for : matra mica IR, mica EM, magic, exocet&lt;br /&gt;
* liveries on external tanks&lt;br /&gt;
* inert pod : PDLCT (pod de designation laser - camera thermique)&lt;br /&gt;
&lt;br /&gt;
=== Feb 2015 version ===&lt;br /&gt;
==== 3D model ====&lt;br /&gt;
* Several more instrument in the cockpit, including startup instrument, and light variator instruments.&lt;br /&gt;
* New, more realistic gun explosion.&lt;br /&gt;
* New, more realistic missile explosion.&lt;br /&gt;
* New afterburner flames that take differents colors, depending on the sun position.&lt;br /&gt;
* New [[Rembrandt]] light effects in the cockpit.&lt;br /&gt;
* New rule about each instrument's light effects&lt;br /&gt;
* Possibility to hide the pilot model when in the cockpit.&lt;br /&gt;
* Deactivate the temporary non-Rembrandt shadow, because it had a big MP issue and did not allow a correct dogfight.&lt;br /&gt;
* New exhaust.&lt;br /&gt;
* Separated livery &amp;amp; logos.  Logos are now independent of the livery.&lt;br /&gt;
==== Systems ====&lt;br /&gt;
* Center MFD can switch between old version and Canvas [[NavDisplay]] version. &lt;br /&gt;
* Working startup procedure.&lt;br /&gt;
* Working cockpit light variator.&lt;br /&gt;
* Utilisation of the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;usage&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
==== Weapons ====&lt;br /&gt;
* You can now create a ground target, by clicking on the ground and then clicking &amp;quot;Create a Target&amp;quot; in the &amp;quot;Mirage 2000 &amp;gt; Fast Config&amp;quot; menu.&lt;br /&gt;
==== Nasal ====&lt;br /&gt;
* Centralised function launch and update instead of multiple separate loops/listeners.&lt;br /&gt;
* Loads are now visible over MP.&lt;br /&gt;
&lt;br /&gt;
=== August 2013 version ===&lt;br /&gt;
* Much better autopilot (see video).&lt;br /&gt;
* Multi-page MFDs.&lt;br /&gt;
* Radio management on the right MFD.&lt;br /&gt;
* An EICAS page.&lt;br /&gt;
* Cockpit general graphics are improved.&lt;br /&gt;
* A weapons selection page on the left MFD.&lt;br /&gt;
* Better sound and missile script improved.&lt;br /&gt;
* Working alert panel.&lt;br /&gt;
* New clock&lt;br /&gt;
* And lots of other stuff not listed here...&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
=== Models ===&lt;br /&gt;
* High-resolution liveries. {{done}}&lt;br /&gt;
* Throttle stick, gear green/red light, jettison all button. {{Done}}&lt;br /&gt;
* Add some &amp;quot;ground&amp;quot; feature (equipment, external power). {{done}}&lt;br /&gt;
* Modify exterior pylons shade. {{done}}&lt;br /&gt;
* Modelize stick. {{done}}&lt;br /&gt;
* Modelize rudder pedals {{not done}}&lt;br /&gt;
* Modify cockpit 3d model (single and dual seat). {{done}}&lt;br /&gt;
* Homogenize instruments texture and materials. {{done}}&lt;br /&gt;
* Smooth canopy arch. {{done}}&lt;br /&gt;
* Create crashed models. {{not done}}&lt;br /&gt;
&lt;br /&gt;
=== MultiPlayer ===&lt;br /&gt;
* Make the loads visibles in MP. {{done}}&lt;br /&gt;
* Dual control.  {{not done}}&lt;br /&gt;
=== Instruments ===&lt;br /&gt;
* Add more clickable instruments and complete tooltips. {{progressbar|90}}&lt;br /&gt;
* Complete the alert panel. {{progressbar|60}}&lt;br /&gt;
* Canvas HUD. {{progressbar|60}}&lt;br /&gt;
* Move flight in formation lights. {{not done}}&lt;br /&gt;
* Make the RWR work. {{not done}}&lt;br /&gt;
* Modelize the Inertial measurement unit {{not done}}&lt;br /&gt;
&lt;br /&gt;
=== Systems ===&lt;br /&gt;
* Make the start procedure more realistic. {{Done}}&lt;br /&gt;
* Correct the radar issue due to the generic function radardist and multiplayer ATC. {{done}}&lt;br /&gt;
* Improve FDM. {{done}}&lt;br /&gt;
=== Weapons ===&lt;br /&gt;
* Put missiles in a generic folder. {{done}}&lt;br /&gt;
* Improve missile models. {{done}}&lt;br /&gt;
* Improve the missile script. {{done}}&lt;br /&gt;
* Put sound on the missiles. {{done}}&lt;br /&gt;
* Make a working ECM (missiles have to be reworked first). {{not done}}&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
* Checklist. {{not done}}&lt;br /&gt;
* update help : landing, takeoff. '''On going'''&lt;br /&gt;
&lt;br /&gt;
== Thanks ==&lt;br /&gt;
'''Helijah''' (for the 3D model), '''Buckaroo''' (for the FDM), '''5HIN0B1''' (for the working weapons and systems), '''Koubi''' (for the engine script), '''FG-TUX''' (for testing), '''Ray''' (for helping on the MFD), '''Anusil''' (for testing), '''F-Sig''', '''Xiii''' (for fox2.nas, the initial missile script), '''the F-16 team''' (for the radar and HUD), '''the Citation X team''' (for the middle MFD), all those who created missile models, '''Niko''' (for the wiki page and the original ask for the project), '''Thomas''' (for the liveries), '''Gijs''' (for the wiki page), '''Hardball''' (for the two seats 3d model, the liveries, minihud and some other stuff), '''Leto''', '''Richard''', '''Swamp''', '''FB''', '''onox''', '''Octal450''', '''legoboyvdlp''', '''Domokos Jüttner (Rudolf)''' (All '''OPRF''' team) and all those forgotten here ('''Nicolas de Lemos''')… &lt;br /&gt;
&lt;br /&gt;
'''''Thanks to all.'''''&lt;br /&gt;
&lt;br /&gt;
== External link ==&lt;br /&gt;
* {{Wikipedia|Dassault_Mirage_2000#Mirage_2000-5|Dassault Mirage 2000-5}} (Wikipedia)&lt;br /&gt;
&lt;br /&gt;
{{Dassault}}&lt;br /&gt;
{{air-to-air refueling}}&lt;/div&gt;</summary>
		<author><name>SammySkycrafts</name></author>
	</entry>
</feed>