MotionBuilder 2014
Software Dependencies and Upgrades
- Supported Operating Systems – Microsoft Windows 7.0 or later (64-bit only), Red Hat
Linux 6.2 (64-bit only), and Fedora Core 14 (64-bit only).
- Support for hardware accelerated OpenGL 2.1 or later for MotionBuilder to run properly.
- Upgraded to QT 4.8.2 from QT 4.7.1. QT 4.8.2 is modified by Autodesk and also used
in Maya 2014.
- Upgraded to Python 2.7.3 (also used in Maya 2014) from Python 2.6.4.
- QT Python wrapper PySide (1.1) is packaged and shipped along with the application
for easy UI scripting.
- FBX SDK upgraded to 2014.0.1 from 2013.0.0.
Plug-in Development Environment
- Build and Compilation Platforms
- Microsoft Windows 7.0 or later (64-bit only) – MotionBuilder 2014 and the distributed
plug-ins are still compiled using the Visual Studio 2010 (Service Pack 1).
- GCC4.4.3 or later is required to compile the ORSDK samples in Linux.
- Environment Variables
- MOTIONBUILDER_PYTHON_STARTUP – This environment variable can contain a list of directories, which are separated
by a colon (:) in Windows and a semicolon (;) in Linux. The list of directories contained in this environment variable determines
the location from which MotionBuilder loads the Python startup scripts. See the FBSystem::GetPythonStartupPath() function reference. In MotionBuilder 2013, this environment variable can only contain
a single directory path.
- MOTIONBUILDER_SAVELOAD_EMBEDMEDIAS – This new environment variable is used for overriding the corresponding setting
in a configuration file. Any other value except Yes is considered as false.
- MOTIONBUILDER_SAVELOAD_SHOWEMBEDMEDIASOPTION – The ShowEmbedMediasOption preference item can be used in the SaveLoad section of a configuration file to control whether the checkbox appears in the Save dialog box. This new environment variable can also be
used for overriding the corresponding setting in a configuration file. Any other value
except Yes is considered as false.
- The SDK plug-in developers can now access command line arguments within a pair of
delimiters (--sdk-begin & --sdk-end). See the FBSystem::GetCommandLineArgs() function reference.
New Classes, Methods, Properties, and Other Improvements
This section lists the changes in the SDK according to the relevant categories.
MotionBuilder emphasizes consistency between the C++ (ORSDK) and Python (pyfbsdk)
layers to achieve a similar interface. Most of the SDK changes apply to both C++ and
Python layers, except in some cases where it is not possible because of language limitations.
Variation between ORSDK and pyfbsdk include the following:
- Multi-thread python is not supported in pyfbsdk, so no callbacks from background thread
are exposed in the past.
- In some cases, the direct memory addresses to the internal C/C++ objects are returned
to allow high-performance operations or bridge certain workflow between different
Python modules such as the following:
Animation and Characters
- These new classes provide SDK access to the flexible mocap workflow: FBControlSetState, FBEffectorSetState, and FBCharacterMarkerSet.
- The FBCharacterInputType enum type has a new enumerator (kFBCharacterInputMoCap).
- New argument (pResetOrientation) in the function FBActor::GetCurrentSkeletonState() – When it is set to true, all rotations in the state is reset to characterization
values. For example code, see <yourinstallationfolder>/bin/config/Scripts/Samples/Character/CharacterMarkerSetFromActor.py.
- The following functions and properties are added to the FBCharacter class.
- GetGoalModel() – To get the goal model associated with each body part in the character marker set
of the character.
- CreateCharacterMarkerSet() – To create the character marker set.
- GetCharacterMarkerSet() – To obtain the input character marker set.
- GetControlSetEvaluationCache() – To return the evaluation cache that is dedicated for control set and evaluation
information.
- GetEffectorEvaluationCache() – To return the evaluation cache that is dedicated for effector set and evaluation
information.
- New read/write properties LockX, LockY, and LockZ lock character skeleton in place on X, Y and Z axis respectively.
- Following are the changes in the FBCharacterSolver class:
- You can now query or set the current character’s floor contact visibility using these
new functions: FBGetCharacterFloorContactsVisibility() and FBSetCharacterFloorContactsVisibility(). For finger visibility, you can use FBGetCharacterFingerTipsVisibility() and FBSetCharacterFingerTipsVisibility().
- The new FBPlotPopup::EnablePlotLockedProperties read/write property specifies whether to enable the Plot Locked Properties option
for popup.
- The new data member FBPlotOptions::mPlotLockedProperties specifies whether to plot locked properties.
- Previously, to create a take and make it accessible in the Transport control using
the SDK, you need to use FBTake* lTake = FBSystem::ThenOne().CurrentTake->CopyTake( "new take" ). Now, you can do this using FBSystem::TheOne()::Scene.Takes.Add( new FBTake( "new take" )).
- Other improvements in the FBTake class are the following:
- New argument (pMergeLockedProperties) in the MergeLayers() function to specify whether the properties need to be merged even when they are locked.
- New argument (pOnLockedProperties) in the ClearAllProperties() function to specify if clear operation will be performed on locked properties.
- New PlotTakeOnSelected(FBPlotOptions* pPlotOptions) function to plot the animation on selected models.
- New PlotTakeOnSelectedProperties(FBPlotOptions* pPlotOptions) function to plot the animation on selected properties.
- Following new enumerators in the FBTangentMode class:
- kFBTangentModeTimeIndependent – This is calculated based upon the slope between the previous and next key values.
In the UI, it is identified as Spline.
- kFBTangentModeClampProgressive – Flattens the tangent handles when the key value goes over or under the previous
and next key values. In the UI, it is identified as Auto.
- Following changes in the FBFCurve class:
- Added new parameters (FBInterpolation pInterpolation=kFBInterpolationCubic and FBTangentMode pTangentMode=kFBTangentModeAuto) in the FBAnimationNode::KeyAdd() function.
- New FBEvaluateInfo::GetBufferID() function is useful for the custom constraint plug-in development with multiple threading
evaluation support.
- Following are the changes in the FBProperty class and its descendants:
- A set of functions related to the property locking feature are added to the FBProperty class:GetSubMemberCount(), AllowsLocking(), HasSomethingLocked(), IsLocked(), IsMemberLocked(), SetLocked(), and SetMemberLocked(). Locking a property or any number of its channels prevents the modification of animation
in the property. You cannot add, remove, or edit any key on any layer of a locked
property or channel. Also, you cannot change the current value of the property. However,
a locked property allows existing animation to flow through. The value of a locked
property can change through time as it is being driven by existing animation or constraints.
- The FBPropertyAnimatable class has two new functions: SetCandidate() and SetGlobalCandidate() that are useful for keying candidate.
- A set of new functions related to the property mute feature are added to the FBPropertyAnimatable class: AllowsMuting(), HasSomethingMuted(), IsMuted(),IsMemberMuted(), SetMuted(), and SetMemberMuted(). Muting an animatable property or its channels prevents animation from flowing through
the property or its channels. The value of a muted property or its channels is the
value upon muting, and does not change over time as it is being driven by existing
animation or constraints. You can still modify a muted property to add, remove, and
edit the existing keys.
- New FBConstraintManager::TypeCreateConstraint(const char* pName) function allows to create a constraint by name.
- New argument (FBTimeMode pTimeMode = kFBTimeModeDefault) in the FBPlayerControl::GetTransportFpsValue() function to specify the time mode whose frame rate will be returned.
- New functions added to the FBTimeCode class: GetRawSecond(),GetRawFrame(), and GetRawRate(). Additionally, the equality comparison operator function overload.
File IO and Reference
- New FBFileReference class provides the basic access to the file reference feature through various SDK
functions.
- New FBComponent::GetOwnerFileReference() function to get the owner file reference object.
- Changes to the FBScene class including the following:
- New GetScriptsPaths() function to get the path of all python script objects in a scene.
- New NamespaceGetOwnerFileReference() function to get the owner file reference object if the namespace originates from
file reference.
- New argument (pAsFileReference) in the NamespaceImport() function to specify whether to import the file as file reference.
- New argument (pAsFileReference) in the NamespaceImportToMultiple function to specify whether to import the file as file reference.
- Following new object list properties are added to allow easy access to certain type
of scene objects: CharacterMarkerSets, FileReferences, KeyingGroups, ModelSkeletons, and ModelOpticals.
- New global functions: FBMergeTransactionFileRefEditBegin() and FBMergeTransactionFileRefEditEnd() can be called in pair to improve the performance during multiple file merging process
with the file reference editing operation.
- Following are the changes to the FBFbxOptions class.
- New kFBOptionsContextSaveSelection enumerator in FBOptionsContext to save selection case.
- New SaveToString() function to serialize all options to a string.
- New SetFromString() function to set all options from a string.
- New UpdateRecentFiles read/write property to specify whether to update the recent file list.
- New FileReference read/write property to load/save scene as file reference.
- New FileReferenceEdit read/write property to specify whether to load/save the edits made to referenced
objects.
- New FileReferences read/write property to specify the handling of the file reference elements.
- The default value of KeepTransformHierarchy property is changed to False to ensure consistent behavior with SaveSelected operation using the File menu.
- New RemoveEmptyLayer property indicates whether to remove empty animation layers that are in additive
mode without child or parent.
- New ConsiderMuteSolo property considers the mute/solo settings to identify identical layer when merging.
- New FBFileMonitoringManager::OnFileChangeFileReference event callback property to monitor the change events for the referenced file.
- New argument (FBDataAsStringFlag pFlag = kFBDataAsStringUI) in the FBProperty::AsString() function to specify whether the returned string is used for UI display or persistent.
- A set of new object list property types are added that allows easy access to the same
type of objects in a scene.
Renderer and Viewport
- New FBRendererCallback class for the custom renderer feature. You can implement your complete custom rendering
solution by subclassing this class. For example code, see <yourinstallationdirectory>/OpenRealitySDK/Samples/shaders/CustomRenderer.
- New FBRendererCallbackLayout class is the base layout class that is inherited by the custom renderer configuration
UI.
- Following functions are added to the FBViewingOptions class:
- The IsInSelectionBufferPicking() function is the rendering routine during picking status with the GL selection buffer
method.
- The IsInColorBufferPicking() function is the rendering routine during picking status with the GL color buffer
method.
- The RenderCallbackPrefIndex() function gets the current render callback’s preference settings index.
- Following functions are added to the FBRenderOptions class:
- The IsIDBufferRendering() function gets the IDBuffer rendering request status (for display or picking).
- The GetViewerOptions() function gets the current viewer’s option.
- Following are the changes to the FBRenderer class:
- The new OGLSetupSceneLights() function is used to setup the scene lights in OpenGL (maximum of eight lights are
supported).
- The new GetLastPickInfoList() function returns the last picking info list in the current view pane.
- Following new properties are added:
- SelectionForceSnapPointsDisplay (read/write) – Force to show all feature points (pivots and others) on selected models
if true, ignore individual model's settings.
- RendererCallbacks (read/write) – List of renderer callbacks.
- RegisteredCallbackCount (read-only) – Registered renderer callbacks count.
- CurrentPaneCallbackIndex (read/write) – Current pane's renderer callback index.
- CurrentPaneCallbackPrefIndex (read/write) – Current pane's renderer callback preference index.
- AdvancedLightingMode (read/write) – Turn on/turn off the advanced lighting setting UI widgets.
- Changes to support area light type includes the following:
- Following are the new read/write properties in the FBLight class: AreaLightShape, InnerAngle, OuterAngle, EnableBarnDoor, LeftBarnDoor, RightBarnDoor, TopBarnDoor, and BottomBarnDoor.
- Following are the viewport picking related enhancements:
- New mSubItemIndex member variable added for sub item picking in the FBPickInfos class.
- New FBPickInfos::mNormal member variable allows you to query the normal direction in the world space of the
intersection point between the picking ray and model’s surface.
- New argument (pSubItemIndex) in the FBFindModelByUniqueColorId() function to pass out the sub-item index value. For example code, see <yourinstallationdirectory>/OpenRealitySDK/samples/miscellaneous/model_template.
- Changes to FBModel class includes the following:
- New UniqueColorId read-only property to provide the model’s unique color ID for OpenGL color ID buffer
based viewer picking.
- A set of new functions to support multiple sub-items per model/geo selection and picking
in OpenGL color buffer mode using the custom rendering routines: SetAdditionalUniqueColorIDCount() to request additional unique color IDs per model, GetAdditionalUniqueColorIDCount() to get additional unique color count, GetAdditionalUniqueColorID() to get additional unique color ID. For example code, see <yourinstallationdirectory>/OpenRealitySDK/Samples/miscellaneous/marker_template.
- The PushZDepthClipOverride() and PopZDepthClipOverride() functions are added to facilitate the custom render implementation to work with the
Z-depth HideFront selection tool.
- New read-write properties: PrimaryVisibility, CastsShadows, and ReceiveShadows added to control a model’s render state and shadow rendering policy, and to increase
rendering interop consistency with other DCC tools.
- Following are the changes in the FBCamera class:
- Two new enumerators are added to FBCameraMatrixType: kFBModelViewProj for a camera’s model-view-projection matrix, and kFBProjInverse for a camera’s projection inverse matrix.
- Added the WindowWidth, BackGroundTexture,ForeGroundTexture, and ViewShowName properties.
- Added the GetCameraMatrix() and InverseProjection() functions.
Geometry
- Following improvements in the FBGeometry class:
- New IsEditingEnabled() function to determine if geometry editing is enabled.
- A set of new functions for directly manipulating geometry position, normal, tangent,
bi-normal, color, UV, and material arrays: VertexArrayInit(), VertexArrayClear(), GetPositionsArray(), GetTangentsIndexArray(), GetTangentsDirectArray(), GetBinormalsIndexArray(), and GetBinormalsDirectArray(). For example code, see <yourinstallationdirectory>/bin/config/scripts/Samples/Geometry/VertexArrayManipulation.py.
- New read-only properties for tangent and bi-normal mapping/reference mode: TangentMappingMode, TangentReferenceMode, BinormalMappingMode, and BinormalReferenceMode.
- Several new functions are added to the FBMesh class for faster mesh creation using the SDK. For example code, see <yourinstallationdirectory>/bin/config/scripts/Samples/Geometry/VertexArrayManipulation.py.
- TriangleListAdd() for adding triangle list, TriangleStripAdd() for adding triangle strip, and PolygonListAdd() for adding polygon list.
- PolygonVertexArrayGet() to get the array of polygon vertex (index to control points).
- IsTriangleMesh() to determine if the mesh is composed entirely of triangles.
- PolygonMaterialIdGet() to get the material ID for a polygon’s index.
Model and Elements
- The FBGroup and FBSet classes can hold animatable properties and are now inherited from the FBBox class instead of the FBComponent class to be consistent with the other classes.
- Several changes to the FBHUDElement class and its subclasses including the following:
- The FBHUDElement class is now inherited from the FBBox and FBComponent class to support animatable properties.
- New FBHUDElement::Show read/write property to specify whether the HUD element will be displayed.
- New virtual functions: GetIntrinsicDimension(), DrawElement(), FbxStore(), and FbxRetrieve() to allow users to implement their own custom FBHUDElement type with persistent capability. For example code, see <yourinstallationdirectory>/OpenRealitySDK/Samples/miscellaneous/hudelement_template.
- New type of HUD elements: FBHUDBloopSlateElement and FBHUDTimelineElement.
- Following changes to the FBHUD class:
- The FBHUD class is now inherited from the FBBox and FBComponent class to support animatable properties.
- The EStockElement type now has new enumerators: eTextureElement, eBloopSlate, and eTimeline.
- Following changes to the FBModelPath3D class:
- Now each control point in the path corresponds to an animatable FBVector4d type property (with naming convention as Point_%d), which allows each control point to have keyframe animation, relation constrain
setup, or direct connection with model for attaching behavior.
- New PathLength read-only property to get the path’s length in centimeter (CM) and PathLengthInString for its string representation in the current choice of unit and precision.
- New read/write properties: PathLengthUnit, PathLengthShow, TextScale, TextBackground, PathEndCapStyle, and PathEndCapScale to specify the path and length label appearance in the viewport.
- Other changes to the FBModel class includes the following:
- New read/write properties: TranslationActive, TranslationMin, TranslationMax, TranslationMinX, TranslationMinY, TranslationMinZ, TranslationMaxX, TranslationMaxY, and TranslationMaxZ to access the translation limit information.
- New Transformable read/write property to indicate whether a model can be transformable in the viewer.
This has a default value of true.
- New IsEvaluationReady() function for querying the model's evaluation task status.
- New MatrixToRotation() and RotationToMatrix() functions allow the conversion between rotation Matrix to Euler Vector based on a
model's rotation order.
- New LRMToDof() and DofToLRM() functions allow the conversion between local rotation matrix to object space ration
vector.
- You can override the new ClosestRayIntersection() virtual function to determine the first intersection point's position and normal
between ray and model surface.
- Following new enumerators are added in the FBMarkerLook class:
- The new FBModelSkeleton::DrawLink property determines whether to draw a link to the parent node.
Application Framework
- Following changes to the FBSystem class:
- Following changes to the FBApplication class:
- New FlushEventQueue() function flushes event queue, and processes all pending events for the calling thread
until there are no more events to process. Useful for controlling main application
loop to perform special tasks. For example code, see <yourinstallationfolder>/bin/config/Scripts/Samples/Profiling/CreateProfilingEventsLog.py.
- A set of new functions related to the One-Click workflow:
- The OneClickSendAsNewScene() function to send the current scene as a new scene to the specified application (currently
supports Maya and 3ds Max only).
- The OneClickUpdateCurrentScene() function to send the scene to update the current scene in the specified application.
- The OneClickAddToCurrentScene() function to Send the scene and add it to the current scene in the specified application.
- The OneClickSelectPreviouslySentObject() function to select the object that was sent from MotionBuilder.
- The OneClickIsConnectedTo() function to return the identifier from the other application that is connected to
MotionBuilder.
- Following changes to the FBEvaluateManager class:
- New IsInteractiveMode() function to check if the application main loop is in interactive or offline rendering
mode.
- Enum FBGlobalEvalCallbackTiming has a new enumerator to allow registering per frame callbacks (global functions)
into the rendering pipeline.
- The kFBGlobalEvalCallbackSyn is invoked when both evaluation and rendering pipelines (or threads) are stopped.
Useful in some complicated scene change tasks to avoid race condition.
- The kFBGlobalEvalCallbackBeforeRender is invoked in rendering pipeline before any rendering tasks start (immediately after
clearing GL back buffer).
- The kFBGlobalEvalCallbackAfterRender is invoked in rendering pipeline after any rendering tasks are finished (just before
swapping GL back/front buffer).
- New event callback properties: OnEvaluationPipelineEvent, OnRenderingPipelineEvent, and OnSynchronizationEvent to allow registration of per frame callbacks function (with ICallback interface) into various critical timing, stages, and pipelines in the application
main loop.
UI
- The new FBWidgetHolder::WidgetCreate() virtual function can be overridden so that you have more flexibility in bridging
native QT UI with the MotionBuilder UI framework. You can also do this using Python.
For example code, see <yourinstalationdirectory>/bin/config/Scripts/UI/ToolNativeWidgetHolder.py.
- New FBVisualComponent::GetQWidgetAddress() function returns the memory address of the corresponding internal QWidget object.
- New FBApplication::UpdateAllWidgets() function to request UI refresh for all widgets.
- New FBComponent::UseCustomPropertyViewSet() virtual function can be overridden to indicate whether the subclass instance uses
the custom property ViewSet. For example code, see the ORSDK sample project in <yourinstallationdirectory>/OpenRealitySDK/Samples/miscellaneous/marker_template.
- New FBWebView class is a simple UI widget that can load a webpage. For code example, see <yourinstallationdirectory>/bin/config/Scripts/UI/WebView.py.
- The new FBPropertyViewList, FBPropertyViewDefinition, and FBPropertyViewManager classes provide ways to create new property views. For example code, see <yourinstallationdirectory>/OpenRealitySDK/Samples/constraints/CharacterSolver/HIK2014Solver and <yourinstallationdirectory>/bin/Scripts/Samples/Properties/PropertyViewManager.py.
- The new FBActionManager class enables you to query and modify the current interaction mode, for example,
switch to MotionBuilder, Maya, or 3ds Max keyboard.
Video and Image Sequence
- You can now subclass FBLayeredTexture to support custom blending and composition modes. For example code, see <yourinstallationdirectory>/OpenRealitySDK/Samples/miscellaneous/texture_template.
- New FBTexture::TextureOGLId property allows you to query its OpenGL texture object ID.
- New FBSystem::OnVideoFrameRendering event callback property is triggered when the scene is being off-line rendered into
video files before and after every frame.
- Struct FBVideoGrabOptions has new data members: mRendererCallbackIndex and mRendererCallbackPrefIndex to specify renderer callback and preference index.
- New FBImage::GetBufferAddress() function to access the image data buffer and allow modifications.
- New FBVideoCodecManager::RegisterExternalVideoFormat() function enables you to register any image/video file suffix which MotionBuilder
cannot recognize. However, it is the plug-in developer’s responsibility to load the
file into memory.
- New FBVideoOut::Online read/write property to control the video out and online status of the device.
- New FBVideoClipImage::ImageSequence read/write property that when set true tries to search for files in a folder to compose
an image sequence.
- Following changes to the FBStoryClip class:
- NewImageSequence read/write property to indicate whether to use Image sequence.
- New UseSystemFrameRate read/write property to indicate whether to always use the system frame rate.
- New FrameRate read/write property for frame rate value that is only effective when UseSystemFrameRate is false.
Miscellaneous
- New helper classes: HdlFBPlug and HdlFBPlugTemplate to handle dangling pointer issue of FBPlug and its subclasses. For example, see <yourinstallationdirectory>/OpenRealitySDK/Samples/tools/toolqttest.
- The trace and log mechanism is re-designed and improved. Now, you can set the trace
message level, redirect trace output to Python editor console, or even register external
trace output target. See the FBTraceSetLevel(), FBTrace(), and FBTraceWithLevel() functions.
- Improved the FBArrayTemplate class for commonly used date type (bool, int, float, double, and others) in fbsdk
library for convenient usage.
- Added copy constructor to the FBArrayTemplate class to support proper deep copy behavior and avoid potential crash in certain usage
scenarios.
- New argument (pClearFile) in the FBConfigFile::FBConfigFile(const char* pConfigFileName, bool pVirtualMode = false,
bool pClearFile = false) constructor function, and new arguments (pVirtualMode and pClearFile) in the FBConfigFile::FBConfigFile (const char* pConfigFileName, const char* pConfigFilePath,
bool pVirtualMode = false, bool pClearFile = false) constructor function to remove all existing content from the configuration file upon
opening.
- Added two math utility functions: FBMatrixToQuaternion() for getting a quaternion from a matrix and FBQuaternionToMatrix() for getting a rotation matrix from a quaternion vector.
- Following changes to the FBStringList class:
- New arguments (pCaseSensitive and pStartWith) in the Find() function to allow more flexible searching options.
- New argument (pSeparator) in the AsString() function to change the default string list separator.
- New argument (pSeparator) in SetString() function to choose a different string list separator.
- Overloaded assignment operator and copy constructor to support deep copy behavior.
- Python callbacks registered to FBPropertyEvent are unregistered automatically if they throw exception during runtime.
- New GetStatStart() and GetStatStop() functions in the FBProfiler class. For example code, see <yourinstallationdirectory>/bin/config/Scripts/Samples/Profiling/CreateProfilingEventsLog.py.
Deprecation
Removed APIs
The following APIs are either already deprecated in the previous releases, or never
worked as expected. They are removed in this release for a cleaner API.
- The FBFindModelByName() function.
- The following functions in the FBModelPath3d class: PathSetKeyLeftRightTangeant(), PathKeySetLeftTangeant(), PathKeySetRightTangeant(), PathKeyGetLeftTangeant(), PathKeyGetRightTangeant(), PatKeyGetLeftTangeantLength(), and PatKeyGetRightTangeantLength().
- The FBPlug::ConnectAt() function.
- The functions in the FBApplication class: FBXFileOpen(), FBXFileMerge(), FBXFileAppend(), and FBXFileSave().
- The FBTexture::Filename property. You can use FBTexture::Video instead to find out the source of the media.
- Starting from this release, the predefined pointer type for ORSDK C++ classes with
the H prefix is removed. You can use pointer suffix * directly. For example, HFBPlug is replaced with FBPlug*. This change is intended to facilitate the use of the documentation system, and to
be consistent with the rest. All the existing ORSDK sample projects are updated for
this change.
SDK Sample Changes
In MotionBuilder 2014, several ORSDK C++ sample projects and Python sample scripts
are updated to fix known bugs. Some SDK samples are newly created to demonstrate the
new capabilities.
New ORSDK C++ Sample Projects
The following ORSDK C++ sample projects that are added in the <yourinstallationfolder>/OpenRealitySDK/samples folder demonstrates the new extension capability introduced in MotionBuilder 2014.
- Importexport/FBXExtension – Demonstrates how to filter FBXSDK IO and implement custom reader/writer using FBXSDK
framework.
- Importexport/FBXExtension-Surface – Demonstrates how to perform custom material replacement on import/export routines
using FBXSDK framework.
- Tools/toolclipscene – This tool lists all story clips in the scene. When read-only animation clip is
chosen, it displays all nodes from its FBX SDK scene (shows how to link and access
FBX SDK elements).
- Miscellaneous/hudelement_template – Demonstrates how to create a custom HUD element.
- Miscellaneous/marker_template – Demonstrates how to create a custom marker type.
- Miscellaneous/texture_template – Shows how to create custom layered texture classes to support the user-defined
composition/blending modes.
- Shaders/CustomRenderer – Demonstrates how to implement a custom renderer within the MotionBuilder rendering
framework.
- Constraints/CharacterSolver/HIK2014Sovler – Demonstrates how to glue MotionBuilder with the 2014 version of HIK solver.
Changes in Other ORSDK C++ Sample Projects
The following ORSDK C++ sample projects have changed significantly to reflect the
new SDK functionality, or for fixing bugs.
- Constraints/CharacterSolver/HIK2013Solver – The connection between MotionBuilder and HumanIK has always been a point of weakness,
and this was mostly addressed in the 2014 release. Also, the Constraints/CharacterSolver/HIK45Solver sample project is removed.
- Miscellaneous/material_template – Added new code to demonstrate how to wrap ORSDK C++ Plugin to Python.
- Miscellaneous/model_template – Added new code to demonstrate how to implement sub-item picking behavior for custom
model using either selection buffer or color buffer approach with OpenGL.
- Tools/toolaudio and Tools/tool_template – Modified existing code to demonstrate how to use HdlFBPlugTemplate to avoid crash because of dangling pointer in certain workflows.
New Python Sample Scripts
The following python sample scripts that are added in the <yourinstallationdirectory>/bin/config/Scripts folder demonstrates the new scripting functionality in MotionBuilder 2014.
- BasicOperations/LockProperty.py – Shows how to lock the properties using the SDK.
- BasicOperations/PlotClearProperties.py – Shows plotting or clearing of locked properties.
- Samples/Character/CharacterMarkerSet.py – Shows how to convert an actor solver into a character marker set. It includes creating
skeleton from an actor, creating character, and characterizing a skeleton, creating
character marker set, querying marker setup from an actor, and applying it on a character
marker set, and changing solvers on the character.
- Samples/CharacterMarkerSetFromActor.py – Shows how to create a character marker set from an actor.
- Samples/Geometry/VertexArrayManipulation.py – Demonstrates the fast mesh creation by direct manipulation of vertex array data,
and how to interact with the CGFX shader through Python scripting.
- Samples/HUD/BloopSlate.py – Demonstrates the manipulation of the Bloop-Slate HUD element.
- Samples/HUD/Timeline.py – Demonstrates the usage of the timeline HUD element.
- Samples/Properties/PropertyViewManager.py – Shows how to create a new property view.
- Samples/Referencing/MBFileRefDemo.py – Demonstrates file referencing API with the UI created by pySide.
- Samples/Story/FBStoryFolder.py – Shows how to utilize the FBStoryFolder class to organize a story view.
- Samples/Story/ImageSequenceFrameRateChange.py – Demonstrates the ability to change the frame rate of an image sequence object.
- Samples/Story/VideoClip.py – Shows how to utilize the image sequence within a story video clip.
- Samples/Utilities/DebugMemoryLeak.py – Demonstrates how to use the object creation/deletion logging and trace for detecting
memory leak.
- Samples/Video/VideoInput.py – Shows how to setup a cube with a live video input.
- Samples/Video/VideoMemory.py – Demonstrates the usage of FBVideoMemory.
- Samples/Video/VideoOutput.py – Shows how to put video output online.
- UI/ToolNativeWidgetHolder.py – Creates a tool that demonstrates how to embed native QT widgets created by PySide
into MotionBuilder UI framework.
- UI/WebView.py – Creates a tool with a FBWebView showing the Autodesk web page.
- OpenRealitySDK/Scripts/CustomMaterialMarker.py – Demonstrates the usage of Python wrappers in the custom FBMaterial, FBMarker, and FBShader ORSDK C++ samples plug-ins.