Houdini rotation to UE4 rotation?
643 8 2 brettmillervfx
 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,
I figure the engine source code has the transform in there somewhere but thought I'd ask first…
thanks,
 dpernuit
 Staff
 386 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.5Unreal4.22/Source/HoudiniEngineRuntime/Private/HoudiniEngineUtils.cpp#L463L475 [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
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.5Unreal4.22/Source/HoudiniEngineRuntime/Private/HoudiniEngineUtils.cpp#L463L475 [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
 brettmillervfx
 Member
 13 posts
 Joined: Feb. 2006
 Offline
 DominicSewell
 Member
 9 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.5Unreal4.22/Source/HoudiniEngineRuntime/Private/HoudiniEngineUtils.cpp#L463L475 [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!
 frostfx
 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.
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
 dpernuit
 Staff
 386 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.
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.
 DominicSewell
 Member
 9 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
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
 dpernuit
 Staff
 386 posts
 Joined: Sept. 2016
 Offline
Posting back what I replied to you on Discord:
Looking at your code, your forgot to negate the last component of the UE Quaternion. Try with:
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
 DominicSewell
 Member
 9 posts
 Joined: Sept. 2018
 Offline

 Quick Links