7
$\begingroup$

Let's say I created some objects without regard to their actual size. Is there a way to set the scale of the scene such that nothing actually changes other than what blender considers the size to be?

For example I drew a plane that was 3.1 x 3.1 before I knew how to change units in blender. I set the units to Feet and it shows up as 3.1' x 3.1'. In the real world the the object I'm modelling is 10' x 10'. Is there a way to tell blender to make 3.1' to 10' and all other objects, cameras, lights, etc. all adjust the same way.

In Sketchup I can use the ruler tool to take a measurement then type in what that measurement should actually be and everything gets rescaled. Nothing changes visually in the model other than when I take measurements they correspond to the real world values.

$\endgroup$
1
  • 1
    $\begingroup$ Create an empty. Select all of the objects and parent them to the empty. Scale the empty. $\endgroup$
    – user1853
    Commented Feb 28, 2019 at 2:02

2 Answers 2

8
$\begingroup$

1: Set Units

First you need to tell Blender what type of units you're going to use. In the "Outliner" which is normally in the top-right corner of the application, Select the "Scene" Node by clicking on it.

In the Properties toolbar (usually right under the Outliner) click on the "Scene" button which should be the third one from the left. It has a light, a sphere and a cylinder on the button. Scene button

In the "Units" section below you can choose from one of the predefined Units presets such as Centimeters, Feet, Inches, etc. Choose the appropriate one.

Make note of the "Unit Scale" input field. We'll come back to this later.

enter image description here

2: Measure your reference

To scale the image you'll need to know what the current length of a known point is. You can use the Ruler/Protractor tool by opening the Tools toolbar if not already open by hitting the T key, going to the "Grease Pencil" tab and clicking on the "Ruler/Protractor" button. Click and drag between two points to get a measurement. Hold the Ctrl key down as you drag to snap to vertices.

Another way is to turn on edge length. Hit the N key to open up the "Properties" region toolbar if not already open. Hit Tab to go into edit mode then look through the Properties region towards the bottom for a section labeled "Mesh Display" There will be a check box under the "Edge Info:" section labeled Length. If you enable this, you will see the length of each edge when you're in Edit Mode.

Let's assume the reference edge is 3.1" after we set the units and we want it to be 10'.

3: Adjust the scene unit scale

enter image description here

Now we can set the "Unit Scale" I said we'd come back to. Select the Scene in the Outliner, Click on the "Scene" button in the Properties toolbar and look under the "Units" section for "Units Scale".

In example image cube is scaled to dimension 3.1' To make Blender report the size as 10' can adjust the scene unit scale by multiplying it by 10 / 3.1. (Since the scale was unit in image above, didn't need to multiply)

If scene had non unit unit scale, say 3.3, and the dimension was 3.1' to adjust to 10' could have typed 3.3 * 10 / 3.1

Related answer

$\endgroup$
1
  • $\begingroup$ I'm trying to do it but there are things in blender that don't change with it like position in fcurves, would there be a way to "apply" the scene scale? $\endgroup$ Commented Jun 16, 2020 at 18:16
1
$\begingroup$

A simple solution, run in the Python console:

scale = 0.5
# change scale and location
[[setattr(obj, 'scale', obj.scale*scale), setattr(obj, 'location', obj.location*scale)] for obj in bpy.data.objects]

Maybe you also need to adjust the power of the light to get a more accurate illumination.

If you have Emptys in your object hierarchies, the scale change will get applied multiple times. To get around that, you can modify the above snippet to skip scaling the Emptys:

import bpy
scale = 0.5
# change scale and location
[setattr(obj, 'scale', obj.scale*scale) for obj in bpy.data.objects if obj.type != 'EMPTY']
[setattr(obj, 'location', obj.location*scale) for obj in bpy.data.objects]
$\endgroup$
1
  • 2
    $\begingroup$ It doesn't deal with scale in other settings like for example far and near clipping planes of cameras, distances in modifiers and many other properties. $\endgroup$ Commented Oct 22, 2022 at 7:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .