EpicGamesExt / BlenderTools

Blender addons that improve the game development workflow between Blender and Unreal.
https://epicgamesext.github.io/BlenderTools/
MIT License
2.7k stars 26 forks source link

Send to Unreal - Animations featuring custom property keys (morph target animations) fail to import to Unreal #675

Open Ignorum opened 8 months ago

Ignorum commented 8 months ago

Hello!

First off, thank you for making this amazing tool. It has been endlessly helpful in resolving a myriad of issues. I cannot praise it enough and have recommended its usage to my friends.

I have a particularly annoying issue to write down, as, I have not much to add here to help, but will add what I can.

I will add a more summarized version (inc. version numbers and error log) at the bottom of this post.

The issue: Sending an animation to a project for a skeleton asset, where the animation uses custom property fcurves for morph target/shape key animations just, does not work, for UE5. I do not know why.

Everything else works absolutely fine. peachy. Except pushing an animation that uses custom property keys to drive morph targets (export custom property fcurves) to a project freezes my blender and unreal up completely, until the RPC response timeout triggers and stops everything.

Unreal freezes utterly and requires a hard shutdown from task manager. Blender only comes back because of the timeout.

These are quite large animations, with like, fairly long durations (1500ish frames), baked animations (to make sure animations with complex constraints properly go into unreal) then many many keys beneath it for many properties (facial expressions, etc), but we're talking about 20 properties, max. They go in fine without the keys enabled. But enabling them? No way.

I have left my computer on overnight previously while in this frozen state to see if it's just really slow while exporting, with my export timeout value set ridiculously high, only to have no resolution to this issue.

To be clear, blender CAN export these animations, custom properties and all. Just not push them to Unreal 5.

Solutions attempted: It works fine with Unreal 4.27, but I want to move into the future, use all the cool stuff UE5 has, it's awesome. So, persisting:

And that's it. I wish I could give you more than this but I've been bashing my head looking for some kind of solution everywhere. I hope you might be able to help. Sorry for the trouble.

Steps to Reproduce the Problem: Send any animation with export custom property fcurves enabled to Unreal 5. Error log from just after clicking push to project (animations enabled only, pushed to a skeleton already imported): FBX export starting... 'C:\Users\jamie\AppData\Local\Temp\blender\send2ue\data\AnimSequence\Anim07_Guy_08.fbx' export finished in 90.5781 sec. Traceback (most recent call last): File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\factory.py", line 221, in run_function_remotely return remote_function(*args) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1122, in call return self.send(self.name, args) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1464, in request response = self.transport.request( File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1166, in request return self.single_request(host, handler, request_body, verbose) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1182, in single_request return self.parse_response(resp) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1354, in parse_response return u.close() File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\client.py", line 55, in close raise exception(exception_message) TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds.

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\operators.py", line 71, in modal raise error File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\operators.py", line 61, in modal function(*args, *kwargs) File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset UnrealRemoteCalls.import_animation_fcurves( File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\factory.py", line 248, in wrapper return rpc_factory.run_function_remotely(function, args) File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\factory.py", line 226, in run_function_remotely raise exception.class(stack_trace).with_traceback(call_traceback) File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset UnrealRemoteCalls.import_animation_fcurves( TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds. File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\unreal.py", line 1548 Error: Python: Traceback (most recent call last): File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\factory.py", line 221, in run_function_remotely return remote_function(args) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1122, in call return self.send(self.name, args) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1464, in request response = self.transport.request( File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1166, in request return self.single_request(host, handler, request_body, verbose) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1182, in single_request return self.parse_response(resp) File "D:\Program Files\Blender\blender-3.5.1-windows-x64\3.5\python\lib\xmlrpc\client.py", line 1354, in parse_response return u.close() File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\client.py", line 55, in close raise exception(exception_message) TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds.

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\operators.py", line 71, in modal raise error File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\operators.py", line 61, in modal function(*args, **kwargs) File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset UnrealRemoteCalls.import_animation_fcurves( File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\factory.py", line 248, in wrapper return rpc_factory.run_function_remotely(function, args) File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\rpc\factory.py", line 226, in run_function_remotely raise exception.class(stack_trace).with_traceback(call_traceback) File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset UnrealRemoteCalls.import_animation_fcurves( TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds. File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.5\scripts\addons\send2ue\dependencies\unreal.py", line 1548

OS: Windows 10 Addon Version: Send to Unreal 2.4.1 and 2.4.2 Blender Version: Blender 3.5.1 standalone + 3.6.4 Unreal Version: Unreal 5.2.1

Any help, from yourselves, or anyone that happens to read this and see something I missed, would be appreciated. Thank you.

jamesbaber1 commented 8 months ago

Hi @Ignorum, sorry to hear you are having issues. I tried to reproduce the issue using the test files used in the test suite.

I am using: blender 3.6.4 Unreal 5.3 send2ue 2.4.2

And the example using custom properties to drive morph targets from the docs still is working for me.

Don't know what the difference is between what your doing, but I assume the number of keys could possibly be the issue, I just haven't tried it on that many keys yet.

Here is the file I just tried. Just need to run send to unreal and it should be set up to send over the animated custom properties. morph_target_driven_by_costum_property.zip

Maybe you can test this/modify it and see if you can make a file that reproduces the issue you are seeing. Thanks!

Ignorum commented 8 months ago

Hey @jamesbaber1, thank you for responding so quickly! I know you must be busy and I appreciate the fast response.

Thanks for this file here! I've been testing it, but unfortunately I keep getting the same issue. Here's what happened.

Testing: Tested using: Blender 3.6.4 Send to Unreal 2.4.2 Unreal 5.2

I made a fresh test third-person template project to work with, and hit send to project in blender.

Something puzzling; It works fine. When there's just one property being animated it seems to be completely okay. So I deleted the meshes and anim from the project files to keep testing.

I added some new shape keys and custom property keys myself, added drivers, imported the model to incorporate the new morph targets in the mesh (fine as usual), then tried sending the animation again.

Same issue; freezing. Extended the timeout limit to see if it just needed time, but after 15 minutes, it seems to just be stuck.

Tried adding just one set of keys at a time and reimporting to see if that'd work, but not only did it not work, that would also be a huge timesink if it did, hahah.

Files: Here is my edited blend file with the animation that failed to send, maybe it might work for you? morph_target_driven_by_costum_property_EDIT.zip

I've also included a mesh and skeleton that I made a while ago that has a basic animation that fails to import like the above, just if it helps at all. AlienModel.zip

Again, thanks for the fast response. Error log from testing (seems the same error as before but maybe your eyes will see differently):

FBX export starting... 'C:\\Users\\jamie\\AppData\\Local\\Temp\\blender\\send2ue\\data\\AnimSequence\\third_person_walk_01.fbx'
export finished in 0.7812 sec.
Traceback (most recent call last):
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\factory.py", line 221, in run_function_remotely
    return remote_function(*args)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1122, in __call__
    return self.__send(self.__name, args)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1464, in __request
    response = self.__transport.request(
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1166, in request
    return self.single_request(host, handler, request_body, verbose)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1182, in single_request
    return self.parse_response(resp)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1354, in parse_response
    return u.close()
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\client.py", line 55, in close
    raise exception(exception_message)
TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\operators.py", line 71, in modal
    raise error
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\operators.py", line 61, in modal
    function(*args, **kwargs)
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset
    UnrealRemoteCalls.import_animation_fcurves(
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\factory.py", line 248, in wrapper
    return rpc_factory.run_function_remotely(function, args)
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\factory.py", line 226, in run_function_remotely
    raise exception.__class__(stack_trace).with_traceback(call_traceback)
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset
    UnrealRemoteCalls.import_animation_fcurves(
TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds.  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\unreal.py", line 1578
Error: Python: Traceback (most recent call last):
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\factory.py", line 221, in run_function_remotely
    return remote_function(*args)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1122, in __call__
    return self.__send(self.__name, args)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1464, in __request
    response = self.__transport.request(
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1166, in request
    return self.single_request(host, handler, request_body, verbose)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1182, in single_request
    return self.parse_response(resp)
  File "C:\Users\jamie\Documents\Projects\MiscProjectRelated\Blender 3.6.4 standalone\3.6\python\lib\xmlrpc\client.py", line 1354, in parse_response
    return u.close()
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\client.py", line 55, in close
    raise exception(exception_message)
TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\operators.py", line 71, in modal
    raise error
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\operators.py", line 61, in modal
    function(*args, **kwargs)
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset
    UnrealRemoteCalls.import_animation_fcurves(
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\factory.py", line 248, in wrapper
    return rpc_factory.run_function_remotely(function, args)
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\rpc\factory.py", line 226, in run_function_remotely
    raise exception.__class__(stack_trace).with_traceback(call_traceback)
  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\core\ingest.py", line 30, in import_asset
    UnrealRemoteCalls.import_animation_fcurves(
TimeoutError: The call "import_animation_fcurves" timed out because it hit the timeout limit of 60 seconds.  File "C:\Users\jamie\AppData\Roaming\Blender Foundation\Blender\3.6\scripts\addons\send2ue\dependencies\unreal.py", line 1578