(轉)Unity與3ds Max的單位關系(使用FBX文件)


版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/a1780531/article/details/90933558

 

  游戲引擎通常並不具備專業的建模功能,所以通常情況下模型都是在專業的三維軟件中進行設計,然后再通過特定格式的文件導入到游戲引擎中進行游戲開發。Unity支持多種外部導入的模型格式,如FBX、3ds、dxf和obj等。
  本文中介紹的FBX文件是Autodesk公司出品的一款用於跨平台的免費三維創作與交換格式的軟件,通過FBX用戶能訪問大多數三維供應商的三維文件。FBX文件支持所有主要的三維數據元素以及二維、音頻和視頻媒體元素,是當今主流的文件格式。通過在3ds Max中將模型導出為FBX格式文件,再將文件導入到Unity中,就能夠對模型進行進一步的游戲設計。在導出導入FBX文件的過程中不少用戶會發現模型的尺寸會發生變化,“明明在3ds Max中的設計尺寸為1米,導入到Unity卻擴大了一百倍”。究其原因,是因為二者單位轉換的問題,弄明白二者之間的關系,就能節省很多開發時間。本文中采用Unity2018.3.0與3ds Max2012進行示范演示。
  第一種情形:
  (1)在3ds Max2012中將系統單位設置“1單位 = 1m”,如圖1所示。(設置系統單位的方式:在菜單欄中選擇“自定義”-“單位設置”-“系統單位設置”)

 

圖1 系統單位設置

  (2)在編輯區創建一個邊長為2米的正方體,如圖2所示。

 

圖2 邊長為2米的正方體

  (3)點擊3ds Max左上角的圖標,選擇“導出”-“導出”,命名為“testCube.FBX”,這樣一個最基礎的FBX文件就創建完成。
  (4)將FBX文件導入到Unity場景中。在Unity項目中新建文件夾,命名為“Prefab”,將上一步生成的FBX文件放置到該文件夾下,並將模型拖至場景中,為了后續便於區分,給該正方體添加黃色材質。如圖3所示。

 

(5)為了驗證3ds Max與Unity之間模型的尺寸關系,我們需要知道Unity中模型的實際尺寸。Unity中默認單位為米。通過以下腳本獲取模型的尺寸

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetSize : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Vector3 theSize = GetObjectSize();
        print(theSize);
    }

    // Update is called once per frame

    Vector3 GetObjectSize()
    {
        Vector3 realSize = Vector3.zero;
        Mesh mesh = GetComponent<MeshFilter>().mesh;
        if(mesh == null)
        {
            return realSize;
        }
        Vector3 meshSize = mesh.bounds.size;
        Vector3 scale = transform.lossyScale;
        realSize = new Vector3(meshSize.x * scale.x, meshSize.y * scale.y, meshSize.z * scale.z);
        return realSize;
    }
}

將腳本掛載到測試正方體中,運行程序,在控制台輸出窗口就會顯示尺寸,如圖4所示。

 

圖4 控制台輸出尺寸

可以看出模型在Unity中的尺寸為2m x 2m x 2m,與我們在3ds Max中的尺寸一致,並且注意到圖3右側Inspector面板中Transform一欄中的Scale的三個值全為1。
  第二種情形
  (1)將第一種情形中3ds Max中的系統單位設置為"1單位=1cm",同樣繪制邊長為2m的正方體。在導出FBX文件時仍然選擇場景單位轉化為“米”,注意到此時比例因子變成0.01,如圖5所示。

 圖5 設置場景單位

(2)將導出的FBX文件導入到Unity場景中,如圖6中紅色立方體所示。通過腳本獲取立方體尺寸大小。

從圖中可以看出,立方體的尺寸依舊為2m x 2m x 2m,但是Inspector面板中Transform一欄中的Scale的三個值全為0.01。這也就可以看出,因為在3ds Max導出設置時比例因子為0.01,這也就使得Scale變為0.01。
  第三種情形
  (1)3ds Max中的系統單位設置為"1單位=1m",同樣繪制邊長為2m的立方體。在導出FBX文件時仍然選擇場景單位轉化為“厘米”,注意到此時比例因子變成100,如圖7所示。

(2)將導出的FBX文件導入到Unity場景中,如圖8中淺藍色立方體所示。通過腳本獲取立方體尺寸大小,物體尺寸仍為2m x 2m x 2m。但是Inspector面板中Transform一欄中的Scale的三個值全為100。這也就可以看出,因為在3ds Max導出設置時比例因子為100,這也就使得Scale變為100。

 

第四種情形
  (1)在Unity的project面板單擊第三種情形中創建的正方體,會在相應位置顯示該模型的Inspector面板,可以注意到Convert Units屬性是默認選中的,我們現在取消選中,如圖8所示。

 

 

(2)再將該立方體拖放到場景中,會發現立方體會擴大很多倍,使用腳本獲取尺寸,大小為200m x 200m x 200m,如圖10所示。

 

為什么會發生這種情況呢? 因為我們在3ds Max模型的單位為米,而導出設置時場景單位為厘米,這樣模型大小就可以表示為200厘米 x 200厘米 x 200厘米。因為在默認條件下,Convert Units選項是被選中的,而且選項中有指出"1 cm(File) to 0.01m(Unity)",這樣最終轉到Unity中就是2米 x 2米 x 2米,可以理解為“帶單位轉換”。但是如果取消Convert Units選項,Unity就不會識別FBX文件中模型的單位是多少,而只是默認識別為200單位 x 200單位 x 200單位 。之前講過Unity中默認的單位為"1單位=1米",這樣導入到場景中就會變成200米 x 200米 x 200米,“可以理解為不帶單位轉換”。

  總結
  經過上述幾個情形的舉例,我們已經能夠大致了解Unity與3ds Max之間的單位關系。3ds Max中的比例因子參數就是對應了Unity的Transform中的Scale屬性。而場景單位就是對應於Unity中的單位,為與Unity單位一致,場景單位最好設置為米。將模型導入到Unity之后要注意觀察其Convert Units選項,通常情況下,為了保證3ds Max與Unity中的模型尺寸一致,需要將該選項選中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM