InterpToMovement component crashes on 4.11

I have a simple blueprint actor which has a InterpToMovement component in it. When I spawn that actor I set two control points for it, one for the initial position and another for the end position, then finalize control points. InterpToMovement component tries to set an invalid location at alpha time nearing 1.0. Location of the control points nor the duration for InterpToMovement does not seem to matter.

It results in a location with all NaN’s which crashes in an assertion checking if the new transform is valid.

Here is the callstack from Visual :

UE4Editor-Engine.dll!USceneComponent::UpdateComponentToWorldWithParent(USceneComponent * Parent, FName SocketName, bool bSkipPhysicsMove, const FQuat & RelativeRotationQuat, ETeleportType Teleport) Line 384 C++
UE4Editor-Engine.dll!USceneComponent::InternalSetWorldLocationAndRotation(FVector NewLocation, const FQuat & RotationQuat, bool bNoPhysics, ETeleportType Teleport) Line 2176 C++
UE4Editor-Engine.dll!USceneComponent::MoveComponentImpl(const FVector & Delta, const FQuat & NewRotation, bool bSweep, FHitResult * OutHit, EMoveComponentFlags MoveFlags, ETeleportType Teleport) Line 2297 C++
UE4Editor-Engine.dll!UMovementComponent::MoveUpdatedComponentImpl(const FVector & Delta, const FQuat & NewRotation, bool bSweep, FHitResult * OutHit, ETeleportType Teleport) Line 471 C++
UE4Editor-Engine.dll!UInterpToMovementComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction * ThisTickFunction) Line 112 C++
UE4Editor-Engine.dll!FActorComponentTickFunction::ExecuteTickHelper<void (float) >(UActorComponent * Target, bool bTickInEditor, float DeltaTime, ELevelTick TickType, const FActorComponentTickFunction::ExecuteTick::l2::void (float) & ExecuteTickFunc) Line 2722 C++
UE4Editor-Engine.dll!FActorComponentTickFunction::ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const TRefCountPtr & MyCompletionGraphEvent) Line 710 C++
UE4Editor-Engine.dll!FTickFunctionTask::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr & MyCompletionGraphEvent) Line 228 C++
UE4Editor-Engine.dll!TGraphTask::ExecuteTask(TArray<FBaseGraphTask *,FDefaultAllocator> & NewTasks, ENamedThreads::Type CurrentThread) Line 886 C++
UE4Editor-Core.dll!FNamedTaskThread::ProcessTasksNamedThread(int QueueIndex, bool bAllowStall) Line 779 C++
UE4Editor-Core.dll!FNamedTaskThread::ProcessTasksUntilQuit(int QueueIndex) Line 526 C++
UE4Editor-Core.dll!FTaskGraphImplementation::WaitUntilTasksComplete(const TArray<TRefCountPtr,TInlineAllocator<4,FDefaultAllocator> > & Tasks, ENamedThreads::Type CurrentThreadIfKnown) Line 1534 C++
UE4Editor-Engine.dll!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup WorldTickGroup, bool bBlockTillComplete) Line 486 C++
UE4Editor-Engine.dll!FTickTaskManager::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 1373 C++
UE4Editor-Engine.dll!UWorld::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 702 C++
UE4Editor-Engine.dll!UWorld::Tick(ELevelTick TickType, float DeltaSeconds) Line 1187 C++
UE4Editor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 1356 C++
UE4Editor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 370 C++
UE4Editor.exe!FEngineLoop::Tick() Line 2643 C++
UE4Editor.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE
* hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 142 C++
UE4Editor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 189 C++
[External Code]

value of NewTransform is:

-		NewTransform	{Rotation={m128_f32=0x0000004d0e6cd4b0 {0.000000000, -0.000000000, 0.607823968, 0.794071734} m128_u64=...} ...}	FTransform
+		Rotation	{m128_f32=0x0000004d0e6cd4b0 {0.000000000, -0.000000000, 0.607823968, 0.794071734} m128_u64=0x0000004d0e6cd4b0 {...} ...}	__m128
+		Translation	{m128_f32=0x0000004d0e6cd4c0 {-nan(ind), -nan(ind), -nan(ind), 0.000000000} m128_u64=0x0000004d0e6cd4c0 {...} ...}	__m128
+		Scale3D	{m128_f32=0x0000004d0e6cd4d0 {1.00000000, 1.00000000, 1.00000000, 0.000000000} m128_u64=0x0000004d0e6cd4d0 {...} ...}	__m128

Hi ,

  • Does this occur in a clean, blank project with no additional content or is it limited to one project?
  • What steps are you taking to reproduce this on your end?
  • Can you show me a screenshot of the blueprint in question?
  • Can you upload your full logs here? They are located in \Unreal Projects\PROJECTNAME\saved\logs.

I haven’t yet tried it in a blank project. I’ll try to come up with reproducible steps, or upload a subset of the project to you privately.

I don’t have access to the project right now (different computer); but in short I created a projectile as an blueprint actor. Added the InterpToMovement component to it. Then I made a function which took two parameters, start and end locations. I created control points from those locations, put them in an array and set them for InterpToMovement, finalized control points.

On mouse click I would spawn that actor and call the initialization method with source as the player pawn location and target at mouse position (projected on a plane based on pawn location).

But yeah, I’ll try to create a small project with reproduction if I can.

I haven’t yet tried it in a blank project. I’ll try to come up with reproducible steps, or upload a subset of the project to you privately.

I don’t have access to the project right now (different computer); but in short I created a projectile as an blueprint actor. Added the InterpToMovement component to it. Then I made a function which took two parameters, start and end locations. I created control points from those locations, put them in an array and set them for InterpToMovement, finalized control points.

On mouse click I would spawn that actor and call the initialization method with source as the player pawn location and target at mouse position (projected on a plane based on pawn location).

But yeah, I’ll try to create a small project with reproduction if I can.

Does not occur in a clean project. Sadly I didn’t save the state when the crash happened, and cannot reproduce it anymore. But it did repeat multiple times when it happened. Truly sorry about not taking a snapshot then and there.

A logfile from the crash is included.
link text

Hi ,

Have you had a chance to try and reproduce this on your end? If so, do you have steps I can follow that recreate this crash?

I tried to reproduce it again. And could not reproduce it even by going back in VCS history. I had hotloaded C++ code multiple times, so maybe that’s related. Should have taken a snapshot of the project at that moment.

I debugged the problem for a while, and it was after InterpToMovement::ComputeMoveDelta’s last RotateVector or Lerp which caused the invalid coordinates. Maybe it was a memory issue? If Lerp was broken then nothing would work.

Is all of the work in c++ or did you reproduce this in blueprints as well?

The problem manifested in blueprint. I debugged it by running the project (which also has C++ code) from Visual . I tried to rebuild the blueprint from scratch twice, and couldn’t reproduce the problem.

In action it got to the last control point (location in world coordinates), and crashed at the very end. It only had two control points, start and the end.

If it is still crashing in the initial project, can you provide the project so I can take a look? I’ll be happy to dig in and see what may be occurring!

Hi ,

We have not heard from you in several days. I am marking this as answered for tracking purposes, if you are still experiencing this error, please comment with the requested information.