Giter VIP home page Giter VIP logo

acl-ue4-plugin's People

Contributors

allcontributors[bot] avatar eairpeter avatar fjoanisphxlabs avatar meradrin avatar nfrechette avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

acl-ue4-plugin's Issues

Crash in development build of UE4.26 when streaming in if insert many animation sequences into one database.

I am using 4.26 and have added many paragon character animation into my demo project.

And I have set all anim sequences compressed with acl database(including additive animations) in one single database asset:

image

When I change database visual fidelity from lowest to high in our development pack, it crashes like this:

image

image

This mostly happens if lowest tiers are not stripped and load from medium to high.

But it doesn't crash in editor.

Add support for UE 4.23

UE 4.23 introduced massive changes to the animation compression code and requires a lot of adjustments for ACL.

Note that UE 4.23.0 has a bug where automatic compression ignores the max end effector error threshold which messes up all stat reporting that I do. Once the bug is fixed, a release of the plugin will be made, hopefully with UE 4.23.1.

AnimationCompressionLibraryDatabase should not be loaded in the beginning if the visual fidelity is lowest.

Since high importance tier is stored inside the animation clip. if the database visual fidelity is lowest, the database should not be loaded into memory in the beginning. But it still shows up in the memreport:

image

But actually it is loaded into memory because the Database asset is a hard pointer:

image

As a result, this would cause database being loaded into the memory.

I've use obj ref for the database, and get this result:
image

Would a TAssetPtr be better for this?

Add support for streaming cosmetic joints

Once ACL supports streamable cosmetic joints, we must integrate it into the UE4 plugin.

In order to determine if a joint is cosmetic or not, we can use the LOD information from the skeleton. In the database codec, the settings should be split into two sections: one for the base joints, and one for the cosmetic joints. We must also specify the value to use for cosmetic joints, something like anything above LOD 2 is cosmetic. We should also expose a list of joints that are forced to be base joints. This is required if we need to decompress them individually (as opposed to part of the whole pose). We need to warn, similarly to bind pose stripping which this feature will depend on.

See FSkeletalMeshLODModel::RequiredBones for LOD information.

The visual fidelity level currently has 3 levels: lowest, medium, highest. This must be expanded by 3 new levels.

  • Lowest will contain only the base joint clips which are always loaded in memory (tier 0).
  • Low will contain base tier 0 and 1
  • Medium will contain base tier 0, 1, and 2
  • MediumHigh will contain all 3 base tiers and cosmetic tier 0
  • High will contain all 3 base tiers and cosmetic tier 0 and 1
  • Highest will contain all 3 base tiers and cosmetic tier 0, 1, and 2

It should be possible to strip cosmetic joints entirely similarly to how we can strip tier 2.

'WITH_EDITORONLY_DATA' is not defined - Build failing on some build machines

Hello Nic,

Its been a while. I hope you are well :)

One of our build machine suddenly fail to compile the ACL plugin.

...ACLPlugin\Source\ACLPlugin\Private\EditorDatabaseMonitor.cpp(3): error C4668: 'WITH_EDITORONLY_DATA' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'

We're trying to figure out why this is happening exactly (could be how files are grouped together to build). Meanwhile, I'm posting a patch here to see if you think this could help avoid the issue.

acl-ue4-plugin-bae22f8-Build fix for some compile target.patch

Crash when counting memory using v2.00

I am trying v2.00 in a 4.26-based demo project.

This project is simply a third-person project which all animation sequences are compressed with ACL Database.

When I try to type memreport -full command in the packed project, an error showed up:

image

It seems that something is wrong with serialization:
image

How can I handle this problem please?


And btw, I simply commented this line of code, and it seems that we the bulk data size is counted twice:

image

For a bitwise compression, the memory report is like:

image

How should I handle it please?

Crash in dev building in 4.26 when streaming in if additive animations are using acl database

I am using 4.26 and have added many paragon character animation into my demo project.

And I have set all anim sequences compressed with acl database(including additive animations):

image

When I change database visual fidelity from lowest to high in our development pack, it crashes like this:

image

image

But it doesn't crash in editor.


Oops, it seems that it would still crash if you insert many animation sequences into one database like this:

image

Compatibility With Arm7

This error showed up when building the project with arm-7:

image

It seems that something is wrong with rtm.

Store compressed data relative to the bind pose translation

In the spirit of bind pose stripping, we can leverage the fact that the output pose buffer contains the bind pose to store our compressed data relative to it. See here for the general idea.

Storing the compressed pose to be a full additive on top of the bind pose is expensive to reconstruct at runtime as it requires quaternion multiplication. Instead, we could store relative to the bind translation only by removing it from our raw data and adding it back after decompression. This is much faster and can be accomplished with 2 uOps: a vector addition and a memory load.

This would reduce the range of translation values to be centered around 0.0 which should help improve precision and reduce the memory footprint.

However, much like bind pose stripping, this cannot be supported for bones that are individually decompressed. In fact, if any bone is individually decompressed, we cannot support this. We could exclude the root but not arbitrary bones as easily.

Make sjson-cpp editor only

sjson-cpp isn't used at runtime and is only used for debugging purposes. The headers should only be present when compiling the editor.

Add the concept of warning/error codes

ACL has many warnings and errors added to the output log. To help searching for what they mean, a consistent naming scheme should be introduced.

E.g: [ACL_ERROR_02] - Track index %u is queried explicitly at runtime but can been stripped if equal to the bind pose. Make sure this bone is excluded or results will be incorrect!

This would allow someone to quickly google for the error code or to search the documentation for it. It would also allow us to document all error codes explicitly.

Add ACL clip dumping support to commandlet

The commandlet allows us to run the UE4 automatic and ACL compression on clips within a folder that are stored in ACL SJSON format. We need a way to generate such clips from within UE4. The commandlet should iterate over all animations in the current project and export them into ACL SJSON format.

Can we add an editor UI option to export individual clips as well?

UE4 Editor Cross-Compilation with Linux

See this sjson issue for details.
I appears that the C++ clang compiler tool-chain used by UE4 with UE 4.20 and earlier is not fully C++11 compliant. The C++11 standard mandates that when the <cinttypes> header is included, all the formatting and other macros are defined automatically unlike the C99 which suggest that specific macros need to be defined first to control the behavior.

The plugin results can differ from standalone ACL on Windows with MSVC

UE4 uses fast math which can change code generation. ACL has hand tuned code and carefully considers accuracy implications which means not only does it not benefit from fast math but it can hurt it. Some clips can have an error slightly different and some extreme clips can have an unacceptable error in UE4 as a result of fast math.

Disabling fast math per module or plugin is not possible in UE4 and so ACL needs to handle fast math, see this issue: nfrechette/acl#176

Slower Compress times with unreal 5.2

Hi Nic,

I hope you're doing well :)

I just started using unreal 5.2 and I have a feeling (I did not do an actual diff to confirm) that the compression after a reimport in slower in 5.2 vs 5.1.

Is it just me? If you dont see that, we'll make sure to compare our import times to verify what could be the reason.

Thanks

PM

Additive animations can be jittery

Additive animation sequences need to use the proper baked additive base pose that is cached in the UAnimSequence otherwise a mismatch can arise. This leads to potential issues with accuracy.

Add stats generation for current project in commandlet

The commandlet allows us to run the UE4 automatic and ACL compression on clips within a folder that are stored in ACL SJSON format. It would be nice if we could do this with clips contained within the current project. Similar to the recompression commandlet.

Assertions failing (MaxTrackIndex < ACLBoneCount) crashing the editor (handling this more gracefully for content issues)

Asserts inside AnimBoneCompressionCodec_ACL.cpp crash the editor, we don't get much control to avoid this from trigger either. Once the default bone compression setting has been set via DefaultEngine.ini the system may compress an animation as soon as its shown in the content browser, causing this crash.

Exact error/line:
Assertion Failed: MaxTrackIndex < ACLBoneCount in AnimBoneCompressionCodec_ACL line 137 (using version 2.0.6)

Perhaps we can disable these checks more easily or use "ensure" instead of "check" if the failure is non critical and the editor should be allowed to continue execution.

where to find Animation/AnimEncodingRegistry.h

I downloaded the 0.62 version of this plugin and setup it in the UE4 4.24.3.
When I compiling, It tips me "Error C1083 Cannot open include file: 'Animation/AnimEncodingRegistry.h': No such file or directory"
I don't know why or I missed something to do. Please help me out, thank you.

Encountered an error while build Dedicated Server using clang 10.0.1 and AMD EPYC 7K83 CPU.

Processor AMD EPYC 7K83 64-Core Processor 2.54 GHz
Installed RAM 192 GB (189 GB usable)
Device ID 506B4908-0654-41AF-BC30-357C92B31A8E
Product ID 00454-60000-00001-AA819
System type 64-bit operating system, x64-based processor
Pen and touch No pen or touch input is available for this display
Platform Windows

Error:
In file included from D:/machine/appbuildgroup/Intermediate/Build/Linux/B4D820EA/Server/Development/ACLPlugin/Module.ACLPlugin.gen.cpp:2: In file included from D:/machine/appbuildgroup/Intermediate/Build/Linux/B4D820EA/Server/Inc/ACLPlugin/ACLImpl.gen.cpp:8: In file included from ../Plugins/ACLPlugin/Source\ACLPlugin/Public/ACLImpl.h:85: In file included from ../Plugins/ACLPlugin/Source/ThirdParty/acl/includes\acl/decompression/decompress.h:41: In file included from ../Plugins/ACLPlugin/Source/ThirdParty/acl/includes\acl/decompression/impl/decompression_context_selector.h:30: In file included from ../Plugins/ACLPlugin/Source/ThirdParty/acl/includes\acl/decompression/impl/decompression.transform.h:40: D:\machine\appbuildgroup\EngineSource\Engine\Plugins\ACLPlugin\Source\ThirdParty\acl\includes\acl\decompression\impl\animated_track_cache.transform.h(1153,53): error: use of undeclared identifier '_mm_hadd_epi32'; did you mean '_mm_add_epi32'? group_bit_size_per_component0_v = _mm_hadd_epi32(_mm_hadd_epi32(group_bit_size_per_component0_v, group_bit_size_per_component0_v), group_bit_size_per_component0_v); ^~~~~~~~~~~~~~ _mm_add_epi32 C:\dev\UnrealToolchains\v17_clang-10.0.1-centos7\x86_64-unknown-linux-gnu\lib\clang\10.0.1\include\emmintrin.h(2161,1): note: '_mm_add_epi32' declared here _mm_add_epi32(__m128i __a, __m128i __b) ^

Update to ACL v1.2

ACL 1.2 should require everything we will need for the v1.0 release of the plugin. Due to delays in getting the UE4 refactor to support plugins natively being pushed back, a v0,3 release will be made with the latest ACL release. Specifically, it will add support for floating point sample rates (nfrechette/acl#123) which is problematic at the moment (#7). Many other issues are fixed and a few optimizations are included as well.

Use preview mesh for virtual vertex distance

Right now, the virtual vertex distance is an exposed setting and will be the same for every bone except high accuracy bones which end up with a separate distance. This is fine but it would be interesting to see if things would improve by using the preview mesh.

Having access to the mesh would avoid the need to ever tweak the distance since we know what value to use from the mesh. Only bones which have no skinning information would need a distance setting and we could use the high accuracy bone distance for that.

Crash on Android ARM64 while ARMv7 is fine

Hello,

I merged acl v0.4 plugin (with acl library v1.2.1) into UE 4.22 and everything so far works fine except Android ARM64.

On ARM64 it crashes at below callstack. It seems like reading at wrong address if it encounters any acl-compressed animation.

Any idea would be greatly appreciated!

01-30 10:25:52.892  6578  6578 F DEBUG   : backtrace:
01-30 10:25:52.893  6578  6578 F DEBUG   :     #00 pc 000000000463d4ac  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (__Float32x4_t acl::decompress_and_interpolate_vector<acl::uniformly_sampled::impl::TranslationDecompressionSettingsAdapter<acl::uniformly_sampled::DefaultDecompressionSettings>, 
acl::uniformly_sampled::impl::DecompressionContext, acl::uniformly_sampled::impl::SamplingContext>(acl::uniformly_sampled::impl::TranslationDecompressionSettingsAdapter<acl::uniformly_sampled::DefaultDecompressionSettings> const&, acl::
01-30 10:25:52.893  6578  6578 F DEBUG   :     #01 pc 000000000463decc  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (void acl::uniformly_sampled::DecompressionContext<acl::uniformly_sampled::DefaultDecompressionSettings>::decompress_pose<UE4OutputWriter<true, false, true>>(UE4OutputWriter<true, false, true>&)+336)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #02 pc 0000000004639d70  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (_ZN30AEFACLCompressionCodec_Default19GetPoseTranslationsER6TArrayI10FTransform18TMemStackAllocatorILj0EEERKS0_I13BoneTrackPair17FDefaultAllocatorER33FAnimSequenceDecompressionContext+948)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #03 pc 00000000068ead10  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (_Z32AnimationFormat_GetAnimationPoseR6TArrayI10FTransform18TMemStackAllocatorILj0EEERKS_I13BoneTrackPair17FDefaultAllocatorES9_S9_R33FAnimSequenceDecompressionContext+68)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #04 pc 0000000006954f44  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UAnimSequence::GetBonePose(FCompactPose&, FBlendedCurve&, FAnimExtractContext const&, bool) const+5168)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #05 pc 0000000006953558  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UAnimSequence::GetAnimationPose(FCompactPose&, FBlendedCurve&, FAnimExtractContext const&) const+780)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #06 pc 00000000069380f8  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SequencePlayer::Evaluate_AnyThread(FPoseContext&)+1960)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #07 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #08 pc 00000000063501e0  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_BlendListBase::Evaluate_AnyThread(FPoseContext&)+1312)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #09 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #10 pc 00000000063501e0  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_BlendListBase::Evaluate_AnyThread(FPoseContext&)+1312)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #11 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #12 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #13 pc 000000000693cf70  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_StateMachine::Evaluate_AnyThread(FPoseContext&)+1652)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #14 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #15 pc 0000000006936eb0  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SaveCachedPose::Evaluate_AnyThread(FPoseContext&)+168)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #16 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #17 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #18 pc 00000000063549d0  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_LayeredBoneBlend::Evaluate_AnyThread(FPoseContext&)+812)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #19 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #20 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #21 pc 0000000006942534  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_ConvertLocalToComponentSpace::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+92)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #22 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #23 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #24 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #25 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #26 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #27 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #28 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #29 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #30 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #31 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #32 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #33 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #34 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #35 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #36 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #37 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #38 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #39 pc 000000000638fd18  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+36)
01-30 10:25:52.893  6578  6578 F DEBUG   :     #40 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #41 pc 0000000006942040  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_ConvertComponentToLocalSpace::Evaluate_AnyThread(FPoseContext&)+76)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #42 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #43 pc 0000000006942534  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_ConvertLocalToComponentSpace::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+92)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #44 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #45 pc 0000000004ae0404  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FCustomBodyNode::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext&)+60)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #46 pc 00000000069412c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext&)+104)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #47 pc 0000000006942040  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimNode_ConvertComponentToLocalSpace::Evaluate_AnyThread(FPoseContext&)+76)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #48 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #49 pc 0000000004ae1f10  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FCustomFace::Evaluate_AnyThread(FPoseContext&)+176)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #50 pc 0000000006935e80  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FPoseLink::Evaluate(FPoseContext&)+108)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #51 pc 000000000690e20c  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimInstanceProxy::EvaluateAnimationNode(FPoseContext&)+920)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #52 pc 00000000068f6b7c  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FAnimInstanceProxy::EvaluateAnimation(FPoseContext&)+764)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #53 pc 00000000068f6794  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UAnimInstance::ParallelEvaluateAnimation(bool, USkeletalMesh const*, FBlendedHeapCurve&, FCompactPose&)+640)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #54 pc 0000000006afc338  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (USkeletalMeshComponent::EvaluateAnimation(USkeletalMesh const*, UAnimInstance*, FVector&, FBlendedHeapCurve&, FCompactPose&) const+804)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #55 pc 0000000006afca1c  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (_ZN22USkeletalMeshComponent26PerformAnimationProcessingEPK13USkeletalMeshP13UAnimInstancebR6TArrayI10FTransform17FDefaultAllocatorES9_R7FVectorR17FBlendedHeapCurve+988)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #56 pc 0000000006b018e4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (USkeletalMeshComponent::ParallelAnimationEvaluation()+92)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #57 pc 0000000006b00114  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (USkeletalMeshComponent::DoParallelEvaluationTasks_OnGameThread()+388)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #58 pc 0000000006aff090  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (USkeletalMeshComponent::RefreshBoneTransforms(FActorComponentTickFunction*)+7296)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #59 pc 0000000006af626c  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (USkeletalMeshComponent::InitAnim(bool, bool)+648)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #60 pc 0000000006af5ab4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (USkeletalMeshComponent::OnRegister()+76)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #61 pc 0000000006a7c044  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UActorComponent::ExecuteRegisterEvents()+648)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #62 pc 0000000006a7b5c4  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UActorComponent::RegisterComponentWithWorld(UWorld*)+2240)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #63 pc 0000000006891c74  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (AActor::IncrementalRegisterComponents(int)+1016)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #64 pc 0000000006da1234  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (ULevel::IncrementalUpdateComponents(int, bool)+1668)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #65 pc 00000000074caa48  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UWorld::UpdateWorldComponents(bool, bool)+376)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #66 pc 00000000074d8714  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UWorld::InitializeActorsForPlay(FURL const&, bool)+532)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #67 pc 00000000073fa880  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UEngine::LoadMap(FWorldContext&, FURL, UPendingNetGame*, FString&)+9092)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #68 pc 00000000073f655c  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UEngine::Browse(FWorldContext&, FURL, FString&)+2748)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #69 pc 00000000073f7dac  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UEngine::TickWorldTravel(FWorldContext&, float)+768)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #70 pc 0000000006c5e254  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (UGameEngine::Tick(float, bool)+3368)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #71 pc 000000000446f080  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (FEngineLoop::Tick()+22236)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #72 pc 0000000004467e78  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (AndroidMain(android_app*)+3552)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #73 pc 00000000044740fc  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so (android_main+148)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #74 pc 000000000448eea8  /data/app/com.XXX-k3tO3kZiJvYBUgd1kTiuCw==/lib/arm64/libUE4.so
01-30 10:25:52.894  6578  6578 F DEBUG   :     #75 pc 0000000000084df8  /system/lib64/libc.so (__pthread_start(void*)+208)
01-30 10:25:52.894  6578  6578 F DEBUG   :     #76 pc 0000000000023ac4  /system/lib64/libc.so (__start_thread+68)

Compression error is reported as being very high

Some UE4 animation sequences can have a sample/frame rate that isn't a whole number. e.g. 5 frames in 4 seconds. This does not usually happen but old sequences might have been impacted by an import bug sometime in the past.

ACL rounds the frame rate to a whole number and uses it to optimize the error but as a result, it does not measure the error like UE4 does. Even though the ACL reported error will still be very low, UE4 might report a high error. This happens because they disagree on where to measure the error in the animation sequence. As such, even though UE4 might report a high error, the sequence itself should be very accurate regardless and any error is unlikely to be visible to the naked eye.

A workaround is to re-import those impacted sequences to make sure their frame rate is a whole number (e.g. 30 FPS).

ACL will implement floating point sample rate support at some point in the future, this is tracked by this issue: nfrechette/acl#123

Update plugin to work with new code in Dev-Anim branch

The animation codec refactor has finally been merged into the Dev-Anim branch. The plugin needs to be updated to work with it. This will bring it into its final form in order to be published on the Unreal Marketplace.

Custom engine changes should no longer be required with that branch.

Ensure the plugin meets the Unreal Marketplace guidelines

The guidelines can be found here: https://www.unrealengine.com/en-US/marketplace-guidelines

  • Move ThirdParty directory under Source
  • Make sure we use PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
  • Add the Public path for the public headers in .cs file, see here
  • Add empty black list, see here
  • Add engine version to uplugin, see here
  • Add UE shield ![UE4](https://img.shields.io/badge/UE4-4.25%2B-orange)
  • Double check linked sample project
  • Run the plugin Package ... action, see here
  • Rename the plugin to the full ACL name for clarity in the plugin window
  • Remove the IsBeta flag from uplugin
  • Revisit and update the documentation
  • Update the stats with UE 4.25
  • Ensure FilterPlugin.ini is present and the README and LICENSE are included, see here
  • Update icon to something appropriate (128x128 PNG)
  • Set the marketplace URL, see here

See here for an example.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.