Difference between revisions of "ModelConverterX"

From FSDeveloper Wiki
Jump to: navigation, search
(Convert and place object wizard)
(Object information)
Line 238: Line 238:
  
 
[[Image:ModelConverterX2_map_view.jpg|thumb|Map view]]
 
[[Image:ModelConverterX2_map_view.jpg|thumb|Map view]]
 
  
 
The object information form shows you the basic information about the object. This includes:
 
The object information form shows you the basic information about the object. This includes:

Revision as of 03:16, 27 May 2012


ModelConverterX is a tool which primary function is, as the name already implies, to convert models. The tool allows you to import models from different formats and can then export them to other formats. For example you can import your old SCASM macros or COLLADA files made with SketchUp and export them in the FSX MDL format. But also exporting to the 3DS or OpenFlight format is possible.

A second functionality that you can use ModelConverterX for is as a model viewer. You can view a 3D presentation of your object. A third functionality is to make minor changes to your object, like changing a material parameter or an attachpoint.

The rest of this manual will discuss how to install and use ModelConverterX. It also contains a detailed description of the features supported by the readers and writers of the different model format. This manual matches the 1.3 stable release version of ModelConverterX.

Contents

Getting ModelConverterX

Prerequisites

Microsoft .NET Framework version 2.0

Installation

On the SceneryDesign.org website you can find all information about downloading ModelConverterX.

Once you have downloaded the ZIP file containing the program, you need to unzip it to a folder of your choice. If you have used a previous version before, you can overwrite those files with the new version.

User interface

All your activities in ModelConverterX are done from the main screen. At the top of this screen you can find a toolbar with buttons to access the actions you be using frequently. The rest of the form can display any of the three tabs, that allow you to see either a preview, a log of events or the options. Each of these tabs can have a toolbar to access functions specific to that tab. Below you will find three sections describing the details of each tab and those of the main toolbar.

Main toolbar

ModelConverterX2 main toolbar.jpg

The main toolbar is the toolbar of ModelConverterX that is always visible, no matter which of the tabs you are viewing at the moment. It gives you access to the most important functions like importing or exporting objects. In this section all of the functions accessible are explained.

ModelConverterX toolbar import.jpg Import Shows an open file dialog that allows you to select an object to import in ModelConverterX. If you click on the arrow next to the button you will get a list of the 8 most recently opened files, so that you can reload them more quickly.

ModelConverterX toolbar export.jpg Export Shows an save file dialog that allows you to export the current object in the format you want. If you click on the arrow next to the button you will get a selection menu that also allows you to save all loaded objects to a BGL at once.

ModelConverterX toolbar wizard.jpg Wizards This menu contains a number of wizards, these are described in more detail in the Wizards section.

ModelConverterX toolbar special tools.jpg Special tools This menu gives you access to some special tools that can be used for certain specific tasks. This menu is described in more detail in the Special tools section.

ModelConverterX toolbar options.png Options This shows the options tab where you can set all the settings of the tool. See further down in the manual for details.

ModelConverterX toolbar manual.jpg Manual Brings up a dialog that shows this Wiki manual. For this function to work it is required that you are online at the moment of using it.

ModelConverterX toolbar about.jpg About Shows the about dialog that show for example version information about the ModelConverterX version you are using.

Statusbar

The statusbar gives you feedback about the the activities currently taking place. During the import or export you will for example see a progress bar to indicate how far that process is at the moment.

Besides that in the left corner of the statusbar an icon can be displayed to indicate the event log status. If there is no icon the event log is empty, but if there are entries in the log the following icons can be displayed:

ModelConverterX statusbar information.jpg Indicates that there is at least one information message in the event log.

ModelConverterX statusbar warning.jpg Indicates that there is at least one warning message in the event log, there can also be information messages present.

ModelConverterX statusbar error.jpg Indicates that there is at least one error message in the event log, there can also be information or warning messages present.

Preview tab

On the preview tab you will see a 3D preview of your object. This allows you to inspect your object and check if it has been imported correctly. Also it can be used as a simple way to visualize your objects.

You can move and rotate the preview with your mouse. If you keep the left mouse button pressed you can rotate around the object and if you keep the right mouse button pressed you can move the object. With the mouse wheel or the + and - keys you can zoom in or out.

ModelConverterX2 preview toolbar.jpg

At the top of the tab, just below the main toolbar, you will find a toolbar with actions specific for the preview tab. These are described below.

ModelConverterX toolbar prev.jpg If multiple objects are loaded, this allows you to go to the previous object in the list.

ModelConverterX toolbar next.jpg If multiple objects are loaded, this allows you to go to the next object in the list.

ModelConverterX toolbar objectlist.jpg If multiple objects are loaded, this allows you to show a list of all objects.

ModelConverterX toolbar objinfo.jpg Shows information and statistics about the loaded object.

ModelConverterX toolbar hierarchy.gif Shows the hierarchy of the loaded object.

ModelConverterX toolbar textures.jpg Shows the Material Editor that allows you to view and modify the materials used in the object.

ModelConverterX toolbar mass textures.png Shows the Mass Texture Editor that allows you to convert, rename or resize multiple textures at once.

ModelConverterX toolbar drawcall minimizer.png Shows the Drawcall Minimizer that allows you to combine different textures on a single sheet and thereby reduce the amount of drawcalls and improve the performance.

ModelConverterX toolbar attached object editor.jpg Shows the Attached Object Editor that allows you to view and modify the attached objects.

ModelConverterX toolbar animation editor.png Shows the Animation Editor that allows you to manipulate the animations of the object.

ModelConverterX toolbar move.jpg Shows the Move dialog that allows you to move the object.

ModelConverterX toolbar rotate.jpg Shows the Rotate dialog that allows you to rotate the object.

ModelConverterX toolbar scale.jpg Shows the Scale dialog that allows you to scale the object.

ModelConverterX toolbar lodcreator.jpg Shows the Level of detail Creator form that allows you to create lower detail versions of your object.

ModelConverterX toolbar save image.jpg Save the preview to disk as a JPG image file.

ModelConverterX toolbar report.jpg Saves a HTML object report of the loaded objects to disk. The report lists the name, GUID, textures used, attachpoints of the objects. A screenshot is also included.

ModelConverterX toolbar undo.png Undo the last change.

ModelConverterX toolbar redo.png Redo the last undo.

ModelConverterX toolbar resetview.jpg Resets the 3D preview view to its initial position. This will make sure the entire object is shown on screen.

ModelConverterX toolbar grid.jpg Toggles the display of the grid in the 3D preview.

ModelConverterX toolbar normals.jpg Toggles the display of the normals in the 3D preview.

ModelConverterX toolbar attached objects.jpg Toggles the display of attached objects in the 3D preview.

ModelConverterX toolbar particle effects.png Toggles the display of particle effects in the 3D preview.

ModelConverterX toolbar bounding box.jpg Toggles the display of bounding boxes in the 3D preview.

ModelConverterX toolbar crashbox.png Toggles the display of crash boxes in the 3D preview.

ModelConverterX toolbar shadows.png Toggles the display of shadows in the 3D preview.

ModelConverterX toolbar camera.gif Set the camera direction of the preview. You can select free rotate mode or one of the 6 sides to see the object in an orthogonal view.

ModelConverterX toolbar performance indicator.png Sets the rendering mode of the 3D preview to performance indicator. This means that the colours on the object are determined by how effective the normals and texture coordinates are shared on your object. The more colour, the less efficient.

ModelConverterX toolbar wireframe.png Sets the rendering mode of the 3D preview to wireframe.

ModelConverterX toolbar faces.png Sets the rendering mode of the 3D preview to faces.

ModelConverterX toolbar textured faces.png Sets the rendering mode of the 3D preview to textured faces.

ModelConverterX toolbar textures day.gif Sets the rendering mode of the 3D preview to day textures.

ModelConverterX toolbar textures night.jpg Sets the rendering mode of the 3D preview to night textures.

The LOD combobox allows you to select which level of detail you want to be displayed in the preview.

The livery combobox allows you to select which livery should be displayed on the model. This function is mainly for aircraft.

The animation controls below are only shown if an object contains animations. Besides these controls, there is also a slider to control the frame number of the animation.

ModelConverterX toolbar play anim.jpg Play starts running the animation, this means the frame will automatically be increased by a timer.

ModelConverterX toolbar pause anim.jpg Pause stops the running animation at the current frame.

ModelConverterX toolbar rev anim.jpg Rewinds the animation by decreasing the frame number.

The animation frame textbox allows you to view which frame of the animation is currently displayed and gives you the ability to enter a new desired frame number.

ModelConverterX toolbar fwd anim.jpg Forwards the animation by increasing the frame number.

Event log tab

On the event log tab you can see all the messages that the preview renderer, the reader or writer module has generated. This can be information about a texture file being loaded correctly, a warning that the reader encountered some unknown command or a serious error.

ModelConverterX event toolbar.jpg

At the top of the tab, just below the main toolbar, you will find a toolbar with actions specific for the event log tab. These are described below.

ModelConverterX toolbar event save.jpg Save the event log to a TXT file. A file save dialog will appear that allows you to select the location to save to.

ModelConverterX toolbar event clear.jpg Clear the event log.

The message filter combobox box allows you to select which message level to display. If you select Any all messages will show, if you select either Information, Warning or Error only messages with the appropriate level will be displayed.

Options tab

The Options tab gives you access to all the settings of ModelConverterX. In the section Options all available options are explained.

Wizards

ModelConverterX contains a number of wizards. These provide easier to use functionality to perform certain tasks. The available wizards are explained in this section.

Convert and place object wizard

Convert and place object wizard

Ground polygon wizard

Batch convert

Batch convert wizard

The batch convert wizard allows you to process multiple objects at once. You need to specify the input, operators and output.

On the left you specify which files need to be processed. By pressing Add you can browse for additional files to process. You can select files from different folders if you want. With the Remove button you can remove a file from the queue again and with Clear you can clear the entire list.

In the middle you can specify any operator that should be performed on the object. These operations are performed after importing, but before exporting again. By pressing Add you can add a new operator to the list and with Remove you can remove them again. You can apply multiple operators if you want. When clicking on an operator in the list, you will see the settings for that operator on the right. The following operators are available.

  • Convert textures: This will convert all textures used on the object during the batch convert. In the settings you specify the following options:
    • In which format they should be saved
    • To which folder the textures should be saved
    • If they should be resized if they are not a power of two
    • If all texture names should be prefixed by the model name
    • If existing textures should be overwritten or not
  • Add empty LOD: This adds an empty LOD to all objects. In the settings you can specify the value of this LOD.
  • Add night texture: This adds night textures to all materials, using the same name as the diffuse texture, with the _LM suffix.
  • Assign new GUID: This assigns a new random GUID to the object, overwriting any GUID that might be assigned already.

At the bottom right you specify the output parameters. You need to select a folder to store the converted objects and the format to which you want to export.

When everything is setup correctly you press Process and the objects will be converted.

Animation tweaker

Animation Tweaker

The animation tweaker wizard can be used to make long animations for FS2004. When using MakeMDL to create your FS2004 MDL file the maximum animation length is 1024 frames. At 18 Hz that is less than a minute. For certain animations that is too short.

But when you make your object with the FSX gamepack there is no restriction to the animation length. So with this wizard you can import a FSX MDL with a long animation and it will convert it to a valid FS2004 MDL file, still containing the long animation.

Forms & Editors

Besides the basic functionality to import and export objects, ModelConverterX also contains a number of forms and editors that allow you to view or edit additional information about the object loaded. This section describes these forms and editors.

Object information

Object information form
Map view

The object information form shows you the basic information about the object. This includes:

  • Name
  • GUID
  • Size of the bounding box
  • Textures used
  • Attachpoints
  • Drawcall related information information (per LOD)
    • Number of drawcalls
    • Number of triangles
    • Number of texture vertices
    • Textures used (when Show detail is checked)
  • Object position, heading and scale

The name, GUID and the position can be edited. At the moment only one instance of an object can be placed, so it is not possible to position an object at multiple locations.

After adding a position to the object, you can use the Show map button to open a map view. In this view you can position the object over a reference map. As reference you can use OpenStreetMap, Google Map, Bing Maps and Yahoo Maps data. By clicking left you can position the object at the mouse location, by dragging right you can pan the map. With the mouse wheel you can zoom.

Object hierarchy

Object hierarchy form

The object hierarchy form shows you the hierarchy of the different nodes in the scenegraph of the object. This can be helpful in debugging the structure of the object. For the different nodes the following attributes can be shown:

  • LOD
  • Transformations
  • Animations
  • Bounding box
  • Attachpoints
  • Material
  • Number of triangles

Material editor

Material editor form

The Material editor form shows you all materials that are used by the object. You can view and edit all properties of the material. For each material the colours and texture maps used are displayed. Besides that the FSX specific settings are shown.

The Set Default Transparent and Set Default Opaque buttons can be used to set the materials settings so that they will work well for transparent or opaque textures in FSX.

When the Highlight in preview option is selected, all polygons using this material will be rendered with a red colour in the preview. This enables you to see where this material is used on the object.

When you press the backspace key it is possible to remove the selected material completely. Warning, this will also remove all triangles using this material.

Mass texture editor

Mass texture editor form

The mass texture editor allows you to manipulate multiple textures on the object at once. You can perform a combination of the following actions:

  • Rename the textures
  • Resize the textures
  • Convert the textures to a different format

The Rename button will bring up a dialog to quickly replace a certain text in all texture files used.

The Match button will search in the specified texture folder and replace textures in the object by the same texture found in the texture folder.

The Update button starts the process of renaming, resizing and/or converting the textures. Once this has finished the dialog will automatically close.

Drawcall minimizer

Drawcall minimizer form

The drawcall minizer is used to reduce the amount of materials used in the object. This will result in less drawcalls and a better performance in FSX. The Start button starts the process of combining the textures, the new textures are written to the specified folder. They will have the texture type specified as the default texture type set in the options.

There are three options available that determine how the textures are combined:

  • Detect duplicate textures will compare all the textures used and remove duplicates.
  • Replace colours will replace materials with only a colour (no texture) with a material that uses a texture with the given colour.
  • Merge textures will try to combine all the textures used on the object into bigger texture sheets. The size of these new texture sheets is specified in the options. The name of the new textures is the model name followed by a number.

When a material also has a night texture, bump map or other subtexture types, new texture sheets for these subtextures will also be generated by the drawcall minimizer.

If the texture has an alpha chanel, this alpha channel is also copied in the combined texture sheet. However the total amount of drawcalls in the end also depends on the other material settings. So if one material has the alpha blending enabled and the other not, there will still be two drawcalls. Even when they use the same texture sheet.

Attached object editor

The Attached object editor form shows you all objects that are attached to your object. You can view and edit all properties of the attached objects. The following type of objects can be attached:

  • Effects
  • Lights
  • Library objects
  • Platforms
  • Empty attachpoints

To create a new attached object you press the New button and select the type you want. The Duplicate button will make a copy of an existing attached object. With the Remove button you can remove the attached object.

Effects can have parameters to determine when they should be active. With the Effect Parameter Editor form you can easily modify these parameters.

When you press the Auto platform button you will get a form where you can specify the conditions for all triangles that should become a platform. This can be used to make a platform out of all triangles facing upwards and having a specific material. This makes it very easy to turn a roof into a platform for example. By specifying the normal vector of the polygons you can also make a platform of a sloped polygon.

Animation editor

Animation editor form

The animation editor gives you fine control over the animations in your model. You can determine which animation is running in the preview or remove certain animations.

At the top of the form you see a list of all animations present in the loaded model. Each animation shows the name and the length. Each animation has a checkbox, only those selected will be shown as active in the preview. All others are shown static at their first keyframe.

With the buttons Select All and Select None you can select and deselect all animations at once. The Select Invert button inverts the current selection of animations. The Select Name Containing button always you to select only those animations that match the name typed into the text box.

The Fix Selected Animations button does remove the selected animations. It freezes those parts of the model at the animation frame that is currently displayed. This can be used for example to freeze the landing gear of an aircraft model that you want to use as a static model in your scenery.

At the bottom of the form there are some controls for the display of the animation. The Play and Stop button is used to start and stop the animation in the preview. The text box next to the button shows the current animation frame. By typing a new value in that box you can just to that frame directly. The slider below is also used to control the animation frame.

The min and max text boxes at the right side can be used to make the animation loop only part of the frames. If you animation runs from 0 to 200 for example, typing 50 in min and 75 in max, will let the animation loop between frames 50 and 75 in the preview. This can be useful to inspect specific parts of an animation.

Level of detail Creator

Level of detail Creator

The Level of detail Creator allows you to automatically generate lower level of detail versions of your model. A simplification algorithm is used to determine which polygons to eliminate, so that the final model is still as similar to your original one as possible. There is the choice from two algorithms, that each have specific settings. These are explained below. Using the combobox at the top you can select which algorithm is used.

When you want to create a new level of detail you should take the following steps:

  1. Select which LOD you want to create the new LOD from in the From LOD combobox.
  2. Enter the number of the LOD you want to create in the To LOD text box.
  3. Hit Calculate and wait. Especially for complex models the calculation can take a while.

When you select the Auto calculate checkbox the LOD will automatically be recalculated once you change any of the settings or parameters in the form. This can be useful when you are experimenting with different settings, but for complex models the calculation time might be too long for this auto update function to work efficiently.

By clicking in the list of levels of detail you can select which one is displayed in the preview. With the Remove LOD button you can remove the currently selected level of detail from the model. With the Change LOD button you can change the LOD number to the one entered in the text box. So for example you can change LOD 40 to LOD 30 to have it display earlier.

With Add empty LOD you can add an empty LOD to the model with the number given in the text box. Empty LODs are often used to let an object disappear quicker.

With the Import LOD button you can import another model from file and use it as the LOD number specified in the text box. When you click this button a dialogue will appear where you can select the file to load. If you made your different LODs as separate models, this is to way to combine them.

Vertex clustering

This algorithm can be tuned with the following parameters:

  • Angle weight: the additional weight given to vertices based on the angle between the triangles they are part of. This gives vertices where triangles have a different normal more weight.
  • Area weight: The additional weight given to vertices based on the area of the triangles they are part of. This given vertices that are part of big (and thus very visible triangles) more weight.
  • Floating cell: Determines if the vertex clustering algorithm uses floating cells or not. In general floating cells gives better results, because the cells for the clustering of the vertices are positioned more optimal.
  • Grid dize: The size in meters of the grid used for clustering the vertices.
  • Ground clamp: Determines if vertices that are at or below ground level should get a big additional weight. This prevent them from floating after the vertex clustering.
Quadratic based error

This algorithm can be tuned with the following parameters:

  • Area penalty. This parameter can be used to add an extra penalty to triangles based on their area. The result of this is that polygons with a bigger area are less likely to be affected by the simplification algorithm.
  • Ground clamp. This parameter determines if vertices that are at or below ground level should stick to the ground or not. This is to prevent buildings from floating in the air.
  • Max error: When set to true to the optimization will stop once the error specified in Max error value is reached.
  • Max error value: The error value at which optimization should stop when Max error is set to true.
  • Preserve material. This parameter gives an extra penalty to an edge where two material meet. As a result this edge is less likely to be affected by the simplification algorithm.
  • Triangle target: The amount of targets you want the simplified model to have. It is given as a percentage of the amount of triangles in the LOD you start from.

Special tools

The special tools menu contains a number of tools that can be useful to do specific tasks. Some of these tools work on the select model, others are always available.

SCASM Macro to XML placement converter

SCASM Macro to XML placement converter

This tool brings up a new dialog that allows you to convert a SCASM file into a XML placement file. For every Macro command in the SCASM file a XML SceneryObject command will be written. It works for FSX MDL files only. You need to specify:

  • The SCASM file to read
  • The XML file to write
  • The folder that contains the MDL objects, these are used to find the correct GUID
  • The folder containing the API macros, these are used when the SCASM file uses the short DOS filename and the long filename needs to be found.

Once all settings are specified you press the Convert button to start the process.

XML placement to SHP converter

XML placement to SHP converter

This tool brings up a new dialog that allows you to convert a BGLComp XML object placement file into a SHP file. For every SceneryObject command in the XML file a point feature is written in the SHP file. The GUID and heading of the object are written as arguments to the feature. You need to specify the following options:

  • The XML file to be read
  • The SHP file to be written
  • The folder containing the MDL files that are placed in the XML

XML Apron to SurfaceType converter

XML apron to SurfaceType converter

This tool brings up a new dialog that allows you to convert the aprons of a BGLComp XML airport file into a SCASM file containing SurfaceType commands for these aprons. This can be useful if you want to delete your aprons from the XML to see an aerial image below, but still want aprons that are smooth. Without such code the aircraft will bump around and show dust behind the wheels. You need to specify the following options:

  • The XML file to read
  • The SCA file to write

Coordinate converter

Coordinate converter

The coordinate converter tool can be used to convert geodetic positions (lat/lon) to an offset in meters from a reference point. You need to specific the latitude and longitude of the reference point and the latitude and longitude of the second point. For this second point the position will then be shown in two coordinate systems:

  • Flat earth: these coordinates have to be used for FS2004.
  • Geocentric: these coordinates have to be used for FSX, it includes the curvation of the earth.

Texture converter

Texture converter

This tool brings up a new dialog that allows you to convert textures. With the Load file button you can load a texture from any of the formats that ModelConverterX supports. With the Save file button you can then save it to the format selected in the combobox.

With the Set transparent color button you can choose which color is in the texture should become transparent. The alpha channel will then be adjusted for that.

With the Convert normalmap to FS button you can convert a normalmap to the FSX specific requirements. You load a texture made by a normalmap plugin and then save it to DDS after pressing this button.

With the Resize button you can resize the texture to the specified size.

The radio buttons at the bottom can be used to display a specific channel. This allows you to inspect only the alpha or the green channel if you want.

Missing texture finder

Missing texture finder

This tool brings up a new dialog that allows you to find missing textures from object libraries. You need to enter the following information:

  • The library BGL you want to examine
  • The location of the texture folder of that BGL
  • The location of the main FS texture folder.

When you press the Search button the tool will start looking if all textures are there. Those missing are displayed in the text box at the bottom. With the Save report button you can save those missing textures to a text file.

MDL Tweaker

MDL Tweaker

With the MDL Tweaker you can make changes directly to the MDL file itself. This is fundamentally different from importing the object into ModelConverterX and making changes. In the last case the object is exported again using the compiler tool (XtoMDL). This means that the limitations of those tools give you some restrictions what you can do. With the MDL Tweaker you are directly changing the binary code of the MDL file itself, without any compiler in between. At the moment this function only works for FSX MDL files.

You can change the following parameters of the MDL file:

  • Name
  • GUID
  • Object radius
  • Bounding box

With the Insert custom shadow model you can insert another model to be used as shadow model. Sometimes using a simplied geometry for the shadow model can result in performance improvements.

The Save MDL button allows you to save your changes back to a MDL file again.

Flip all triangles

This flips all triangles of the currently loaded object.

Flip triangles with inverse normals

This flips all triangles of the currently loaded object for which the normal of the triangle does not match the normal of the vertices.

Import names from XML file

With this function you can load objects names from a XML file. When a FS2004 library BGL is loaded the objects have no names. With this function you can load the BGLComp XML file that was used to generate the library BGL. The filenames of the MDL files stored in the XML will then be used as names for the objects.

Export ground polygons to SHP

This function exports all ground polygons of the current scene to shapefiles. This can be useful if you want to use them in a GIS program, for example to overlay them on the photo scenery of the airport.

Burn material colors into textures

When importing models from certain models it might be that a material has both a texture and a colour. Some systems mix those two on rendering, others don't. If your target system does not, you can use this function to mix the colour and the texture, this results in new textures.

Correct effect placement to match geometry (FSX)

There is a bug in FSX that causes attached effects to be displayed at the wrong position. The further you go from the reference point, the bigger the offset becomes. This function corrects this offset, by moving the attachpoints in the opposite direction.

Correct entire object for curved earth (FSX)

This function transforms the entire object to match the curve of the earth in FSX. It assumes that the object was designed in the flat earth coordinates used in FS2004.

Filter out ground polygons

This function removes all ground polygons from your object. Ground polygons are polygons level to the ground and within a certain distance. Sometimes old objects include ground polygons, like parking lots. In FSX scenery it is often more realistic to use photo scenery instead, so these have to be removed then.

Options

The options available in ModelConverterX are divided in different categories. With the list on the left of the options screen you can choose the correct category of options. The sections below explain all options available per category.

General settings

General settings
AutoSave

The AutoSave section allows you to specify settings regarding automatically saving certain files. It contains the following options:

AutoSaveEventLog 
Determines whether the event log is automatically saved to disk as a TXT file when you export an object.
AutoSavePreview 
Determines whether the preview image is automatically saved to disk as a JPG file when you export an object.
Ground Polygon Wizard

The Ground Polygon Wizard section allows you to specify settings related to the ground polygon wizard. It contains the following options:

DefaultGroundPolygonLayer
The default layer number used for polygons.
DefaultGroundPolygonVisibility
The default visibility used for polygons.
Object placement

The Object placement section allows you to specify settings related to positioning objects in the scenery. It contains the following options:

DefaultHeading
The default heading used when creating a new placement
DefaultLatitude
The default latitude used when creating a new placement
DefaultLongitude
The default longitude used when creating a new placement
Output

The Output section allows you to specify settings related to make output from the tool. It contains the following options:

UseTextureFolder
When set to true, the last used texture folder will be used as default the next time. When set to false the object location is the default texture folder.
Undo

The Undo section allows you to specify settings related to the undo functionality. It contains the following options:

EnableUndo
Determines if the undo functionality is available or not. When undo is enabled, the tool will use more memory.
MaximumUndoMemory
The amount of memory (in MB) that can maximum be used by the undo functionality. If more memory is used the olders steps will be removed and can not be undone anymore.
Update

The Update section allows you to specify settings related to checking for software updates. It contains the following options:

CheckForUpdateAtStartUp
Determines if the tool will check for available updates at startup. This requires an internet connection.
CheckForUpdateUnstable
When this option is set to true and you are using a stable release, you will also get a notification when there is a new development release available.

Renderer settings

Renderer options
Particles

The Particles section allows you to specify settings related to the particle effects system. It contains the following options:

FadeParticles 
Determines if particles are faded or not. Sometimes their behaviour can be studied better when fading is turned off.
PlaySounds 
Determines if the sounds from effect files are played or not.
Renderer

The Renderer section allows you to specify settings related to the preview renderer. It contains the following options:

AttachPointColor 
Sets the color used to draw the square representing attached objects.
BackgroundColor 
Sets the color used to draw the background of the preview.
CrashBoxColor 
Sets the color used to draw the crashbox in the preview.
GridColor 
Sets the color used to draw the grid.
GridOriginColor 
Sets the color used to draw the grid lines that pass through the origin.
GridSize 
Sets the total size of the grid in meters.
GridStep 
Sets the distance between two grid lines in meters.
NormalColor 
Sets the color used to draw the normals.
PanScale 
Scales the panning movement of the mouse. This allows you to tune how quickly you pan.
SelectedAttachPointColor 
Sets the color used to draw the square representing the selected attached point.
ShadowColor 
Sets the color used to draw the shadow in the preview.
ZoomScale 
Scales the zooming of the mouse wheel. This allows you to tune how quickly you zoom in or out.

Importer settings

Importer options
General

The General section allows you to specify settings that apply to multiple exporters. It contains the following options:

Debug mode
When enabled additional debug information is put in the event log. Not all exports support this function yet.
SCASMReader

The SCASMReader section allows you to specify settings specific to the SCASM reader. It contains the following options:

Apply Default Scale
When enabled the default scale found in the SCASM code is applied after importing the object.
Create empry LOD
When enabled an empty LOD is created automatically when exporting the object.
Empty LOD Value
The value to be used for the empty LOD.
Line Extrude Radius 
The radius of the circle that will be used when turning a line into a tube.
Line Extrude Vertex Count 
The amount of vertices of the circle that will be used when turning a line into a tube. A value of 3 will extra a triangle, 4 a rectangle, etc. Keep this value as low as possible to minimize the polygon count.
Replace User Variables
When enabled a form is shown when importing an object that contains user variables. On this form you can specify the values they should have while importing.
Use conditions 
Determines what to do with conditional display of parts of the object. The condition can be set to always be true, always be false or to be user specified. In the last case the user will get a screen to set the values of the variables involved.

Exporter settings

Exporter options
BGLWriter

The BGLWriter section allows you to specify settings specific to the BGL exporter. It contains the following options:

FS2004BGLCompPath
The path to the FS2004 version of BGLComp.
FSXBGLCompPath
The path to the FSX version of BGLComp.
KeepMDL 
When set to true, MDL files are not removed after exporting.
KeepSCA 
When set to true, SCASM files are not removed after exporting.
KeepXML 
When set to true, XML files are not removed after exporting.
SCASMPath 
The path to the SCASM compiler.
FLTWriter

The FLTWriter section allows you to specify settings specific to the OpenFlight writer. It contains the following options:

IgnoreSpecularColor
Ignores the specular colour of the object and uses black instead.
LODMultiplier 
Sets the multiplier that is used to calculate the LOD distance based on the size of the bounding box (currently not used).
TextureType 
Allows you to specify which texture format is used in the OpenFlight file. Supported options are: RGB, DDS or BMP.
WriteATTR 
Determines whether the ATTR files of the texture are written when the OpenFlight file is saved.
MDLWriter

The MDLWriter section allows you to specify settings specific to the FS2004 and FSX MDL writers. It contains the following options:

CrashboxGranularity 
Set the granularity used for creating the crashbox. The lower the value the more accurate the crashbox. Only used when SetCrashboxGranularity is true.
KeepASMFile 
Determines whether the ASM files are kept after compilation with MakeMDL.
KeepXFile 
Determines whether the X file is kept after compilation with either MakeMDL or XtoMDL.
MakeMDLPath 
Location of MakeMDL.exe on your system.
NoCrash 
Determines whether crashboxes are generated while exporting or not.
PreserveGUIDOnExport
When set to true and overwriting an existing MDL file, the GUID will be taken from the existing file.
SampleXML 
Save a sample placement XML when saving the object.
SetCrashboxGranularity 
When set to true, the crashbox granularity will be set to the value specified in CrashboxGranularity.
XtoMDLPath 
Location of XtoMDL.exe on your system.
OBJWriter

The OBJWriter section allows you to specify settings specific to the Wavefront OBJ exporter. It contains the following options:

ExportHighestLOD 
When set to true, only the highest LOD is exported to the OBJ file.
XtoMDL

The XtoMDL section allows you to specify settings specific to the XtoMDL compiler. It contains the following options:

Keep 
Determines whether a XML file with object definitions is saved or not.
XWriter

The XWriter section allows you to specify settings specific to the X writer. It contains the following options:

DrawcallBatching 
Determines whether the object will have drawcall batching or working LODs.
OnlyWriteTextureName 
When set to true only the filename and not the path of the textures is written to the X file.
ZBiasOffset 
The offset that is given to polygons based on their ZBias value.

Texture settings

Texture settings
TextureLoader

The TextureLoader section allows you to specify settings related to the texture loader. It contains the following options:

BMPDDSEquivalence 
Determines whether BMP and DDS files are treated equivalent when looking for textures. This replicates the FSX behaviour.
FlipDDS 
When set to true, DDS files are flipped vertically when importing. This should be false for FSX DDS files.
Texture path editor
TextureSearchPath 
The search path used when looking for a texture. The texture is first searched in the folder of the object you are reading, after that all folder in the search path will be examined. When you click on the ... button you get the texture search path editor form to help you add, remove or order folders from the search path. If you double click on a folder in the form you can edit it by typing, that way you can also specify relative folders. You can use the special tags [FS2004] and [FSX] to entire paths depending on your FS installation folder.
TextureWriter

The TextureWriter section allows you to specify settings related to the texture writer. It contains the following options:

DefaultType 
Determines the default texture type used when exporting textures.
ImageToolPath 
The path to the ImageTool tool used to generate DDS and DXT BMP textures.
Transparency

The Transparency section allows you to specify settings related to transparency. It contains the following options:

AlphaDetectionThreshold 
The threshold for detecting an alpha channel. Values below this value are not considered transparent. To be used with compressed images like JPG or PNG.

ObjectModel settings

ObjectModel options
Drawcall minimizer

The Drawcall Minimizer section allows you to specify settings related to the drawcall minimizer. The following options are available:

DrawcallMinimizerTextureSize 
The size of the new texture sheet used by the drawcall minimizer.
TextureResetOffset 
Offset from the border of the texture when resetting the texture mapping. This is used when replacing a colour by a texture. Having a small offset can give noise at lower mipmaps.
Level of detail

The Level of detail section allows you to specify settings related to LODs. The following options are available:

DefaultLOD 
Default LOD value.
LODFOV
Field of view (in degrees) used for LOD calculations.
LODResolution 
Horizontal screen resolution (in pixels) used for LOD calculations.
Optimize

The Optimize section allows you to specify settings related to the optimization of objects. The following options are available:

CollapseAttachedObjects
Determines whether attached objects are moved to be relative to the object root (when not animated).
CollapseModelParts
Determines whether modelparts with the same material are collapsed into one modelpart.
CollapseNodes
Determines whether subsequent nodes are collapsed into one.
MergeDuplicateChildren
Determines whether duplicate child nodes are merged into one.
RemoveEmptyNodes
Determines whether empty nodes are removed.
SmallTriangleLimit
Sets the area (square meters) below which a triangle is consider to be too small and will be removed when optimizing.
Placement

The Placement section allows you to specify settings related to the placement of objects. The following options are available:

DefaultImageComplexity 
The default image complexity used when placing an object.

FS related settings

ObjectModel options
FS

The FS section allows you to specify settings related to flight simulator. The following options are available:

FS2004Path 
The path where FS2004 is installed.
FSXPath 
The path where FSX is installed.
ModelDefPath 
The location where the ModelDef.xml file can be found.
PreferredFSVersion
Your preferred FS version. This for example determines in what format GUIDs are displayed.

Keyboard shortcuts

To make using ModelConverterX easier most actions and button you can click with the mouse also have a keyboard shortcut. This table gives an overview of the available shortcuts:

Alt
Alt-B Batch convert objects
Alt-E Export current object
Alt-I Import objects
Alt-O Options tab
Alt-T Open Special tools menu
Ctrl
Ctrl-A Toggle display of attached objects
Ctrl-D Show drawcall minimizer
Ctrl-E Show attached object editor
Ctrl-G Toggle display of grid
Ctrl-I Show object information/statistics
Ctrl-J Show a list of all loaded objects
Ctrl-L Show the LOD Creator form
Ctrl-M Show mass texture editor
Ctrl-N Toggle display of normals
Ctrl-O Open recently opened files list
Ctrl-P Play or pause the animation
Ctrl-R Reset preview view
Ctrl-S Generate object report
Ctrl-T Show material editor
Ctrl-V Save preview to image
Ctrl-X Go to next object
Ctrl-Z Go to previous object
Shift
Shift-M Move object
Shift-R Rotate object
Shift-S Scale object

How to ...

Further down in this manual you will find a detailed explanation of the user interface and the features of the different object readers and writers. But in this section some quick howtos will be shown that explain how to perform common tasks. This should be enough to get you going quickly.

When using ModelConverterX for the first time, make sure that you have set the options correctly. Especially the paths to compilers like XtoMDL or MakeMDL should correspond with the location of those compilers on your machine.

Convert a SCASM macro into a FSX MDL object

This howto explains how to convert a SCASM macro object into a FSX MDL object. So to complete this howto you need to have a SCASM macro that you want to convert. Start ModelConverterX and we are ready to go. You can find the images illustrating the steps at the bottom of this section.

  1. Import to SCASM macro into ModelConverterX. To do so press the Import button and browse to the file you want to load. After you press the Open button ModelConverterX will start loading the object. Once this is done a preview of the object will appear.
  2. Check if there were any problems during the import. To do so click on the Event log tab at the bottom of the screen. You should always see some entries in the log, look for events that are of the type Warning or Error to see if there were any serious trouble. It could for example be that there was a not supported command in your SCASM macro.
  3. Now that your object is loaded and you have verified that there are no big problems with it, it is time to export the object. To do so press the Export button and enter the name and location of the MDL file you want to export. Once you have done that press Save. ModelConverterX will start exporting now.
  4. Once the export process has finished, check the Event log again, the messages from the exporter will have been added to it. Especially look for the output XtoMDL added while compiling your MDL file. Normally there should not be any errors in this process.

Now you have the MDL file that you can use in your scenery, like you would do with any MDL object. So put it in an library BGL and start placing it with your favourite placement tool.

Convert a SketchUp object into a FSX MDL object

This howto explains how to convert an object made in SketchUp to a FSX MDL object. So you need an object made with SketchUp to complete this howto. You can find the images illustrating the steps at the bottom of this section.

  1. From SketchUp you need to export your object as a COLLADA DAE file. Using the default export options should work fine.
  2. Next load this DAE file into ModelConverterX. See the previous howto about converting an API macro for more details about importing files.
  3. If your model has a lot of small texture, you might want to use the Drawcall Minimizer function to combine them. See the information further down in this manual for more details on this function.
  4. Use the Mass Texture Editor to convert the JPG and PNG textures used by SketchUp to a format that FS can read. After opening the Mass Texture Editor make sure to set the folder where you want the textures to be saved. Check if the file format and sizes suggested for the textures are correct and then press Convert to make the new textures.
  5. Now export your object as a FSX MDL file. See the previous howto about converting an API macro for more details on this.

Now you have the MDL file that you can use in your scenery, like you would do with any MDL object. So put it in an library BGL and start placing it with your favourite placement tool.

Convert a SCASM macro into a 3DS object and import it into GMax

This howto explains how to import a SCASM macro object into GMax, so that you can manipulate the object. In this process the 3DS format will be used as an intermediate step. So let's get started.

  1. The first steps are similar to the howto about converting from a SCASM macro to a MDL file. So you need to load the macro into ModelConverterX and check for any errors during that process.
  2. Now press the Export button and instead of saving to a MDL file, we will save to a 3DS file this time. So select where you want to save it and press Save.
  3. Next start up GMax and from the File menu select the import option. Browse to your 3DS file and select it. In the next dialog I usually leave the default settings. Once the importing is done you should be able to see your geometry.
  4. But there is more, the materials and textures have also been exported. They are just not showing. So open the material navigator and open all the materials used in your object in the material editor. For each of them you will have to select the white/blue checkerboard icon to display the textures.
  5. Also note that the 3DS format has a limitation in storing the texture names, it only allows the old style short DOS names. So if you used names with more than 8 characters they might not always be exported correctly. So check if the right textures are showing up in your material and else select them again from your disk.

Now you have your object in GMax, so you can manipulate it further. From GMax you can export to MDL like usual.


Object readers

To be able to read the objects from the different format ModelConverterX makes use of different object readers. This section gives an overview of the available readers and their capabilities. This means that features that are not explicitly mentioned are not implemented at the moment.

SCASM reader

The SCASM reader allows you to import objects from SCASM source files. This could be either API or SCM macros or a complete SCA source file directly. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Lines (will be converted to 3D mesh)
  • SCASM automatic normal and texture mapping calculations are supported
  • Transformations
  • TransformCall animations (other animations are not yet supported)
  • Materials (colours and textures)
  • Night textures
  • Light points
  • Attached effects
  • Binary commands (often used in FSDS macros to maintain backwards compatibility with old SCASM compiler versions)

If the SCASM file contains multiple objects, they will be returned to you as a list of objects through which you can browse. So importing a whole SCASM library at once is also possible.

FSX MDL reader

The FSX MDL reader allows you to import objects from the FSX MDL format. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours, textures and FSX specific options)
  • Friendly name and GUID
  • Levels of detail
  • Transformations
  • Animations (bone and skin animations not yet working)
  • Attachpoints

FS2004 MDL reader

The FS2004 MDL reader allows you to import objects from the FS2004 scenery and aircraft MDL format. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)
  • Transformations
  • Animations (not all aircraft animations are imported yet)
  • Attachpoints

FS2002 and earlier aircraft MDL reader

This reader allows you to read aircraft MDL files from FS2002 and ealier FS versions. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)
  • Transformations
  • Animations (not all aircraft animations are imported yet)

BGLComp BGL reader

The BGLComp BGL reader allows you to import BGL files that have been compiled with BGLComp. The reader will extract any MDL file it finds from this BGL file and then use a MDL reader to read the object.

If there is placement information related to the MDL files this is also read. But at the moment only one instance of each model is supported. So if multiple instances are placed, only the first one is read. The airport related information is not read from the BGLComp BGL files.

Pre-BGLComp BGL reader

This reader can read scenery objects from BGL files made for FS2002 and earlier. These BGL files are decompiled to SCASM files, so see the SCASM reader for the supported elements.

X file reader

This reader can read the DirectX X file format. It supports both the standard X file format, as well as the FS specific extensions. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours, textures and FSX specific options)
  • Friendly name and GUID
  • Levels of detail
  • Transformations
  • Animations (bone and skin animations not yet working)

FSDS FSC reader

The FSDS FSC MDL reader allows you to import objects from the FSC format. Objects from FSDS version 1 are currently not supported. The following features are supported:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)
  • Transformations
  • Levels of detail
  • Animations (limited implementation)

AC3D reader

The AC3D reader allows you to import objects from the AC format. This format is used in FlightGear for the 3D objects. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)
  • Transformations

X-Plane OBJ reader

The X-Plane OBJ reader allows you to import objects from the X-Plane OBJ format. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)
  • Transformations
  • Levels of detail
  • Animations

Wavefront OBJ reader

The Wavefront OBJ reader allows you to import objects from the OBJ format. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)

COLLADA DAE reader

The COLLADA DAE reader allows you to import objects from the COLLADA DAE format. The COLLADA format is often used as interchange format and for example supported by Sketchup. The following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)
  • Transformations

Google Earth KMZ reader

The Google Earth KMZ reader allows you to import object from the KMZ format. KMZ files are zipped files that contain a COLLADA DAE object file and the used textures. See the COLLADA DAE reader for details about the supported features.

OpenFlight reader

The OpenFlight reader allows you to import objects from the FLT format. In the current version the following features of the object can be read:

  • Object mesh (vertices, triangles, normals)
  • Object materials (colours and textures)
  • Transformations
  • Levels of detail

Object writers

To be able to write the objects to the different format ModelConverterX makes use of different object writers. This section gives an overview of the available writers and their capabilities/limitations.

FSX X file writer

The FSX X file writer is able to generate a X file from an object. This X file can then be compiled with the XtoMDL tool from the SDK to get a MDL object to be used in Flight Simulator.

The current version of the X file writer is able to export the following functionality:

  • Object mesh (vertices, triangles, normals)
  • Materials (colours, textures and some of the FSX specific settings (double sided, transparency))
  • Night textures
  • Attachpoints
  • Levels of detail
  • Animations (only partly working for aircraft at the moment)
  • GUID and friendly name

FSX MDL file writer

The FSX MDL file writer is able to generate a MDL file for FSX directly. It makes use of the FSX X file writer, so please see its limitations as well. So in fact it is a wrapper that calls XtoMDL for you automatically. To do so you need to make sure you have set the XtoMDL path in the options.

FS2004 MDL file writer

The FS2004 MDL file writer is able to generate a MDL file for FS2004 directly. It makes use of the FSX X file writer, so please see its limitations as well. So in fact it is a wrapper that calls MakeMDL for you automatically. To do so you need to make sure you have set the MakeMDL path in the options.

Please note this exporter uses the FSX X file for FS2004, this could lead to problems for some features, but in general it works fine.

BGL writer

The BGL writer can write BGLComp BGL files for both FS2004 and FSX. These include the 3D objects as MDL files, so see the details on the FS2004 and FSX MDL writers to see which functionality is supported. Besides that also the placement information of the object is supported.

3DS writer

The 3DS writer is able to generate a 3DS file from an object. 3DS files are quite common and can therefore be imported in many other programs, for example into GMax or 3DS Max. This does allow you to import your old objects and update them for FSX.

The current version of the 3DS writer is able to export the following functionality:

  • Object mesh (vertices, triangles, but no normals)
  • Materials (colours and textures)
  • Levels of detail (by using the naming convention supported by the FS gamepacks)

AC3D writer

The AC3D writer is able to generate a AC file from an object. This format is used by FlightGear for the 3D objects. The current version of the AC3D writer is able to export the following functionality:

  • Object mesh (vertices, triangles, normals)
  • Materials (colours and textures)

OpenFlight writer

The OpenFlight writer is able to generate a OpenFlight (FLT) file from an object. OpenFlight files are the de facto standard in professional flight simulators.

The current version of the OpenFlight writer is able to export the following functionality:

  • Object mesh (vertices, triangles, normals)
  • Materials (colours and textures)
  • Levels of detail

Wavefront OBJ writer

The Wavefront OBJ writer is able to generate a OBJ file from an object. OBJ files are supported by many 3D programs, so they can be used to exchange objects.

The current version of the OBJ writer is able to export the following functionality:

  • Object mesh (vertices, triangles, normals)
  • Materials (colours and textures)
  • Level of details information (as group names)

Texture loaders

To display the textures of your object in the preview window, ModelConverterX contains loaders for different texture formats. At the moment the following formats are supported:

  • BMP (8 bit, 16 bit, 24 bit, 32 bit)
  • Extended BMP (DXT1, DXT3, DXT3)
  • DDS (DXT1, DXT3, DXT5)
  • RAW/R8 format using the FS5 colour palette
  • TGA
  • JPG
  • PNG
  • SGI RGB/RGBA

Background information

This section provides some interesting background information that might be useful to you while using ModelConverterX.

Video tutorials

I have made a few video tutorials about ModelConverterX.

There is also a YouTube channel where I try to post quick videos of ModelConverterX functions. Many of new functions from the development release that are not yet in the manual.

Performance

One of the reasons why you might want to convert your objects to the FSX MDL format is to gain more performance. There are several reasons why FSX MDL objects have a better performance than older objects:

  • The scenery engine is most optimized for them and the format itself is optimized in such a way that drawing the objects becomes easy.
  • The older objects are not always optimized as much as they could be. When looking at the SCASM code produced by most of the older modelling tools (VOD, EOD, FSDS v1, etc) it has to be concluded that this code can be cleaned up a lot. After doing that the performance of those macros would be better, but when converting them to FSX MDL this is done for you by the tool.

Another benefit of using ModelConverterX is that it will merge all polygons that use the same material automatically, that why the amount of drawcalls used by your object is optimized for you. That alone is good for the performance already.

In some tests performed the results were quite surprising. By converting around 30 objects, used in a city, from API to FSX MDL file we were able to gain more than 10 frames. The improvement was bigger than expected. Of course one test is not full proof, but you will probably gain performance.

Drawcalls

For the performance of an object in Flight Simulator the amount of drawcalls used by the object is an important factor. ModelConverterX has a tool to minimize the amount of drawcalls. But what is a drawcall?

Simply said a drawcall is a group of triangles that use the same material settings (colours and textures) when the graphical card draws your object. Every change in a material setting means that the graphics card has to set its state again and that is a relatively expensive operations for the performance.

So to optimize performance you can best make sure you have as little different materials as possible. Even one small parameter that is different in the material results in a new drawcall already. Another why to reduce them is to not use colours on your triangles, instead give a piece of unused texture that colour and map it on the triangle.

Support

If you have any problems while using the program or if you have suggestions and other feedback to improve the tool, please let me know. Any report about a object or a texture not loading correctly will help me to improve the tool, so please be sure to report those.

You can either contact me directly or visit the ModelConverterX subforum at FSDeveloper.com.

Credits

The following persons or organisations deserve credit for helping me while creating this tool:

  • Everybody who reported feedback on the previous versions, this helped me to improve the tool. A special thanks goes to the beta testers who dared to try my development releases that were sometimes a little buggy.
  • Michael Garland for his papers on object simplification
  • Colin Fahey for his C# OpenGL wrapper
  • The Tango Desktop Project for their icon set
  • The DotNetZip library
  • Remi at the COLLADA forum for his C# COLLADA code.

User license

When using ModelConverterX you agree to the following user license:

I do hereby agree that I will only use ModelConverterX to convert objects I have created myself. I will not change the work of others, without their prior written permission. This does include any objects obtained by decompilation of BGL files.

(c) 2007-2012 SceneryDesign.org / Arno Gerretsen

This software program is distributed without charge to other scenery designers, redistribution of the original ZIP file is allowed. You are NOT allowed to sell this software program or ask money for its distribution. Object created with this software program can be used in commercial scenery projects if you wish.

The copyright and any intellectual property relating to this program remain the property of the author.

The software distributed in this way may represent work in progress, and bears no warranty, either expressed or implied.