I don't understand how scaling should work

I’m very new to blender and am trying to design some plastic parts to be printed with a 3d printer. I’ve managed to do some boolean transformations between meshes to create my parts, but when I exported an STL file and sent it to my friend, the parts were tiny. Like 1000 times too small. I opened my blender files again and all of the units read correctly – some parts are in imperial units others are metric. I’m guessing this has something to do with scaling but I don’t understand scaling. I was hoping someone might answer these questions:

1) Why does blender resize all my objects when I change the scale of my scene? Is there any way to prevent this resizing of objects?
For example, a 1m square cube becomes a 1mm square cube when I change the scale from 1 to .001.

2) Why does each object also have a scale?
I enter the dimensions of my object in millimeters or inches. The scale values then change. I don’t understand what this scaling is for.

3) What should my scene scale value be in order to have my objects match my specified dimensions exactly? Is this scale value different for imperial units versus metric units?
This is what I’m most confused about. I’ve read a number of places that blender works natively in “blender units” which have no bearing on real-life dimensions. I have this vague idea that the ability to specify inches or meters is just a sort of tacked-on bit of functionality to reduce the need for a user to constantly make conversion calculations while modeling. I’m just flat-out confused by the idea that I set my scene to have a scale of 1.000, I specified my object size in millimeters very precisely, and then when I export an STL file, the resulting object is infinitesimal.

On the other hand, when I specified a scene scale value of .001 and specified my dimensions in millimeters, the object was precisely the size it should have been.

At the moment, I’m considering changing the scale of my scene from 1 to .001 but this will change all of the dimensions of my objects which I must go back and fix. Additionally, the current part is designed using Imperial units (because it needs to interface with actual real-life bearings and screws measured in imperial units) and I have no idea what scale value to use.

Any assistance here would be greatly appreciated.

1 with that setting you are specifying how big a unit is so a 1 unit cube is by default. 1m.
You changed it so that 1unit is 1mm so your cube became 1mm.

If you append objects from different scenes with different scales I don’t know what happens… but i’d hope that scene scale is taken into account!

2:Object scale is mostly best left at 1 for all axis…(and actual scaling done in edit mode) but it’s there so you can scale objects from different sources to match each other relatively…
Also you may have many objects referencing the same mesh (instances) but want each to have a different size (eg trees).
p
3: if you are working in mm then set the scene size to mm (0.01) then one blender unit is 1mm
Working in imperial you probably want scene size to set 1 unit to a foot, a yard an inch or whatever.

Thanks for your response. I’m not dealing with scenes at all yet – just individual pieces for 3d printing.

I can understand that one might need to scale imported objects to match with your scene but I’m having a bit of trouble getting my head around that. I can also appreciate that after generating an entire elaborate scene for weeks that you might want to export it either larger or smaller to interface with some other project.

What is really confusing here is that I have specified my object dimensions using metric and imperial units: e.g. 3cm wide, 3cm high, and 5mm deep. When I export to STL format (which apparently has real-life dimensions inherent in the file) then my object is measured in micrometers despite the fact that my scale is set to 1. It would seem to me that something is strange in the conversion to STL.

I’ve noticed that if I change my scene’s Units from “Metric” to “None” that my object is 30 blender units x 30 blender units by 5 blender units. I’ve also noticed that changing the Scene’s Unit Scale does not change the dimensions of my objects at all. If my object is 30 blender units by 30 blender units then it stays that size no matter how much I tweak the Scale value for my scene.

I’ve also noticed that the scale value changes when I alter the X/Y/Z dimensions of a mesh that I have added. For example, I click Add->Mesh->Cylinder to add a cylinder to my scene. When I change this cylinder from 2x2x2 to 2x2x4 then the scale value for Z changes from 1 to 2. I think this might be making sense: The added cylinder is a mesh of particular dimensions. When I change the dimensions in object mode, it alters the scale values accordingly. Imported STL files have a scale of 1 until I start changing them. In both cases, they are meshes.

I’d still like to determine how to properly handle the relationship between internal blender/imperial/metric units and the units described inside an STL file. I’ve read a bit on STL file formats and apparently it’s for lithography, rapid prototyping, etc. I suspect it does in fact support absolute, real-world dimensions. Unfortunately, the blender->stl export doesn’t have any kind of setting or documentation to explain how blender units translate into real-world units.

All 3D apps and formats use units of some sort. They are inherently arbitrary, since it is virtual space, not real-world space. When an app or format has to interface with real-world tech, then in most cases a unit equivalency is specified, e.g., “CADAPP (fictional name) uses a 1 unit = 1cm scale.” This guarantees easy transference to real-world uses.

If your target format (STL in this case) does not specify what its default units are then you need to do some testing or dig deeper into the specifications, because you’ll need to know that to set up an equivalency from Blender. STL may work in “real world units,” but which units? That’s the important question to answer. Millimeters, feet, rods, leagues and light-years are all “real-world” units.

Once that STL base unit is known, you can do a simple test using a cube to establish the proper equivalency from Blender. Choose a world/scene scale (btw, if you make a model in Blender, it exists in a Scene, so you can manipulate Scene parameters to affect your model), export a cube of dimensions 1x1x1 BU (Blender units) and see how the STL-using app treats that. If the STL base unit is 1 meter and your model comes in at .001 STL-units, then the equivalency for that Blender world scale is 1 BU = 1mm in the STL world. Change the Blender world scale, export, and see if this relationship changes. If it does, you know by how much and you can easily figure how things can be adjusted in Blender to fit any desired scale in the STL world.

Excellent, concise answer. I think I may go check out thingiverse.com to see if they have any forums where someone might have a good answer for this. Or maybe get on some kind of IRC channel.

The scaling thing is starting to make sense. I’ve noticed that the scale value has no effect on the dimensions of my objects if I have the scene’s Units set to “None”. When I set my scene’s units’ to Metric or Imperial then the scaling affects the dimensions of the objects in my scene.

Thanks for the clear description.