Prepar3D v2.2 Developer Blog

Hey Everyone,

Our progress updates on the forums have been a little quiet lately because we have been hard at work on the next revision to Prepar3D v2, Prepar3D v2.2. We are extremely proud about the optimizations and new enhancements available in v2.2, and are excited to share it free to all v2 users in the next few weeks.  We will be seeding a beta copy of v2.2 to our beta testers this week (we’ve also added a few commercial ecosystem beta testers to our team as well, thanks and welcome aboard to those of you who are new and again thank you to our entire beta test team).

At a very high level, v2.2 has the following updates and addresses the following issues:

  • Autogen out of memory crashes
  • The inclusion of the v2.1 panels ‘hotfix’ that reverted changes to the ContentErrorLogging system that caused previously compatible aircraft to not work
  • New cloud shadows feature as well as several new shadow system optimizations
  • A new sample for the Prepar3D Development Kit (PDK) API – Oculus Rift integration
  • Native radar support for Prepar3D developers
  • A redesign and refactor of the legacy Flight Recorder system
  • A new FlightInstructor mode for SimDirector, as well as several other SimDirector enhancements
  • Several other community and developer issues resolved

Autogen Re-Architecture

The instancing system for trees was given a massive overhaul to improve memory usage and performance and to reduce stutters.  The system (VAS) memory footprint per tree was reduced from 276 bytes to 16 bytes (that is a 17x reduction in system memory per tree).  Some of the work previously done each frame was completely eliminated while other work was reduced or moved onto background threads and the GPU (graphics card).

Visually, trees can now LOD (Level of Detail) in progressively while still scaling in to prevent popping.  Random rotation of trees was also fixed which means that trees will be more varied looking and will again load in at the full density near the camera.

The picture below details the changes made to the autogen system in Prepar3D v2.2.  The red to yellow effect shows the trees progressively loading and scaling in.  System memory usage is displayed to show the autogen memory has been reduced 17x.  A max autogen default flight has had it’s system memory reduced by over 550 megabytes.

Autogen Dev Blog Slide
Autogen Re-Architecture and Optimization for Prepar3D v2.2

 

Cloud Shadows and Shadow System Improvements

The biggest challenge we faced in shadow mapping the clouds is similar to the challenges we face with ground shadows. It stems from Prepar3D having very large viewing distances and the requirement to cover that view distance with enough shadow map texture coverage. It becomes a balancing act of performance and memory sacrifices to achieve acceptable visual fidelity.

One big challenge of clouds in particular is clouds were not created with shadow mapping in mind and they rely on being blended into the image without writing depth. However, most modern shadow mapping techniques rely on the depth information to resolve if an object at a given depth is in shadow or not inside the pixel shader. These techniques require bounding volumes to be created around shadow receivers that project the range of these depth values between zero and one in DirectX applications. This could not be done easily for clouds, due to optimizations that are being done for the ground shadows bounding volumes, without losing quality on the ground shadows. So we’re required to use a multiple channel resource to determine things like the depth and alpha of the current cloud per pixel inside the bounding volumes.

We’ve found ways of reducing ground shadow only memory and having cloud shadows on will be equivalent memory usage to before v2.2. Cloud shadows do come with increased GPU work which comes from having to render the clouds into multiple shadow maps and evaluating that information per pixel for the scene. Because of this, cloud shadows may cause a FPS hit on lower end graphics cards which may already be pixel shader bound, but should perform well on modern graphics cards.

cloud shadows
Clouds Casting Shadows onto the Terrain in Prepar3D v2.2.

 

A New Recording and Playback System

The new recording and playback system was developed around the idea of giving instructors, developers and users the power to record and playback data that is relevant to their training scenario.  The goal was to convert the traditional flight recorder into a tool that could be used as an after action review of training scenarios.  With that goal in mind, the flight recorder was overhauled and updated.  It is now a full simulation recorder.

The new system will record and playback more capabilities and interactions; no longer is it just the user’s flight position.  For instance, the new record and playback system has support for mission features, air traffic, boats, ground vehicles, weather, weapons, and a swath of other simulation capabilities.  The user will be able to specify what simulation variables, along with what gauge variables, to record and playback.

A new playback control window has been developed that displays relevant recording information.  It allows users to play/pause, change simulation speed, and select bookmarks.  Bookmarks are a completely new feature that allows seeking to a specific location of a recording.  They can be inserted in recordings by creating checkpoints (AutoSaving) in missions.

recorderUI1
The New Load Recording User Interface Screen

 

recorderUI2
The Modernized Recording Playback User Interface

 

Oculus Rift Development Kit Integration SDK Code Sample

Prepar3D v2 brought with it a very powerful interface for developers, the Prepar3D Development Kit (PDK) API.  The Prepar3D Development Kit (PDK) API is a service provider for obtaining services to the Prepar3D platform. The PDK functions similarly to SimConnect but is tied into Prepar3D at a lower level allowing better performance and more direct interaction. Unlike SimConnect, there is not a network interface for PDK plugins as they must be developed as in-process dlls. Data can be injected into and received from the simulation by interfacing with a user-written .dll. Uses for the PDK include creating custom SimObjects, adding custom textures and post-processes, and modifying cameras.

We have added a new sample to the SDK to show the power of the new PDK API by integrating Oculus Rift support through the new PDK.  This example and code sample will be available in the v2.2 SDK and will allow those users with Oculus Rift Development Kits to use them with Prepar3D v2.

P3DOculus1
Oculus Rift Development Kit Support in Prepar3D v2.2

 

Native Radar Support for Content Developers

Prepar3D now provides an air-to-ground radar simulation and visualization.  Because every radar system is different, it is provided as a highly configurable service which can be controlled via C++ plugins and XML gauges.   Some examples of controllable parameters are Range, Sweep Angle, Sweep Rate, Zoom Level, Image, and Data resolution.  Some of the advanced capabilities of the Prepar3D radar include accurate radar shadows, far-shore-enhancement, and Doppler-beam-sharpening.  Also, we developed the radar service entirely through our SDK to showcase the power and flexibility that 3rd party developers have when developing content specifically for Prepar3D v2.

radar1
Native Radar Support in Prepar3D v2.2

 

radar2
Zoomed Out View of Native Radar Support in Prepar3D v2.2

 

A New FlightInstructor Mode for SimDirector

With the SimDirector mission creation tool in Prepar3D v2, instructors and trainees both could rapidly create rich training content faster than ever in Prepar3D.  The virtual instructor modes allowed the creation of in-cockpit learning and training scenarios, but it was hard to create graded maneuvers and graded flight segments.  The new FlightInstructor mode in SimDirector now makes it easier than ever to rapidly create graded flight segments, so that instructors and trainees can create, grade, and debrief flight segments and flying maneuvers in real-time.  If you haven’t looked into the extremely powerful, yet easy to use, SimDirector mission planning tool in Prepar3D v2 yet, access SimDirector from your Flights menu to see what you’ve been missing out on.  SimDirector ships built-in to every copy of Prepar3D v2.

Other issues resolved:

  • Resolved an issue where force feedback joysticks would not continue to rumble after an initial vehicle crash
  • Resolved a backwards compatibility issue where DTX 5 vegetation would flicker in several Orbx addons
  • Resolved a backwards compatibility issue with the airport lighting at Aerosoft airport addons
  • Resolved an issue where aircraft labels were not being drawn at the distance that was expected
  • Resolved an issue where ground visibility was limited to 50 miles
  • Resolved a crash where constantly spamming the pause and unpause in certain addon aircraft could crash the Prepar3D sound system
  • Resolved an issue where AI aircraft could swap texture sets
  • Resolved an issue certain stock airports were not rendering their taxiways
  • Resolved an issue where the modeling tools would not respond to EventID and CallbackJumpDragging tags

Conclusion

From myself, and the rest of the development team, we would like to take this opportunity to thank everyone for their continued support of Prepar3D, as we continue to optimize and enhance Prepar3D v2 to be the best training platform available.

If you’d like to discuss this blog, please use this thread in our Client Application Support Forums.

Wesley Bard
Software Manager, Prepar3D Development Team