This PR adds support for shape key generation based on CurveData for pose entries in Poses using CurveNames from Curves as the driver for CurveData values. The assumption is that each CurveName is an existing imported shape key. Therefore, generation of CurveData based shape keys occurs after a full import of bone influenced poses. This likely won't map 1:1 in all cases, but the general result for at least cases I care about, like the import of ARKit blendshapes via FortniteGame/Content/ArtTools/Pose_Asset_Remaps/ARKit_Remap_PoseAsset.uasset, seems to produce correct results.
Do note that curve-based shape keys imported as part of character import will be prepended with curves_ as they may be shared with bone-based poses which may be preferred.
When importing via standalone Pose Asset, curves_ is only prepended if a shape key with the same name already exists on the object. Otherwise, it imports as the name provided in the pose. This makes importing ARKit shapes fairly straight forward.
Special note about ARKit Blendshapes
The mapping I provided will not work with metahuman like skins
Some of the blendshapes need to be manually split for specific left/right morphs. This is fairly easy to do with Blender and Vertex -> Blend from Shape using Basis with Add off.
Not all ARKit blendshapes are included (like tongueOut)
Other changes include:
Refactor import_pose_asset_data to be usable during both standalone import and character import
Fixed bug where importing pose asset as shape keys with Shape Key Lock resulted in empty shape keys
Fixed inaccurate imports of pose asset data on armatures with Tasty Rig applied
Testing
I did some manual testing primarily with Fish Thicc since his pose asset has Curve Data included, however, I'm not entirely sure what its purpose is.
Tested with Tasty Rig on/off, reorient bones on/off, and merge armatures one/off.
Tested normal import, import of ARKit blendshapes, and a wipe & reimport of Fish Thicc pose asset.
Summary
This PR adds support for shape key generation based on
CurveData
for pose entries inPoses
usingCurveName
s fromCurves
as the driver forCurveData
values. The assumption is that eachCurveName
is an existing imported shape key. Therefore, generation ofCurveData
based shape keys occurs after a full import of bone influenced poses. This likely won't map 1:1 in all cases, but the general result for at least cases I care about, like the import of ARKit blendshapes viaFortniteGame/Content/ArtTools/Pose_Asset_Remaps/ARKit_Remap_PoseAsset.uasset
, seems to produce correct results.Do note that curve-based shape keys imported as part of character import will be prepended with
curves_
as they may be shared with bone-based poses which may be preferred.When importing via standalone Pose Asset,
curves_
is only prepended if a shape key with the same name already exists on the object. Otherwise, it imports as the name provided in the pose. This makes importing ARKit shapes fairly straight forward.Special note about ARKit Blendshapes
Vertex -> Blend from Shape
usingBasis
withAdd
off.tongueOut
)Other changes include:
import_pose_asset_data
to be usable during both standalone import and character importShape Key Lock
resulted in empty shape keysTesting I did some manual testing primarily with Fish Thicc since his pose asset has Curve Data included, however, I'm not entirely sure what its purpose is.
Tested with Tasty Rig on/off, reorient bones on/off, and merge armatures one/off. Tested normal import, import of ARKit blendshapes, and a wipe & reimport of Fish Thicc pose asset.
Additional testing is appreciated.