Unity模型導入的若干問題


    最近房價漲得太快也懶得去看房了,空下來的時間看一下unity,發現unity3D-3.5版官方的AngryBots示例效果很震撼,就下了一個unity來玩玩。想把unity玩起來自然離不開model,面對3dsmax這些nb工具,作為一名服務器端程序員對此表示壓力很大,無奈只能求助谷哥找一些model。

    廢了九牛二虎之力后把model從3dsmax導入unity,把模型drag到一個1*1的場景里,結果如下圖......

image    

    呃,我的模型呢?還好在Hierarchy里有我導入的model,雙擊后可以看到(給我的Peon打了一個Point light^_^):

image

 

    看來是model的scale太小了,為什么會太小了呢?3dsmax和unity的unit scale不一樣?怎么設置才能達到想要的效果?本文將逐一解答這些問題。

 

 

一、比例問題的產生原因

    簡而言之:在默認情況下U3D系統的一個單位(1unit)等於1米,而在3dsmax中默認的單位是inch,因此產生了上述的比例問題。下面的引用來自unity官方論壇:

    By default, the units in Unity are meters. So the default size for terrains is 1000m x 1000m, with a max height of 600m. You can change this in the Terrain->Set Resolution menu.
    The default settings for gravity, and audio dopplar also reflect the default 1 unit = 1m.
    This means that if you want to use the units as some other distance (eg, inches, feet, miles, or whatever), as well as importing models scaled to this new size, you'll also need to adjust the gravity and dopplar settings accordingly so that they produce sensible results for your new world scale.

知道了比例問題產生的原因,接下來就要想辦法來解決。

 

 

二、解決辦法

    解決方法有兩個方面,一種是在unity中調整模型的Scale Factor;另一種是在3dsmax導出的時候按照unity的單位導出。下面分別進行介紹:

 

(1)在unity中進行調整

    模型由3dsmax按照inch的系統單位導出成FBX格式的文件,導出的模型一個單位代表一個inch。unity每個單位代表1米,而unity導入FBX模型是以厘米為最小單位的,因此需要對模型進行一定比例的放大操作。放大比例應該設為多少呢?先做一個實驗:

    在max中創建一個1*1的plane,並把參數設置成:

{64C9B349-8F05-4988-BDC8-178E6F286A6D}

 

    導出fbx文件時注意把單位設置成厘米(cm):

image

 

    將fbx文件導入unity后,把Insepector面板里的Scale Factor設為1,即放大100倍。下圖左側是一個1*1的terrain(一平方米),右側就是放大100倍后的plane。可以看出來plane的邊長大概是terrain的2.5倍,也就是2.5米左右。可以來計算一下:max中一個1inch * 1inch的plane,其實也就是2.54cm * 2.54cm ——> 以cm為單位導出成fbx文件 ——> 導入unity后放大100倍,變成2.54米 * 2.54米(2.54個單位)的plane。看來這個流程應該是正確的。

{4342429F-5366-41F7-9277-43F463FC8DD8}

 

總結——在unity中調整放大比例:

    1、如果模型以厘米為單位從max中導出,則導入unity放大100倍可以得到想要的結果。

    2、如果模型以inch為單位(默認情況下)從max中導出,則導入unity后需放大254倍。1inch * 2.54 –> 2.54cm –> 乘以100倍得到結果

PS:unity的模型放大有兩種方法:一種方法是修改FBXImporter中的Scale Factor數值(上文提到的Insepector面板里的Scale Factor,其值默認為0.01),將Scale Factor的數值恢復為1,但這樣做據說會占用模型資源,比較消耗物理緩存;另一種方法是從Hierarchy中選中待修改物品,使用Scale同時放大x,y,z各100倍,這種設置據說耗費的資源比較少,同時還能通過使用腳本來進行這個放大操作,十分方便。

 

 

(2)在3dsmax中進行調整

    在max中進行調整就是要對模型進行整體縮放,這里有兩種方法。

1、第一種方法:在max中選中模型后按R鍵或者在左上部的工具欄clip_image002按鈕可以進行縮放,還可以在右下角找到clip_image004,進行縮放。但這種方法不會改變模型本身的絕對大小,只是改了一個縮放因子,因此不推薦使用。

2、 第二種方法是等比例縮放:全選模型 –》點右上角的工具面板clip_image002[5] -》點擊“更多”clip_image004[4]

-》點擊“重縮放世界單位”

clip_image006

-》點擊右邊的按鈕clip_image008

-》按照圖中的比例選擇“場景”然后點擊確定clip_image010 完成模型的整體放大。

 

    放大比例是1:100,max導出時要放大100倍。(注意導出FBX文件時“單位”要選擇厘米)

 

 

三、比例問題總結

    unity中默認的unit scale和3dsmax的默認scale是不一致的,因此在unity中使用max制作或導出的model時一定要注意比例問題。

下圖是一個128個單位(inch)的cliff,圖中白色的方塊是unity中一個4*4的terrain。128個單位的inch等於128*0.0254=3.2512米,從圖中可以看出比例應該是正確的。

image

 

 

四、Unity3d和3dMax美工部分總結

     本小節的內容全部轉載自參考文獻[1]

    3dsmax2010安裝插件,輸出FBX的類型導入Unity3D中。默認情況下,3dsmax8可以和U3D軟件直接融合,自動轉換為FBX物體。

1.面數控制
    在MAX軟件中制作單一Game Object物體的面數不能超過65000個三角形,即32500個多邊形Poly,如果超過這個數量的物體不會顯示出來,這就需要我們合理分布多邊形和模型數量。打開MAX場景,選擇File/Properties/Summary Info可以打開文件屬性記錄。其中Faces可以看到每個物體的實際數量,模型面數要少,個體數量不能超過65000個Faces面。
    有特殊效果的模型需要單獨制作,物體命名要統一(SanLou_YanHuiTing_JingZi或者SanlouYanhuitingJingzi),但不能出現重復,否則整合模型會被覆蓋,給后期工作造成不必要的麻煩。

2.建模控制
    Unity3D軟件支持Line渲染和編輯之后所產生的模型。大部分模型都依靠Polygon進行制作。在模型表面可以承認多出四邊形的面,但不渲染交錯的面。默認情況下,U3D引擎是不承認雙面材質的,除非使用植物材質球Nature類型。所以在制作窗戶、護欄等物體,如果想在兩面都能看到模型,那需要制作出厚度,或者復制兩個面翻轉其中一個的Normal法線。

3.文件的放置
    模型可以繼承MAX的材質,但是文件的設置要按照以下形式進行放在項目的Assets文件夾內,新創建一個Object文件夾。並在其中創建Materials和Texture文件夾(分別自動存放材質球和貼圖)。模型物體並列保存在Object文件夾內。這個規律模式不要打亂,否則會破壞整個系統邏輯。

4.材質數量控制
    物體材質要賦予默認的標准材質standard,特殊材質需要特殊調節(玻璃,鏡面等),透明材質需要給雙面。如果一個物體給與一個材質球,那么Unity3D對於材質數量和貼圖數量沒有任何的限制。
    如果一個物體給與多個材質球,我們需要用Multi/SubObject來實現,但是這種羅列的材質球的數量沒有嚴格的控制,但盡量保持在10以內,過多的數量會導致一些錯誤。
    如果不使用Multi/SubObject材質球,也可以選擇一些面,然后給與一個材質球。這樣系統會自動將其轉換成Multi/SubObject材質。
    綜合而言Unity3D軟件對於材質的兼容還是很好的。

5.物體的質感
Diffuse、Diffuse Bumped、Bumped Specular,這三種類型為常用類型,其中Bumped需要增加Normal法線貼圖來實現凹凸。
Decal
    這種材質為貼花材質,即相當於Mask類型,可以再Decal(RGBA)貼與一個帶有Alpha通道的圖像,形成和原圖像相疊加的效果。
Diffuse Detail
    這種材質可以創造出污跡和划痕的效果,即相當於Blend混合材質。
Reflective
    其中各種類型可以創造出金屬反射效果,需要增加Cubmap貼圖。
Transparent
    其中各種類型可以創造出透明的效果,需要增加具有Alpha的通道貼圖。
    注意:如果要做玻璃貼圖,Alpha如果全是灰色或黑色(即要求全透明),那么Alpha就會失效,如果要全透明,材質Alpha其中必須至少有1像素為白色。
Nature
    其中Soft Occlusion Leaves類型主要應用於片狀的樹葉材質。

6.關於復制
    場景中的燈光布局,重復的模型物體都可以使用系統Prefab進行關聯復制,這樣可以改變一個參數的同時將所有關聯物體屬性改變。

7.山脈控制
    在創建山脈之后,選擇Terrain/Set Resolution可以設置山脈的大小和屬性。
    需要注意的是,默認情況下Terrain Width和Terrain Height為1000米。如果設置這個數值太小,那么繪制草的時候會產生偏移,因為草的尺寸必須減少到0.1的單位。
    也就是說,山脈在處理0.1單位的時候會產生0.01的偏差,如果模型太小,這種偏差是顯而易見的,所以建議用戶不要讓模型過小。

8.光暈控制
    光暈又稱為Lens Flare即燈光光效。可以選擇一個GameObject物體給與Component/Rendering/Lens Flare,並在Flare中增加一個Standard Assets/Light Flares/50mm Zoom項目。這樣在運行之后就會產生光暈。但有時候如果光暈太遠太高卻看不到。一種辦法是將光暈離近,另一種辦法是將所有攝影機Camera的Far clip plane的數值增加。

9.攝影機控制
    如果場景中有多架攝影機,那么如何確定第一打開時間所顯示的攝影機,就需要設置Camera屬性中的Depth數值,數值越大的攝影機越優先顯示。

 

 

References:

[1]http://ilaoxu.com/unity3d-and-3dmax-art-section-summarizes.html


免責聲明!

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



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