Hey, what’s going on guys! My name is Ilgar Lunin and i’d like to discuss with you rotation behaviour in unreal editor.
My goal is to figure out - do people want this? And if so, attract as much attention as possible in order for functionality like this to be standard for UE. To prevent developers to mess around with custom engines distribution to teams etc.
Almost all top 3d packages have rotation manipulators with ability of free rotation, and it doesn’t fit in my head that UE hasn’t.
Many of my friends from industry, animators, level designers and many others who ever work with UE, complained about rotatioin manipulator. And i don’t like it either.
This things pushed me to improve the tool and show you what i have so far.
This tool can rotate multiple objects in their own local space. So you can rotate hierarchy of selected objects around their own pivots. The user will need to make only one move to rotate the object in the desired angle, instead of rotating around each axis separately.
To switch pivot mode use ctrl + right click
Ok, let me introduce you new version!
What is new: - 4.17.1-release code base
- Screen space rotation handle added
- The implementation of rotation is now closer to how it was done in the original code
I realized that my first implementation is crappy, and had no chances to be merged. To get delta, i used look at angle from gizmo location to point projected on sphere, which led a number of problems. For example: drag distance limited by sphere diameter, therefore when mouse pointer is outside the sphere, we need to project point on plane always faced to camera. Then we need to handle this properly in different places, and that is pain. And worse - flips at the poles. So now i use mouse delta. That is much simpler concept and the original rotations works like this. Drag distance limited only by your screen area (I have 3 monitors, so i can perform veeeery long drag). And I can use existing methods to apply deltas and significantly reduce amount of code. Also, the standard XYZ handles of the widget can now rotate objects relatively as well, which allows us to rotate object hierarchies in world/local spaces of most parent selected object. And of cource, since i can rotate objects around arbitrary axis, i made rotation around camera forward axis (“Screen space”). This is another popular way of rotating objects in many 3d softwares we got used to.
Summing up, we have the same functionality as before, but with 2 extra handles and extra rotation mode (ctrl+right click).
At the moment I’m satisfied with the implementation. Diff against 4.17.1-release branch is tiny relatively increased functionality.
But have a vision of what can be improved even more: - Preserve child transform option
- Support of hierarchy rotation of bones in persona editor and blueprint editor viewport
- Property view for tools (Like “Tool Settings” in maya)
- Axis orientation gizmo (“Pivot rotation”)
Pull request opened.
If you want to build it as a binary distribution or maybe use sources as starting point for in-house studio editor version - here is my fork link ( https://github.com/IlgarLunin/UnrealEngine ).
Use “BuildInstalledEngineWin64.bat” located in “Engine/Build/BatchFiles”. This will be executed:
%BATCHFILES%\runuat.bat BuildGraph -target="Make Installed Build Win64" -script=%BUILD%\InstalledEngineBuild.xml -set:HostPlatformOnly=true -set:WithDDC=false
That menas, if you are on Mac or Linux, just change target argument value, and you are ready to go.
I used Visual Studio 2015 to compile things.
Cheers, have fun
Started to work on preserving child transforms in separate branch