Skip to content

Non-destructive export / dual-state #303

@met4citizen

Description

@met4citizen

As I understand it, MPFB currently uses a single character state for both authoring (character design) and delivery (export to formats such as glTF/GLB).

The practical issue with this approach is that exporting requires destructive and irreversible transformations (e.g. baking modifiers, collapsing targets, simplifying materials, removing Blender-only constructs). Once these steps are applied, the character is no longer in a clean design state.

In practice this makes iteration costly: First, the user designs a character in MPFB. To preview the character in a target environment (e.g. game engine, WebGL), the user must now destructively convert the model into an exportable form. The user then typically applies additional delivery-specific customization (naming conventions, rig changes, final material adjustments, etc.). Only after this can the character be exported.

If, after testing in the target environment, the user wants to adjust the design (e.g. proportions, facial features), they must return to the first step and repeat both the destructive conversion and the delivery customization steps. With multiple iterations, this becomes repetitive and error-prone.

A possible solution might be to separate the character into two linked representations: A design version (Full MPFB rig; All modifiers, drivers, and parametric controls; Maximum editability) and an export version (Baked geometry; Mesh-specific shape keys; Simplified glTF-compatible materials; No Blender-only constructs). This separation is, I think, common in production pipelines, where a non-destructive source asset generates one or more delivery assets.

In this setup the design version remains authoritative. It could always be the same regardless of the export requirements, which could potentially simplify things a lot. The export version, on the other hand, is generated only once based on user-selected specs (topology, rig type, material system, triangle count, etc.) and automatically updated whenever the design version changes and/or is refit. Most delivery-specific customization (naming, extra bones, custom materials, etc) could persist on the export version across iterations instead of having to be redone each time.

From a user perspective, the export version would simply be another object or collection that can be shown/hidden. Switching between them would be easy. And, when the export version looks correct, it can be exported directly.

I want to emphasize that this is meant as a conceptual idea, not a concrete implementation proposal. Most likely this has been proposed/discussed at some point already. Also note that I am new to MPFB and do not have a deep understanding of its internal architecture. There may be design constraints that make this undesirable or infeasible to implement. However, from a user and pipeline perspective, a non-destructive export and dual-state workflow could significantly reduce friction when targeting glTF/GLB and similar runtime formats.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions