Proposal: Replace background images with Image Empties in 2.8x
Closed, ResolvedPublic

Description

Proposal

Image empties were originally added to be an easier to use background image.

Since 2.8x allows to remove some functionality, I'm proposing to remove background images.

  • They're stored in the viewport making it impossible to move to other scenes or viewports. (When "Load UI" is disabled, they're lost for eg).
  • They're difficult to manipulate.
  • They're duplicate code/functionality.

If we need empty-images to support some different draw options, we can always do this.

To make empty images more accessible the Add menu can have a "Background Image" entry with submenu choices "Left", "Top", .., and immediately opening a file browser to select the image. (suggested by @Brecht Van Lommel (brecht))

What to Keep

The one thing background images can do is draw in the camera with framing options.

I'd suggest this option be moved into the camera data-block (optional draw image/movieclip).

Changes to Empty Images

There are some features from background images we will want to support in empty images.

  • Option only to display in ortho axis-view.
  • Single sided display (to show only in front/back view).

Update: Wrote initial patch D2827

Campbell Barton (campbellbarton) renamed this task from Proposal: Replace background images with Image Empties in Blender2.8 to Proposal: Replace background images with Image Empties in 2.8x.

I think this would be good, especially coupling it to the scene instead of the screen would be a good change.

Maybe image empties could be made a bit easier to discover? The Add menu could have a "Background Image" entry with submenu choices "Left", "Top", .., and immediately opening a file browser to select the image.

Besides the normal image manipulations one thing the empties lack is the ability to easily assign them to a view.
So, I think we should find some way to easily do this for the empties.

@Brecht Van Lommel (brecht) - good suggestion, added to proposal.

@Aaron Carlisle (Blendify) - how do you mean assign to a view? I'd assume regular object/layer features would be used here.


Edit, do mean only display the empty in the axis aligned views?
We could use a shader that fades the images out when viewed at an angle.

Single sided drawing might be important too, so you can switch from front to back and see different images.

I was just trying to say the same thing as Brecht

I think Aaron means to make them only visible in top view or camera view for example. That's indeed very usefull. And if it works for empties, it would be great to have it work for all objects. I would add a kind of sprite rendering like in old games, where the image always faces the view, but can also be constrained to only rotate around Z for example. The empty would then have a list of views ([always show, camera, front, back, top, bottom]) were they are displayed or not, and the constraints. Blender current constraint don't work if you have multiple 3D Viewports with different views, but with OpenGL it's ok.
The X-Ray option to draw behind or in front should be enough to have then all functionalities with a much better usability.

In general, good suggestion indeed. I see lots of potential here.

Edit, do mean only display the empty in the axis aligned views?
We could use a shader that fades the images out when viewed at an angle.

Single sided drawing might be important too, so you can switch from front to back and see different images.

Yeah, I think this could work. Maybe more would be needed (e.g. support showing same image in multiple views with single image empty), but this sounds like a good start.

This is a feature i use a lot when sculpting, specially when i have hard time to get the proportion right, so it will be good if it has an option to turn it on and off in orthogonal view or perspective view. It will be disturbing to have it stick on your model while in perspective view.

@Erick Tukuniata (erickblender) noted in proposal "Changes to Empty Images".

@Julian Eisel (Severin), re:

support showing same image in multiple views with single image empty

Not sure what you mean? Empty images are just objects so they show in multiple views.

imho the actual system works well, and have some features really usefull and have few problems. The images are linked to one view (right, front,...) and don't show in perspective view, also you can use movies. You can have different references for each view and you don't have objects in scene bothering to the pipeline (You don't need to check if you have extra objects in the scene when export).

But in other hand it's true that it's hard transform the image, but it's something that you make one time each various days.

@Alberto Velázquez (dcvertice) agree existing system is not terrible or useless, but it does have some serious limits which aren't so easy to resolve.

Using a layer (in 2.8x) for reference objects should give enough control so they don't get in the way.

Vuk Gardašević (lijenstina) triaged this task as Normal priority.Sep 8 2017, 5:10 PM
Albert (wevon) added a subscriber: Albert (wevon).EditedSep 11 2017, 5:58 PM

Perhaps, by placing the Pivot in the center of the image by default, it will streamline the workflow.

I have modified code in 2.79 a bit regarding drawing image empties and am suggesting perhaps developers also consider with following small options, especially before anything gets uprooted:
a) togging of backface culling. E.g if you load Front view of a person, you do not want to see Font view from background(culling must be enabled). At the same time suppose you're modeling a car (Sideview), boat, anything symmetrical - need to see it from both left and right. Checkbox for toggle is needed.
b) Borders are not needed WHEN image is loaded. Depending on theme and generally in other 3D applications Helper objects are BRIGHT(e.g green) so Image planes with borders are highly distractive especially if there are many. I personally disabled drawing of them IF image is loaded.
Example: http://cgstrive.com/SS/2_9122017_e1b0.png

Albert (wevon) added a comment.EditedSep 16 2017, 8:27 AM

When you launch an image on the 3D viewer, it automatically appears in the backgroud. It would be good to conserve this functionality with the Empty Images. It would make cut out animations with ease.
Converting the Empty Images to Mesh Planes, retaining the proportions and texture, I think would also be useful for playing with complex shaders and lighting.

One option I liked on the old background images is being able to change the render order to switch having the image always be in front of everything.

Would a toggle like {3D space | Infinitely close | infinitely far} be something worth considering? I'm imagining the latter modes as ones where you can still select the empty and manipulate it on the view direction's orthogonal axes, but without the clutter of having them be in the way of your actual geometry.

@Patrick Boelens (senshi) in 2.7x this can be done by placing the empty object behind other objects, then toggling xray to render on top.

2.8 doesn't have xray option and I'm not sure if it will get it. Whatever the case - a way to easily draw over/under existing objects is needed.

Also is needed the opacity control of the image

The idea is to make easy use the background image. But actually the proposal is more complicated. The actual tool have all controls in one place, visibility, views. position,... It's one of the things more user friendly for noobs, and the proposal needs move the object in 3D view, create directly the direction, making necesary unable select the empty, use other objects Xray to show correctly,... I don't see if a image empty will have new uses in other workflow (with the grease pencil workflow), but in the background image it's hard to see the improvements in front of the actual tool, only more steps to configure a image for the background.

In other hand, I expect that 2.8 will have xray solution because is needed to make retopology.

Tested the empty as an image functionality yesterday in Blender 2.8, because Clay render doesn't have background image yet , sincerely talking it a pain to manipulate the image. it scales only from the origin and since scaling from the origin is like translating it is making it hard to have the image in one place. It would good to have the future empty as image behave just like Blender 2.79 background image.

@Erick Tukuniata (erickblender) - not sure how you mean? - it needs to scale from somewhere.

To scale around the image center we could default the image offset to x/y -0.5, -0.5

otherwise you can always use the 3D cursor.

@Campbell Barton (campbellbarton) i see now, so yesterday while testing i offset it first and i scaled it. I wanted it to be on specific spot and with specific size and every time i was scaling it to have the correct size it will move from the spot that i have put it before, now i see it was because of the offset.
And it seems like we cannot scale empty as image with bounding box as pivot center.
The option 'scale around the image center' will be good as well :)

Loving this proposal. Specially with the additions that Brecht mentioned of having it under the Add menu. Perhaps not immediately in the menu since it's not used as often but inside a submenu for other objects of a similar kind, maybe "Helpers" or so? I wouldn't add a sub-menu for Top/Left, etc. I would just rely on the artist being in the desired view beforehand.

To sum up:

  • Dedicated entry in the Add menu (under sub-menu)
  • On adding, open the file browser (thumbnail view/image filtered)
  • Pivot of the image should be centered (image offset -0.5, -0.5)

Thanks Campbell for this much needed proposal.

I wouldn't add a sub-menu for Top/Left, etc. I would just rely on the artist being in the desired view beforehand.

Makes sense, perhaps it can be an option in the operator redo panel still: Aligned to View, Left, Right, ... just in case it's not immediately obvious to new users.

Campbell Barton (campbellbarton) closed this task as Resolved.

Thanks for feedback, I've added these suggestions to T51366 - this task can be closed.