Skip to main content

Optimize Settings Guide

Shoe model before and after optimization
A shoe model, before and after optimization.

3D Model Optimization Method

Optimization contains options for decimation, remeshing, texture atlas baking, UV aggregation, and more.

Optimization has two main branches:

  1. Material Optimization: Bake materials into new PBR textures, preserving existing tiled texture coordinates, or generating new atlas UVs. Mesh topology is not altered, but the number of materials may change, and new UVs may be created.

  2. Mesh and Material Optimization: Optimize meshes, including all their materials, textures, and UVs. Materials can be merged or replaced altogether, and surfaces can be remeshed. Optimization always considers materials when they are present.

Material Optimization

Materials can be optimized without changing the mesh topology. This can help improve performance by reducing the number of materials and textures.

Material Optimization has three main choices:

  1. Material Merger
    • Bake all input materials into a new UV layout, replace all materials with a new uniform material, or remove existing textures and convert them into values instead.
  2. Keep Materials and UVs
    • Preserve existing materials and UVs, and optionally replacing textures with values, as well as creating a 2nd UV and baking ambient occlusion and normal maps.
  3. Material and UV Aggregator
    • Combine materials and UVs into shared side-by-side charts, and optionally replacing textures with values, as well as creating a 2nd UV and baking ambient occlusion and normal maps.

Material Merger

Merge materials according to existing material properties if possible, and optionally preserve tiled UVs.

Additional UV (atlas) unwrapping and texture baking options are available via the Material Regenerator in order to project the original material properties onto the merged output materials.

Setting TitleSetting NameLevelType [Range] (Default)Description
Material MergingmaterialMergingMethodbasicstring [auto] (auto)method to define how materials are merged
Keep Tiled UVskeepTiledUVsbasicBoolean (false)preserves repeating texture coordinates
Tiling ThresholdtilingThresholdadvancednumber [>= 1 && <= 1.7976931348623157e+308] (1.5)UV extent after which a UV channel is considered repeating (= tiling texture)
Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"onlyMaterial": {
"materialMerger": {
"materialRegenerator": {
"uvAtlasGenerator": {
"textureBaker": {
"normalMap": {}
}
}
},
"keepTiledUVs": false,
"tilingThreshold": 1.5
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

  • Material Merging: Currently the merging method is set to "auto". This merges materials by opacity and keeps non-combinable materials separate.

  • Keep Tiled UVs: Preserves repeating texture coordinates (UVs) and associated texture maps.

  • Tiling Threshold: Decides whether UVs are considered to be tiling or not. The default value 1.5 means UVs extending at least 150% outside the 0-1 UV space are considered to be Tiling UVs. Adjust this value to detect more UVs as being tiled.

When using Material Merger, the Material Regenerator controls how the materials will be combined together. The Regenerator has three main options:

  1. UV Atlas Generator + Texture Baker
    • Bake input materials into a new UV layout.
  2. Material Replacer + Default Material Option
    • Replace input materials with a new uniform material.
  3. Material Replacer + Drop Uniform Texture Maps
    • Remove input textures, converting them into values.

Material Regenerator: UV Atlas Generator + Texture Baker

This is the most common usage of the Material Regenerator within the RapidPipeline 3D Processor.

It enables creation of new UV atlases corresponding to the (new, merged) output materials and baking from the original input materials and meshes onto the merged or otherwise altered output materials and meshes.

This process does consider all (PBR) material properties and is able to project from material, vertex colors and other material attributes to texture maps as well as perform normal map and ao baking to capture mesh, normal and occlusions from the original data.

All generated UV atlases are in the 0 to 1 UV space, except when atlasFactorUDIMLayout is utilized.

See 3D Edit Settings Guide: Generate UV Atlas for more information.

Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"onlyMaterial": {
"materialMerger": {
"materialRegenerator": {
"uvAtlasGenerator": {
"textureBaker": {
"normalMap": {
"mode": "always",
"recomputeNormals": true,
"skipNormalsRoughnessThreshold": 0.0,
"normalMapScale": 1.0,
"tangentSpace": true
},
"aoBaker": {
"strength": 0.5,
"replaceOriginal": true,
"filterRadius": 3.0,
"textureSamples": 48
},
"bakingResolution": {
"default": 2048
},
"sampleCount": 4,
"texMapAutoScaling": true,
"bakeCombinedScene": false,
"topologicalHolesToAlpha": false,
"powerOfTwoResolution": "ceil",
"inpaintingRadius": 32.0
},
"method": "isometric",
"segmentationCutAngle": 88.0,
"segmentationChartAngle": 130.0,
"maxAngleError": 114.0,
"maxPrimitivesPerChart": 10000,
"cutOverlappingPieces": true,
"atlasMode": "separateAlpha",
"allowRectangularAtlases": false,
"packingResolution": 1024,
"packingPixelDistance": 2,
"atlasFactor": 1
}
},
"keepTiledUVs": false,
"tilingThreshold": 1.5
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Unwrapping Method

Unwrapping Method controls how meshes are flattened into UV charts - see 3D Edit Settings Guide: Generate UV Atlas - Unwrapping

  • method

Segmentation

Segmentation controls how meshes are divided into UV charts - see 3D Edit Settings Guide: Generate UV Atlas - Segmentation

  • segmentationCutAngle
  • segmentationChartAngle
  • maxAngleError
  • maxPrimitivesPerChart
  • cutOverlappingPieces

UV Atlas Mode

UV Atlas Mode fits the UV charts into the 0-to-1 UV space - see 3D Edit Settings Guide: Generate UV Atlas - Atlas Packing

  • atlasMode
  • allowRectangularAtlases
  • packingResolution
  • packingPixelDistance

Multiple Atlas Factor

Multiple Atlas Factor divides each output material to create more texture sets, so a value of 2 means each material becomes two materials.

  • atlasFactor
Setting TitleSetting NameLevelType [Range] (Default)Description
Multiple Atlas FactoratlasFactorbasicinteger [>= 0 && <= 16] (1)divide each created atlas into n new atlases

Multiple Atlas Factor allows fine-grained control over resolution when baking textures.

If merely increasing the Texture Baking Resolution alone, the resolution will be quadrupled (e.g. changing from 2048 to 4096 will result in 4x the number of pixels).

Alternatively, the Multiple Atlas Factor can be increased while decreasing the Texture Baking Resolution, which allows 2x or 3x the resolution instead of simply 4x (e.g. two or three 2048s instead of one 4096).

A potential downside of this is an increase in the number of draw calls, because this feature increases the number of separate materials per mesh.

Atlas Factor to UDIM Layout

This setting changes the atlasFactor to be the number of UV tiles per material, in a UDIM layout.

  • atlasFactorUDIMLayout
Setting TitleSetting NameLevelType [Range] (Default)Description
Atlas Factor to UDIM LayoutatlasFactorUDIMLayoutbasicboolean (false)Utilizes atlas factor as number of tiles in a UDIM layout instead.

When atlasFactorUDIMLayout is set to true, the atlasFactor controls the number of UDIM tiles that each output material's UVs will be split into. The UDIM tiles are laid out horizontally, each incremented by one unit on the U axis.

When atlasFactorUDIMLayout is set to false (the default), then the atlasFactor works as normal (see Multiple Atlas Factor).

Screenshot of a UDIM layout with 15 tiles
atlasFactorUDIMLayout:true with atlasFactor:15

info

Learn more about the new UDIM layout feature in the RapidPipeline Blog:
UDIM Generation for Adobe Substance Painter

Texture Baker

The Texture Baker options control how PBR materials are baked.

The Texture Baker has these main options:

Setting TitleSetting NameLevelType [Range] (Default)Description
Baking Sample CountsampleCountbasicinteger [>= 1 && <= 16] (4)number of samples per texel for texture baking
Texture Map Auto ScalingtexMapAutoScalingbasicboolean (true)if true, each texture's pixel budget is divided by all atlases
Bake Combined ScenebakeCombinedSceneadvancedboolean (false)bakes the scene as a single entity even if its meshes have transformations
Bake Topological Holes to Alpha MaptopologicalHolesToAlphaadvancedboolean (false)capture areas where the corresponding source surface was not found on an alpha mask
Power of Two ResolutionpowerOfTwoResolutionexpertstring [none, ceil, floor, round] (ceil)ensures that textures have power of two dimensions
Inpainting RadiusinpaintingRadiusexpertnumber [>= 0 && <= 32] (32)radius, in pixels, for texture inpainting

Texture Resolution Auto Scaling

When enabled the value for 'Texture Baking Resolution' is used for the largest atlas in terms of occupied 3D surface. Materials on smaller meshes will use smaller power of 2 resolutions, according to their size in 3D space.

When disabled, all atlases will use the same texture resolution, as set by the 'Texture Baking Resolution' parameter.

Texture Baking Resolution

Resolution for the new baked textures. Default is 2048x2048 pixels.

It is usually best to enter a powers-of-two number, for example 256, 512, 1024, etc.

Using a non-powers-of-two value can generate non-square dimensions when beneficial, if 'Texture Resolution Auto Scaling' is enabled.

Setting TitleSetting NameLevelType [Range] (Default)Description
Default Texture Map Resolutiondefaultbasicinteger [>= 0 && <= 16384] (2048)default resolution for baked texture maps

Normal Map Baking Settings

Normal Map Baker

Normal map baking can be either always enforced, only performed if the input material already has normal maps, or not performed at all.

  • always: Normal maps are baked for every material. The baked maps will include details from both the original normal maps and the input geometry.

  • ifInInput: Normal maps are only baked for materials that have normal maps already.

  • never: Normal maps are not baked.

Setting TitleSetting NameLevelType [Range] (Default)Description
Normal Map Baking Modemodebasicstring [always, ifInInput, never (always)when to (re)bake normal maps
Recompute NormalsrecomputeNormalsadvancedboolean (true)recompute normals before baking
Skip Normals Roughness ThresholdskipNormalsRoughnessThresholdadvancednumber [>= 0 && <= 1] (0)roughness value below which difference in normals between source/target are not baked
Normal Map ScalenormalMapScaleexpertnumber [>= 2.2250738585072014e-308 && <= 1.7976931348623157e+308] (1)normal scaling for the baked normal map (only used on glTF output)
Tangent Space Normal MapstangentSpaceexpertboolean (true)switches between tangent-/object-space normal maps

Occlusion Map Baking Settings

Ambient Occlusion Map Baker

Bakes an ambient occlusion texture. This helps increase realism when an asset is shown in a real-time renderer. To bake ambient occlusion, the asset requires a UV with no overlaps, commonly called an 'atlas' layout.

Engine without AO versus with AO
CAD engine model without ambient occlusion, versus with ambient occlusion.

Preserve Tiling

  • If enabled, a 2nd UV is generated using an 'atlas' layout and the occlusion is baked into it. Tiling textures can continue to use the unaltered 1st UV.
  • If disabled, the first UV is re-generated using an 'atlas' layout and the occlusion is baked into it.

Strength

  • Controls the shading intensity of the baked occlusion.
  • Default is 0.5.

Flighthelmet with three different AO strengths
The FlightHelmet model with baked ambient occlusion using Strength: 0.25, 0.5, 0.8.

Setting TitleSetting NameLevelType [Range] (Default)Description
Strengthstrengthbasicnumber [>= 0.1 && <= 1] (0.5)Strength (intensity) for generated AO maps. Default is 0.5.
Replace Original Ambient Occlusion MapreplaceOriginaladvancedboolean (true)Computes a new AO map even if one is present in the input. Default is true.
Filter RadiusfilterRadiusexpertnumber [>= 0 && <= 16] (3)Filter radius for smoothing the AO map (if any). Default is 3.
Texture SamplestextureSamplesexpertinteger [>= 8 && <= 64] (48)Number of samples per texel for AO map generation (converted to a multiple of 8). Default is 48.

Material Regenerator: Material Replacer + Default Material Option

Identical to the same options within 3D Edit:

  • Default Material + generate UVs (Cube Unwrapping)
  • Default Material + generate UVs (Generate UV Atlas)
Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"onlyMaterial": {
"materialMerger": {
"materialRegenerator": {
"materialReplacer": {
"defaultMaterial": {
"generateUVs": {
"uvAtlasGenerator": {
"addCheckerTexture": {},
"method": "isometric",
"segmentationCutAngle": 88.0,
"segmentationChartAngle": 130.0,
"maxAngleError": 114.0,
"maxPrimitivesPerChart": 10000,
"cutOverlappingPieces": true,
"atlasMode": "separateAlpha",
"allowRectangularAtlases": false,
"packingResolution": 1024,
"packingPixelDistance": 2
}
},
"baseColor": [
0.0,
0.0,
1.0,
1.0
],
"metallic": 0,
"roughness": 0.5
}
}
},
"keepTiledUVs": false,
"tilingThreshold": 1.5
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Material Regenerator: Material Replacer + Drop Uniform Texture Maps

Identical to the same options within 3D Edit.

Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"onlyMaterial": {
"materialMerger": {
"materialRegenerator": {
"materialReplacer": {
"dropTextures": {
"default": 0.0,
"baseColor": 0.0,
"opacity": 0.0,
"normal": 0.0,
"metallic": 0.0,
"roughness": 0.0,
"emissive": 0.0,
"occlusion": 0.0,
"displacement": 0.0,
"clearcoat": 0.0,
"clearcoatColor": 0.0,
"clearcoatRoughness": 0.0,
"clearcoatSpecularLevel": 0.0,
"clearcoatNormal": 0.0,
"transmission": 0.0,
"thickness": 0.0,
"attenuationColor": 0.0,
"scatteringColor": 0.0,
"scatteringDistanceScale": 0.0,
"sheenColor": 0.0,
"sheenRoughness": 0.0,
"sheenOpacity": 0.0,
"specularColor": 0.0,
"specularValue": 0.0,
"anisotropy": 0.0,
"anisotropyAngle": 0.0,
"iridescence": 0.0,
"iridescenceThickness": 0.0
}
}
},
"keepTiledUVs": false,
"tilingThreshold": 1.5
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Keep Materials and UVs

Preserves original materials and texture coordinates.

Optional choice of:

  • Drop Uniform Texture Maps
  • Generate 2nd UV Atlas
info

Currently 3D Processor can not preserve 2nd UV sets.

Setting TitleSetting NameLevelType [Range] (Default)Description
Force Rebaking Normal MapsforceNormalRebakingexpertboolean (false)rebakes normal maps when preserving UVs, even if UV overlaps are detected
Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"onlyMaterial": {
"keepMaterialsUVs": {
"forceNormalRebaking": false
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Drop Uniform Texture Maps

Identical to the same options within 3D Edit.

2nd UV Atlas Texture Baker

Texture Baking Settings for baking into 2nd UV atlas.

Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"onlyMaterial": {
"keepMaterialsUVs": {
"atlasGenerator2ndUV": {
"textureBaker2ndUV": {
"bakingResolution2ndUV": {
"default": 2048
},
"aoBaker2ndUV": {
"strength": 0.5,
"replaceOriginal": true,
"filterRadius": 3.0,
"textureSamples": 48
},
"sampleCount": 4,
"texMapAutoScaling": true,
"bakeCombinedScene": false,
"powerOfTwoResolution": "ceil",
"inpaintingRadius": 32.0
},
"method": "isometric",
"segmentationCutAngle": 88.0,
"segmentationChartAngle": 130.0,
"maxAngleError": 114.0,
"maxPrimitivesPerChart": 10000,
"cutOverlappingPieces": true,
"atlasMode": "separateAlpha",
"allowRectangularAtlases": false,
"packingResolution": 1024,
"packingPixelDistance": 2,
"atlasFactor": 1
},
"forceNormalRebaking": false
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Settings
Same Settings as in Texture Baker Section

2nd UV Texture Baking Resolution

Texture Baking Resolution for baking into 2nd UV atlas.

Settings
Same Settings as in Texture Baking Resolution Section

2nd UV Ambient Occlusion Map Baker

Bakes a new ambient occlusion map into the generated 2nd UV atlas. This is very useful if the 1st UV atlas is reserved due to UV atlas preservation or aggregation.

Settings
Same Settings as in Ambient Occlusion Map Baker Section

Material and UV Aggregator

UVs are preserved and textures are aggregated from different materials into a single atlas when possible.

Optional choice of:

  • Drop Uniform Texture Maps
  • Generate 2nd UV Atlas
Setting TitleSetting NameLevelType [Range] (Default)Description
Allow Rectangular AtlasesallowRectangularAtlasesbasicboolean (true)create rectangular POT textures when beneficial for auto sized textures
Force Rebaking Normal MapsforceNormalRebakingexpertboolean (false)rebakes normal maps when preserving UVs, even if UV overlaps are detected
Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"onlyMaterial": {
"materialUVAggregator": {
"allowRectangularAtlases": true,
"forceNormalRebaking": false
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Mesh and Material Optimization

Decimator

Image comparing input and output meshes

Simplifies a mesh by reducing the number of faces while preserving materials, UVs and textures. This is useful for reducing file size, and improving performance by reducing memory usage.

Vertices are collapsed and merged by distance and angle, while attempting to preserve the original volume and curvature. The decimator is capable of reducing mesh complexity while keeping important properties such as original UV coordinates, normals and topology in place.

Decimation is computed from the original mesh, therefore the quality of the result highly depends on the quality of the input topology.

Setting TitleSetting NameLevelType [Range] (Default)Description
Preserve TopologypreserveTopologybasicboolean (false)preserves topological features like holes during decimation
Preserve NormalspreserveNormalsbasicboolean (false)preserves vertex normals during decimation
Preserve Mesh BorderspreserveMeshBordersadvancedboolean (true)preserves borders (vertices) common between meshes
Preserve Material BorderspreserveMaterialBordersadvancedboolean (false)preserves mesh material borders during decimation
Collapse Unconnected VerticescollapseUnconnectedVerticesadvancedboolean (true)switches collapsing of nearby, unconnected vertices on/off
Boundary Preservation FactorboundaryPreservationFactorexpertnumber [>= 0 && <= 1] (0.5)factor to steer preservation of boundaries during decimation
Collapse Distance ThresholdcollapseDistanceThresholdexpertnumber [>= 0 && <= 0.1] (0.005)threshold w.r.t BBox diagonal for collapsing nearby vertices
Decimation Methodmethodexpertstring [quadric, edgeLength] (quadric)method to be used for decimation
Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"meshAndMaterialOptimization": {
"decimator": {
"target": {
"faces": {
"value": 1
},
"deviation": {
"value": 0.0
}
},
"materialOptimization": {
"materialMerger": {
"materialRegenerator": {
"uvAtlasGenerator": {
"textureBaker": {
"normalMap": {}
}
}
}
}
},
"preserveTopology": false,
"preserveNormals": false,
"preserveMeshBorders": true,
"preserveMaterialBorders": false,
"collapseUnconnectedVertices": true,
"boundaryPreservationFactor": 0.50,
"collapseDistanceThreshold": 0.005,
"method": "quadric"
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Faces or Vertices

The decimator can reduce either the number of Faces or the number of Vertices.

There are two methods for limiting the number of Faces/Vertices: it can use either a Target (maximum number of output triangles or vertices) or a Percentage (maximum percentage of input triangles or vertices). These act as an upper limit on the number of triangles or vertices in the output.

The Deviation Percentage can be used to reduce the asset further, working with each asset's own local curvature to remove detail as needed.

RapidPipeline will attempt to get as close as possible to the chosen limit, though sometimes a mesh may require a slightly different final count to preserve surface continuity.

Face Target or Percentage

The desired amount or percentage of faces (triangles), default Target is 1 output triangle, default Percentage is 100% of the input triangles.

The default of 1 is not recommended for an actual production config. We recommend at least 1,000 faces.

The Face Target can be disabled by setting it to any number higher than the input triangle count (e.g. 10 million).

The Face Percentage can be disabled by setting it to 100%, which will result in the exact same count as the input, although ultimately the output will also depend on Vertex and Deviation limits if set.

Vertex Target or Percentage

The desired amount or percentage of vertices, default Target is 1 output vertex, default Percentage is 100% of the input vertices.

The vertex limit can be set in addition to the face limit. Whichever target is lower will be respected.

The Vertex Target can be disabled by setting it to any number higher than the input vertex count (e.g. 10 million).

The Vertex Percentage can be disabled by setting it to 100%, which will result in the exact same count as the input, although ultimately the output will also depend on Face and Deviation limits if set.

Deviation Value or Percentage

This is the maximum distance between the original input and the decimated output. This is sometimes called an error metric.

The deviation target can be used to stop the decimation as soon as an edge collapse introduces an deviation (or error) larger than the percentage of deviation relative to the original mesh.

Deviation works in conjunction with the Face/Vertex limits; those act as an upper cap on the deviation. Depending on the deviation setting, the final count can be lower or equal to that upper limit.

For the Deviation Percentage larger values tend to cause lower triangle counts. We recommend a percentage of 0.05% or less for complex highly detailed 3D assets, to achieve a reasonably small deviation. For a medium deviation from the input, we recommend a percentage around 0.3%. Setting the Deviation Percentage to zero will disable it entirely.

For the Deviation Value the number is in scene units, which is usually 1 meter. A value of 0.01 would allow a deviation of 1 centimeter between the input mesh and the output mesh. Setting the Deviation Value to zero will disable it entirely.

The computation of the deviation between the original and decimated asset is based on a one-way Hausdorff distance (https://en.wikipedia.org/wiki/Hausdorff_distance).

Preserve Topology

Preserves topological features like holes during decimation.

Disabled by default, since this acts as a constraint on the decimation and thus the desired face target might not be reached.

In most cases it is recommended to decimate meshes without attempting to preserve the exact topology constraints from the input shapes. This allows the simplification algorithm to remove small holes or handles, for example, when creating a low-triangle approximation.

However for some applications and input models, it may be desired to better preserve the exact topology of the input shape. Preserve Topology applies limits on decimation that holes should never be closed, handles and different surface parts should never be merged, and geometric details like fine strands should be preserved.

Preserve Normals

Preserves vertex normals during decimation, rather than recalculating normals after merging vertices.

Disabled by default, since this acts as a constraint on the decimation and thus the desired face target might not be reached.

Preserve Mesh Borders

Attempts to preserve vertices which are common across geometric borders between neighboring meshes.

Enabled by default, since disabling this can cause cracks to appear between meshes.

Preserve Material Borders

Attempts to preserve vertices which are common across material borders between neighboring meshes.

Disabled by default, since this acts as a constraint on the decimation and thus the desired face target might not be reached.

Collapse Unconnected Vertices

Collapses nearby unconnected vertices. Enabled by default.

Boundary Preservation Factor

Factor to steer preservation of boundaries during decimation.

Collapse Distance Threshold

Threshold for collapsing nearby vertices, this is relative to the diagonal distance of the asset bounding box, which is usually measured in meters.

Decimation Method

Can be used to specify which method should be used for decimation. There are two methods available:

  • Quadric - Default. This is preferred in most cases, as it preserves localized detail features well.
  • Edge Length - This method is more simple and hence slightly faster. It produces a mesh where the triangles have a very regular distribution, which can be beneficial if you aim at obtaining a highly homogeneous mesh.

Image comparing decimation methods

Generate UV Atlas (Decimator)

Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"meshAndMaterialOptimization": {
"decimator": {
"target": {
"faces": {
"value": 1
},
"deviation": {
"value": 0.0
}
},
"materialOptimization": {
"materialMerger": {
"materialRegenerator": {
"uvAtlasGenerator": {
"textureBaker": {
"normalMap": {
"mode": "always",
"recomputeNormals": true,
"skipNormalsRoughnessThreshold": 0.0,
"normalMapScale": 1.0,
"tangentSpace": true
},
"aoBaker": {
"strength": 0.5,
"replaceOriginal": true,
"filterRadius": 3.0,
"textureSamples": 48
},
"bakingResolution": {
"default": 2048
},
"sampleCount": 4,
"texMapAutoScaling": true,
"bakeCombinedScene": false,
"topologicalHolesToAlpha": false,
"powerOfTwoResolution": "ceil",
"inpaintingRadius": 32.0
},
"method": "isometric",
"segmentationCutAngle": 88.0,
"segmentationChartAngle": 130.0,
"maxAngleError": 114.0,
"maxPrimitivesPerChart": 10000,
"cutOverlappingPieces": true,
"atlasMode": "separateAlpha",
"allowRectangularAtlases": false,
"packingResolution": 1024,
"packingPixelDistance": 2,
"atlasFactor": 1
}
},
"keepTiledUVs": false,
"tilingThreshold": 1.5
}
},
"preserveTopology": false,
"preserveNormals": false,
"preserveMeshBorders": true,
"preserveMaterialBorders": false,
"collapseUnconnectedVertices": true,
"boundaryPreservationFactor": 0.50,
"collapseDistanceThreshold": 0.005,
"method": "quadric"
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Keep Materials and UVs (Decimator)

Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"meshAndMaterialOptimization": {
"decimator": {
"target": {
"faces": {
"value": 1
},
"deviation": {
"value": 0.0
}
},
"materialOptimization": {
"keepMaterialsUVs": {
"forceNormalRebaking": false
}
},
"preserveTopology": false,
"preserveNormals": false,
"preserveMeshBorders": true,
"preserveMaterialBorders": false,
"collapseUnconnectedVertices": true,
"boundaryPreservationFactor": 0.50,
"collapseDistanceThreshold": 0.005,
"method": "quadric"
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

UV Aggregator (Decimator)

Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"meshAndMaterialOptimization": {
"decimator": {
"target": {
"faces": {
"value": 1
},
"deviation": {
"value": 0.0
}
},
"materialOptimization": {
"materialUVAggregator": {
"allowRectangularAtlases": true,
"forceNormalRebaking": false
}
},
"preserveTopology": false,
"preserveNormals": false,
"preserveMeshBorders": true,
"preserveMaterialBorders": false,
"collapseUnconnectedVertices": true,
"boundaryPreservationFactor": 0.50,
"collapseDistanceThreshold": 0.005,
"method": "quadric"
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Remesher


Creates a new mesh over the input geometry, optionally decimates it, then bakes from the source mesh onto the new surface, including PBR textures like normal maps and ambient occlusion, and optionally baking holes into an alpha texture.

Due to the re-creation of the original surface, original materials and UVs cannot be kept. New atlas UVs are generated for the remeshed surface, and all the original mesh and material properties are baked into it using Material Merger and Material Regenerator.

Remeshing Method

Two remeshing methods are provided: Voxelization and Shrinkwrap. Shrinkwrap is generally better with mechanical shapes and hard angles, while Voxelization is better with organic meshes like clothing and characters.

An example of Shrinkwrap being used on furniture: Blender Tutorial: Remesh and Bake Holes

An example of Voxelization being used on apparel: Blender Tutorial: Remesh and Bake Decals


Remeshing methods compared on a shirt with label patches.

Remeshing Resolution

This sets the resolution of the remesher mesh projection. A value of 0 will let RapidPipeline use an automatic resolution (usually 7). Usable range is from 4 to 11.

The Resolution usually needs to be fine-tuned to match the size of the holes in the source topology. It decides how fine the remesh grid will be, which affects whether the new mesh will cover or poke through the existing holes. The greater the Resolution, the sharper the corners will be, but also the more likely the new mesh will start to sink into holes.

Resolution results for the shrinkwrap remesher
Shrinkwrap resolution on a wicker sofa, showing how it eventually sinks into the holes.

Filter Back Projected

Enable this setting to avoid remeshing backfaces in non-watertight meshes. Disable this setting to force the remesher to create backfaces as explicit triangles.

When the input mesh is a closed watertight surface, only the outside will be remeshed. However if the model is not watertight, then the remesher will also resurface the face backsides.

This setting is only available with the Shrinkwrap method.

Remeshing Target

The Remesher Target will utilize the Decimator to optimize the remeshed surface. The Remesher may need less resolution than this, the Target just sets an upper limit.

If a target percentage is used, the result will be relative to the resolution of the input mesh. Setting the percentage to 100% will cause the remeshed surface to be output using the same number of vertices or triangles as the input.

If a target value is used, the result will be less than or equal to the set value. This acts as an upper limit, and will invoke the Decimator if the remeshed output exceeds this value. To prevent decimation, set the value to a high number like 10 million.

Bake Topological Holes to Alpha Map

This will preserve holes from the source mesh, by baking them into an alpha map on the new remeshed surface.

This setting is part of the Texture Baker, and is only available if the Remesher is activated.

Before and after renders of a wicker sofa, as an animated GIF comparing PBR renders vs wireframes
A high-resolution wicker model (left) is remeshed into an optimized surface (right), capturing the gaps into an alpha map. See the Blender Remeshing Tutorial to learn more about this process.

Setting TitleSetting NameLevelType [Range] (Default)Description
Remeshing Methodmethodbasicstring [voxelization, shrinkwrap] (voxelization)method for the initial remeshing process
Resolutionresolutionadvancedinteger [>= 0 && <= 11] (0)maximum octree depth (resolution) for the initial remeshing process (0=auto)
Filter Back ProjectedfilterBackProjectedbasicboolean (false)avoids reconstructing backside faces when remeshing
Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"meshAndMaterialOptimization": {
"remesher": {
"target": {},
"method": "voxelization",
"resolution": 0,
"filterBackProjected": false,
"materialMerger": {
"materialRegenerator": {
"uvAtlasGenerator": {
"textureBaker": {
}
}
}
}
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

caution

The setting filterBackProjected requires 3D Processing schema v1.3 (= rpdx v7.3.x) and applies only to method shrinkwrap.

Material Merger (Remesher)

Additional UV (atlas) unwrapping and texture baking options are available via the Material Regenerator in order to project the original material properties onto the merged output materials.

Material Regenerator: UV Atlas Generator + Texture Baker (Remesher)

Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"3dModelOptimizationMethod": {
"meshAndMaterialOptimization": {
"remesher": {
"target": {
"faces": {
"percentage": 100.0
}
},
"materialMerger": {
"materialRegenerator": {
"uvAtlasGenerator": {
"textureBaker": {
"normalMap": {
"mode": "always",
"recomputeNormals": true,
"skipNormalsRoughnessThreshold": 0.0,
"normalMapScale": 1.0,
"tangentSpace": true
},
"aoBaker": {
"strength": 0.5,
"replaceOriginal": true,
"filterRadius": 3.0,
"textureSamples": 48
},
"bakingResolution": {
"default": 2048
},
"sampleCount": 4,
"texMapAutoScaling": true,
"bakeCombinedScene": false,
"topologicalHolesToAlpha": false,
"powerOfTwoResolution": "ceil",
"inpaintingRadius": 32.0
},
"method": "isometric",
"segmentationCutAngle": 88.0,
"segmentationChartAngle": 130.0,
"maxAngleError": 114.0,
"maxPrimitivesPerChart": 10000,
"cutOverlappingPieces": true,
"atlasMode": "separateAlpha",
"allowRectangularAtlases": false,
"packingResolution": 1024,
"packingPixelDistance": 2,
"atlasFactor": 1
}
}
},
"method": "voxelization",
"resolution": 0,
"filterBackProjected": false
}
}
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

caution

The Material Merger within Remesher does not have the option to preserve tiled UV coordinates due to the newly created mesh surface.

Animation Optimization

Settings for animation optimization.

Setting TitleSetting NameLevelType [Range] (Default)Description
Animation Curve Simplificationsimplificationbasicstring [conservative, aggressive, extreme] (conservative)specify how much to simplify animation curves
Examples: | JSON | WebUI | PluginUI |

{
"version": 1.4,
"optimize": {
"animationOptimization": {
"simplification": "conservative"
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": {},
"format": {
"gltf": {
"pbrMaterial": {}
}
}
}
]
}

Further Documentation

For the full Documentation on all available data operations commands and system settings, please refer to the CLI Commands Guide and 3D Processor System Schema & Settings.