Hi.
I'm using AnyPortrait for my project. I have read all documentation and have found the solutions to almost all my needs. But I still not understand the main goals for mesh groups and root units. What those things have been made for? How do I use them right way and what kind of problems they can solve?
Would be great if you add more detailed explanation of those things to the documentation.
Thank you.
Hello.
Thanks a lot for that detailed explanation.
Hi!
We are only just discovering this post, so we are responding very late.
Our team would like to express our deepest apologies for this fault.
As you asked, Mesh Group and Root Unit seem to operate at almost the same level.
In fact, the Root Unit seems unnecessary from the user's perspective.
However, from an internal system perspective, there are benefits to be gained by classifying these two concepts.
The following explanation is from the perspective of the internal system, so please understand in advance that we have not explained it in detail.
There are many system benefits that can be achieved with the Root Unit, but the biggest ones are the following two features.
The first feature is that “unused Mesh Groups are not baked”.
Most users make all the Mesh Groups and animations they create work in the game.
However, some users may need to create many Mesh Groups and bake only some of them.
Mesh Groups that do not become Root Units are not subject to Bake.
In particular, when using “Optimized Bake”, the “Bake only necessary items” function is of great help in optimization.
The second characteristic is that “Root Units are classified by index.”
This is a feature that users cannot perceive, but the internal system actually refers to most data by ID or Index rather than Name.
This is the basic optimization strategy taken by systems that need to be updated with high performance.
While designing AnyPortrait, we made the Root Unit separated by Index and instead removed the Name property altogether.
(Conversely, Mesh Group is implemented to be distinguished by Name rather than Index.)
In addition to the Index, the goals of the system for referencing these two data in various aspects are as follows.
- Mesh Group is implemented and provided as a “data structure that is easy for users to edit.”
- Root Unit is implemented and operates as a “data structure for efficient operation in-game.”
In summary, Root Unit is the data structure only for Bake and Runtime.
To add background explanation, this is actually a remnant of AnyPortrait being changed from its initial design.
AnyPortrait's initial design was a procedural wizard tool that "Completes a character by applying various functions to the root unit."
And as the concept of "Modifier" was added later during the development process, the role of the Mesh Group was significantly expanded.
During this process, some functions were deleted and some had their roles reduced.
Some data, such as "Face", which is responsible for facial expression, has been deleted, and the role of the "Root Unit" has been reduced.
So Root Unit focused only on the most basic functionality: “running in-game.”
(As a side note, the "Face" concept has been changed to "Morph modifier".)
As such, because this is a story internal to the system, we did not cover it much in the manual.
However, there may be other users who are curious about the Root Unit like you, so we will write a brief document after updating.
Thanks for your comment.