Your Asset Transformer **Studio** _2025.4.2.1_ download should begin shortly, click here if it doesn't.

While downloading, take a look at the [new documentation](/content/documentations/studio/2025.4/manual/index.html).

# Changelog

##### Note

Pixyz has been rebranded as Asset Transformer ( [announcement](https://discussions.unity.com/t/pixyz-is-now-unity-asset-transformer/1659247)). This change is not yet reflected in the Pixyz Studio product and documentation, but it will be included in an upcoming release.

##### Important

Pixyz Studio 2025 still features a [Python API interface](/content/documentations/studio/2025.4/manual/ScriptingWiththePythonAPI.html), enabling developers to extend its out-of-the-box capabilities, but with the **following limitations compared to previous releases** (see [What's New](/content/documentations/studio/2025.4/manual/WhatsNew.html)):

- It is no longer possible to import and export using scripting (the `IO` module is removed from the API), nor to reset or load a `.pxz` scene.
- Pixyz Studio [plugins](/content/documentations/studio/2025.4/manual/Plugins.html) are compatible with Pixyz Studio only, and cannot be run with [Pixyz SDK](/content/documentations/sdk/latest/index.html).
- The PyQt native support was discontinued, so plugins are limited to what the XML structure can offer. Users wishing to create advanced interfaces should use the full power of Pixyz SDK.

Also, **a lot of changes have been made to the Python API** (functions signatures, behavior,...). Take a close look below to help you migrate your old Pixyz Studio scripts and plugins.

For support, contact [Unity Asset Transformer (ex Pixyz) support](https://support.unity.com/hc/en-us/requests/new?ticket_form_id=21191310025108) or reach out to the community on the [Unity Asset Transformer Forum](https://discussions.unity.com/c/pixyz/51).

## \[2025.4.2.1\] - 2025-09-19

### 🐛 FIXED

- Fixed materials not exported with glTF, USD, FBX and JT exports when materials are assigned as subpart materials
- Fixed menus displayed with transparency on Windows 11
- Fixed `Isolate` behavior to match legacy behavior
- Fixed Studio not launched after installation depending on admin rights
- Fixed first file drag&drop blocked after first software startup
- Fixed folding arrows in tree not refreshing correctly
- Fixed animations not saved when saving a .pxz scene
- Fixed `No Tessellate` error displayed when re-tessellating parts in some cases
- Fixed crash when opening UV Viewer with animated models
- Fixed `invalid entity identifier` error when opening UV Viewer with animated models
- Fixed Inspector view not refreshed when adding custom properties on occurrences
- Fixed Area selection behavior to match legacy behavior
- Fixed incorrect update in scene statistics panel
- Fixed Viewer background turing black when disabling some information from the statistics panel
- Fixed set \_\_file\_\_ python variable missing
- Fixed incorrect rendering with the `World Tangents` override material
- Fixed undo/redo failing with deleted BRep materials

### 📦 Pixyz SDK CHANGES

- 2025.1.2.3 → 2025.4.2.1

> #### ➕ ADDED
>
> - Added support for the specified versions of the following formats:
>   - **Autodesk Inventor**: 2026
>   - **CATIA V5**: V5\_6R2025
>   - **CATIA V5 \[3DXML\]**: V5\_6R2025
>   - **CATIA V6 \[3DXML\]**: V5\_6R2025
>   - **Creo**: 12.4.0.0
>   - **NX-Unigraphics**: NX2506
> - Wire: Added the import of `Selection sets` included in \*.wire files (Alias) as a comma-separated list in a metadata field `InSets`, if applicable
> - Wire: Added a new `AliasImportSymmetries` import preference. Disable to ignore symmetrized geometries at import
>
> #### 👾 FIXED
>
> - JT: Fixed export up-axis/orientation issue
> - JT: Fixed metadata export
> - JT: Fixed and updated `JtExportVersion` IO preference to reflect actual supported export versions
> - DWG: Fixed incorrect scale problem at import
> - DWG: Fixed failing import with CJK characters
> - glTF: Fixed `LoadVariant` IO preference not working
> - Revit: Fixed over-importing "Mass Floor" geometry
> - Revit: Fixed potential infinite loop at import
> - Creo: Fixed error importing components with flexibility
> - USD: Fixed visibility interpretation mismatch
> - USD: Fixed a crash while importing files with malformed UVs
> - Fixed Baking API bug when baking feature component
> - Fixed numerical precision issue in GPU Baking
> - Fixed default color for opacity map baking (transparent)
> - Fixed Shininess of Standard materials incorrectly rendered in the viewer
> - Fixed retessellation of parts after singularization
> - Fixed a crash when using `setPartMesh` or `setPartModel` functions twice
> - Fixed some random crashes in `algo.repairCAD` function
> - Fixed crash in `mergePartOccurrences` with visibility information
> - Fixed metadata preservation executing `algo.convertSimilarPartOccurrencesToInstancesFast` and `algo.convertSimilarPartOccurrencesToInstances` functions
> - Fixed crash in `scene.mergePartOccurrencesByRegions`
> - Fixed preformance problem in `algo.tessellatePointClouds` function
> - Fixed undo/redo of instance singularization
>
> #### 💡 API Changes
>
> Most of the following changes are related to an update of the baking API.
> See [this script](/content/documentations/studio/Samples/python/oldToNewBakingAPI.py) for an example of conversion from the old API to the new one.
>
> ##### 💡 BEHAVIOR CHANGE
>
> - [`material.filterAO`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_filterAO/index.html): _Now accepts interleaved arrays of ambient occlusion and bent normals maps_
> - [`algo.convertNormalMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_convertNormalMap/index.html): _Now allows to convert from / to world space too_
> - [`material.filterAO`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_filterAO/index.html): _Now accepts image lists as input. Moreover, default values for all `sigma` parameters have been updated_
> - [`material.fillUnusedPixels`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_fillUnusedPixels/index.html): _Now accepts three more parameters: `size` to limit the dilation to a finite band around the valid texels, `validityMask` as an alternative to `unusedColor` to define valid texels, and `inPlace` to avoid image duplication. Moreover, running speed has been greatly improved_
> - [`convertSimilarPartOccurrencesToInstances`](/content/documentations/studio/2025.4/manual/xref:algo.convertSimilarOccurrencesFast): _createNewOccurrencesForPrototypes parameter has been removed, it will always create a new occurrence for the prototype. keepExistingPrototypes has been removed to, we always keep the existing prototypes._
> - [`algo.convertSimilarOccurrences`](/content/documentations/studio/2025.4/manual/xref:algo.convertSimilarOccurrencesFast): _keepExistingPrototypes has been removed to, we always keep the existing prototypes._
>
> ##### ➕ ADDED FUNCTIONS
>
> - [`algo.filterMeshVertexColors`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_filterMeshVertexColors/index.html) _Smooth vertex colors on some meshes while preserving features_
> - [`scene.isIsolated`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_isIsolated/index.html) _Get if the scene is in isolated state_
> - [`scene.getIsolatedOccurrences`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getIsolatedOccurrences/index.html) _Get currently isolated occurrences_
> - [`algo.beginBakingSession`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_beginBakingSession/index.html) _Starts a new baking session_
> - [`algo.beginVertexBakingSession`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_beginVertexBakingSession/index.html) _Starts a new baking session intended to bake data at mesh vertices instead of to a texture map_
> - [`algo.endBakingSession`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_endBakingSession/index.html) _Ends and destroys an existing baking session_
> - [`algo.fetchBakedMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_fetchBakedMap/index.html) _Returns information about one texel of a baked map_
> - [`algo.fetchBakedVertex`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_fetchBakedVertex/index.html) _Returns information about one baked vertex_
> - [`algo.setBakingSessionPadding`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_setBakingSessionPadding/index.html) _Sets the width of the dilation applied to baked maps_
> - [`algo.bakeAOMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeAOMap/index.html) _Ray tracing based ambient occlusion computation_
> - [`algo.bakeDepthMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeDepthMap/index.html) _Depth map baking_
> - [`algo.bakeDiffuseMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeDiffuseMap/index.html) _Diffuse map baking_
> - [`algo.bakeDisplacementMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeDisplacementMap/index.html) _Displacement map baking_
> - [`algo.bakeEmissiveMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeEmissiveMap/index.html) _Emissive map baking_
> - [`algo.bakeFeatureMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeFeatureMap/index.html) _Index map baking for features component_
> - [`algo.bakeMaterialAOMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeMaterialAOMap/index.html) _AO baking from the source material_
> - [`algo.bakeMaterialIdMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeMaterialIdMap/index.html) _Color map baking based on source material IDs_
> - [`algo.bakeMaterialPropertyMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeMaterialPropertyMap/index.html) _Baking of custom material properties_
> - [`algo.bakeMetallicMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeMetallicMap/index.html) _Metallic map baking_
> - [`algo.bakeNormalMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeNormalMap/index.html) _Normal map baking_
> - [`algo.bakeOccurrencePropertyMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeOccurrencePropertyMap/index.html) _Occurrence property map baking_
> - [`algo.bakeOpacityMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeOpacityMap/index.html) _Opacity map baking_
> - [`algo.bakePartIdMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakePartIdMap/index.html) _Color map baking based on the source part IDs_
> - [`algo.bakePositionMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakePositionMap/index.html) _Position map baking_
> - [`algo.bakeRoughnessMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeRoughnessMap/index.html) _Roughness map baking_
> - [`algo.bakeSpecularMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeSpecularMap/index.html) _Specular map baking_
> - [`algo.bakeUVMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeUVMap/index.html) _Baking of source UV coordinates_
> - [`algo.bakeValidityMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeValidityMap/index.html) _Baking of a map distinguishing baked pixels from non baked ones_
> - [`algo.bakeVertexColorMap`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_bakeVertexColorMap/index.html) _Vertex color map baking_
> - [algo.getMeshVertexColors](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_getMeshVertexColors/index.html) _Recovers the vertex colors from a set of meshes as arrays_
> - [algo.setMeshVertexColors](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_setMeshVertexColors/index.html) _Specifies the vertex colors for a set of meshes_
> - [`scene.getClusters`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getClusters/index.html): _Get groups of occurrences based on spatial proximity_
>
> ##### ➕ ADDED TYPES
>
> - `algo.BakingSession`
> - `algo.BakedValue`
> - `algo.Space`
>
> ##### ➕ ADDED EVENTS
>
> - `scene.IsolateBegan` _Triggered when isolate mode starts_
> - `scene.IsolateEnded` _Triggered when isolate mode ends_
>
> ##### ➕ ADDED CAD PROPERTIES
>
> - `CurveMaxSplit` _Maximum number of iteration in the algorithm discretizing a curve. Stop the algorithm and throw an error when the threshold is reached_
> - `SurfaceMaxSplit` _Maximum number of iteration in the algorithm discretizing a surface. Stop the algorithm and throw an error when the threshold is reached_
>
> ##### ➕ ADDED IO PROPERTIES
>
> - `AliasImportSymmetries` _Import symmetries in Alias file format_
> - `CreoViewModelGeometrySolids` _Toggle import of solid geometry_
> - `CreoViewModelGeometrySurfaces` _Toggle import of surfaces geometry_
> - `CreoViewModelGeometryCosmetics` _Toggle import of cosmetics geometry_
> - `CreoViewModelConstructionGeometrySurfaces` _Toggle import of cad construction surfaces_
> - `CreoViewModelConstructionGeometryCosmetics` _Toggle import of cad construction cosmetics_
> - `CreoViewModelConstructionGeometryDatum` _Toggle import of cad datum planes, curves, axes, points_
> - `CreoViewModelConstructionGeometryCoordinateSystems` _Toggle import of cad datum coordinate systems_
> - `CreoViewLayer/importLayerMode` _Select how layers will be imported ( default , layers as occurrences or layers as variants )_
>
> ##### ❌ REMOVED ALGO PROPERTIES
>
> - `UseGPUBaking`
>
> ##### ❌ REMOVED FUNCTIONS
>
> - `algo.bakeMaps`
>
> ##### ❌ REMOVED TYPES
>
> - `algo.BakingMethod`
> - `algo.MapType`
> - `algo.MapTypeList`
> - `algo.BakeMap`
> - `algo.BakeMapList`
> - `algo.CustomBakeMap`
> - `algo.CustomBakeMapList`

## \[2025.1.1.1\] - 2025-05-12

### 🐛 FIXED

- Fixed materials not exported with glTF, USD, FBX and JT exports when materials are assigned as subpart materials
- Fixed inability to run software in administrator mode without User Account Control (UAC)
- Fixed scene statistics not always updated correctly
- Fixed transform gizmo displayed even with no selection selection
- Fixed slower product structure update due to useless refresh
- Fixed inability to create keyboard shortcut with some functions
- Fixed selection ignored (all materials removed) and dialog systematically opened with `Remove Materials from Selection`
- Fixed `Select Similar` and `Select Instances` always inactive in `Selection` menu
- Fixed materials selectors not always emptied after resetting a session
- Fixed sizing issues with keyboard shortcuts window

### 📦 Pixyz SDK CHANGES

- 2025.1.0.4 → 2025.1.2.3

> #### 🚀 FEATURES
>
> - GLTF: Added materials `Alpha coverage`
>
> #### 👾 FIXED
>
> - 3DXML: Fixed import yielding inconsistent hierarchy randomly
> - STEP: Fixed a memory leak during import
> - Catia: Fixed missing references importing CATProduct files
> - Revit: fixed misoriented faces at import
> - GLTF: Fixed PBR channels exception
> - GLTF: Fixed variants not imported
> - DGN: Fixed potential freeze in tessellation process
> - DGN: Fixed missing colors in some files
> - DGN: Better infinite value detection
> - USD: Fixed incorrect occurrences naming at export
> - Navisworks: Fixed coordinatess system with no up-axis definition
> - PARASOLID: Fixed surfaces created twice and overlapping leading to visual artifacts
> - Fixed a crash while baking from UV channel 0 to UV channel 1
> - Fixed baking failing when a material uses a UV channel that doesn't exist in the mesh
> - Fixed crash with `bakeMaps` when executed on parts without meshes
> - Improved VRAM consumption for GPU baking with opacity threshold
> - Fixed a crash in `repackUV`
> - Fixed material assignment lost with the `cleanInstances` function
> - Fixed missing open shells at Rhino import
> - Fixed `mergePartOccurrencesByMaterials` ignoring subpart materials
> - Fixed `algo.decimateTarget` inconsistencies
> - Fixed `computeAABB` to include lines
> - Fixed Utf-8 material name encoding issue
> - Fixed viewer's auto-clipping planes issue with 2D objects
> - Fixed a crash when calling undo on empty stack
> - Fixed offset parts with `convertSimilarPartOccurrencesToInstancesFast`
> - Fixed `explodeByMaterials` unsetting subpart materials
> - Fixed `repairCAD` modifying with faces orientation with `orient` parameter disabled
> - Fixed `convertVisibility`not working in `convertPMIToOccurrences`
> - Fixed ImageRef consitency in multythreaded access

## \[2025.1.0.5\] - 2025-03-28

### ➕ ADDED

- Added `Combine Materials in Textures` action in the `Optimize Mesh` men
- Added an `Ambient light` preference to lighten the scene when using the Standard lighting mode
- Added a spinner in the bottom taskbar indicating the app is still processing
- Added support if the `Windows 11` style

### 🐛 FIXED

- Fixed scripting error output shortening
- Fixed `Isolate` mode not working in the `No-Show` view
- Fixed the `FitView` not working in `Isolate` mode with nothing selected
- Fixed a crash when deleting materials while `SubpartInspector` is visible
- Fixed `FitView` no longer ignoring hidden parts
- Fixed viewer not updating at the end of an in-depth selection
- Fixed `Select Instances` action no longer selecting instances
- Fixed material thumbnails being blank when Viewer is in isolate mode
- Fixed performance regressions when showing `MaterialWidget`
- Fixed function's dialog always displaued with `Select Hidden Parts` and `Select Visible Parts`
- Fixed `Unselect` (clear selection) keyboard shortcut not working anymore
- Fixed a GPU memory leak whdn closing the app
- Fixed Material slots in widgets not emptied when resetting the app
- Fixed the tree's `Expand All` slower than before
- Fixed the tree's `Fast Properties` not displayed correctly
- Fixed `Find in Tree` not always focusing at the correct tree location
- Fixed a crash when applying the rUV projection in the `UV Projection Tool`
- Fixed being unable to add `custom properties` to the tree
- Fixed `Display Prototype Name` setting being ignored
- Fixed searching by regular expression not working
- Fixed file drag&drop blocked after very first app startup
- Fixed `invalid identifier` error deleting occurrences if the prototypes tree dialog has been opened
- Fixed `the given identifier is not valid component` error displayed in some cases
- Fixed floating license server not found (force floating server to use flexLM)
- Fixed material thumbnails not updating when the material pattern type is changed
- Fixed `Manual Orientation` (up axis) value being ignored with the Guided Import
- Fixed performance panel disappearing when background is changed
- Fixed broken documentation links in tooltips in `File` menu
- Fixed move occurrences position in the tree broken
- Fixed progress bar not showing with functions from the `Process` module
- Fixed patch borders not showing in the viewer after `identifyPatches`
- Fixed in-depth selection not working as expected
- Fixed viewer not updated when parts transform changed
- Fixed `explode view` not working with pointclouds
- Fixed `deleteEntities` steps logged when manipulating materials
- Fixed submesh selection not working when clicking from backface

### ❌ REMOVED

- Removed the Catia-like navigation mode
- Removed the `runGenericProcess` function

### 📦 Pixyz SDK CHANGES

- 2024.3.0.14 → 2025.1.0.4

> #### ➕ ADDED FUNCTIONS
>
> - [`algo.hasOverlappingUV`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_hasOverlappingUV/index.html) _Function to check if a given mesh has some overlapping UVs_
> - [`polygonal.hasUVs`](/content/documentations/studio/2025.4/apidoc/python/polygonal.html#polygonal_hasUVs/index.html): _Function to check if a given mesh has some valid UV channels_
> - [`polygonal.hasNormalizedUVs`](/content/documentations/studio/2025.4/apidoc/python/polygonal.html#polygonal_hasNormalizedUVs/index.html): _Function to check if a given mesh has some normalied UVs_
> - [`core.getRemainingSecondsBeforeLicenseTimeout`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_getRemainingSecondsBeforeLicenseTimeout/index.html): _After the connection to a floating license server is lost, get the seconds remanining until the program quits_
> - [`core.hasConsoleVerbose`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_hasConsoleVerbose/index.html): _Function to check whether a given Verbose level is present in the console's current mask_
>
> #### 💡 BEHAVIOR CHANGE
>
> - [`algo.mergeUVIslandsAffine`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_mergeUVIslandsAffine/index.html): _Now has one new parameter `rotationStep` that only allows UV to rotate by multiples of this angle in degrees. -1 is used when no restriction is in place, and 0 or a value superior or equal to 360 for no rotation_
> - [`scene.getBRepInfos`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getBRepInfos/index.html) _Now return the number of nan-manifold edges in the scene tree_
> - [`view.createGPUScene`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_createGPUScene/index.html): _Added the parameters `useIsolate`to indicate if the scene visibility should be impacted by the isolate function_
>
> #### 👾 FIXED
>
> - Fixed `mergePartOccurrencesByMaterials` ignoring subpart materials
> - Fixed `computeAABB` to include lines
> - Revit: fixed misoriented faces at import
> - Fixed Utf-8 material name encoding issue
> - GLTF: Fixed PBR channels exception
> - GLTF: Fixed variants not imported
> - DGN: Fixed missong colors in some files
> - USD: Fixes incorrect occurrences naming at export
> - PARASOLID: Fixed surfaces created twice and overlapping leading to visual artifacts
> - Fixed viewer's auto-clipping planes issue with 2D objects
> - Fixed a crash when calling undo on empty stack
> - Fixed offset parts with `convertSimilarPartOccurrencesToInstancesFast`
> - Fixed `explodeByMaterials` unsetting subpart materials
> - Improved VRAM consumption for GPU baking with opacity threshold
> - Fixed `repairCAD` modifying with faces orientation with `orient` parameter disabled
> - Fixed crash with `bakeMaps` when executed on parts without meshes
> - Fixed `convertVisibility`not working in `convertPMIToOccurrences`
> - Fixed baking failing when a material uses a UV channel that doesn't exist in the mesh

* * *

# Previous releases

## \[2024.1.0.44 **BETA**\] \- 2025-02-07

### ➕ ADDED

- Added `Combine Materials in Textures` action in the `Optimize Mesh` menu
- Added API functions from the removed legacy `UI` module (`askYesNo`, `message`,...) into `Studio` module
- Added `Preferences` quick access button in the main toolbar

### 💡 CHANGED

- Improved hierarchy handling performance
- Updated scripts from the `Sample Scripts` directory
- Renamed the export preference `FbxUpAxis` with `UpAxis` (affects `FBX` and `JT` export formats only)

### 🐛 FIXED

- Fixed multiple crashes/bugs with material creation/deletion and with the Material Editor interface: undo/redo, thumbnail generation, wrong materials count, material properties overlapping, incorrect window size, material preview sphere cropped...
- Fixed Material Selector becoming blank
- Fixed transformation gizmo with mutiselection now always aligned to world
- Fixed wrong rotation value applied with multiple occurrences selected
- Fixed manual scaling yielding incorrect result with large and small values
- Fixed gizmo disappearig in orthographic camera mode
- Fixed crash/freeze when manipulating the scale in `Move Pivot Only` mode
- Fixed clicking the scene gizmo initiating a rectangle selection
- Fixed viewer freeze with large selection with show/hide
- Fixed viewer not updating after `Select All`
- Fixed clipping plan issues in the viewer
- Fixed environment map showing in orthographic perspective (now disabled)
- Fixed `Viewer Information Panel` (statistics panel) not counting statistics correctly
- Fixed patch lines showing in the viewer with the `Outlines` button disabled
- Fixed emissive map not baked with `ProxyMesh+Bake` and `DecimateTarget+Bake`
- Fixed `Select By` functions keeping the `Root` node selected in the final selection
- Fixed current selection being included in selected return parameters
- Fixed current selection not filled in functions dialogs requiring a selection
- Fixed possible crash with functions while doing a selection
- Fixed functions with optional selection parameters ignoring the current selection
- Fixed renaming occurrences with `Rename` (F2) not working
- Fixed potential crash when searching in the tree
- Fixed infinite tree reload with `Find Selection in Tree`
- Fixed error prompted when using `Find Selection in Tree`
- Fixed occurrences paste and duplicate without instance
- Fixed `Collapse` and `Expand` tree actions
- Fixed tree nodes destroyed when using drag-drop to parent them
- Fixed crash when deleting nodes in the tree
- Fixed crash when removing a fast property in the tree
- Fixed console output not logging `core.load` step
- Fixed crash with multiple `core.resetSession` in script excecution
- Fixed black text in functions' presets dropdowns
- Fixed `out of range` error when modifying a subpart material
- Fixed `Select By Material` failing to select parts with subpart materials
- Fixed missing context menu actions
- Fixed animation controls being disabled when reimporting a model
- Fixed crash when undoing an import
- Fixed environment map thumbnail loading flipped
- Fixed crash when undoing any step which added a texture
- Fixed losing the progress bar after undoing some manipulations
- Fixed `Cutting Plane` tool adding useless `setLocalMatrices` events in the History
- Fixed crash caused by the Inspector constantly updating during script execution
- Fixed error popup with `Generate Phantom Mesh`
- Fixed crash if Material Selector was opened before `resetSession` is called
- Fixed incorrect transform matrix set when duplicating occurrences
- Fixed shortcuts being disabled after closing dialogs (undo/redo, Material Editor...)
- Fixed license expiration dialog appearing with floating license
- Fixed a crash when peforming some undo/redo on BReps manipulations
- Fixed a crash when creating a new keyboard shortcut
- Fixed visual artifact in Light Theme
- Fixed a crash when using `Manual Scale` in `Guided Import`
- Fixed incorrect camera setup when exiting a variant/PMI
- Fixed potentially incorrect camera angle with variant/PMI
- Fixed incorrect display behavior presets with plugins
- Fixed a crash with undo/redo and occurrennes owning a `Joint` component
- Fixed `invalid viewer identifier` error popping randomly
- Fixed incorrect opacity texture baking and rendered black with billboard generation
- Fixed billboard generated with abnormally large scale

### ❌ REMOVED

- Removed `Combine Meshes` action from the `Optimize` menu (use `Merge Parts By Materials` instead)
- Removed `IO` module from the API interface (see above)

### 📦 Pixyz SDK CHANGES

- 2024.2.0.52 → 2024.3.0.14

> #### ➕ ADDED FUNCTIONS
>
> - [`scene.getChildrenCount`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getChildrenCount/index.html) _Get the children count of an occurrence_
> - [`scene.getFirstChild`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getFirstChild/index.html) _Get the first child of an occurrence_
> - [`scene.getNextSibling`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getNextSibling/index.html) _Get the next adjacent child_
> - [`core.getLicenseError`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_getLicenseError/index.html) _Give the reason of license check failure_
> - [`view.destroyContext`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_destroyContext/index.html) _Destroy the Vulkan instance_
> - [`algo.hasOverlappingUV`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_hasOverlappingUV/index.html) _Check for UV overlapping_
>
> #### 💡 BEHAVIOR CHANGE
>
> - [`algo.removeOccludedGeometries`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometries/index.html) _Now the parameter `occluders` has empty array as default value instead of 0_
> - [`algo.removeOccludedGeometriesAdvanced`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesAdvanced/index.html) _Now the parameter `occluders` has empty array as default value instead of 0_
> - [`algo.removeOccludedGeometriesFromViewPoints`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesFromViewPoints/index.html) _Now the parameter `occluders` has empty array as default value instead of 0_
> - [`scene.hide`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_hide/index.html) _Now accepts a list of occurrences instead of a single occurrence_
> - [`scene.show`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_show/index.html) _Now accepts a list of occurrences instead of a single occurrence_
> - [`scene.inverseVisibility`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_inverseVisibility/index.html) _Now accepts a list of occurrences instead of a single occurrence_
> - [`scene.showOnly`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_showOnly/index.html) _Now accepts a list of occurrences instead of a single occurrence_
>
> #### ❌ REMOVED FUNCTIONS
>
> - `view.captureNextFrame`
> - `core.pushAnalytic`
> - `core.isInteractiveMode`
> - `core.setInteractiveMode`
> - `core.message`
> - `core.askYesNo`
> - `core.choose`
> - `core.askString`
>
> #### 🚀 FEATURES
>
> - CATIA: Added filepath metadata on the occurrences at import
> - CreoView: Added new filters `LoadHidden` and `LoadConstructionsAndReferences` at import
> - SolidWorks: Added support for `Configurations`, now imported as `Variants`
> - Added missing features from CPU Baker to GPU Baker
> - `scene.getAABB` with precise=True now uses current animation pose
>
> #### 👾 FIXED
>
> - CreoView: fixed missing formats (\*.pvz, \*.pvs) in import dialog
> - Navisworks: fixed coordinate system detection
> - Revit: fixed missing geometries
> - Revit: fixed broken/missing faces
> - Revit: fixed mismatching unique ID metadata
> - DGN: fixed crash when importing 3d curves
> - DGN: fixed precision issues
> - DGN: fixed color index check
> - DGN: fixed missing geometries
> - DGN: fixed wrong faces orientation
> - DGN: fixed determinism in multi-thread process
> - GLTF: fixed exported files containing not valid data
> - GLTF: fixed missing vertex colors with point cloud at export (black points)
> - GLTF: fixed missing Part when adding subpartMaterial
> - GLTF: fixed crash at export with Draco enabled and meshes with tangents
> - GLTF: fixed incorrect support of KHR\_xmp\_json\_ld extension at import/export
> - GLTF: fixed issue in textures alpha coverage
> - STEP: fixed PMI import crash
> - JT: fixed import crash
> - JT: disabled v10 support with alternative exporter because version unsupported
> - PDF: fixed missing PDF export
> - OBJ: fixed unlit texture missing at export
> - STEP: fixed memory leaks at import
> - STEP: fixed missing free lines at import
> - CREO: fixed incorrect extensions with the 'Creo' filter in import dialogs
> - FBX: fixed FBX exported with incorrect default FBX version
> - DWG: Fixed missing PersistentID at import
> - VRML: fixed Unit measure issue at import
> - E57: Fixed exception thrown at import with e57 file containing Index packet
> - PLY: Fixed a crash when importing a .ply file in mono-thread
> - Fixed missing transparent material at export with some formats
> - Fixed Viewer issues with some nVidia GPUs (e.g. Quadro P6000) causing incorrect behavior with `removeOccludedGeometries` functions
> - Fixed multiple issues with `algo.explodeByMaterials`
> - Fixed incorrect default root with `io.exportScene`
> - Fixed a crash in `scene.mergePartOccurrences` with vertexWeights attributes on meshes
> - Fixed incorrect NormalMap Baking on object without material
> - Fixed crash when tessellating point clouds with `algo.tessellatePointClouds`on certain situations
> - Fixed multiple issues on tangents computation (import/rendering/creation)
> - Fixed `scene.transferMaterialsOnPatches` applying materials on lines
> - Fixed a crash with `algo.decimateTarget` when parameter processMeshIndependently=True
> - Fixed a crash in `algo.mergePartOccurrences` with vertexWeights attributes existing on meshes
> - Fixed NormalMap Bbaking failing on parts without material
> - Fixed SubPartMaterial not updated after `algo.deletePatches`
> - Fixed crash in `algo.repairCAD` when CAD loops are not attached to a face
> - Fixed a crash when overwriting an existing .pxz file
> - Fixed crash at `pxz.release`
> - Fixed systematic crash with `algo.removeOccludedGeometriesAdvanced`
> - Fixed losing materials applied as a SubPart material with `algo.repairMesh`
> - Fixed `createVisibilityInformationAdvanced`returnig incorrects values by adding a depth bias to back faces

### Known issues:

- Potential frame rate loss on laptops with Dual GPUs
- Broken in-app links to the documentation
- Incomplete product documentation
- Incomplete API Reference

## \[2024.1.0.28\] - 2024-07-25

### ➕ ADDED FUNCTIONS

- [`algo.crackMeshEdges`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_crackMeshEdges/index.html): _Crack polygonal edges according to given criteria_
- [`algo.dualContouring`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_dualContouring/index.html): _Replace the tessellations of the selected parts by a retopology based on a dual-contouring_
- [`algo.filletMesh`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_filletMesh/index.html): _Fillet a mesh according to its Lines of Interest_
- [`algo.getAllAxisFromCADModel`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_getAllAxisFromCADModel/index.html): _Return all the main axis contained in the CAD models given_
- [`algo.getUVQualityMetrics`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_getUVQualityMetrics/index.html): _Compute UV mapping qualitative metrics._
- [`algo.getVisualComparisonFootprint`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_getVisualComparisonFootprint/index.html): _Compute the visual footprint of the difference between two sets of occurrences_
- [`algo.identifySharpEdges`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_identifySharpEdges/index.html): _Mark as Lines Of Interest the sharp edges_
- [`algo.mergeUVIslandsRelaxed`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_mergeUVIslandsRelaxed/index.html): _Minimizes the number of seams in the UV mapping by merging UV islands_
- [`algo.meshBooleanOperation`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_meshBooleanOperation/index.html): _Computes the boolean operation between the meshes of two occurrence lists_
- [`algo.segmentMesh`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_segmentMesh/index.html): _Segment Mesh into clusters guided by edge sharpnesses_
- [`cad.addBodyToModel`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_addBodyToModel/index.html): _Add a body to the model_
- [`cad.addEdgeToModel`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_addEdgeToModel/index.html): _Add an edge to the model_
- [`cad.addOpenShellToModel`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_addOpenShellToModel/index.html): _Add an open shell to the model_
- [`cad.addPrecisionArea`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_addPrecisionArea/index.html): _Define a working area on the 2D projection of the surface to define a parametric precision_
- [`cad.addVertexToModel`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_addVertexToModel/index.html): _Add a vertex to the model_
- [`cad.createBoundedLinearExtrusionBody`](/content/documentations/studio/2025.4/manual/xref:cad.createBoundedLinearExtrusionBody): _Create a linear extrusion body_
- [`cad.createCurveExtrusionBody`](/content/documentations/studio/2025.4/manual/xref:cad.createCurveExtrusionBody): _Create a curve extrusion body_
- [`cad.createLinearExtrusionBody`](/content/documentations/studio/2025.4/manual/xref:cad.createLinearExtrusionBody): _Create a linear extrusion body_
- [`cad.createLoopFromCurve`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_createLoopFromCurve/index.html): _Create a loop from a finite curve_
- [`cad.createMultiExtrusionBody`](/content/documentations/studio/2025.4/manual/xref:cad.createMultiExtrusionBody): _Create a linear extrusion body_
- [`cad.createRevolveExtrusionBody`](/content/documentations/studio/2025.4/manual/xref:cad.createRevolveExtrusionBody): _Create a revolved extrusion body_
- [`cad.endThreadBrepSession`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_endThreadBrepSession/index.html): _Ends BrepSession on current thread_
- [`cad.getClosedShellOrientedFaces`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getClosedShellOrientedFaces/index.html): _Get all orienteFaces contain in the closedShell_
- [`cad.getCurveLength`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getCurveLength/index.html): _Returns the length of the curve_
- [`cad.getEdgeLength`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getEdgeLength/index.html): _Returns the length of the edge_
- [`cad.getEdgeMaterial`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getEdgeMaterial/index.html): _Get the material of the edge, if any_
- [`cad.getModelOpenShells`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getModelOpenShells/index.html): _Get the list of open shells contained in a model_
- [`cad.getModelPrecision`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getModelPrecision/index.html): _Get the precision used in a model_
- [`cad.getOpenShellOrientedFaces`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getOpenShellOrientedFaces/index.html): _Get all orienteFaces contain in the openShell_
- [`cad.getParametricPrecisionOnSurface`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getParametricPrecisionOnSurface/index.html): _Returns the parametric precision of a surface from the input precision_
- [`cad.getPrecision`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_getPrecision/index.html): _Get the CAD precision_
- [`cad.invertCoEdge`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_invertCoEdge/index.html): _Invert a coedge_
- [`cad.invertFaces`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_invertFaces/index.html): _Invert faces_
- [`cad.invertLoop`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_invertLoop/index.html): _Invert a loop_
- [`cad.isCurveFinite`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_isCurveFinite/index.html): _If the curve is finite return true, return false otherwise_
- [`cad.isSurfaceFinite`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_isSurfaceFinite/index.html): _Return if the surface is finite_
- [`cad.needPrecisionArea`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_needPrecisionArea/index.html): _Tells if it needs a working area on the surface_
- [`cad.needTorusShapeCheck`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_needTorusShapeCheck/index.html): _Returns true if the torus has a shape (lemon or apple) corresponding to the provided points_
- [`cad.setCoEdgeCurve2D`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_setCoEdgeCurve2D/index.html): _Set the curve 2D value of a coEdge_
- [`cad.setCoEdgeSurface`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_setCoEdgeSurface/index.html): _Set the surface value of a coEdge_
- [`cad.setCurveLimits`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_setCurveLimits/index.html): _set the parametric space limits of a curve_
- [`cad.setEdgeMaterial`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_setEdgeMaterial/index.html): _Define an edge's material_
- [`cad.setUnitLength`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_setUnitLength/index.html): _Set the CAD unity length property_
- [`cad.startThreadBrepSession`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_startThreadBrepSession/index.html): _Create a new BrepSession on current thread_
- [`core.getLogFile`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_getLogFile/index.html): _Get the path of the log file_
- [`core.hasCustomProperty`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_hasCustomProperty/index.html): _Return true if the custom property was found on the occurrence_
- [`core.lockEntityRegistration`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_lockEntityRegistration/index.html): _Lock Entity registration, use with Caution. All entities created after this call will not be saved on .pxz file and will not be listed as existing entities on the Database. Be careful to not references these entities with other registered entities_
- [`core.log`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_log/index.html): _Log a message to Pixyz output_
- [`core.parallelAddJob`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_parallelAddJob/index.html): _Add a job to a parallel session_
- [`core.parallelFinish`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_parallelFinish/index.html): _Ends a parallel session after waiting for all jobs to finish_
- [`core.parallelStart`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_parallelStart/index.html): _Starts a new parallel session_
- [`core.removeModule`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_removeModule/index.html): _Remove a module added via getModuleDescFromXML_
- [`core.unlockEntityRegistration`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_unlockEntityRegistration/index.html): _Unlock Entity registration_
- [`geom.fromAffine`](/content/documentations/studio/2025.4/apidoc/python/geom.html#geom_fromAffine/index.html): _Create a Matrix from an Affine_
- [`geom.getMaxScale`](/content/documentations/studio/2025.4/apidoc/python/geom.html#geom_getMaxScale/index.html): _Get maximum matrix scale_
- [`io.addAssetPaths`](/content/documentations/studio/2025.4/manual/xref:io.addAssetPaths): _add directory paths to search assets in_
- [`io.applyAutoTessellate`](/content/documentations/studio/2025.4/manual/xref:io.applyAutoTessellate): _Handle auto tessellate options on given part, need to be complete_
- [`io.clearAssetPaths`](/content/documentations/studio/2025.4/manual/xref:io.clearAssetPaths): _clear all asset paths_
- [`io.findInDirectories`](/content/documentations/studio/2025.4/manual/xref:io.findInDirectories): _find the final path. This will search for the file in asset paths_
- [`io.getAssetPaths`](/content/documentations/studio/2025.4/manual/xref:io.getAssetPaths): _get user defined paths to find assets_
- [`io.getExtensionPriority`](/content/documentations/studio/2025.4/manual/xref:io.getExtensionPriority): _get the priority of an extension from the pixyz importer_
- [`io.importRemote3mxFile`](/content/documentations/studio/2025.4/manual/xref:io.importRemote3mxFile): _Import a remote 3mx file_
- [`io.listVariants`](/content/documentations/studio/2025.4/manual/xref:io.listVariants): _List all variants if file_
- [`io.registerIOCallbacks`](/content/documentations/studio/2025.4/manual/xref:io.registerIOCallbacks): _Register import and export callbacks_
- [`io.setAssetPaths`](/content/documentations/studio/2025.4/manual/xref:io.setAssetPaths): _replace paths to find assets_
- [`material.convertFloat32To8BitsImage`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_convertFloat32To8BitsImage/index.html): _Returns a new image from the given converter from 32bits float to a 8Bits (e.g. depth render map)_
- [`material.createImageFromData`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_createImageFromData/index.html): _Import an Image from only its data_
- [`material.fillUnusedPixels`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_fillUnusedPixels/index.html): _Fill unused pixels by propagating and averaging used pixels_
- [`material.filterAO`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_filterAO/index.html): _Filter an AO map using ATrous method_
- [`material.getImagePixelColor`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_getImagePixelColor/index.html): _Returns the color of a given pixel in an image_
- [`material.getImagesSizes`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_getImagesSizes/index.html): _Returns the sizes of multiple images_
- [`material.getMaterialPattern`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_getMaterialPattern/index.html): _Gets the MaterialPattern name of the material_
- [`material.getPointsAndMaterialFromText`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_getPointsAndMaterialFromText/index.html): _Returns list of 3D Points and a material from a string and fontname_
- [`material.setCoeffOrTextureProperty`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_setCoeffOrTextureProperty/index.html): _Set a CoeffOrTexture property_
- [`material.setColorAlphaProperty`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_setColorAlphaProperty/index.html): _Set a ColorAlpha property_
- [`material.setColorOrTextureProperty`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_setColorOrTextureProperty/index.html): _Set a ColorOrTexture property_
- [`polygonal.createMeshFromDefinitions`](/content/documentations/studio/2025.4/apidoc/python/polygonal.html#polygonal_createMeshFromDefinitions/index.html): _Create a new mesh from multiple MeshDefinition_
- [`polygonal.createMeshFromText`](/content/documentations/studio/2025.4/apidoc/python/polygonal.html#polygonal_createMeshFromText/index.html): _Creates an occurrence from string_
- [`polygonal.usePointGapFillerNormal`](/content/documentations/studio/2025.4/apidoc/python/polygonal.html#polygonal_usePointGapFillerNormal/index.html): _This triangulates a set of points and normals_
- [`scene.addAnnotationGroup`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_addAnnotationGroup/index.html): _Add a Annotation Group to the pmi component_
- [`scene.addInParentInstances`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_addInParentInstances/index.html): _Add an instance of prototype's child as child in current occurrence recursively_
- [`scene.addMeshToAnnotation`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_addMeshToAnnotation/index.html): _Add a mesh and its material to a annotation_
- [`scene.createAnnotationFromDefinition`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_createAnnotationFromDefinition/index.html): _Create Annotation from definition_
- [`scene.createCapsule`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_createCapsule/index.html): _Create a new capsule_
- [`scene.createOccurrenceFromAnnotation`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_createOccurrenceFromAnnotation/index.html): _Convert a single annotation on an occurrence into an occurrence with mesh geometry_
- [`scene.endModifyAllVariants`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_endModifyAllVariants/index.html): _Call this function to disable the modifications of all variants at the same time_
- [`scene.getBrepShape`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getBrepShape/index.html): _Returns the Brep shape of a part_
- [`scene.getHiddenPartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getHiddenPartOccurrences/index.html): _Get hidden part occurrences_
- [`scene.getPartialLoadingStatus`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getPartialLoadingStatus/index.html): _Get the current status of a partial loading component_
- [`scene.getTessellationParameters`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getTessellationParameters/index.html): _Get tessellation parameters_
- [`scene.getVolume`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getVolume/index.html): _Return the volume of the occurrence_
- [`scene.getVolumes`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getVolumes/index.html): _Return the volume of a set of root occurrences_
- [`scene.invertSelect`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_invertSelect/index.html): _Invert occurrences to selection_
- [`scene.setAnnotationToGroup`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_setAnnotationToGroup/index.html): _set Annotation to a Annotation Group_
- [`scene.setReferencedDataComponentParent`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_setReferencedDataComponentParent/index.html): _Defines which referenced data is parent to the given component_
- [`scene.setReferencedDataComponentPath`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_setReferencedDataComponentPath/index.html): _Defines which path the referenced data is at_
- [`scene.startModifyAllVariants`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_startModifyAllVariants/index.html): _Call this function to to enable the modifications of all variants at the same time_
- [`scene.updateChildrenPrototypes`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_updateChildrenPrototypes/index.html): _Update children prototypes of the given occurrence_
- [`view.drawCappingPlane`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_drawCappingPlane/index.html): _Create an occurrence that holds the mesh of the surfaces that have been cut by the cutting plane_
- [`view.getCameraFrontAxis`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_getCameraFrontAxis/index.html): _Get the front axis of the nth view matrix of a given viewer_
- [`view.getCameraPosition`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_getCameraPosition/index.html): _Get the position of the nth view matrix of a given viewer_
- [`view.getCameraRightAxis`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_getCameraRightAxis/index.html): _Get the right axis of the nth view matrix of a given viewer_
- [`view.getCameraUpAxis`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_getCameraUpAxis/index.html): _Get the up axis of the nth view matrix of a given viewer_
- [`view.selectPrimitives`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_selectPrimitives/index.html): _Select the primitives (polygons, surfaces) contained in the given rectangle_
- [`view.setDefaultViewerId`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_setDefaultViewerId/index.html): _Set default viewer id. This viewer will be used in other functions taking a Viewer as a parameter. Useful if a viewer needs to be shared across different contexts._
- [`view.startRecording`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_startRecording/index.html): _Record viewer in a file_
- [`view.stopRecording`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_stopRecording/index.html): _Stop recording video_

### 💡 BEHAVIOR CHANGE

- [`algo.automaticUVMapping`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_automaticUVMapping/index.html): _Now have two new optional parameters allowing to set up the resolution and the padding_
- [`algo.createVisibilityInformationAdvanced`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_createVisibilityInformationAdvanced/index.html): _Now has a `level` parameter, like [`algo.createVisibilityInformation`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_createVisibilityInformation/index.html)_
- [`algo.decimateTarget`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_decimateTarget/index.html): _Now takes an optional experimental parameter for hybrid memoryless approach_
- [`algo.explodeConnectedMeshes`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_explodeConnectedMeshes/index.html): _Now has an optional parameter allowing to split connected components along non-manifold edges_
- [`algo.getFittingCylinder`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_getFittingCylinder/index.html), [`algo.mapUvOnFittingCylinder`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_mapUvOnFittingCylinder/index.html): _Theses function now take an optional forced direction vector_
- [`algo.remeshSurfacicHoles`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_remeshSurfacicHoles/index.html): _Algorithm was improved, new parameters were added_
- [`algo.removeOccludedGeometries`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometries/index.html), [`algo.findOccludedPartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_findOccludedPartOccurrences/index.html) and [`algo.createVisibilityInformation`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_createVisibilityInformation/index.html): _Now can create viewpoints on an hemisphere_
- [`algo.removeOccludedGeometries`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometries/index.html), [`algo.findOccludedPartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_findOccludedPartOccurrences/index.html) and [`algo.removeOccludedGeometriesFromPoints`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesFromPoints/index.html): _Viewpoints generation no longer creates a uv mapping of a grid of `sphereCount` × `sphereCount` on a sphere (density is higher on the poles than on the hemisphere) but creates a uniform distribution of `sphereCount` viewpoints on a sphere._
- [`algo.removeOccludedGeometries`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometries/index.html), [`algo.removeOccludedGeometriesAdvanced`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesAdvanced/index.html), [`algo.removeOccludedGeometriesFromPoints`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesFromPoints/index.html) and [`algo.removeOccludedGeometriesFromViewPoints`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesFromViewPoints/index.html): _These functions now take an optional list of occluders_
- [`algo.unwrapUV`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_unwrapUV/index.html): _Now has two new parameters to control solver's behavior_
- [`cad.createLoop`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_createLoop/index.html): _Now has a parameter allowing to merge isolated vertices in the loop_
- [`cad.createRevolutionSurface`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_createLoop/index.html): _Now parameters defining the starting and ending angles are renamed and used as if they were in radians_
- [`cad.invertFaces`](/content/documentations/studio/2025.4/apidoc/python/cad.html#cad_invertFaces/index.html): _Now has a parameter to invert loop orientation_
- [`core.endUndoRedoStep`](/content/documentations/studio/2025.4/apidoc/python/core.html#core_endUndoRedoStep/index.html): _Now has an optional `deleteIfEmpty` parameter_
- [`geom.fromTRS`](/content/documentations/studio/2025.4/apidoc/python/geom.html#geom_fromTRS/index.html): _Rotation vector should be passed in degrees instead of radians_
- [`geom.toTRS`](/content/documentations/studio/2025.4/apidoc/python/geom.html#geom_toTRS/index.html): _Rotation vector values are now returned in degrees_
- [`material.createMaterialsFromMaps`](/content/documentations/studio/2025.4/apidoc/python/material.html#material_createMaterialsFromMaps/index.html): _Now returns info on the created material_
- [`scene.createTorus`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_createTorus/index.html): _Now has a `generateUV` parameter like other `scene.create___` functions_
- [`scene.getAABB`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getAABB/index.html): _Now takes an optional parameter allowing to compute more precise AABB_
- [`scene.mergePartOccurrencesByFinalAssemblies`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrencesByFinalAssemblies/index.html): _`MergeHiddenPartsMode` default value is now `Destroy`_
- [`view.refreshViewer`](/content/documentations/studio/2025.4/apidoc/python/view.html#view_refreshViewer/index.html): _Removed the parameters `frameCount` and `forceUpdate` that were unused_

### ⚠️ RENAMED FUNCTIONS

| Previous | New |
| --- | --- |
| `algo.bakeUV` | [`algo.transferUV`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_transferUV/index.html) |
| `algo.convertSimilarOccurrencesToInstances` | [`algo.convertSimilarPartOccurrencesToInstances`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_convertSimilarPartOccurrencesToInstances/index.html) |
| `algo.createInstancesBySimilarity` | [`algo.convertSimilarPartOccurrencesToInstancesFast`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_convertSimilarPartOccurrencesToInstancesFast/index.html) |
| `algo.explodePartByMaterials` | [`algo.explodeByMaterials`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_explodeByMaterials/index.html) |
| `algo.explodeVertexCount` | [`algo.explodeByVertexCount`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_explodeByVertexCount/index.html) |
| `algo.explodeVoxel` | [`algo.explodeByVoxel`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_explodeByVoxel/index.html) |
| `algo.hiddenRemovalCamera` | [`algo.removeOccludedGeometriesFromPoints`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesFromPoints/index.html) |
| `algo.hiddenRemovalViewPoints` | [`algo.removeOccludedGeometriesFromViewPoints`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesFromViewPoints/index.html) |
| `algo.hiddenRemoval` | [`algo.removeOccludedGeometries`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometries/index.html) |
| `algo.hiddenSelection` | [`algo.findOccludedPartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_findOccludedPartOccurrences/index.html) |
| `algo.mergeUVIslands` | [`algo.mergeUVIslandsAffine`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_mergeUVIslandsAffine/index.html) |
| `algo.orientFromCamera` | [`algo.orientPolygonFacesFromCamera`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_orientPolygonFacesFromCamera/index.html) |
| `algo.orient` | [`algo.orientPolygonFaces`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_orientPolygonFaces/index.html) |
| `algo.selectSimilar` | [`algo.findSimilarPartOccurrencesFast`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_findSimilarPartOccurrencesFast/index.html) |
| `algo.smartHiddenCreateVisibilityInformation` | [`algo.createVisibilityInformationAdvanced`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_createVisibilityInformationAdvanced/index.html) |
| `algo.smartHiddenRemoval` | [`algo.removeOccludedGeometriesAdvanced`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_removeOccludedGeometriesAdvanced/index.html) |
| `algo.smartHiddenSelection` | [`algo.findOccludedPartOccurrencesAdvanced`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_findOccludedPartOccurrencesAdvanced/index.html) |
| `algo.smartOrient` | [`algo.orientPolygonFacesAdvanced`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_orientPolygonFacesAdvanced/index.html) |
| `algo.uvUnwrap` | [`algo.unwrapUV`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_unwrapUV/index.html) |
| `scene.findByActiveMaterial` | [`scene.findPartOccurrencesByActiveMaterial`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findPartOccurrencesByActiveMaterial/index.html) |
| `scene.findByMetadataValue` | [`scene.findOccurrencesByMetadataValue`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findOccurrencesByMetadataValue/index.html) |
| `scene.findByMetadata` | [`scene.findOccurrencesByMetadata`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findOccurrencesByMetadata/index.html) |
| `scene.findByProperty` | [`scene.findOccurrencesByProperty`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findOccurrencesByProperty/index.html) |
| `scene.getDuplicatedParts` | [`scene.findDuplicatedPartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findDuplicatedPartOccurrences/index.html) |
| `scene.getNodeName` | [`scene.getOccurrenceName`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getOccurrenceName/index.html) |
| `scene.getReferencers` | [`scene.getDirectInstances`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getDirectInstances/index.html) |
| `scene.getUnstitchedFacesOccurrences` | [`scene.findPartOccurrencesWithUnstitchedOpenShells`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findPartOccurrencesWithUnstitchedOpenShells/index.html) |
| `scene.identifyInstances` | [`scene.findPartOccurrencesByMinimumNumberOfInstances`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findPartOccurrencesByMinimumNumberOfInstances/index.html) |
| `scene.mergeByRegions` | [`scene.mergePartOccurrencesByRegions`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrencesByRegions/index.html) |
| `scene.mergeByTreeLevel` | [`scene.mergeOccurrencesByTreeLevel`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergeOccurrencesByTreeLevel/index.html) |
| `scene.mergeFinalLevel` | [`scene.mergePartOccurrencesByFinalAssemblies`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrencesByFinalAssemblies/index.html) |
| `scene.mergeOpenShells` | [`scene.mergePartOccurrencesWithSingleOpenShellByAssemblies`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrencesWithSingleOpenShellByAssemblies/index.html) |
| `scene.mergePartsByAssemblies` | [`scene.mergePartOccurrencesByAssemblies`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrencesByAssemblies/index.html) |
| `scene.mergePartsByMaterials` | [`scene.mergePartOccurrencesByMaterials`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrencesByMaterials/index.html) |
| `scene.mergePartsByName` | [`scene.mergePartOccurrencesByName`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrencesByName/index.html) |
| `scene.mergeParts` | [`scene.mergePartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrences/index.html) |
| `scene.selectByMaterial` | [`scene.findOccurrencesByMaterial`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findOccurrencesByMaterial/index.html) |
| `scene.selectByMaximumSize` | [`scene.findPartOccurrencesByMaximumSize`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findPartOccurrencesByMaximumSize/index.html) |
| `scene.selectByVisibleMaterial` | [`scene.findPartOccurrencesByVisibleMaterial`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findPartOccurrencesByVisibleMaterial/index.html) |
| `scene.selectDuplicated` | [`scene.findDuplicatedPartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findDuplicatedPartOccurrences/index.html) |
| `scene.selectInstances` | [`scene.getInstances`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getInstances/index.html) |
| `scene.selectPartOccurrencesInAABB` | [`scene.findPartOccurrencesInAABB`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findPartOccurrencesInAABB/index.html) |
| `scene.selectPartOccurrencesInBox` | [`scene.findPartOccurrencesInBox`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_findPartOccurrencesInBox/index.html) |
| `scene.selectVisibleParts` | [`scene.getVisiblePartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_getVisiblePartOccurrences/index.html) |

### ⚠️ RENAMED TYPES

| Previous | New |
| --- | --- |
| `polygonal.DressedPolyList` | [`polygonal.SubmeshList`](/content/documentations/studio/2025.4/apidoc/python/polygonal.SubmeshList.html#polygonal_SubmeshList/index.html) |
| `polygonal.DressedPoly` | [`polygonal.Submesh`](/content/documentations/studio/2025.4/apidoc/python/polygonal.Submesh.html#polygonal_Submesh/index.html) |
| `algo.SmartHiddenType` | [`algo.InnerOuterOption`](/content/documentations/studio/2025.4/apidoc/python/algo.InnerOuterOption.html#algo_InnerOuterOption/index.html) |

### ❌ REMOVED FEATURES

- Measurement Tool
- Advanced Search
- Plugin Editor

### ❌ REMOVED FUNCTIONS

- `algo.combineMeshes`: _Use [`algo.combineMaterials`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_combineMaterials/index.html) and [`scene.mergePartOccurrences`](/content/documentations/studio/2025.4/apidoc/python/scene.html#scene_mergePartOccurrences/index.html) to achieve the same result_
- `algo.deletePolygonalWeightAttribute`
- `algo.destroyElements`
- `algo.flattenUV`
- `algo.getEdgePolygons`
- `algo.getEdgeVertices`
- `algo.getEdges`
- `algo.getFreeEdges`
- `algo.getFreeVertices`
- `algo.getNormal`
- `algo.getPatches`
- `algo.getPolygonEdges`
- `algo.getPolygonVertices`
- `algo.getPolygons`
- `algo.getTessellationBoundaries`
- `algo.getTextureCoordinates`
- `algo.getVertexCoordinates`
- `algo.getVertexEdges`
- `algo.getVertexPolygons`
- `algo.getVertices`
- `algo.getVisiblePolygons`
- `algo.invertElements`
- `algo.relaxUV`
- `algo.retessellate`: _Use [`algo.tessellate`](/content/documentations/studio/2025.4/apidoc/python/algo.html#algo_tessellate/index.html) instead_
- `algo.smoothUV`
- `algo.stitchUV`
- `algo.toEditableMesh`
- `algo.toStaticMesh`
- `cad.addToModel`
- `cad.createBoundedCurve`
- `cad.getBoundedCurveDefinition`
- `cad.getClosedShellOrientedDomains`
- `cad.getModelDomains`
- `cad.getOpenShellOrientedDomains`
- `cad.setPrecision`
- `core.addPreset`
- `core.executeCommand`
- `core.exportFunctionDialogScreen`
- `core.exportPresets`
- `core.generateHTMLDocumentation`
- `core.getEntityTypeFromString`
- `core.importPresets`
- `core.isFloatingLicense`
- `core.removeAllPresets`
- `core.removePreset`
- `core.savePreset`
- `core.updateDocumentation`
- `core.askYesNo`
- `core.choose`
- `core.askString`
- `core.updateDocumentation`
- `core.message`
- `io.exportSceneToDTPlatform`
- `io.exportSceneToReflect`
- `io.importSceneFromDTPlatform`
- `scene.selectPartsFromNoShow`

### ❌ REMOVED TYPES

- `algo.EdgeListList`
- `algo.EdgeList`
- `algo.ElementList`
- `algo.PatchList`
- `algo.Patch`
- `algo.PolygonListList`
- `algo.PolygonList`
- `algo.UVCoordList`
- `algo.UVCoord`
- `algo.VertexListList`
- `algo.VertexList`
- `core.Regex`: _Changed from struct to [`core.String`](/content/documentations/studio/2025.4/apidoc/python/core.String.html#core_String/index.html)_
