USING RTC'S
NOTE: Unfortunately the edition of RTCs is not entirely available for external use, and is a work-in-progress. For the moment, only RTCs defined in mission files are available to you for creating and editing.
RTC's (Real Time Cinematics) take animation information from a glTF file and convert it into a cinematic camera event based on triggers. To use them involves the setup of the camera data (using an external tool like 3DS Max - see here for more information), and then the edition of various XML files in an add-on project to generate the events that call the animation. To help you create your own RTCs, we've created an overview (below) of how they work, and you can find a sample project with a single Hangar RTC which you can examine from the following link:
RTC Structure
RTC's are comprised of three building blocks that together form a chain of actions. The building blocks are:
<SimMission.RTCSequencer>
: this is base container for RTCs and will contain actions to execute. It can contain one or moreRTCSequence
and/or otherRTCSequencers
. Essentially, theRTCSequencer
is the one managing all the different animations if an RTC contains more than one animation.<RTCSequence>
: this is an object able to create a list ofRTCShots
with some specifications (animation names, path to include, shot count and more).<RTCShot>
: this is an object able to play one animation with one target and one camera from a glTF file. Each shot is considered a single action.
Some things to note about the structure of an RTCSequencer
:
- an
RTCSequencer
can contain anotherRTCSequencer
and eachRTCSequencer
will be counted as 1 action - an
RTCSequencer
can contain anRTCshot
: eachRTCshot
will be counted as 1 action - an
RTCSequencer
can contain multipleRTCSequence
and eachRTCSequence
can generate multiple actions
It is important to understand that an RTCSequence
is not an action and it can be considered as more of an action generator. An RTCSequencer
with only one RTCSequence
that does not generate any actions (ie: the sequence has no RTCShot
s) will have 0 actions. Conversely, an RTCSequencer
containing two RTCSequencer
will have 2 actions, no matter how many actions both sub-RTCSequencer
contain.
IMPORTANT! An Action is defined by its GUID. and as such it is imperative that you know this value for the items you want to use RTC's on.
Now that you have a better understanding of the different elements that go into making an RTC sequence, you may want to create your first RTCSequencer
. In general, it is a relatively simple task with only a few steps to follow, but you must do everything outlined below in the given order if you want your RTCSequencer
to work properly.
The RTCSequencer
To start with, you need to decide where you want to play the <SimMission.RTCSequencer>
element. You have three possible choices:
- Player Aircraft
- Airport
- POI
There may also be different specific case types for each of them - for example, do you want the RTC to be triggered only by a specific airport or any (generic) airport? The table below outlines the priorities for each type and case:
PRIORITY | TYPE | ||
---|---|---|---|
Aircraft | Airport | POI | |
1 |
Mission file |
Mission file |
Mission file |
2 |
|
|
|
3 |
|
|
|
4 |
|
|
|
We can now write the XML for the RTCSequencer
in the appropriate file, in this case the RTC_AirportGeneric.xml
. In the following example, we're setting up an RTCSequencer to play on generic airports:
<SimMission.RTCSequencer InstanceId="">
<Descr>RTC_Airport_Intro</Descr>
</SimMission.RTCSequencer>
You'll notice that the InstanceId
field above is empty. That's because it requires a GUID, and you have decide what GUID to use there. If the RTCSequencer
is a new one you're creating then you can generate a new and unique GUID for it (see here for information on how to do this), but if the RTCSequencer
is replacing an existing one, then the InstanceId
field should be set to use the existing RTCSequencer
GUID so that the RTC you're creating overrides the existing one. GUID's should be enclosed in {}
and must be all uppercase. The XML should look something like this now:
<SimMission.RTCSequencer InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}">
<Descr>RTC_Airport_Intro</Descr>
</SimMission.RTCSequencer>
At this point you have an empty, basic RTCSequencer
, and now you'd normally also add in a few other options to tell Microsoft Flight Simulator how it should be displayed, with the final XML looking a bit like this:
<SimMission.RTCSequencer InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}">
<Descr>RTC_Airport_Intro</Descr>
<NeedPreload>True</NeedPreload>
<FadeFromBlack>True</FadeFromBlack>
<Shuffle>False</Shuffle>
<Immediate>False</Immediate>
</SimMission.RTCSequencer>
You can find a complete description of the different XML elements available from the RTC Definition Properties page.
Adding Actions To The RTC
Now you have the sequencer set up you can add actions to it. An action can be a single <RTCShot>
or you can add an <RTCSequence>
with with multiple RTCShot
s, or you can even add another RTCSequencer
. In this case we'll add some single RTCShot actions:
<SimMission.RTCSequencer InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}">
<Descr>RTC_Airport_Intro</Descr>
<NeedPreload>True</NeedPreload>
<FadeFromBlack>True</FadeFromBlack>
<Shuffle>False</Shuffle>
<Immediate>False</Immediate>
<Actions>
<ObjectReference id="RTC_Airport_Intro" InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}"/>
</Actions>
</SimMission.RTCSequencer>
As you can see, here we're playing two different RTCSshot
actions for the generic flight intro, and by reading the IDs, we understand that the first action object "RTC_Airport_Intro" is for an airport and the second action object is for an aircraft, "RTC_Overview_Aircraft_Intro".