Browse our Products

Aspose.3D for .NET 24.3 Release Notes

Improvements and Changes

KeySummaryCategory
THREEDNET-1514Write more code examples o cover more methods and types.Task
THREEDNET-1523Optimize mesh causes distortionTask
THREEDNET-1516Model generated by SweptAreaSolid should not be flatBug fixing
THREEDNET-1517Metallic map and roughness map are not present when I am converting fbx to glbBug fixing

API changes

Added members to class Aspose.ThreeD.Entities.Mesh:

        /// <summary>
        /// Optimize the mesh's memory usage by eliminating duplicated control points
        /// </summary>
        /// <param name="vertexElements">Optimize duplicated vertex element data</param>
        /// <param name="toleranceControlPoint">The tolerance for control point, default value is 1e-9</param>
        /// <param name="toleranceNormal">The tolerance for normal/tangent/binormal default value is 1e-9</param>
        /// <param name="toleranceUV">The tolerance for uv, default value is 1e-9</param>
        /// <returns>New mesh instance with compact memory usage</returns>
        /// <seealso href="https://products.aspose.com/3d/tutorial/deduplicate-mesh-data">Tutorial - deduplicate mesh data</seealso>
        public Mesh Optimize(bool vertexElements, float toleranceControlPoint = 1e-9f, float toleranceNormal = 1e-9f, float toleranceUV = 1e-9f)

The new method allows you to control the tolerance for control point, normal and UV.

Added members to class Aspose.ThreeD.Formats.FbxLoadOptions:

        /// <summary>
        /// Gets or sets whether to enable compatible mode.
        /// Compatible mode will try to support non-standard FBX definitions like PBR materials exported by Blender.
        /// Default value is false.
        /// </summary>
        public bool CompatibleMode { get; set; }

FBX doesn’t support PBR material, different exporter uses different definition for storing PBR material’s parameters, this parameter allows you to reconstruct PBR material as much as possible.

Added members to class Aspose.ThreeD.Utilities.FileSystem:

        /// <summary>
        /// Initialize a new <see cref="FileSystem"/> that only access local directory.
        /// All file read/write on this FileSystem instance will be mapped to specified directory. 
        /// </summary>
        /// <param name="directory">The directory in your physical file system as the virtual root directory.</param>
        public static FileSystem CreateLocalFileSystem(string directory)

        /// <summary>
        /// Create a memory-based file system which will maps the read/write operations to memory.
        /// </summary>
        public static FileSystem CreateMemoryFileSystem(IDictionary<string, MemoryStream> files = null)

        /// <summary>
        /// Create a dummy file system, read/write operations are dummy operations.
        /// </summary>
        public static FileSystem CreateDummyFileSystem()

        /// <summary>
        /// Create a file system to provide to the read-only access to speicified zip file or zip stream.
        /// File system will be disposed after the open/save operation.
        /// </summary>
        /// <remarks>
        /// This is a read-only file system, so no write operations are supported.
        /// </remarks>
        public static FileSystem CreateZipFileSystem(Stream stream, string baseDir = "/")

        /// <summary>
        /// File system to provide to the read-only access to speicified zip file or zip stream.
        /// File system will be disposed after the open/save operation.
        /// </summary>
        public static FileSystem CreateZipFileSystem(string fileName)

These methods provide quick ways to create built-in FileSystems for you.

Sample code:

    var inputFile = "input.fbx";
    var format = FileFormat.Detect(inputFile);
    //create a load options instance and specify a local file system
    var opt = format.CreateLoadOptions();
    opt.FileSystem = FileSystem.CreateLocalFileSystem("textures/");
    //load the file
    var scene = Scene.FromFile(inputFile, opt);

Removed members from class Aspose.ThreeD.Utilities.FVector2:

        float x{ get;set;}
        float y{ get;set;}

These interfaces are removed by schedule.

Removed members from class Aspose.ThreeD.Utilities.FVector3:

        float x{ get;set;}
        float y{ get;set;}
        float z{ get;set;}
        public static readonly Aspose.ThreeD.Utilities.FVector3 UnitScale;

These interfaces are removed by schedule.

Removed members from class Aspose.ThreeD.Utilities.FVector4:

        float x{ get;set;}
        float y{ get;set;}
        float z{ get;set;}
        float w{ get;set;}

These interfaces are removed by schedule.

Removed members from class Aspose.ThreeD.Utilities.Quaternion:

        double x{ get;set;}
        double y{ get;set;}
        double z{ get;set;}
        double w{ get;set;}

These interfaces are removed by schedule.

Removed members from class Aspose.ThreeD.Utilities.Vector2:

        double x{ get;set;}
        double y{ get;set;}

These interfaces are removed by schedule.

Removed members from class Aspose.ThreeD.Utilities.Vector3:

        double x{ get;set;}
        double y{ get;set;}
        double z{ get;set;}
        public static readonly Aspose.ThreeD.Utilities.Vector3 Origin;
        public static readonly Aspose.ThreeD.Utilities.Vector3 UnitScale;
        public static readonly Aspose.ThreeD.Utilities.Vector3 XAxis;
        public static readonly Aspose.ThreeD.Utilities.Vector3 YAxis;
        public static readonly Aspose.ThreeD.Utilities.Vector3 ZAxis;

These interfaces are removed by schedule.

Removed members from class Aspose.ThreeD.Utilities.Vector4:

        double x{ get;set;}
        double y{ get;set;}
        double z{ get;set;}
        double w{ get;set;}

These interfaces are removed by schedule.