I tried posting about this earlier in the AnswerHub but didn’t get any replies (not sure how often people are actually checking it). As far as I can tell, there doesn’t seem to be any way to correctly scale a Blueprint or Group of several actors together as an actual contained group. Instead everything just takes the master scale being manipulated (say the X axis for example) and then applies that axis scale value to all the other grouped actors on their own local scales.
From an efficient world building perspective, this is a pretty big problem as it means I can’t go and create a nice arrangement of actors, put them into either a group (for a single level) or a Blueprint (for easy access from the content browser) and then mirror or otherwise adjust the scale of that grouping. For ease of explanation, I made a little gif below.
Also beyond that, is there any better way to simply group an arrangement of actors together in the content browser for easy reuse later other than to create a whole new Blueprint for them? It seems like allowing simple Groups in the content browser that exist purely as lists of actors and their arranged positions/rotations/scales would be beneficial, especially since it means several scripted Blueprint actors could be grouped together and accessible as a single searchable entity in the content browser.
Do you get the same result when you scale the blueprint and a group of meshes?
There is a mirror (x, y, z) function in the context menu (when you right-click on your actor in the outliner, choose “transform->mirror”). Does that work?
Currently, you can group meshes, but the result is more of a selection set, so its probably not what you want. You can also build hierarchies of actors in the outliner (perhaps that would work for you).
In 4.1 they will introduce folders to get the outliner a bit more organized…
Addendum: The mirror function does the same thing (- 1 scale around axis), so it probably won’t work as well - sorry for that…
Yeah, I had tried their actual mirroring button and discovered the same thing (just applies a -1 scale), so sadly that doesn’t help any.
My second point about being able to throw grouped objects into the content browser was mainly about creating nice libraries of prefabs for easy placement and world building. Hierarchies and groups that only live in a given level’s outliner don’t really help since I can’t easily fly over to another part of the level that I’m populating and quickly drop a pre-arranged collection of actors into the world unless they’ve been turned into a blueprint. Throwing those arranged groups of actors into a blueprint does work, but it seems like an enormous waste, partly because if I want to have smaller actors that are already blueprints themselves (say an individual drawer with an open/close blueprint interaction script) and then arrange multiple instances of those into a collective group/prefab, I can’t really do that because blueprints currently can’t stack inside one another.
The scaling issue is the big one that just blows my mind though, as I’m just having a hard time imagining a full game being constructed by a team of world builders who can’t mirror pre-arranged groups of assets or scale them up or down by ~10% to fill the odd gap (imagine you made a detailed building and constructed a corner of it out of a number of different instanced meshes but couldn’t simply mirror that to create the corner on the opposite side of the building). This behavior is present no matter what combination of blueprints, groups, and hierarchical parenting I set up (groups in blueprints, parent/child in blueprints, parent/child in groups, etc.).
Scaling in UE4 is always applied in local space because we do not support ‘shear’ on meshes. If you rotate a mesh and then try and scale it along world X, you would end up shearing it. Uniform scaling should work fine, and scaling a group of meshes where none are rotated should also work.
Blueprints are the intended solution for grouping and making an asset. You make a good point about embedding BPs inside other BPs. This is possible with the ChildActorComponent, but that is not used automatically when selecting a group of Actors in the level and making a BP from them. That is something we will look into.
Hi James, thanks for the reply. I hadn’t experimented with ChildActorComponents yet, but it sounds promising - being able to select groups of actors already created and placed in the scene and generate a new blueprint that includes any existing blueprints as ChildActorComponents would be incredibly useful (similar to the replace selected with blueprint option but as a new parent blueprint instead). So for example, I could have placed a desk set with multiple blueprint drawers and create a parent blueprint that would automatically set those drawer blueprints as ChildActors.
Regarding the scaling issue, I hadn’t considered the issue of shearing, but I understand the problem. Something I’d like to propose as a partial solution is some kind of button or option to mirror a blueprint/group/hierarchy in a way that doesn’t simply apply a -1 to the given axis’s scale. I’ve largely worked out the basic math behind accomplishing that but don’t really have the skills or knowledge to create the actual implementation. Attached below is a screenshot illustrating the mirroring solution (this doesn’t allow for partial scaling/shearing obviously, but simply allowing correct mirroring of grouped actors would be terrific on its own).
A brief explanation of what I’m doing:
Note: This proof of concept was done with actors aligned to the world 0 for ease of testing.
Given that I want to mirror across a group/blueprint’s internal axes, I multiply the position of objects along the target mirror axis by -1.
I then multiply the scale of each of the three axes by -1 (note that in the Mirror-Z example each axis has a separate scale to verify this non-uniform scaling works).
Rotation is the part where I’m not clear on the exact math, but basically I rotate the target mirror axis by 180° in the viewport. The way this affects the other two axes internally is what I’m unclear on (Mirror-Y for example generates two very different numbers for X and Z rotation).
Having a ‘Mirror Blueprint X/Y/Z’ button in the UI somewhere that would perform this math automatically for a given axis would be fantastic. At that point the only scaling option that wouldn’t be viable is partial, non-uniform scaling, but that would be fine given the issue of dealing with object shearing.
We are actually already working on the ‘mirroring a BP does not rotate components correctly’ issue. We have hit a few difficulties, but it is certainly something we want to fix! Thanks for the feedback.
Nothing new about this?
I have a blueprint of a door and can’t use -1 scale on one axis to mirror it correctly.
has there been a resolution to this issue? Is anyone aware of a solution in the latest version?
Programs like Maya allow a user to scale all selected objects at a constant rate relative to each other and from one common (temporary) pivot point. This does not cause shearing and it is a very useful interaction. This should be easy to achieve in UE4, but that does not seem to be the case. Can we please get this functionality?
(Screenshots from Maya. Each primitive is its own object and has a centered pivot. The pivot of the last selected object is used as the pivot for the entire selection. No shearing occurs on rotated objects. Objects with different scale keep their scale in relation to the other object in the selection.)
The main issue is, that when I do this kind of thing in UE4, it seems that some objects (like lights) don’t scale at all.
This is very frustrating, I wish there was a way of flagging old unsolved and/or unanswered problems into an archive or something. there are so many, that it clogs up everything and makes searching for solutions a huge waste of time.