工作中經常遇到3D製作不了解引擎要求導致返工或是被客戶說沒有經驗,所以就邀請了工作十多年,經驗豐富的TA-紅偉大哥做了一篇相關文章為大家解惑,紅偉大哥也有相關獨立遊戲開發經驗。
很多3D同學都會面臨一個問題,就是對引擎不熟悉,導致對某些資源規範和優化方法知其然不知所以然,特別是3D相關的同學,由於平時工作基本上不需要跟引擎打交道。另外3D美術外包更是如此,更沒有機會接觸到引擎。
於是,為了給廣大3D同學謀福利,此篇就誕生了。
引擎是什麼?
想想汽車引擎是什麼就明白了,要想讓汽車跑,必須要有引擎,同樣遊戲要想運行起來也需要引擎,引擎將我們的美術資源與程序組合起來並利用渲染、物理等模塊進行拼裝使其可以正常運行。汽車引擎有各種品牌,遊戲引擎也是一樣,目前市場主流引擎有:Unity和Unreal,本篇我們主要討論Unity。
Unity引擎
Unity的版本相當的多,截止目前為止,最新的正式版為2017.4.1f1。
每個版本的後綴你會發現不一樣,分別代表什麼意思呢?
· 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和程序會愛死你的!
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/269174.html
微信掃一掃
支付寶掃一掃