Modeling Best Practices
In order to provide a high level of consistency when incorporating 3D assets from multiple sources into a single scene, the following guidelines are provided for use in asset creation and export.
Scaling And Orientation
SimReady 3D assets should adhere to the following modeling guidelines.
All assets should be created at real-world scale using meters as the scaling unit. It is important that real-world scale is used so that relative sizing of objects in a scene is accurate when 3D assets provided by different sources are used. Real-world scaling also ensures consistency in the physics behavior of the 3D assets when a simulation is run.
Assets should be exported in Z-up orientation. Some 3D software applications use Y-up as its default modeling orientation. Maya is one example. When creating 3D assets in an application where an axis other than Z is up, be sure to choose Z-up as the coordinate system when exporting the 3D asset.
The 3D asset must be aligned in terms of its “front” to the “front” viewport of the chosen 3D app as shown below. If your 3D asset doesn’t have a defined front (e.g. pencil or bolt)”, then use your best judgment on alignment.
![SimReady Kettle Model](../_images/simready_modeling-kettle.png)
3ds Max viewports
![SimReady Kart Model](../_images/simready_modeling-kart.png)
Maya viewports
![SimReady Monkey Model](../_images/simready_modeling-monkey.png)
Blender viewports
Pivot points must be properly placed and aligned so the 3D asset “sits” properly with respect to the ground plane. If the model is supposed to hang on a wall, or from the ceiling, it should have the pivot located in a position that allows for natural placement in relation to those surfaces, but it should remain centered at the origin.
There should be no transformations on the 3D asset. This means no scale, offset, or rotation information. All transformation values should be zero, except for the scale, which should be set 100%. Most 3D applications have the ability to freeze or reset transformations and these tools should be used prior to export.
Complex assets need to be broken out into moveable pieces, with each moving part having its own transform. If the asset is made up of multiple parts, each of the individual components of the asset should have its pivot at its respective base/center. If these parts are expected to move, pivots should be placed where they assure rotations won’t break the expected function of the object.
Any reusable asset that will be embedded into the ground (e.g. a light post) should extend below the ground plane enough that it can be placed on a 45-degree slope without the base of the object floating over the surface. The pivot for the object should remain at the world origin even though the geometry extends beneath the ground plane.
Naming and Packaging
All SimReady 3D assets should be created using the following naming conventions.
All file names should be written as lowercase_with_underscores and should describe the geometry in human-readable terms (e.g.
car_hubcap
,door_knob
,speaker_grill_cover
)Do not use double underscores, hyphens, or other special characters.
One exception is material names which use double underscores to separate the three parts of their name string (i.e. materialtype__surfacetype__description) given that this naming convention is used specifically to connect a SimReady material to a physical material type. For more information on the conventions used for defining material names please refer to the SimReady Material Naming section.
Each 3D asset should be exported individually. In other words, do not export groups of objects together as one 3D model (e.g. a table and chairs) since they won’t be able to be positioned independently. The table and chairs should be exported as their own individual 3D models so they can be positioned as needed relative to one another. Keep this in mind when constructing your 3D assets, and pay attention to the “atomic” level of what is being exported.
Geometry
General
Simple hierarchies are preferred in the creation of SimReady 3D assets as fewer meshes result in better performance. However, separate parts/meshes should be created for the following cases:
Separate Moving Parts
Complex objects need to be broken out into moveable pieces, with each moving part having its own transform and properly placed pivot point. Moving parts can include many meshes, but they should all be parented underneath an XForm prefixed so it is obvious of it’s purpose (e.g. XForm_Left_Door
). Location and orientation of the XForm is also important as it will define the joint location through which the part will be connected to the parent.
Separate Dynamic Objects
Dynamic lights for vehicles are just one example. A single ‘lights’ object could contain a turn signal, headlight, and running light materials. All objects that use an emissive map do not need to be separate objects. An object that contains an emissive map that is enabled or disabled by time of day, or is meant to have dynamic behavior however, needs to be separate.
Separate Glass Parts
Transparency is costly to render. For this reason special effort is made to clearly define which objects have transparency and take steps to allow for optimization as described below:
Objects with transparency (e.g. glass) should be kept as separate objects. A building, for example, might have a ‘glass_windows’ object that contains all of the glass windows for the entire structure. Keep these objects separate from other objects because they require special handling and performance optimization.
The glass should be modeled with the same thickness it has in the physical object. Glass surfaces can share UV space with other non-glass materials. Do not model glass as non-manifold geometry.