Reference/Release Notes/2.91/IO

= Blender 2.91: IO & Overrides =

Alembic & USD Export: Invisible Objects
The Alembic and USD exporters now support exporting invisible objects (Alembic:, USD: ). Both exporters now write a 'visibility' property that reflects whether the object is visible or invisible. Note that this uses the Global Viewport Visibility (USD) and Render Visibility (USD & Alembic) properties, and not the 3D Viewport visibility. The location of the written property in the exported file is different for Alembic and USD, due to file format differences:
 * Alembic supports values "hidden", "inherited", and "visible". Blender will only write "hidden" or "visible", depending on the visibility of the object in render mode. The property is written to the XForm in the Alembic file.
 * USD only supports values "hidden" and "inherited"; children of a hidden object are always also hidden. Because Blender does support hiding a parent without hiding the children, the visibility property is written to the geometry node in the USD file, and not to the transform node.

Alembic Export: Instances
The Alembic exporter is now writing duplicated object data as Alembic instances. This is used when the objects are instances, for example when duplicated by a particle system or instanced by the duplication system (collection-duplicating empties, vertex/face duplis, etc.). This instancing support is still limited, in the sense that only object data is instanced and all transforms are still written explicitly. Blender's Alembic importer has no understanding of these Alembic instances yet, and will thus happily duplicate the data on import. USD's Alembic plugin seems to have problems understanding the instancing, and there might also be other software with similar issues. Because of this, instancing can be turned off in the exporter (it's on by default).

Alembic Export: Custom Properties
The Alembic exporter now can optionally export Blender's custom properties. The export of custom properties is enabled by default, and can be disabled from the export options. The following custom property types are supported:


 * Numbers (`int`, `float`) and strings. These are exported as arrays of a single element, so `47` will be exported as `[47]` to Alembic, and `"Agent"` to `["Agent"]`. This matches the behaviour of many other DCCs.
 * Lists of numbers and strings. These are exported as-is, so `[327, 47]` is exported as `[327, 47]`.
 * Matrices and nested arrays of numbers. These are flattened into one long list, so a 3x2 matrix of numbers will become a list of 6 numbers. Similarly, nested lists `1, 2, 3], [4, 5], [6` will be exported as `[1, 2, 3, 4, 5, 6]`.
 * Numbers can be animated as well.

Here is an example file that contains the above, both animated and non-animated:

Alembic Import: Vertex Interpolation


Alembic stores mesh samples at specific time keys; when a frame in Blender maps to a timecode between two samples, Blender will interpolate the mesh vertex positions. This interpolation only happens when the mesh has a constant topology, but sometimes this was not detected properly when the vertices change order, but the number of mesh elements remains the same. This would result in a mesh with jumbled up vertices. It is now possible to disable vertex interpolation per object.

Alembic Import: Animated Vertex Colors on static mesh
If the mesh was constant, no check was done if there were animated vertex colors and thus creation of a MeshSequenceCache modifier was skipped, this is now supported

Importer

 * Manage KHR_materials_unlit extension
 * Permit missing texture.source
 * Select all (and only) the imported objects
 * Convert glTF meters to the units of the Blender scene
 * Import grayscale emissiveFactor as Emission Strength (new principled socket)
 * Use bpy.utils.escape_identifier to escape names for action paths
 * Fix for material_index/material slots
 * Restore setting extra to mesh custom properties
 * Better error messages when loading files
 * Avoid traceback on non valid file with empty primitive tab
 * Handle limit for vertex color and uv layers in importer
 * Refactoring
 * Performance

Exporter

 * Manage KHR_materials_unlit extension
 * Always export texture samplers
 * Allow user extension in asset
 * Materials: export factors from MULTIPLY nodes
 * Detect when a file will be overwritten
 * Ignore muted node when checking tree
 * Manage basic color when shader tree is not used
 * Manage emission strength in materials
 * Avoid zero normals when degenerate tris
 * Fix UVMap export when ORM are using different maps
 * Option to export placeholder of materials
 * Don't mess with normals when doing Apply Modifiers
 * Fix for material_index/material slots
 * Filtering of exported nodes
 * Refactoring
 * Performance

Library Overrides

 * 'Resync' operation was added to the Outliner (to re-generate an override when relationships between IDs are changed in library .blend file),.
 * 'Delete' and re-link to linked data operation was added to the Outliner (to fully get rid of an override hierarchy and relink its usages to the lib-linked data-blocks instead),.
 * Support insertion of items into py-defined IDProp-based RNA collections.
 * An operator was added to convert proxies to library overrides.
 * More data has been made overridable:
 * Armature data.

Library Linking

 * Link and Append now create object instances when linking object-data directly such as meshes, curves... etc.

Handling of shading in add-ons importers
These changes affect potentially all add-ons using the node shader wrapper featured by Blender to help conversion between old 'fixed' shading type and modern nodal one (including OBJ and FBX IO).
 * Textures used as transparency input are now linked to the BSDF shader through their Alpha output, and not their Color output anymore.

File Loading

 * Faster loading of large old files.