Simplygon 10.4 Release Notes
Simplygon 10.4.117.0
New features
Blender
- Added Blender 4.2 LTS support. Older versions of Blender are no longer officially supported.
Maya
- Added Maya 2025 support.
Unreal Engine
- Unreal Engine 5.5 support.
- Add API for exporting Actors to a Simplygon scene and importing a Simplygon scene back into Unreal, for aggregation and remeshing processings.
Improvements & changes
- A new setting, SourceTexCoordLevel, has been introduced to the lightmap texture coordinate generator in the aggregation pipeline. This setting allows you to specify which source texture coordinate you want to use as input when generating lightmap texture coordinates
- Clipping geometry in RemeshingProcessor and AggregationProcessor now attempts to detect when the clipping geometry is not water tight around the process geometry, and if so disables the culling instead of incorrectly culling the entire scene.
- Added support for up to 16 bones per vertex in glTF import/export
- Simplygon.h now expose GetInterfaceVersionHash() and GetHeaderVersion() as constref, for compile-time change detection.
- Added OnlyAnalyzeSharedSeams setting to ModularSeamAnalyzer.
- New ChartAggregatorSetting: SplitMirroredCharts. Introduce a setting that toggles whether to split up charts that have mirrored texcoords.
- PartRemover
- The part remover is now a Processor with its own settings object.
- The part remover is now usable within the ReductionProcessor/ReductionPipeline and therefore also available from the DCC integrations.
- Significant speedups. Especially when using it as a processor on a scene with lots of scene meshes.
- Quad Reducer
- Improved quality for vertex normals. LODs of Quad-meshes with flat and shiny surfaces now look much better.
- Added support for casting material information using shading network setup into AttributeTessellation
- Added a new interface: AttributeTessellationData, for accessing tessellation data of a geometry data
- Better handling of Vulkan devices, with lower overhead
- Added support for circumventing mDNS discovery
- Added support for internal logging which is fetched directly through Simplygon::PollLog
- String serialization now supports up to 1GB strings
Documentation
- Added Simplygon API Reference Index page for easier on-page search.
Unity
- Added warnings when processing with unsupported Planar/Triplanar uv selection in HDRP.
Unreal Engine
- Removed support for Unreal Engine 5.3 plugin.
- Improved landscape culling by extending the amount of landscape that gets sent to Simplygon to use for culling.
- Added global option cvar to import locked/remove bones from LODInfo when processing Skeletal Meshes.
- Unreal Engine 5.4
- Increased default value for multisampling from 2 to 4 for our HLOD Remeshing builder to get a better balance between quality and memory usage.
- Fixed garbage collection crash issue when system memory > 75%.
- Fixed crash when running editor as -game.
- Fixed Stand-In build key limitation when having hundreds of Actors as part of the same Stand-In.
Unreal Engine Plugin Restructuring
We have done a larger restructure of plugin files to improve module structure and readability of the C++ code. The following things have been done:
- SimplygonUObjects module has been updated to not depend on the Simplygon module.
- SimplygonUI.h has been replaced with SimplygonTypes.h, which holds Simplygon pipeline settings and material casters, and SimplygonTypeConverters.h which converts the SimplygonUObject types to Simplygon spObjects.
- Move all USimplygonPipelines to SimplygonPipelines.h.
- The constants that were available in the SimplygonUI.h is now located in a separate SimplygonConstants.h file in the SimplygonUObjects module.
- The SimplygonCustomPipelines.h has been removed. The USimplygonStandinPipeline classes have been moved to StandinPipeline.h within the StandinActor module and the HLOD settings have been moved to the SimplygonHLOD module.
- The SimplygonLightmapSettings.h has been renamed to StandinLightmapSettings.h and moved to the StandinActor module.
- Added new module SimplygonHLODEditor
- Renamed module StandinUtilities to StandinManager
- Removed module SimplygonUtilities and moved content to the Simplygon module
- Removed module SimplygonHLODUtilities and moved content to SimplygonHLOD and SimplygonHLODEditor modules
- Removed module SimplygonWorldPartitionUtilities and moved content to SimplygonHLOD module
- Removed file SimplygonJobData.h and moved content to:
- Simplygon/Public/TaskManager/SimplygonJobDataBase.h
- LODRecipe/Public/LODRecipeJobData.h
- StandinManager/Public/StandInJobData.h
- SimplygonHLOD/Public/SimplygonHLODJobData.h
- Moved file SimplygonMaterialMapInformation.h to Source/Simplygon/Public/SimplygonMaterialMapInformation.h
- Moved classes HLOD builder settings to:
- SimplygonHLOD/Public/Settings/SimplygonHLODAggregationBuilderSettings.h
- SimplygonHLOD/Public/Settings/SimplygonHLODFoliageBuilderSettings.h
- SimplygonHLOD/Public/Settings/SimplygonHLODRemeshingBuilderSettings.h
- Redefined how the plugin is handling clipping planes and NavMesh visiblity data
- Removed cached clipping planes and cached visibility samples data from SimplygonPluginMeshReduction. Instead, fetch the planes and the samples data on demand from the World using helpers from LevelHelpers.h
- The actors ASimplygonVisibilitySamplerVisualizer and ASimplygonClippingPlanesVisualizer are now Public includes and can now be managed directly from the World.
- Added helper method GetVisibilitySamples() to ASimplygonVisibilitySamplerVisualizer
- Added helper method GetClippingPlanes() to ASimplygonClippingPlanesVisualizer
- Added new helpers to check if clipping planes or visibility is enabled in the settings. Access them from Simplygon/Public/Helpers/PipelineHelpers.h
- Added new helpers to get clipping planes and visibility samples from the world. Access them from SimplygonEditor/Public/LevelHelpers.h
- Moved content from SimplygonTelemetry module to Simplygon module, and deleted the module.
- Moved content from SimplygonContent module to Simplygon module, and deleted the module.
- SimplygonAssetUserData class to SimplygonUObjects module.
- SimplygonStyle class to SimplygonEditor module.
- SimplygonSettings class to Simplygon module.
- Moved RunScene / RunPipeline from SimplygonPluginMeshReduction module to Simplygon module.
- Moved SimplygonTaskManager class from SimplygonPluginMeshReduction module to Simplygon module.
- Split SimplygonJobData into two; the base was moved to the Simplygon module while LODRecipe, StandIn and HLOD parts were left untouched.
- Moved SimplygonMaterialMapInformation-, FScopedFPExceptionMaskState-, DefaultEventHandler- and SimplygonPlatform files to Simplygon module.
- Moved SimplygonAsync*Task files to Simplygon module.
- Moved SimplygonDataConverter class from SimplygonPluginMeshReduction module to Simplygon module.
- Moved all files under TexCoordTools (including SimplygonTexCoordManager and SimplygonTexCoordProcessor) to Simplygon module.
- Moved SimplygonResult and AlgoExtensions files to Simplygon module.
- Moved SimplygonMaterialChannelConverter file to SimplygonUObjects module.
- Redefined Processing API from class / object based to static standalone functions (namespace SG::Processing).
- Moved clipping planes and navmesh storage (from former processing class) to SimplygonModule class.
- Improved error handling in several locations (more consistent).
- LODRecipeManager no longer stores a local pointer to TaskManager, as the pointer could become invalid.
- The TaskManager now gets initialized/deinitialized in SimplygonModule's Start/Shutdown calls, instead of on-demand.
- Other modules are now fetching the TaskManager directly form the SimplygonModule object.
- All modules were updated to reference the new Processing API.
- Added guard macros for the processing interface to avoid usage of a module in an invalid state.
- Added redirects for all relocated structs, classes and enums.
Bug fixes
- Fixed a bug where the Billboard cloud opacity component setting did not work with Compute caster materials which was especially noticeable in Unity.
- Fixed a bug where a scene with multiple meshes having unique TexCoord fields caused a "field already exists" error.
- Fixed multithreading non-determinism issue in UVAdjuster and re-enabled it from being single-threaded.
- Fixed a bug where using the Simplygon FBX-importer from Python scripts via Blender failed to import materials correctly.
- ChartAggregator with SeparateOverlappingCharts: Fixed a bug where charts were not separated properly.
- Fix Maya faulty tangents that caused bad normal maps
- GeometryDataCaster - updated interface description and documentation to highlight what geometry data fields are not supported.
- Fixed crash when the clipping planes in the clipping plane selection set were not part of the scene and instead logs a warning about the missinng ScenePlane.
- Fixed a crash bug for when texcoords and vertex color fields have identical AlternativeNames when being combined. They will now be renamed to have unqique names.
- Vertex color fields and skinning fields that only exist in a subset of geometries in a scene no longer propagates to the other geometries after the scene has passed a processing object like the ReductionProcessor
- Fix for warnings from the scenegraphimporter now using updated warning call.
- Compute Caster now avoids adding extra rows when reading shading code snippets.
- Attribute Tessellation U16 fields were not added correctly, now fixed.
- Fixed issue with Normals import from FBX files
- Fixed bug which in some cases caused poor sampling accuracy when using ReductionProcessor and baking textures or displacement.
- Attribute Tessellation U16 fields were not added correctly, now fixed
Unreal Engine
- Relaxed geometry validation in ReduceMeshDescription to not fail assets unnecessarily.
- Clean up Stand-In complete process, making sure the build key is updated last.
- Add null guards for Actors and Levels.
- Avoid multiple warning outputs of missing material slot names.
- Fixed issue related to geometry cache which could result in identical meshes with different material- and vertex color overrides getting incorrectly reused.
Unity
- Fixed an issue where importing write protected files caused the plugin to crash when trying to clean up temporary files
- Fixed an issue where rigidly skinned meshes (where the mesh has bone indices but no explicit bone weights) could not be processed.
- Fixed an issue where bones with attached SimplygonSelectionSets got deleted from the processed asset.
- Fixed an issue where the Simplygon_SG2_c.dll would sometimes not load in a user script unless a SimplygonProcessing had not first been run.
- running Billboard or Impostor pipelines with invalid/unsupported materials no longer throws an exception, a warning is issued instead.
- BoneSettings.RemoveUnusedBones is now 'true' by default.
- Fixed errors in example scripts in the quickstart documentation
- Fixed bug where running remeshing without material casters would cause a crash.
- Fix for pipeline texture export thrashing texture memory when using embedded textures with cascaded pipelines.
- Skinned meshes can now be selected along with objects referenced in active selectionsets for processing.
- Fixed logic to set the image color space based on the SRGB data of the texture.
- Fix for GameObjects names not always being locally unique in its parent child hierarchy causing some GameObjects to be imported incorrectly.
- Fixed an issue where the wrong material got applied to a LOD when processing a scene with shared meshes using different materials, with "Export meshes as unique" unchecked. Reduction without material baking now handles this setup, while any other pipeline will still yield incorrect results.
- Fix for Standard material secondary maps where simplygon ignored UV set selection.
Blender
- Fixed a crash caused by a processing generating an empty scene (For example a 100% reduction). This is now issued as a warning.
Maya
- Fixed default method for skinning export when the flag (UseCurrentPoseAsBindPose) was not specified externally.
3ds Max
- Fixed heap corruption triggered during shutdown.
- Fixed heap corruption that could occur when reusing sub-materials in a Multi-material, or between Multi-materials.