Page MenuHome

Scaling settings wrong for 3D print (STL-Export)
Closed, InvalidPublic

Description

System Information
Win 7, 8, Mac OS X (not related to system)

Blender Version
Broken: 2.73a
Worked: before 2.73

Short description of error
Export STL scaling / World scaling relation broken

Exact steps for others to reproduce the error
Until now, I've changed the World scaling to 0.001 and metric for constructing of printable objects, which always gave correct results, when exported via the 3D Print Toolbox! No matter which slicer I used afterwards. In the viewport it showed the correct size in mm or cm, and in this size it was being exported. If I do the same now, the exported stl is to small by the factor 1000 (the exact reverse of the scaling setting), which results in very tiny objects.... If I change the scaling to 1, the export is in the right size, but the object is suddenly 200m big in blender instead of 20cm... And I can't get it back to that it shows the correct dimensions in both cases.

Details

Type
Bug

Event Timeline

Daniel Hinnerkopf (daresan) updated the task description. (Show Details)
Daniel Hinnerkopf (daresan) raised the priority of this task from to Needs Triage by Developer.

@Bastien Montagne (mont29) probably one for you? Probably caused by https://developer.blender.org/rBAe6b174a3b618907ed189c1fe95df7c9b19fc62ca
if valid.
To the reporter: are you using the new option in the exporter to use the scene's unit? Can you try changing the setting to see if the result is fixed/changes?

Bastien Montagne (mont29) triaged this task as Needs Information from User priority.Mar 5 2015, 8:46 PM

Well, answer is in the question I believe? Simply enabling new Scene Unit option when exporting should work here…

Hello!
Sorry, but no that does not work. I've tried it several times in different ways. Setting the scene scale before adding/importing an object (for example an .obj File) or afterwards, enabling the "Use Scene Scaling" option and disabling. The result is always correct when a scaling of 1is used. (I also applied all scalings on the object before).
But if I use any other scaling it get's wrong with or without button on.
Best regards,
Daniel

OK, so here is the main issue: STL has no unit. That is, the format does not define any default unit, and it does not embed any information about used one either.

Consequently, each application exports STL files in its own, default unit. For Blender, it happens to be meters.

So if you want your STL data to be in millimeters, and your scene’s uses that unit too, you have to either:

  • Disable 'Scene Unit`.
  • Enable Scene Unit, and set scale to 1000.

In any case, thanks for the report, but no bug here, just stupidity of STL format…

But why did it work correct in previous versions then? That's no explanation for that...

I have to agree with reporter here.

From what I can see, changing the scale of the scene to 0.001, makes the grid larger which visually implies that the data is already at the unit specified by the scene settings.
This means no extra multiplication is needed during exporting.

If, instead the purpose of the scene setting is to set the correspondence of a blender unit to a metric/imperial unit (which would have been simpler imo), then viewport scaling of the grid should not occur. I don't know the original intention of the feature so I will leave to Bastien, but reopening.

Once and for all: STL has no unit. Henceforth, there is no 'correct' or 'incorrect' scaling when exporting. User has to define itself which unit he wants his STL to be in, and set scaling accordingly.

Previously, scene's scaling (aka scene units) was not taken into account at all, so a 1BU object was always exported as 1BU, disregarding actual scene unit. Since you expect your STL to be in millimeters, this was working "by chance". That’s all.

I have to agree with Bastien after some thought. Looks like reporter expects that the setting in the scene is the setting blender exports at but that is not how it usually works with exporters, rather we make sure to export at the base unit (which is meter), so scaling is correct. If you want the data to be expressed in millimeters use the scaling factor in the exporter. As explained, previously this worked by accident mostly.

Sorry guys, you may hate me, BUT:
Why is there a button to use scene scaling when it has no influence on the export on what 1 BU is??
I know that STL files don't include a scaling! That's why it's important, that the model has already applied the scaling to it when it gets exported imho.
Don't try to explain why it does not work, just make it work! This is unexpected behaviour and confuses users, either take the f... button out, if it does not change anything or make it so that it ends in expected results!
Best regards,
Daniel

And by the way: this method was published in several books and tutorials about 3D printing with blender - you might want to keep that in mind as well in order to avoid more reports like mine...

I do not care about what is published, I care about correct behavior, which is what we have now! I have already explained why and how it works in length, this site is not a forum, period.

No, this is no way correct behaviour if a button does not do what it's supposed to do! Iman not See, how you can say that this is Vorrecht behaviour! You are obviously not Wirkung with it! The only existence right for this button is this function and it does not work! How can that be correct behaviour?
As I said before: Why the hell is it there, if it does not do anything?
And I don't care about your technical explanation why it currently does not work either, because it is not relevant!
Expected behaviour is to get what you see not what the developers wish it to be....

It is the correct behavior, because Blender assumes default unit of STL file to be meter, hence a millimeter cube will have coords like 0.001, this is expected, normal, sane, correct behavior.

If you want an STL file with (implied) units as millimeters, then you have to set global export scale accordingly (1000).

Again (and again, and again), there is no way to get an automatic correct behavior in all cases, due to STL files not conveying any scale info.

And it is very clever that Blender assumes 1 STL unit to be 1 meter, because you normally prepare objects in size of meters for printing, lasercuttimg, etc. ... , yeah sure!

And I did not complain about STL import btw...
I don't care how it's treated during import as long as I can put it into correct scale in blender and have the same scaling in viewport and output file. This would be correct behaviour, nothing else!

I don't understand what the problem is, you can either disable scene units during export or just set the scale to 1000.
Setting the default units to mm should definitely not be default. There are bigger printers out there too. Blender can't assume things just because it fits one use case.

And I don't get why there is a button which does not act the way it is meant to be or being described. The button says "use scene scaling", but in fact it always uses the standard scaling of 1? That's a bug not a feature in my opinion. I understand that it is not fitting to every case, but isn't this one more reason that you should be able to change it to your needs?

Hi guys,

This is tricky subject matter... it is more arbitrary/personal than you'd think.

Not too long ago Blender units were exactly as STL units... Not directly related to 'real world' units at all... Until the scene unit settings were added (and cycles makes some assumptions too I think).

Is there a unifying theory behind how Blender handles this? A person who keeps track of it? There's quite a lot involved... scene units.. rendering (cycles), the view/grid, import, export. How Blender deals with it internally and when connected to the outside world.

I tried to export and import stl and to me nothing seems changed... 1 blender unit is still exported as 1 stl unit (irrelevant of the scene scale setting) so it's unclear what this patch did... Is there documentation about it? I can see the code... but there's no real clear explanation.

To raise an old topic but I had the same experience this weekend.

I am using the STL files with Cura for the Ultimaker 2.

The Cura software assumes that STL files are in millimeters (I have been exchanging comments with their devs.) From the above I assume that this is not documented anywhere for the STL spec.

It would be a useful feature if Blender had an option to honour the scene scale settings and convert to a given output unit. For example scale the scene scale to millimeters. I work in metric but I expect it would be even more handy for people working in imperial sizes to automatically convert to millimeters.

That way regardless of what the STL format does or does not include, end users can set a scale that works for their models and their 3D printer without having to fiddle with the manual export settings (which are not reflected in the extra 3D Printing tools which also has an export button!)

All the STL files I have downloaded from the Internet have been to the correct scale so I assume other applications have been able to get a more user friendly output.

Thank you.

It seems to FINALLY (just tried in 2.76) be working.

I filed a same bug but it was never looked at like this here.

https://developer.blender.org/T43580

Thanks! Doing the happy dance. Finally a Blender >2.72 is usefull for 3D printing modelling.
Carsten