Houdini rotation to UE4 rotation?

   1238   8   2
User Avatar
Member
13 posts
Joined: Feb. 2006
Offline
Anybody know the math to get a houdini euler rotation to a UE4 rotation? I know the HouEngine does this for you but we're experimenting with a JSON based workflow and it doesn't appear that I can feed UE4 a 3x3 matrix so I need to work out how it likes it's euler rotation..

I figure the engine source code has the transform in there somewhere but thought I'd ask first…

thanks,
User Avatar
Staff
409 posts
Joined: Sept. 2016
Offline
Hi,

Indeed you can find the code to convert transform between UE4 and H in the plugin's source.
HoudiniEngineUtils has functions like FHoudiniEngineUtils::TranslateHapiTransform() that does this.

https://github.com/sideeffects/HoudiniEngineForUnreal/blob/Houdini17.5-Unreal4.22/Source/HoudiniEngineRuntime/Private/HoudiniEngineUtils.cpp#L463-L475 [github.com]

But roughly, to convert from Houdini to unreal:

Rotation (Quaternion): Swap Z and Y, invert W

UE4.X = H.X
UE4.Y = H.Z
UE.Z = H.Y
UE4.W = -H.W

Position: Swap Z and Y, convert from meter to centimeters

UE4.X = H.X * 100
UE4.Y = H.Z * 100
UE.Z = H.Y *100

Scale: Swap Z and Y

UE4.X = H.X
UE4.Y = H.Z
UE.Z = H.Y
User Avatar
Member
13 posts
Joined: Feb. 2006
Offline
Marvelous. That's insanely helpful. Thanks!
User Avatar
Member
11 posts
Joined: Sept. 2018
Offline
dpernuit
Hi,

Indeed you can find the code to convert transform between UE4 and H in the plugin's source.
HoudiniEngineUtils has functions like FHoudiniEngineUtils::TranslateHapiTransform() that does this.

https://github.com/sideeffects/HoudiniEngineForUnreal/blob/Houdini17.5-Unreal4.22/Source/HoudiniEngineRuntime/Private/HoudiniEngineUtils.cpp#L463-L475 [github.com]

But roughly, to convert from Houdini to unreal:

Rotation (Quaternion): Swap Z and Y, invert W

UE4.X = H.X
UE4.Y = H.Z
UE.Z = H.Y
UE4.W = -H.W

Position: Swap Z and Y, convert from meter to centimeters

UE4.X = H.X * 100
UE4.Y = H.Z * 100
UE.Z = H.Y *100

Scale: Swap Z and Y

UE4.X = H.X
UE4.Y = H.Z
UE.Z = H.Y

Hi @dpernuit , I'm trying to convert my rotation values through vex but don't seem to be getting correct results that match my original ue4 input rotations. are you able to point me in the right direction?

Vex code Snippet :

Output Values :


Cheers!

Attachments:
vexCode.PNG (47.5 KB)
consoleOutput.PNG (9.4 KB)

User Avatar
Member
2 posts
Joined: May 2017
Offline
im trying to do a similar thing. Tried your values in vops.



im getting similar results. But i guess the euler to quat input needs to be in radians. So i tried the conversion in between but not getting the results to match up in unreal.

so would be also really interested to convert houdini rotations to unreal rotations. thanks.
Edited by frostfx - Feb. 14, 2020 08:40:56

Attachments:
vop.jpg (58.4 KB)

User Avatar
Staff
409 posts
Joined: Sept. 2016
Offline
As frostfx mentioned, angles for the quaternions need to be expressed in radians, not degrees…

Even when doing the math right, you may not end up with the exact same rotation values as then one you see in UE4, but the rotation itself will be equivalent…

For example, (50,-100,90) and (-130,-80,-90) have different values but are the same rotation.
User Avatar
Member
11 posts
Joined: Sept. 2018
Offline
Hi @dpernuit ive converted my initial values to radians but i still dont seem to be getting correct values? Using the unreal rotation of X 50 Y -100 Z 90 my calculation returns X -260 Y 50 Z -90 which as far as i can tell is not a different version of the same rotation. There seems to still be something im doing wrong along the way?






Im ultimately just trying to get the Y axis rotation that has occurred in unreal so i can translate this to a rotation in the UVs

Attachments:
vexCode.PNG (52.9 KB)
consoleOutput.PNG (9.5 KB)

User Avatar
Staff
409 posts
Joined: Sept. 2016
Offline
Posting back what I replied to you on Discord:

HQuat (X,Y,Z,W) = UEQuat( -X, -Z, -Y, W)
and the other way around is
UEQuat (X,Y,Z,W) = HQuat (X, Z, Y, -W)

Looking at your code, your forgot to negate the last component of the UE Quaternion. Try with:

vector4 unrealQuaternion = set(houdiniQuaternion[0], houdiniQuaternion[2], houdiniQuaternion[1], -houdiniQuaternion[3]);
Edited by dpernuit - Feb. 14, 2020 11:35:15
User Avatar
Member
11 posts
Joined: Sept. 2018
Offline
Hi dpernuit,

Apologies I'd been looking at it for far too long, that works perfectly now thank you for your help / patience
  • Quick Links