Scenery‎ > ‎

FSW Scenery Primer


Change List

A list of changes made to this document.

 Version Date Revision
 1.0
 30/11/2017
Initial document.

Introduction

This document describes specifics for creating scenery objects. The Modelling Practices section of the  Aircraft Primer apply to environment art and should be read first.

Some of the ideas laid out here are preliminary and subject to change. All important changes will be clearly indicated in the relevant sections. Feedback from external teams utilising this document is both appreciated and encouraged.

Workflow Considerations

Though FSW is capable of handling a greater amount of vertices than before, as described in the Command-line Tools section, scenery objects should still be designed conservatively. 

LODs

Level of detail models should be created for scenery objects, following the LOD authoring guidelines. However, less LOD levels are required to achieve the same performance gains as with aircraft. An example scenery object, the 25x15m 'Kahuhlui Air' building, has the following LOD levels and vertices count:

LOD level LOD_100LOD_50 LOD_10
 Vertices928487 279

   

The level of detail degradation required for lower LOD levels is achieved by removing back-facing polygons, edge loops and progressively phasing out smaller details that do not affect the silhouette of the building.

Scenery objects also require no root 'exterior' node, as illustrated in the following image:





Creating Assets

Scenery assets use the same workflow methodology as with vehicles. The same UVW mapping, baking, texturing and general artistic concerns all apply. However, certain aspects such as high poly modelling and where to apply finer details differ depending on the subject or end-us of the scenery asset.

Use of effective normal and combined maps will have a significant bearing on the believability of an object.

Nuances pertaining to different environment situations are covered below.



Buildings

Buildings should be authored with a mid to close view perspective in mind. Repeating textures can be hidden and large surfaces made interesting through intelligent use of detail objects, for example drain pipes, guttering and windows modelled in detail.

The image to the left demonstrates a window with depth. The window aperture is represented using geometry instead of being a simple window texture on a polygon. The glass uses transparency; the mesh behind using ambient occlusion to add to the feeling of depth. Blinds are represented using geometry also, taking care to capture subtle inaccuracies in surface details and edge angles. Emissive maps should be used so at night the 'rooms' behind the windows appear to be lit.

As with any other asset for FSW, LODs are important. Details can be aggressively scaled back for lower LOD levels.

Objects
Objects are used for scenery dressing or to add interest in missions. As such they do not need to be overflowing with tiny details or have incredibly high polygon meshes. Correct use of a normal map can make a very efficient and low polygon model seem a lot more detailed than it actually is.

The suitcase objects in the image to the left are in fact only 460 polygons each. A detailed high-poly model was used to bake details onto a normal map, creating the detail seen. The object has small details depicted through the normal map, such as a zip seam, case deformations, rubber feet and the raised details on the grab handle.

LODs are extremely important in achieving good performance with a detailed, small object. At 10 screen pixels an object need not be 500 polygons. Refer to the LOD section for more details.



Airfield Surfaces

Detailed airfield surfaces can be created by layering multiple levels of geometry. Runway markings can be depicted at a much higher resolution using geometry and effective use of materials than if they were painted onto a 'ground' texture.

Z-fighting issues can occur with overlapped polygons. Refer to the Z-bias section of the 3ds Max Plug-in documentation for more information.



Export Workflow

The export workflow for a scenery object is very similar to that of an aircraft, the key difference being the format of the compiled asset. Scenery objects must be exported as .x files, converted to an MDL and then compiled into a BGL.

Importance of Friendly Names & GUIDs

Though friendly names and GUIDs should be applied to any individual art asset created for FSW, they are especially important with regard to scenery objects. No two scenery objects may share the same values, else errors and confusion will occur when trying to select the asset for use in-editor. 

Exporting from 3DS Max & Creating the MDL

  1. Right-click in the scene and select 'Unhide All'. Select 'Yes' when prompted.
  2. Export the scene using File → Export. Choose to save as a 'Flight Sim World DirectX File' using the 'save as type' drop down.
  3. Run XToMDL via the command-line using the following format:
    • [Path to XToMDL]\XToMDL.exe "[Path to x file]\scenery_object.X"

From MDL to BGL

Whether compiling a single MDL into a BGL or compiling multiple MDLs into a library BGL, the methodology is the same.
  1. Create a folder containing the MDL files to be compiled.
  2. Create an XML file containing a list of assets. An example XML can be found here: example_library.xml
  3. Run bglcomp.exe via the command-line using the following format:
    • [Path to bglcomp]\bglcomp.exe "[Path to library XML and MDLs]\example_library.xml"
A compiled BGL file will be created in the same directory as the library XML. Proceed to the Placing Assets section below.

Placing Assets

With the BGL library created it is time to place the objects into the world.
  1. Create an XML file describing the placement particulars for each library object previously compiled. An example XML can be found here: example_library_Placement.xml
  2. Again run bglcomp.exe via the command-line using the following format:
    • [Path to bglcomp]\bglcomp.exe "[Path to library XML and MDLs]\example_library_Placement.xml"
The previously compiled BGL file will be updated to include placement data. It can now be placed into the simulator:

(BGL files)
  • [Path to FSW]\Addon Scenery\scenery\
(Textures)
  • [Path to FSW]\Addon Scenery\textures\

Anatomy of the Library XML

<FSData version="9.0" xsi:noNamespaceSchemaLocation="bglcomp.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> XML header data. Do not change these lines.
<ModelData sourceFile="directory\Scenery_object_1.MDL" /> A library entry.
 sourceFile= This data relates to the exact location of the MDL file.
<ModelData sourceFile="directory\Scenery_object_2.MDL" /> A second library entry.
</FSData> XML closing tag. No data should exist past this tag.

Anatomy of the Placement XML

<?xml version="1.0" encoding="UTF-8"?> XML header data. Do not change these lines.
<FSData version="9.0"> XML header data. Do not change these lines.
<!-- Object 1 --> An XML comment. '<!--' marks the beginning of the comment and '-->' marks the end.
<SceneryObject lat="34.264001" lon="-116.858422" alt="0.000000" pitch="0.000000" bank="0.000000" heading="0.000000" imageComplexity="VERY_SPARSE" altitudeIsAgl="TRUE"> Placement data for the first library object.
 lat= Latitude at which to place the object.
 lon= The Longitude at which to place the object.
 alt= The altitude, in feet, at which to place the object.
 pitch= A pitch value, in degrees, should the object need to be manipulated along its X axis.
 bank= A bank value, in degrees, should the object need to be manipulated along its Y axis.
 heading= A heading value, in degrees, should the object need to be manipulated along its Z   axis.
 imageComplexity= The scenery complexity level at which the object will appear. It is   recommended to set this as 'VERY_SPARSE' and to make use of LODs.
 altitudeIsAgl= A 'TRUE' or 'FALSE' value, declaring whether the 'alt' value previously defined   is  above ground level (if true) or above sea level (if false).
<LibraryObject name="6A0F67204D9C4A407A33949D836C02FE" scale="1.000000"/> Data defining the first library object.
 name= The GUID of the MDL, obtained from the 
 scale= Altering this value from 1.0 will change the objects' scale accordingly.
</SceneryObject> An object closing tag.
<!-- Object 2 --> An XML comment. '<!--' marks the beginning of the comment and '-->' marks the end.
<SceneryObject lat="34.264002" lon="-116.857573" alt="0.000000" pitch="0.000000" bank="0.000000" heading="0.000000" imageComplexity="VERY_SPARSE" altitudeIsAgl="TRUE"> Placement data for the second library object.
<LibraryObject name="8BC3BBE243BD691F7C450B932962B15A" scale="1.000000"/> Data defining the second library object.
</SceneryObject> An object closing tag.
 </FSData> XML closing tag. No data should exist past this tag.