Aspose.3D for .NET 21.1 Release Notes

Improvements and Changes

KeySummaryCategory
THREEDNET-784Add support of USDC formatNew feature
THREEDNET-773Add material support for DXF fileImprovement
THREEDNET-797Add support for .net 5.0Improvement
THREEDNET-803Improve ComboBox in web renderer.Improvement
THREEDNET-795Obj to u3d conversion - missing textureBug fix
THREEDNET-801The implementation of camera’s orthographic projection is incorrectBug fix
THREEDNET-783Map bitmap to triangles from GLB.Bug fix
THREEDNET-802Draco/glTF Files used prediction degree algorithm will failed to import.Bug fix
THREEDNET-804Aspose.3D rendering does not work on some integrated GPUBug fix

API changes

There’s two major changes in 21.1,

  • Renderer’s performance improved by separating the preparation and render, also fixed some rendering related bugs.
  • Added support of USDC import

Added class Aspose.ThreeD.Render.IRenderQueue

An IRenderQueue instance will be passed to EntityRenderer when renderer is trying to render something, the EntityRenderer will need to prepare for the hardware resources used for rendering and add the render tasks to the render queue in EntityRenderer.PrepareRenderQueue

Removed class Aspose.ThreeD.Render.IRenderable

This is an obsoleted interface and was useful for a long time, it’s safe to remove this.

Added new members to class Aspose.ThreeD.FileFormat:

        /// <summary>
        /// Gets the extension names of this type.
        /// </summary>
        public string[] Extensions{ get;}

        /// <summary>
        /// Universal Scene Description
        /// </summary>
        public static readonly Aspose.ThreeD.FileFormat USD;

Some formats like USD, GLTF may contains more than one extensions, we introduced a new property to get all extensions.

Refactored class Aspose.ThreeD.Render.EntityRenderer:

        public void PrepareRenderQueue(Aspose.ThreeD.Render.Renderer renderer, Aspose.ThreeD.Node node, Aspose.ThreeD.Entity entity)

Has been changed into two functions:

        /// <summary>
        /// Prepare rendering commands for specified node/entity pair.
        /// </summary>
        /// <param name="renderer">The current renderer instance</param>
        /// <param name="queue">The render queue used to manage render tasks</param>
        /// <param name="node">Current node</param>
        /// <param name="entity">The entity that need to be rendered</param>
        public void PrepareRenderQueue(Aspose.ThreeD.Render.Renderer renderer, Aspose.ThreeD.Render.IRenderQueue queue, Aspose.ThreeD.Node node, Aspose.ThreeD.Entity entity)
        /// <summary>
        /// Each render task pushed to the <see cref="IRenderQueue"/> will have a corresponding RenderEntity call
        /// to perform the concrete rendering job.
        /// </summary>
        /// <param name="renderer">The renderer</param>
        /// <param name="commandList">The commandList used to record the rendering commands</param>
        /// <param name="node">The same node that passed to PrepareRenderQueue of the entity that will be rendered </param>
        /// <param name="renderableResource">The custom object that passed to IRenderQueue during the PrepareRenderQueue </param>
        /// <param name="subEntity">The index of the sub entity that passed to IRenderQueue</param>
        public virtual void RenderEntity(Renderer renderer, ICommandList commandList, Node node, object renderableResource, int subEntity);

In the old implementation, the hardware resources used by rendering created during the PrepareRenderQueue stage, may cause some problems in some drivers.

So we separate the preparing and rendering, and optimized some internal caches.

Obsoleted member removed from class Aspose.ThreeD.Render.RenderFactory:

        public Aspose.ThreeD.Render.IRenderWindow CreateRenderWindow(Aspose.ThreeD.Render.RenderParameters parameters, System.IntPtr handle)

This removal was scheduled, and this obsoleted function has a replacement with same name.