Why is the scale so big?

Why is a meter in unity 1000 units in max/gmax/maya?

In Rockstar’s games, their models are like 1 unit = 1 meter, and they can make huge worlds in the same space of 1 bedroom in unity.

Why not scale down everything? Vice City fits entirely in the Home Grid in Max/Gmax - why do other engines do things so large?

It’s not just because it’s a large game, even manhunt and warriors are small scale like this… In my imagination, it seams it means that really a car only needs to move 1/1000th as fast as it would in unity to appear the same speed, doesn’t that mean it will run 1/1000th as well in the larger scale??

If my whole map is only 1000 units across, and a car is only 1 unit long, isn’t it better for the engine than for me to make the car and world 1000 times bigger, doesn’t the engine work hard to match the speed proportionally?

Like, if I only need to move “1 unit per second” to be going 60mph, isn’t that way better than moving 1000 units per second? (fuzzy math)

Change the import scale for your models. 1 unit in Unity = 1 meter by default (although technically it’s arbitrary; you can have 1 unit = anything, depending on how you define other factors like gravity).

–Eric

I was a bit confused about that too and asked about it over at the Unity Answers Tool.

http://answers.unity3d.com/questions/1678/how-small-can-i-scale-objects

It turns out the scale is completely up to you and you really only have to adjust gravity. It can get a bit annoying though when you import lots of different objects and you have do adjust the import scale every time.

And the other thing is that the editor is not as comfortable to use when you’re way of the default scale because zooming and mouse movements can get very fast (or slow).

The scale is really, really irrelevant. Since everything is relative, it just doesn’t matter that much.

If you really wanted, you could just adjust the gravity to be 21.176 units per second and plan your game in cubits.

One thing which is really, really smart to do is decide this in advance with the artists. The art really should be able to be imported without resizing in the engine if you control the whole pipeline.

For your case, you could make the cars life size in the editor, so that they are roughly 1.5m tall (or 1.5 units) and place them in a room which is much, much larger than than real life or you could do the inverse and make the room life size and the cars tiny (like toys, so life size for toy cars).

As for the physics, you shouldn’t rely on the in-engine physics too much for a game like that. They will have to tuned a lot until they feel right.

For example, it takes about 2 seconds to fall 20m. In a fun racing game, a 2 second jump should be pretty cool. Except here, that is 4 times height of the room. Even a 1 second fall nets you slightly less than 5m, which is still higher than the highest point of your 4m room.

So, going with real physics, where falling off of a 1m table would take such a small amount of time as to feel pointless and any jump would feel rather boring. To get a full 2 seconds of air time, using simple physics, you would need to have 9.8m/s of vertical velocity, which means you pass through the entire room in less than half of a second. That would be unplayable.

This is just my opinion, but I think the cars should feel like real cars, but with more excitement and the room should be scaled up to be huge.

Ultimately, gameplay is what draws people, certainly more than physics. Even in the best simulation games, they do a bit of adjusting here and there for the sake of performance and playability.

It’s actually not that irrelevant, because of 32-bit floating-point imprecision. When you get far enough away from the origin, you get noticeable jittering and other unpleasantness, so you don’t want your numbers getting too large too soon.

–Eric

You know, after I wrote that I was thinking about that, but didn’t want to get too caught up in it. Certainly, you could try to fit the whole game in 1 unit, but you would end up in floating-point hell. Likewise, you could make things too large and end up in that same floating-point hell.

I dread getting caught up in too much math on a forum, but you are right. If you go to crazy in either direction with the scale, you can have problems.

Leave Maya in centimeters, export fbx (default cm) to Unity, and each cm = 1meter
(some say to change to meters in Maya, but I opted not to because there are a lot of tools in Maya that won’t work properly by doing so, such as the soft mod tool and skinning brushes)

Is there some master import setting in Unity?

Yep, and also the physics system seems to hate smaller numbers, so it’s better to keep things on a scale of around 1 even if modelling tiny objects, and just scale gravity etc. as needed.

–Eric

Scale is theoretically arbitrary, but practically speaking, it can be a real pain if you deviate by more than an order of magnitude from 1unit=1m, and in my experience the physics doesn’t behave the same even if you scale appropriately. In my first attempt at HyperBowl I left the import scaling alone and changed the physics, light, shadow, camera values, etc. etc. and still had screwy results in the physics - for example, the bowling pins had a tendency to get stuck in the midst of toppling over. Maybe I missed a value that needed scaling, but everything worked a lot better with a lot less tweaking when I reimported everything with 1x scaling.

Another vote for sticking with the default 1 Unity unit = 1 meter, unless you have really huge or really tiny objects.

It’s not just gravity that assumes 1 unit = 1 meter, there’s also the default interpenetration values, sleep velocities, character controller default values and lots and lots of other things that have been nicely tweaked to work at that scale. Besides physics, there’s also the default shadow distances, the default point light ranges, camera clip ranges, etc etc etc.

Lots of things that if you forget to tweak will keep you from having a HAPPY NEW YEAR.

Really useful thread guys, thanks.

I spent days in the beginning exporting 1m cubes from various 3D packages to try and figure out a safe scale workflow.

Actually, I had to rescale all my rigged chars too (took me some time as they were already animated), but 1 unit = 1 centimeter does please me, as it’s the common scale for measuring from a human perspective (human height, movement distance per second, weapon size, etc).

Is there any way to set the default FBX importers scale to 1.0 instead of 0.01?
It´s annyoing to do that by hand for each modell, since it always means an additional re-import, which may take a lot of unnecessary time.

Take a look at http://unity3d.com/support/documentation/ScriptReference/AssetPostprocessor.OnPreprocessModel.html

Try this:

using UnityEditor;

public class FBXScaleFix : AssetPostprocessor
{
    public void OnPreprocessModel()
    {
        ModelImporter modelImporter = (ModelImporter) assetImporter;                    
        modelImporter.globalScale = 1;        
		modelImporter.addCollider = true;
		modelImporter.normalImportMode = ModelImporterTangentSpaceMode.Calculate;

    }   
}

That´s it, thank you!