Inventor For Game Design
Inventor For Game Design
v1.92
Contents
Introduction
Materials
Inventor
High res model
Appearances
Custom appearance
Creating a new appearance library
Creating a new appearance
Applying a custom appearance to a part
Updating an appearance
Fixing appearance issues
Low res model
Make a copy of the high res project
Deleting surface detail
3ds Max
Setup
Viewport
Selection
Unit settings
InvToSP
Settings
Modify low res model
Modify high res model
Prepare align model
Modify combined models
Assemble
Miscellaneous
Manual UV seam placement
Exporting a projection cage
Substance Painter
Unity mesh import settings
Introduction
Most game content is designed in non-parametric 3d modelling programs such as 3ds Max, Maya,
Cinema 4D, etc. However, if your design needs to be parametric and constraint driven, a CAD
program such as Inventor is more suitable. An example of this is when you are reverse engineering
an existing object using measurements. The disadvantage of using a CAD program for game design is
that it lacks a robust texturing workflow. This document aims to solve this problem by explaining
how to take an Inventor CAD model and prepare it for texturing in Substance Painter.
-Design a high res model in Inventor which includes all surface detail.
-Make a low res model in Inventor by copying the high res project and deleting all surface detail.
-Modify the high res and low res models in 3ds Max so they are ready to be textured.
-Texture the models in Substance Painter.
-Export the textures from Substance Painter to Unity.
The UVs are automatically unwrapped using Unwrella. In a traditional workflow which involves
texturing in Photoshop it is not recommended to use automatic unwrapping because you have little
control over the location of the UV seams. However, Substance Painter is used which allows you to
paint seamlessly over UV shells. Because of this, it is not worth unwrapping the model by hand as
this is very labor intensive with very little additional benefit. Note that it is also possible to set the
location of the UV seams manually when using Unwrella but this is generally only done when long
thing polygons are split up in order to increase texture space usage.
A script called InvToSP is provided which automates most repetitive tasks in 3ds Max. These tasks
can be done manually through the 3ds Max UI, but sometimes there are several different methods
to do something and not all of those methods give the correct result.
CAD data uses explicit (custom) normals instead of calculated normals. Smoothing groups (hard/soft
edges) are not used. 3ds Max contains many bugs which destroy these explicit normals. The InvToSP
script works around these bugs and maintains the explicit normals at all times.
This manual is written for Inventor 2017 and 3ds Max 2017.
Materials
The definition of a material is not the same in all modelling programs. Here is an overview:
The textures used for a single material in 3ds Max or Unity is called a Texture Set in Substance
Painter.
The difference between a material in 3ds Max/Unity and a material in Substance Painter is that in
Substance Painter, you apply materials (can be an infinite amount) to the Texture Set where as in
3ds Max/Unity you apply the material (generally only one) to an object.
Inventor
High res model
First, create a project file. You will need this to separate the high res and low res Inventor project.
You cannot see the mesh model (triangles) in Inventor, so when modelling, think about what
geometry will be created. You can import the part or assembly file into 3ds Max at any time to see
what the triangulated model looks like.
For example, if you extrude a cylinder out of a square shape, need to split the cylinder off the base.
This is because the square surface will receive additional polygons wrapping around the cylinder.
If you use the split feature, it will create multiple solid bodies or surfaces. These will be imported
into 3ds Max as separate objects/nodes. If you want to save draw calls in a real time renderer, you
need to fuse those separate objects together so they are a single object again.
Also note that if you split an object in Inventor, it creates additional surfaces at the split. Some of
them will be out of view and you need to delete those surfaces using the Delete Face feature in
Inventor.
Here is an example of the workflow to reduce polygons by splitting an object in Inventor. Lets have
a look at this object:
It looks fine, but if it is imported into 3ds Max and the wireframe view is turned on, it looks like the
picture below. Note the additional polygons at the square base.
Back in Inventor, split the part at the base:
Now it looks like the picture below in 3ds Max. There are still unnecessary polygons at the base of
the cylinder.
In Inventor, delete the face at the bottom of the cylinder. Note that you can select a face hidden
behind other geometry by hovering the mouse over the hidden face for a while. This will give you a
dropdown list where you can select the hidden face. After deleting this face, it looks like the picture
below in Inventor. It basically looks the same.
But if the part is imported into 3ds Max, it looks the picture below. Note that the redundant
polygons at the base of the cylinder are removed:
Now the square and the cylinder can be fused together in 3ds Max to make it a single part again.
Think about the level of detail you want to model right from the start. You can model all surface
details in the geometry as most of that can be baked into textures, but adding these details
afterwards can be difficult.
Here is an example of a part with all surface detail present.
The wireframe looks like the picture below. Note the excessive amount of triangles.
However, all surface detail can be removed in Inventor by simply deleting those features (using a
duplicate project). When the surface detail is deleted, it looks like the picture below.
The high detail mesh can be baked into a normal map, which looks like the picture below.
When the normal map is applied to the low poly object, it looks nearly identical to the original, but it
is much faster to render. See the picture below.
If you want to model all surface details, make sure you model it in such a way that it can be easily
removed from the hierarchy.
Don't bend a part using the Bend feature because this will create geometry at the rounded sides
which cannot be removed. Instead, make a straight angle and add fillets to simulate the bend. The
fillets can be easily removed from the hierarchy, allowing you to create a high and a low res model.
Here is a part with a Bend feature
This is the same part but now modelled with fillets. It looks the same, but the fillets can be easily
deleted and replaced with a normal map.
Avoid putting fillets in a sketch as it is easier to delete a fillet from the hierarchy than it is to modify
it in a sketch.
If an object needs to be animated, think about where the pivot point should be. The pivot point is
the part origin (center point).
Use G2 fillets where possible as these have smoother shading than G1 fillets.
Model text on surfaces using the Emboss feature with a very small depth.
All high poly edges with a round shape which are 45 degrees or more (hole in a surface, or round
extrusion), must be chamfered, otherwise you get normal map aliasing.
Make sure the part and assembly orientation is consistent so it is easy to edit in 3ds Max and
Substance Painter. Turn the ground plane on to help with the orientation. In addition, place the base
component of an assembly at the center to make sure the camera can easily orbit around the
objects.
Apply fillets on a part when all modelling is done, not in between. Otherwise some features might
disappear when the fillet is removed.
Place the base component of an assembly in the center to make it easier to view.
If a model has a large area with a low detail texture such as a plain color, and a small area with a high
detail texture such as leather, model those areas a separate parts and put them together in an
assembly. The reason for this is that that way you can use a lower resolution texture and still
maintain the required detail.
It is very important not to include any of the following text in the ipt or iam file name, otherwise the
InvToSP script will not function correctly.
If you have some surfaces with fillets on it, you need to apply a fillet to each adjacent surface, and all
curved surfaces, otherwise you will get baking errors.
Avoid the use of through holes or other through shapes into the high res model because this will
lead to ray misses which affect the baked Ambient Occlusion texture.
Carefully check that the model is correctly aligned with the origin (not rotated) in an assembly. This
is important because rotated models cause UV islands to be roatated when unwrapping with
Unwrella. This in turn leads to aliasing in the texture maps.
Appearances
Avoid the use of an Autodesk or Inventor Metal appearance because the color of a metal cannot be
sampled by script in 3ds Max, causing issues when baking an ID map. You can create a generic
Inventor material with the same look.
Give each part or surface a custom appearance (instead of the default appearance) because this
makes the texturing process much easier.
If you have 2 appearances which are the same color but should have a different normal detail map
(such as a leather surface and a smooth surface with the same color), give them each a slightly
different color. This is done so that the different materials can be identified during the texturing
process using an ID map.
Do not be shy of using multiple appearances on a single part. These can be easily baked into an ID
map which can be used to reconstruct complex materials in Substance Painter.
To apply an appearance to a feature in Inventor: RMB click on feature in tree -> Properties ->
Feature appearance.
Do not use the color wheel to create custom appearances on a surface because no descriptive name
will be generated. Instead, always make a real material, add it to your custom appearance library,
and apply that to the surface instead.
Custom appearance
A custom appearance enables you to have more control over the appearance you want to apply.
Don't spend too much time getting the look exactly right as it is not transferrable to Substance
Painter. Instead, the custom appearances are used to create an ID map, allowing you to quickly
select the areas which need to have a certain material applied in Substance Painter.
It is easier to model the part using the default appearance (because of the neutral matte color).
When you are done modeling the part, you can change the appearance.
In the material browser, Document Materials are the materials currently in use in the part file which
is open in the background.
Appearances can only be edited in the Document Materials section. So if you want to edit an
Appearance, place it there first.
Add the appearance library to the project so it does not has to be loaded when opening Inventor
every time:
Inventor icon->Manage->Projects. Select Appearance Libraries, then select the + icon on the right.
Select your custom *.adsklib file.
Updating an appearance
In order to update the look of an appearance after the appearance has already been applied to a
part, do the following:
There are two ways to reset an appearance to the default (clear an appearance):
-Select the appearance dropdown list, and at the top select "Clear Override".
-Select the color wheel icon with the cross and select "Select All", then click on the green
tick. Mirrored parts might require the second option.
You might run into issues with appearances such as models displaying the wrong appearance in an
assembly. To fix most of these issues, do the following:
If an appearance of a mirrored part doesn't change in the assembly, and no overrides in the
assembly are present, make a change in the geometry of the master part (move the End of Part
marker up, then down again), save it, do a local update in the assembly, change the part back to its
original shape, save it, then do a local update in the assembly again.
If an appearance shows correctly in the part but not in the assembly, make sure all appearance
overrides are cleared. To do this, select the part in the assembly and select the icon of the color
wheel with the red cross.
Appearances on mirrored parts might show incorrectly. First make sure all appearance overrides are
cleared. Then open the mirrored part, select the item as shown below, and change the appearance.
Changing and updating an appearance will cause all mirrored parts to revert to the default
appearance if the custom appearance was added after the part was mirrored. These parts will have
to have their appearance assigned again.
If an appearance is renamed and you want the parts to take over this new name, all parts have to
have their appearance override cleared, and the new renamed appearance re-applied.
If a mirrored part disappears after applying a custom appearance, move the End of Part marker up a
bit on the master part in order to re-generate it. Then move it back down. Now the mirrored part
should function properly.
-An extrude cut operation in an assembly causes the materials of objects adjacent to the cut to be
changed to the neighboring object, if present. This is not apparent in Inventor and has be fixed in 3ds
Max by re-assigning any incorrect materials.
The high res and low res parts must have the same orientation. Take special care with moving parts
which are not fully constrained. Low res parts which do not have the same orientation as the high
res part might go undetected due to the lack of detail. However, it is very important that they have
the same orientation, otherwise the Align model parts might be placed incorrectly.
Before deleting all surface detail, a duplicate project has to be created. Each low res part and
assembly file has to have an _low suffix. There are a couple of reasons why this is done:
-You do not want to accidently delete features from the original high res model. Having
different file names prevents this from happening.
-You can't just copy a project because if you do so, links to the original project are kept and
you are likely to edit the original files when opening a part via an assembly.
-The different names will prevent the high res model from being overwritten in 3ds Max and
it also makes it easier to manage the two models.
First create a new folder for the low res model. Place the folder in the same root directory as the
high res model, but with a "_low" suffix. For example, if the high res model directory is this:
C:\CAD\cockpit
Then the low res model should be this:
C:\CAD\cockpit_low
Copy the low res folder path. To do this, go to the windows Explorer window, select the folder, and
click on the path bar on top. When clicked, the path changes to a valid path which can be copied.
Each of the following steps will take some time if the assembly is large. Inventor will seem to freeze,
but this is normal.
1. Open the high res root assembly. This is the final model which contains all parts.
2. Click on Assemble->Copy.
3. Select the assembly root in the Explorer window.
4. Click Next.
5. At the dialog, select the option "Open in new Window".
6. Right click on the root "File Location" entry and select Replace.
7. Change the "Replace With" dropdown with the directory of the new location.
8. Click Replace All.
9. Change the suffix to _low.
10. Make sure the Suffix option is selected.
11. Click Apply.
12. Click OK. This will take a very long time if the assembly is large. You might want to leave it
processing overnight, it can take that long. The progress for each individual part can be seen in the
bottom right.
During the processing, you might get a warning "Copy components failed" due to constraints failing
to be resolved. Just click "Accept". Any problematic components can be manually edited.
When processing is done, save the newly generated assembly. You can use Save, not Save As,
because the directory is already specified. Saving the project can take a long time if there are a lot of
parts.
Note that the model can appear incomplete after copying due to memory issues. Restarting Inventor
should fix this.
Create a new project file for the low res project. Give it the same name as the high res model project
but with the suffix _low. Creating a project file is important for two reasons:
-Any mirrored parts base components can be incorrectly referenced to the original high res
project instead of the low res version. When a project file is available, the option is given to
fix this.
-It separates the high res and low res model by clicking on the project file to access the parts
and assemblies.
Rename the high res project directory. This is to make sure all links to the original high res parts are
broken. The base component of a derived part will always reference the original, even if the
assembly is copied. You will have to copy and rename derived part base components manually and
resolve the link manually also.
Open the root assembly file. If there are any mirrored parts, a resolve link dialog is shown. This is
where you to select the correct low res part. Any derived parts will ask for the location of the base
component. Select the manually renamed and copied base component in this case.
Some parts might be incorrectly placed because the constraints cannot be resolved. Fix this by
manually re-constraining the parts.
Cylindrical shapes fused with flat base can be split so less triangles are created.
Removing surface detail can cause mirrored objects fail to update. Remove detail step by step from
the master of a mirrored object and keep updating the mirrored part to catch any update failure.
When the master of a mirrored part is changed, the mirrored part will show a red bolt icon in the
history browser. To update the part, click on the yellow bolt icon on the top.
Delete surface detail first (fillets, holes, etc.), and then delete any surfaces.
When deleting surfaces from parts which have a mirrored or derived counterpart, first open the
mirrored/derived part and suppress the link with the master part. Then delete the surfaces of the
master part and mirrored/derived part individually. If the link is kept and surfaces are deleted from
the master, then the mirrored/derived part will disappear.
Removing the surface detail by deleting features is a destructive workflow, meaning that changes in
the original will not propagate to the low res version. So be sure the high res part is correct before
you remove any detail from the low res part.
Delete faces on the low poly model in Inventor, not in 3ds Max, because it can be done much faster
in Inventor (and easily undone since it is feature based).
In Inventor, deleting a feature which has a dependent pattern will remove the pattern from the
history tree. To work around this, move the End of Part marker up, delete the feature, then move
the End of Part marker down again.
Deleting faces and removing features will create a lot of constraint errors. It is not worth fixing these.
Suppressing a feature will cause all dependent features to be suppressed as well, which may not be
what you want. Deleting a feature will not delete dependent features, so this is the preferred
method to reduce surface detail.
Avoid long thin triangles because this will lead to bad texture space usage. Split up the geometry
using the Split feature in Inventor. You can split a body or split a surface (a solid body with a deleted
face is a surface too) using the split face feature. Note that when splitting a body into multiple
bodies, it creates different objects with the same name in 3ds Max. This in itself is not a problem but
it will cause a mismatch between the object material name and the TextureSet name in Substance
painter which in turn causes automatic texture assignment to materials in Unity to fail. To prevent
this from happening, split bodies must be renamed in 3ds Max so no objects with the same name
are present.
3ds Max
Setup
Viewport
In order to configure 3ds Max so it shows the same default viewport as Inventor, do the following.
If you get a "populate data error" popup after starting 3ds Max, use this fix:
Go to "\Program Files\Autodesk\3ds Max 2015\stdplugs\en-US" and delete or rename
"PeopleOrch.dlc.mui".
Selection
In order to make the selected wireframe better visible, follow these steps:
Unit settings
In order to have a consistent size between a part in Inventor, 3ds Max, and Unity, change the
following settings in 3ds Max. This assumes the unit used in Inventor is mm.
InvToSP
Preparing an imported Inventor model for realtime rendering is very time consuming when it is done
manually. There are various bugs in 3ds Max which require convoluted workflows to work around it.
In order to simplify this process, a free script called InvToSP is provided.
Inventor parts which contain surface bodies will be imported as additional geometry when imported
into 3ds max as a mesh. This geometry is not created when imported as a body object. Most
redundant surfaces are automatically deleted by the script, but some might have to be deleted
manually.
The script sets all dummy objects to invisible in order to remove the bounding box, which can be
distracting if many are displayed.
Never modify the model manually. Don't change names, don't change the transform, don't fuse
objects manually, etc. The imported models are assumed to be in a certain state and modifying them
manually will prevent InvToSP to function correctly.
The general workflow of InvToSP is simply to press the buttons from the top to bottom of the dialog.
However, if the final assembly has many identical objects, then it is worth creating a separate scene
file (high res and low res model) for these objects. This will save texture space because only one
texture has to be applied to the identical objects. The workflow is a bit different in this case:
-Create a high res and low res model for each part which exists in the final assembly more than once,
but only do this for objects where the surrounding geometry is roughly the same. Otherwise the AO
map will look incorrect.
-When at the step "Add AO objects" make sure to select "One AO mesh only". This is important,
otherwise the script will create many redundant AO meshes.
-When preparing an assembly which contains one of the identical objects, do not UV map it, do not
fuse it, and to not delete it. Just ignore it.
-When assembling the final model, the separate high/low res scene files containing the isolated
identical objects are automatically detected and cloned and placed in the assembly accordingly. The
result of this is that all identical parts have the same UV mapping and can use the same texture.
-After assembling the final model you have the option to fuse identical parts, saving draw calls. The
UV map will not be affected and the same texture can still be used for fused objects.
-In Substance Painter, when texturing an assembly which contains one of the identical objects, just
ignore those parts. Instead, load the isolated identical part into Substance Painter separately and
texture that one instead. The resulting texture can be applied to the final model because all the UV
maps of the identical objects are the same.
Note that when importing a part as a body object it might be split into separate objects. This does
not happen when importing a part as a mesh.
Due to a bug in the 3ds Max, the amount of polygons created is inconsistent when moving the mesh
resolution slider on the import dialog back and forward. For example, with a test part there are
10.334 polygons created when the mesh resolution slider is left at 0 and not moved. If the mesh
resolution slider is moved to -10, released, and then moved back to 0, the amount of polygons
created is 10.324. If the mesh resolution slider is moved to -10, not released, and then moved back
to 0, the amount of polygons created is 48.424. After doing the exact same thing, the amount of
polygons created is 19.456. The only way to get consistent results in poly counts is to move the slider
straight to the desired number and leave it there. Another bug causes the start resolution to be set
at either -10 or +10. If that happens, move the slider to 0, do a test import, and then import again
and the slider should start at 0. To work around these bugs, the InvToSP script uses different import
logic but if a part is imported as a mesh and the resolution is set manually, you need to be aware of
this issue.
Undo does not work when using InvToSP (due to performance and stability issues) so make sure you
save the file before applying any change. This way you can undo by reloading the project.
After some lengthy operations, the script UI might disappear. To get it back, click on the Max icon in
the top left corner. This will force the 3ds Max UI to redraw.
Settings
Another reason to work with small projects is because due to a bug in 3ds Max, the ProOptimizer
modifier can fail to stich separate faces together if the project is too large, leading to unnecessary
vertices and baking errors.
Note that you can still import large projects but you will have to delete as many object as you can in
3ds Max, so only the main parts you want to work on remain.
4. Set the vertical axis which will be used when importing Inventor models. This will determine the
object orientation.
Setting the paths will greatly speed up the workflow because it allows InvToSP to automatically
import the appropriate files.
The paths and file name will be stored in a file called InvToSP.ini which is located in the scenes folder.
Each time InvToSP is started, the previous settings are retrieved.
The Toggle Visibility buttons allow you to show or hide the models.
The Appearance buttons allow you to change the appearance of the model to:
-Shaded (no shadows).
-Wireframe only.
-Both shaded and wireframe visible.
The low res model is imported as a body object. There are several reasons for this:
-The mesh resolution of a body object can be adjusted in realtime instead of once at import.
-The way the mesh resolution is calculated when set at import gives a bad triangle
distribution. Tight curvatures receive too many triangles while shallow curvatures receive
too little. Setting the mesh resolution for a body object via the InvToSP script results in a
better triangle distribution.
-The mesh resolution of each sub-object can be set individually instead of using one setting
for sub-objects.
-Body objects are imported much faster than mesh objects.
-Body objects do not contain redundant surfaces as with imported mesh objects.
Unfortunately 3ds Max contains a bug which flips some surfaces (mirrored features in Inventor)
when the model is imported as a body object. This bug does not occur when the model is imported
as a mesh, but in that case it is not possible to adjust the mesh resolution dynamically.
To work around this problem, you can re-import the object as a mesh (which doesn't have the face
flipping bug), or you can flip all faces of the object. When re-imported as a mesh, the mesh
resolution has to be guessed at import, and re-imported again if the resolution is incorrect.
Note that the only way to view the explicit normals is by adding an Edit Normals modifier and
selecting the object and modifier. Explicit normals are shown as green wires. Any other normal
visualization tool on the Editable Mesh or Poly modifier just shows the calculated normals which are
irrelevant.
Fusing objects manually in 3ds Max (using Attach or Collapse) is not recommended as 3ds Max has
various bugs which destroy the explicit normals. Instead, fuse objects using the script, which works
around these bugs.
The following steps describe the complete workflow of importing an Inventor model and preparing it
for export to Substance Painter.
Due to a bug in 3ds Max, some objects might lose their parent when another child of that parent is
deleted. This will cause the assemble stage to fail with an "Align equivalent not found" error. To
prevent this error, always make sure all objects in the low res model are a child of the main root.
1. Make sure the paths are set first. Then open a new scene. Click on the "Import Test Low Res
model" button. This imports a low res model with the sole purpose of detecting objects which have
flipped faces. Note that all materials are set to default for better visibility.
Note that the low res model is cloned with a _temp suffix. This model is used to keep track of the
original transform of all objects. At some point all transforms have to be zeroed to prevent explicit
normal corruption, but the original transforms are needed in order to assemble the individual
models, which is the purpose of the temp model.
2. Click the button "Convert to Editable Mesh". Due to a bug in 3ds Max, this cannot be done
automatically after import.
3. Click on the button "Select All". In order for flipped faces to become visible, all objects must be
selected.
4. Click on the button "Toggle show flipped faces". This will highlight all faces which are flipped in
green (if the object is selected). This button toggles the xView Face Orientation feature. If the Face
Orientation feature is on, it is shown by a green [Faces Orientation] indication at the bottom of the
viewport.
5. View the object from every possible angle to detect if any face is flipped. There are two things to
keep in mind:
-Some green faces are correctly orientated such as the back side of single sided geometry.
-Thin geometry viewed from a distance is show in green even though the face orientation is
correct. View these objects from a closer distance to confirm to confirm if faces are flipped.
6. When an object with flipped faces is detected, select that object (or objects), and press the button
"Red: mark objects for replace" or "Blue: mark objects for face flip". This gives the objects a red or
blue material respectively. To clear all marked objects, press the button "Clear marked objects".
Mark objects red if some of the faces are flipped and others are not. Mark the objects blue if all
faces are flipped.
Note that sub-objects from an ipt file (resulting from a split operation in Inventor) cannot be
replaced individually, so there is no point marking them.
7. Click on the button "Import Final Low Res model". This re-imports the model as a body object,
allowing you to set the mesh resolution dynamically. The previously marked objects are still marked.
Note that if you want to save the scene, press the button "Save Low Res scene" at the bottom of the
"Modify Low Res model" rollout. Do not save the scene manually because the name of the file is
important to find the individual models when assembling.
8. Optional: click on one red object (selecting multiple objects here is not supported), and click on
the button "Red: replace selected part with re-import". An Inventor import dialog is shown. Select an
appropriate mesh resolution and click OK. If the mesh resolution appears to be incorrect, replace the
part again, this time with another mesh resolution.
If the object is imported into an incorrect orientation, restart 3ds Max and try again.
Sub-objects from an ipt file (resulting from a split operation in Inventor) cannot be replaced
individually. Instead, the entire object is replaced.
Repeat this process until all marked objects are replaced with an object with the correct mesh
resolution. This fixes all flipped faces.
Note that if the object has a mirrored counterpart, both have to be imported/replaced with the
same mesh resolution in order for it to look realistic.
The replace part feature can be used for two other reasons:
-When changes have been made to the original Inventor file and it needs to be re-imported.
-When the mesh resolution is set incorrectly after the body object has been converted into
an Editable Mesh.
9. Once all marked parts are replaced, the mesh resolution of the body objects can be set. Click on a
body object and adjust the slider until the mesh resolution is satisfactory. It is best to use the
Explorer window to select the objects and start from the top, so no object is forgotten.
When adjusting the mesh resolution using the slider, there are a few things you should keep in mind:
-Objects which contain only flat surfaces do not need to be adjusted because the triangles
are automatically optimized.
-Duplicate object are referenced, so if you change the mesh resolution of one object, all
duplicates are changed as well. This can be a big time saver.
-If the object has a mirrored counterpart, both have to receive the same mesh resolution in
order for it to look realistic.
-Due to a bug in 3ds Max, sometimes the mesh is not stitched water tight at some
location. Adjust the mesh resolution slider to a higher resolution, or re-import the model as
a mesh instead of a body object.
Optional: select one or more blue objects and click on the button "Blue: flip all faces". This flips all
faces of all selected body objects.
10. Once the mesh resolution of all objects is set, click on the button "Convert All to Editable Mesh".
This cannot be undone. Once this button is pressed, the mesh resolution cannot be dynamically
adjusted anymore, except when an object is re-imported.
Optionally the pivot point of an object can be set to that of another object. This is especially handy in
order to set the pivot point of an assembly which can rotate because the assembly origin is not
correctly set to the same pivot point location in 3ds Max. To set the pivot point, first select the
object which need to have its pivot point changed, then select the object which is the source of the
pivot point. Once the two objects are selected, press the button "Set pivot point".
11. Click on the button "Zero Low Res transform". This sets the position and rotation of each object
to zero without affecting the orientation. This is makes sure the model is imported correctly into
Substance Painter as it doesn't support FBX files with transform values. Zeroing the transform also
makes sure the explicit normals are not destroyed when fusing objects.
You can still replace an object after zeroing the transform, but don't forget to zero the transform
again after replacing the object.
12. Decide which objects need to be fused into a single object. This reduces draw calls and makes
handling the model in Substance Painter easier (less Texture Sets). In order to fuse objects together,
select the objects and press the button "Fuse selected objects". When fusing objects, keep this in
mind:
-Only fuse objects which are not too close together, otherwise you will get texture baking
errors when the generated cage cannot move outward far enough.
-If a certain group of objects have a very simple material which doesn't need any textures,
do not fuse them with other objects which do need a texture. This will save texture space.
-Fusing many large object requires a large texture. Keep in mind the required texture
resolution.
-Do not fuse dynamic objects (objects which can move or rotate).
-If there are many identical objects which are scattered around different assemblies, it is
better to make a separate scene for that object and fuse them after assembling the final
model. This will save texture space. See the chapter Assemble for more information.
-If the fused objects are identical and you want them to share the same texture, you need to
change the workflow to: Zero transform -> Weld vertices -> UV Unwrap -> Fuse objects ->
Material for TextureSet.
Note that DirectX 12 and Vulcan can handle significantly more draw calls than previous versions (if
the game engine is properly designed to support it), so if one of those APIs is used, there might be
no need to fuse any sub-objects.
You can also detach faces but this functionality is not build into the InvToSP script. Follow these
steps to detach faces in order to prevent the normals pointing in the wrong direction after fusing it
with other objects:
-Select the object.
-Select the Editable Mesh modifier.
-Select face or polygon selection mode on the modifier.
-Select the faces.
-On the Edit Geometry rollout, click Detach.
-Add an Edit Normals modifier to the top of the stack.
-Select all normals and then click "Make explicit".
-Collapse the stack.
13. Press the button "Weld vertices". Some surfaces imported from a CAD source are detached from
the rest of the object, even though this is not visible. This causes texture baking errors because it
produces an incorrect cage.
If more than 10 objects are detected, it will throw a warning message. Because of a bug in 3ds Max,
using many objects in one scene can cause the ProOptimizer modifier to fail on some objects. If you
get this warning message, you have to check every single object in the scene after welding vertices.
To check for errors, select an object, open the modifier panel and select the ProOptimizer modifier.
The Calculate button should be disabled and the Statistics info box below should show a
before/after point and faces amount. It is ok if the before and after numbers are the same. However,
if the button can be pressed, or the message "Optimization Invalid" is displayed, then the welding of
the vertices has failed. In this case, you need to apply the following procedure to every single object
in the scene, even if the object welded correctly.
14. Make sure Unwrella is installed. Then press the button "UV unwrap". This creates an automatic
high quality UV unwrap. Unwrella is not free but considering the amount of time it will save you, it is
a bargain. If you want to change the unwrap settings, search for "unwrella" in the script source.
If the assembly contains objects which are identical to many other objects in the final assembly,
there is no need to unwrap them. Instead, create a separate scene for this object and unwrap that
one instead. Identical objects which have a separate scene file will automatically replace the objects
during final assembly. This way you can save texture space by using only one texture for all identical
objects.
In some cases you might want to force Unwrella to use predefined seams. Follow these steps to
place manual seams:
-Select the checkbox "Use manual seams".
-Click on the button "Place manual seams".
-Click at one vertex, follow the edge, and then select the next one. The edge will change to blue.
Continue selecting triangle edges until you finished highlighting all edges which need to have a seam.
Note that Unwrella will still place seams where needed, so you don't have to place seams
everywhere.
-Right click to finish drawing a seam.
-To delete a seam, press undo, or do the following:
-To delete one blue seam, hold ALT while left clicking on it. You can enable Edit seams (icon)
to make this easier.
-To delete all blue seams, click on the Unwrella Seam Helper tool -> Create seams. Then click
on Remove All Seams.
-To delete one green seam, go to the Edit UVs rollout -> Open UV editor. Then enable edge
mode (icon on bottom). Select the seam. Then in the toolbar go to Tools -> Stich selected.
Note that you can only stitch one edge at a time.
-To delete all green seams, open the Unwrella Seam Helper tool and click on "Remove All
Seams".
Note the seam color coding: green lines are seams which have already been applied. Blue lines are
seams currently being created.
When finished drawing seams, press the button "UV Unwrap", making sure "Use manual seams" is
selected.
15. Click on the button "Material for TextureSet". This creates a default material with a random color
for each object. This ensures a separate Texture Set is generated for each object in Substance
Painter. The color of the material is irrelevant as all materials will be re-applied in Substance Painter.
Optionally, you can copy-replace objects so that the selected objects have the same mesh, UV
mapping, and texture set. To do this, first select the source object, then select all objects which need
to be replaced by the source object. Tick the box "Keep original name" if the replaced objects should
keep their original name. Then click on "Copy replace objects" to replace all objects with the first
selected object.
16. Click on the button "Export Low Res FBX". This exports the low res FBX file to the export folder.
Do not manually export the model because it needs specific settings in order for the export to work.
17. Click on the button "Save Low Res scene". This saves the scene into the scenes folder. The name
will be the same as the name of the assembly file. Do not change the name of the saved scene as it is
used to link the objects in the model together. Note that the save button can be pressed at any time.
In this step, the only thing which is done is changing the materials. The high res model needs some
additional modifications, but for this, the low res model needs to be present as well, so that is done
at a later stage.
If a material on a mirrored part shows incorrectly in the high res model in 3ds Max, make sure the
material is added while the grey circle/cross icon is selected in Inventor, as described in the chapter
"Applying a custom material to a part"
-In Inventor, appearances cannot be added to faces or features in an assembly, so this has to be
added in 3ds Max instead. To do this, select the object, select the Edit mesh or poly modifier. Select
the Polygon selection mode and select all faces you want to add the material to. Open the material
editor, modify one of the material slots, and drag and drop that material onto the selected faces. A
multi material will be automatically generated if not present.
1. Open a new scene. Click on the button "Import High Res model". This will import the high res
inventor assembly file at the highest mesh resolution. Flipped faces are not an issue because the
model is imported as a mesh, not a body object. Because the mesh is generated at the highest
resolution, it will take some time to import.
Some materials will be corrupted when imported into 3ds Max. Corrupted materials can be
recognized by the message "Invalid Asset Instance!" in the material editor. The corrupted materials
can be fixed by pressing the button "Fix corrupted materials". You can use this feature for any object,
not just the imported high res model. Simply select one of the objects in the hierarchy and all its
parents and children will be processed.
In order to speed up the process of fixing corrupted materials, create a part called "appearances.ipt"
and place it in the high res Inventor project folder. The part should have many surfaces with all of
the used materials applied to at least one of the surfaces. Here is an example of what the
appearances part should look like:
If the appearances.ipt file is not available, it will attempt to fix the material by re-importing the
affected part and taking the material from that. But this will not work if the assembly has any
appearance overrides applied, so it is recommended to make an appearances.ipt file.
Additionally, you can use the button "Select objects with material name" to find objects with a
certain material. You can set the material name in the text box above the button.
2. Click on the button "Material for ID map". This will convert all Autodesk and Inventor materials to
standard materials. This needs to be done to avoid material export compatibility issues. The option is
given to generate random colors. This is highly recommended in order to avoid material blending
issues in Substance Painter. If the material colors are close together, the materials in Substance
Painter can create artefacts at the boundary. The color of the material is irrelevant because the
materials in Substance Painter are re-applied anyway.
3. Click on the button "Save High Res scene". This saves the scene into the scenes folder. The name
will be the same as the name of the assembly file. Do not change the name of the saved scene as it is
used to link the objects in the model together.
The align model is a low resolution version of the entire model, not just the individual parts. It is
used for two purposes:
-Supply proximate geometry for Ambient Occlusion (AO) baking.
-Provide a reference for assembling all individual parts.
Importing the align model can take a long time, even if the resolution is low, but it only has to be
done once.
1. Open a new scene. Click on the button "Import Align model". Choose the main root assembly file
of your low res model and press Open. Select an appropriate mesh resolution and press OK. Note
that the entire model needs to be loaded into memory, so don't pick a resolution which is too high.
2. Click on the button "Save Align scene". This saves the scene into the scenes folder.
Modify combined models
Some parts of the high res model need to have their name changed in order for the "match by
name" feature in Substance Painter to work. This feature prevents texture baking errors caused by
nearby geometry. The way it works is that during baking one object, it ignores all other objects,
except if the first part of the name (up to the suffix) is the same as the object being baked.
For example, the low res part is called "panel_low". When baking, all objects are ignored, except
objects with these names:
panel_high
panel_high_screw1
panel_high_bolt2
panel_high_fastner
etc.
This method is much more efficient than exploding your mesh for baking. However, the names need
to match up. This process is semi-automated with InvToSP.
1. Open a new scene. Click on the button "Import High/Low Res scenes". This imports the previously
saved high res and low res scenes.
2. Carefully inspect the overlapping high res and low res model to make sure the parts are properly
aligned. If not, fix it in Inventor and do the conversion process again.
3. Click on the button "Toggle High/Low Res visibility" so that only the high res model is visible.
4. Click on the button "Find name mismatch". This will select (highlight) all high res objects which
need to have their name modified in order for the "match by name" feature in Substance Painter to
work. Basically, it selects all high res objects which will never be baked into any texture because their
object name does not match up with any of the low res parts. This happens a lot when fusing objects.
You need to decide which high res objects belong to which low res parts.
Note that the find name mismatch functionality doesn't work in every use case. It might be
necessary to manually look at the object names in some cases.
5. Click on the button "Toggle High/Low Res visibility" again so that now only the low res model is
visible. Select one (not multiple) low res part where its texture need to have one of the highlighted
high res parts baked into.
6. With a single low res part selected, click on "Toggle High/Low Res visibility" again so that now only
the high res model is visible. Using CTRL-LMB, Select one or more high res parts which need to be
baked into the low res part texture which was selected first.
7. Click on the button "Match by name". This places the selected low res object name in front of the
selected high res object names, enabling the "match by name" feature in Substance Painter to work
correctly.
8. Click on the button "Find name mismatch" again, and repeat the process until no more name
mismatches are found.
Next, any nearby objects have to be added to the high res model so the Ambient Occlusion bakes
correctly.
1. Click on the button "Import Align scene". The align scene you made earlier is automatically loaded
if only one align scene is found. If not, a dialog box is provided allowing you to select the align scene.
2. Click on the button "Add AO objects" this adds nearby objects to the high res model and aligns
them automatically. All other objects from the Align model are deleted. The script simply looks if the
bounding boxes intersect (with some offset). This might cause some Align parts to be added you
don't want but these can simply be deleted manually. If some Align parts are consistently added
erroneously, you can delete them from the Align model scene itself.
A new high res model is created which contains the added AO objects. These objects have the suffix
_high_ao with a number added to the end. If the assembly exists in multiple places in the Align
model, a new high res model containing the local AO objects is created for each of them. These will
be automatically exported when using the "Export modified High Res" FBX button.
The option is provided to create "One AO mesh only". Make sure this is selected when the assembly
exists in many different places with similar surroundings, otherwise you might end up with a lot of
AO objects.
You can change the "AO distance" threshold to indicate when nearby objects should be included in
the AO model.
A high res AO model only has to be used when baking AO, and only for sub-meshes which are near
to neighboring geometry.
Some AO parts may cause baking errors if part of the geometry is removed. In order to fix this, you
can replace each AO part with a high res part. To do this, select an AO part and press "Replace
selected part with re-import".
You can click the button "Cycle through AO models" to inspect each high res AO model. They cannot
be viewed at once because they are all at the same location.
Click on the button "Zero High Res transform". This makes sure the high res and low res model are
correctly aligned in Substance Painter (to prevent baking errors) because it doesn't support FBX files
with non-zero transform values.
Click on the button "Save Both scene". This will save the scene containing the high res scene with
compatible name matching and AO objects. It will also contain the low res scene but this should be
ignored as it is only used for name matching. The file will be saved to the scenes folder with a _both
suffix. Note that this button can be pressed at any time.
Click on the button "Export modified High Res FBX". This exports the high res FBX file (with the name
matching and AO objects added) to the export folder. Do not manually export the model because it
needs specific settings in order for the export to work.
The option is given to export the "AO mesh only". When enabled, only the high res mesh with the
AO models added is exported.
Assemble
Once all low res parts are modified, they need to be re-assembled into the final model. The
assembled model is only used in Unity. For texturing, the intermediate models are used.
First, restart 3ds Max. If you don't do this, the objects can be placed incorrectly.
1. Open a new scene. Press the button "Import Align scene". The align scene you made earlier is
automatically loaded if only one align scene is found. If not, a dialog box is provided allowing you to
select the align scene. The align scene is used as a reference where to place the parts.
2. Press the button "Import all Low Res scenes". This imports the models from all low res scenes it
can find by matching the names of the Align scene parts to the name of the scenes. This is why it is
important not to change the automatically generated scene name.
Note that you cannot manually import any low res scenes because when using the supplied button,
all transforms are automatically reset to their original state, allowing the objects to be assembled
correctly. If you manually import any scene, this will not happen, resulting in incorrectly aligned
objects when assembling.
3. Press the button "Assemble". This will place all parts at the correct location. Scenes which contain
parts which have to replace identical objects are automatically detected and placed into the final
assembly accordingly.
4. At this stage you can fuse identical objects. Select at least two identical objects and press "Fuse
selected identical objects". Because the objects are identical, the result of fusing them is that they
share same UV space and applying a texture made for one individual object will appear on each of
the fused objects. There are a few things to keep in mind when fusing identical objects after
assembling the final model:
-Only fuse objects which are identical.
-Only fuse objects which you made a separate scene file for. Otherwise it invalidates the UV
map.
-Only fuse objects which have roughly the same surroundings close up, otherwise the AO
map will look incorrect.
-When fusing objects, it saves texture space and draw calls. However, if the objects are
spaced far apart and contain many triangles, this might actually hurt performance. This is
because the objects cannot be culled when out of view of the camera after being fused.
5. Press the button "Export assembled FBX". This will save the assembled and modified low res
model to the export folder. This model should be used in-game. It will contain all UV mapped parts
and the textured made in Substance Painter (from the individual parts) can be applied to this model.
Miscellaneous
You can delete all children of a selected object's parent by clicking on the button "Delete parent
children". If you also want to delete the selected object, tick "Delete selected".
Exporting a projection cage
Using a cage for texture baking should generally not be necessary as Substance Painter can create a
cage automatically. However, in some cases you might want to create a custom projection cage.
Substance Painter automatically averages the cage normals if a custom cage is used.
Substance Painter needs the cage to be UV mapped. If the cage is created after being unwrapped by
Unwrella, the cage will be UV mapped also.
Create the cage after preparing both the high res and low res model is done.
1. Import both the prepared high res and low res model. Make sure the low and high res part are on
top of each other.
2. Select the low poly.
3. Add a Projection modifier.
4. Select the Cage rollout panel.
5. Click Reset.
6. Set Push Amount so it encompasses the high resolution model by a very small amount.
7. Click Export (on Cage rollout panel).
8. Select a name and press OK.
9. The cage is not yet exported but instead added to the scene.
10. Select the cage in the scene explorer, then select Max->Export->Export selected.
Substance Painter
Normals: Import
Tangents: Calculate
Enable "Generate lightmap UV'S".