What's New in MotionBuilder 2025
Welcome to MotionBuilder 2025! This release introduces a new USD Plug-in, alongside various refinements to streamline workflows and cater to developer needs.
See below for all of the updates and more.
USD Plug-in for MotionBuilder
This release of MotionBuilder includes support for loading, displaying and interacting with static OpenUSD Stages. Animators can now load a USD Stage into the viewport and animate in context without having to import large scenes. Scripters can interact with the stage via Python. See USD for MotionBuilder.
It is now possible to lock a Global/Take time mark
When locked, the time mark cannot be moved on the timeline by dragging it. To lock a time mark, you can either double-click on the time mark which will open up the time mark dialog, or by using the timeline contextual menu, which has been redesigned to better support the new feature. When the time mark is locked, a new lock icon is shown on the right side of the time mark. A locked time mark is still movable through the SDK.
New shortcut keys to change current take
Users can now quickly change takes using a new set of shortcuts keys.
The default shortcut keys are:
- Shift + Ctrl + Up: Go to first take;
- Shift + Ctrl + Down: Go to last take;
- Shift + Up: Go to previous take;
- Shift + Down: Go to next take.
New shortcut key for File > Save As
The Ctrl+Shift+S shortcut key has been assigned to the File > Save As operation. In a keyboard config, this action can be found as the 'action.global.save_as’ action name.
Ability to 'Delete' key is now supported in the Navigator
The 'Delete' key is now supported in the Navigator. Once pressed, it behaves the same as the Navigator contextual menu > Delete > Confirm menu item.
A message box will now show a new "Mute All" button to allow quicker loading without user interaction
When a Relation Constraint box was not created during a scene load, likely due to a missing plug-in, a message box would pop-up for each non-created box. The message box is now showing a new "Mute All" button to allow muting all the other similar message boxes for the scene being loaded.
New method of working with multiple selected clips
It is now possible to stretch multiple selected clips at once in Loop mode within the Story Tool.
New message box if Perforce is taking longer to load
MotionBuilder was slowed down on startup when trying and failing to connect to a Perforce server defined somehow on the user system. MotionBuilder 2025 will now display a new message box informing the user why the slowdown occurred and if MotionBuilder should skip trying to detect Version Controls managers on next startups.
Suppress warning "Joints must be arranged in a straight line"
A new property on the Spline IK constraint has been added, named "Ignored Misaligned Joints Warning", which can be used if users think it safe to do so.
Copy Python code from the Python Editor to 3rd-party application
When copying Python code from the Python Editor and pasting into some external software (ie. Microsoft Outlook), the pasted code would be all white. This is no longer the case and pasting code from MotionBuilder will work as expected.
New preference "Strict File Conformity Checks" has been introduced in the Loading section
Some meshes were missing some data (e.g.: their UV coordinates) once loaded within MotionBuilder. A new preference has been introduced in the Loading section, named "Strict File Conformity Checks". When turned off, this will allow users to get the legacy import behavior, which will not test the validity of the data being read and will allow data inconsistencies and possibly lead to instability.
When the new preference is turned on, and data inconsistency has been detected, a new message dialog is shown after the FBX file is loaded to inform the user the loaded scene may be incomplete.
A new config has also been introduced related to this new change:
Application.txt
[SaveLoad]
StrictFileConformityChecks = Yes;
The FBX SDK will test the data conformity that is read and remove data inconsistencies that could lead to crashes (Default: Yes) (Yes/No).
New variable which emails specific user after crash
On Windows, a new environment variable named MOTIONBUILDER_CRASH_EMAIL_RECIPIENT has been introduced to override the CrashReport > 'e-mail recipient' config value available in the users Application.txt file.
Introduction of the pyfbstandalone module
The mobupy application is now starting faster than before. Previously, MotionBuilder libraries would load when starting mobupy. This was not always the expected behavior, and could potentially lead to performance issues when using multiple instances of mobupy. To start MotionBuilder within mobupy now, a new module named pyfbstandalone has been introduced. Before interacting with the pyfbsdk module, the pyfbstandalone module must be initialized. See example below.
# The following example shows how to interact within mobupy
# At this stage, mobupy is just launched
# MotionBuilder is not launched yet, but python is usable
>>> import sys
>>> print( sys.platform )
# At this stage, one could need to interact with MotionBuilder, let's initialize it
>>> import pyfbstandalone
>>> pyfbstandalone.initialize()
# At this stage, MotionBuilder is ready to interact with
>>> import pyfbsdk
>>> print( pyfbsdk.FBSystem() )
# At this stage, one is done with mobupy, let's exit
>>> exit()
New 'python_sys_path' functionality added
The support for a new "python_sys_path: " line under a module definition has been added for adding paths to the Python sys.path. As opposed to the "python: " line that does add paths to the Python sys.path and execute the Python files on the given paths, the "python_sys_path: " line does not execute the Python files on the given paths.
Furthermore, the order of the Python sys.path has been changed a bit to now follow this order:
- Motionbuilder factory paths;
- User config Python StartupPath;
- The module "python_sys_path: " paths
- The module "python: " paths
- The default sys.path values
A new Python sample script
FreezeLocalRotation.py example is now available in MotionBuilder via the Asset Browser > Scripts > Samples > Math > FreezeLocalRotation.py file. This sample script shows how to transfer the local rotation properties of a hierarchy of objects to their pre-rotation properties, as a way to “freeze” the local rotation of those objects.