unity3d簡單游戲教程 unity3d開發教程



文章插圖
unity3d簡單游戲教程 unity3d開發教程

文章插圖
工作中經常遇到3D制作不了解引擎要求導致返工或是被客戶說沒有經驗,所以就邀請了工作十多年,經驗豐富的TA-紅偉大哥做了一篇相關文章為大家解惑,紅偉大哥也有相關獨立游戲開發經驗 。
很多3D同學都會面臨一個問題,就是對引擎不熟悉,導致對某些資源規范和優化方法知其然不知所以然,特別是3D相關的同學,由于平時工作基本上不需要跟引擎打交道 。另外3D美術外包更是如此,更沒有機會接觸到引擎 。
于是,為了給廣大3D同學謀福利,此篇就誕生了 。
引擎是什么?
想想汽車引擎是什么就明白了,要想讓汽車跑,必須要有引擎,同樣游戲要想運行起來也需要引擎,引擎將我們的美術資源與程序組合起來并利用渲染、物理等模塊進行拼裝使其可以正常運行 。汽車引擎有各種品牌,游戲引擎也是一樣,目前市場主流引擎有:Unity和Unreal,本篇我們主要討論Unity 。
Unity引擎
Unity的版本相當的多,截止目前為止,最新的正式版為2017.4.1f1 。
每個版本的后綴你會發現不一樣,分別代表什么意思呢?
【unity3d簡單游戲教程 unity3d開發教程】· b (beta版,也就是測試版,還沒有正式發布,b1代表beta第一個版本,b2代表beta第二個版本) 。
· f (正式版,面向所有開發者的版本,一般比較穩定) 。
· p (補丁版,一般是針對正式版進行的bug修復版本) 。
比如上面的2017.4.1f1就是指版本為2017.4.1的第1個正式版.
選擇什么版本一般由項目主程來決定,所以我們不用過多操心,只要保證項目成員版本統一就可以了 。
本篇重點
接下來,我們步入主題,我們以下幾個維度來重點分析下(由于篇幅有限,不能把每個步驟操作都詳細說明,還請各位3D同學見諒)
1. 規范
2. 品質
3. 性能
規范
美術資源,不管是3D還是2D,也不管是模型還是動作亦或者是特效,在引擎中都要有一定的規范才行,因為這些資源并不是給我們自己用的,而是團隊中大家都會共同用到的資源,特別是程序,如果規范沒有定清楚,會導致工程很混亂,不管是后期維護的成本還是開發的成本都會增加不少 。
那么關于3D模型的規范有以下幾點:
· 單位
3D資源導入Unity時,首先面臨的問題就是單位,由于Unity中的單位是米,所以我們通過以上設置即可達到max與Unity的單位統一,這對于整體比例把控以及引擎中世界大小的制定相當重要 。
· 方向
由于Unity的坐標系是左手坐標系,max是右手坐標系,而且Unity中z軸的正方向被認為是前方(物理系統,方向變換等都是基于此進行的),所以為了使其簡單化,3D資源最好是將方向調整為unity的標準 。
標準:在max中,更改模型的軸,使其Z軸指向物體的前方,Y軸朝上!
品質
不管是角色還是場景最終的美術效果都要以引擎的為準,不以引擎為目的的資源都是耍流氓!那如何要做到這一點呢?其實很簡單,單說品質這一點,只有一個概念——Shader 。
Shader可能大家不是很了解,但是大家一定都對材質相當熟悉,那事情就簡單了,你可以理解為材質的底層就是Shader,Shader是引擎中渲染一個物體時所必須要用到的一段程序代碼,一般是由TA或者程序來為項目制作的 。一個物體的材質質感如何完全取決于Shader,材質只不過是更上一層,可以用來調整 Shader中參數的對象而已 。關于Shader,水很深,我們不做過多不相關介紹,本文主要圍繞作為3D美術所必須知道的知識來講解 。
既然我們已經知道了3D軟件中的效果并不是最終游戲所呈現的效果這件事情,那么作為一個有責任的3D同學,就要想辦法去使自己做的3D資源能夠在引擎中顯示出最佳效果 。
最常用的方法就是將自己制作的3D資源導入到Unity中進行觀察效果(一定要使用項目定好的Shader,否則也是白調),來回反復調整,以使其在引擎中達到最佳 。
那么要做到這一點我們需要掌握什么知識呢?
· Unity引擎的簡單使用(基礎教程網上很多,有天賦的同學自己打開軟件摸摸也就了解了)
· 重點學習下如何在Unity中給3D模型賦材質,以及調整材質效果 。
然后你就可以為所欲為了 。。。
優化
模型效果上來了,但是程序說太耗了,要優化,這時我們不能讓自己于一臉蒙逼的狀態,一定要有所覺悟,知道該如何去優化 。關于優化,并且跟3D同學相關的,我們有以下幾點需要注意:
頂點數
很多同學以為模型影響消耗的都是三角面數,只要控制三角面數就好了,其實不然,三角面數固然重要,但是頂點數也不容忽視,這里普及一個知識點:渲染一個模型需要用到Shader,而Shader中又一定分為頂點著色器與片斷著色器,而頂點數量的多少直接與Shader中頂點著色器的消耗成正比 。也就是就頂點數越多消耗越大!
除了常規美術上的少點少面以外,我們這里額外說兩點與引擎相關的,如何去減少頂點數 。
首先我們做個簡單的測試:
在max建一個Box,然后導入到Unity中,觀察他們的頂點數區別 。
max:8個頂點,12個三角面
unity:24個頂點,12個三角面
三角面數一致,頂點數竟然相差這么大!
產生頂點數不一致的原因主要有兩點:
1. 光滑組不一致,當多個面設置了不同的光滑組時(如果這些都處于一個平面,則不會)就會導致頂點數增加 。
2. 當模型上一個頂點在UV中對應多個頂點時(切割UV會產生這種效果)也會導致頂點數增加 。
當兩個面光滑組不一致時,它們所共用的頂點將需要兩個表現法線方向的信息,unity中無法通過一個頂點來獲取到這些信息,所以在unity中會被識別為兩個頂點,同樣,模型上的一個頂點,在UV中出現在多個位置,也會被unity識別為兩個頂點 。
當然了,并不是說完全不能用光滑組與UV切割,只是如果我們知道了這些原理,那么在制作時就能夠盡量去規避這些問題了 。
三角面數
這個沒有什么好說的,在保證效果的前提下,能少則少 。
貼圖
貼圖的做法和Shader息息相關,需要在前期與TA一起討論清楚,其中尺寸可以做的大些,因為可以直接在unity中根據需求縮小,如果做小了,放大就會有損失了 。還有要注意,最好是方形,同時是2的次冪 。如果貼圖需要有額外的信息存儲到Alpha通道,則用tga,否則用png格式 。
材質
材質數量直接影響DrawCall,所以盡量做到一個物體一個材質球,特別是在max中盡量少用多維子材質 。因為多維子材質的信息會被導入到unity中,并以多個材質的形式出現,除非你真的需要這么做 。
頂點色
頂點色如果不需要的話一定要清除,因為頂點色在unity中會影響合批,導致性能下降,同時本身的頂點色數量也會導致模型本身的資源加大 。
模型中的頂點色一旦修改,就會使模型附帶了頂點色屬性,既使你更改回默認顏色和透明度也是一樣,這個時候只能通過ChannelInfo來移除了,注意在ID那一列中,標識為:VC的就是頂點色(Vertex Color) 。
UV數量
模型的UV數量正常情況下只需一套,如果在max設置了多套,既使沒有用到也會被導出到unity中,同樣也是通過Channel Info來移除 。
如果大家能做到以上這些,那么TA和程序會愛死你的!