unity3d meshBaker 基本的使用
生活随笔
收集整理的這篇文章主要介紹了
unity3d meshBaker 基本的使用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
meshBaker版本:3.31 ??
drawCall 優(yōu)化利器
最基本的使用
一.搭建場(chǎng)景
如上圖場(chǎng)景,新建4個(gè)材質(zhì),分別附上這4個(gè)貼圖,貼圖是MeshBaker自帶的。
運(yùn)行后
二.使用meshBaker
1.創(chuàng)建對(duì)象,GameObject->CreateOther->MeshBaker->Mesh And MaterialBaker
上面有2個(gè)組件,注意,3.6版本的結(jié)構(gòu)和這個(gè)有點(diǎn)區(qū)別
點(diǎn)擊Open Tools For Adding Objects,彈出如下窗口
List Shaders In Scene 按鈕是可以打印當(dāng)前場(chǎng)景中物體使用的shader,lightmapping,等一些信息,可以做參考
選中需要合并的物體,點(diǎn)擊Add Selected Meshes,一定要選中物體
輸出如下信息
點(diǎn)回MeshBaker0會(huì)看到Objects To。。。里面已經(jīng)有4個(gè)物體了,也就是我們剛才選中的物體,當(dāng)然,你自己手動(dòng)拖進(jìn)去也是可以的。
接下來(lái)點(diǎn)擊Create Empty Assets For Combined Material
彈出如下窗口,選好路徑,自定義名字保存即可,這個(gè)主要是用來(lái)儲(chǔ)存合并材質(zhì)和合并信息的
之后點(diǎn)擊Bake Materials Into Combined Material
等待操作完成后,找到下面這個(gè)腳本,點(diǎn)擊Bake就可以了
會(huì)生成一個(gè)?CombinedMesh-MeshBaker0-mesh 的對(duì)象
然后點(diǎn)擊Disable Renderers on Source Objects,就是隱藏原來(lái)物體的Render組件
運(yùn)行后可以看到 DrawCalls 從 5 降到 2 了
情景再現(xiàn):大場(chǎng)景中,有很多細(xì)碎的小物體,如果一個(gè)個(gè)點(diǎn)的話很累,而且shader可能用的不一樣,使用起來(lái)就比較麻煩了,還好MeshBaker提供了自動(dòng)合并的功能,來(lái)試試吧。
接著教程一中場(chǎng)景
1.創(chuàng)建對(duì)象,GameObject->CreateOther->MeshBaker->Mesh And MaterialBaker
2.點(diǎn)擊Open Tools For Adding Objects,彈出如下窗口
3.點(diǎn)開(kāi)Show Tools
4.點(diǎn)擊 select folder for Combined Material Assets 就是選擇一個(gè)目錄給存放材質(zhì)這些資源
5.選擇Lightmapping 為 Preserve Lightmapping,就是保留,
選忽略的話那就是沒(méi)有l(wèi)ightmapping了
6.Included object Must Be Static 是否必須是靜態(tài)物體,我們這個(gè)場(chǎng)景中沒(méi)有靜態(tài)物體,
那我們?nèi)∠催x
7.點(diǎn)擊Generate Mesh Bakers
8.控制臺(tái)會(huì)輸出Created 1 bakers. Added 4 objects,
同時(shí)場(chǎng)景中多了一個(gè)MeshBaker-Diffuse-LM-1物體,我們這個(gè)場(chǎng)景內(nèi)容較少,
shader類型也少所以只有一個(gè)物體,如果內(nèi)容多的話,會(huì)有多個(gè)物體。
9.點(diǎn)擊Bake EveryMeshBaker In Scene,
處理完成后會(huì)生成CombinedMesh-MeshBaker-Diffuse-LM-1-mesh
效果和教程一是一樣的,但是比較方便
PS:如果你發(fā)現(xiàn)生成后,你的場(chǎng)景樣式不對(duì),
那你嘗試把CombinedMesh-XXXXX-Diffuse-XXX
叫Diffuse這個(gè)給隱藏掉看看是否正確。
有童鞋可能已經(jīng)發(fā)現(xiàn)了,如果照教程一或教程二進(jìn)行合并,物體上若有位移的腳本或者是動(dòng)畫(huà),他確是無(wú)法進(jìn)行位移的
下面來(lái)講下解決方法。
其實(shí)方法很簡(jiǎn)單,接著教程二場(chǎng)景
1.首先我們?cè)谀硞€(gè)cube上掛一個(gè)位移的腳本,簡(jiǎn)單的pos位移就行。
2.運(yùn)行,發(fā)現(xiàn)那個(gè)cube并未移動(dòng),點(diǎn)擊那個(gè)物體,發(fā)現(xiàn)只有碰撞器在移動(dòng),
此時(shí)我們使用的是meshBaker合并后的網(wǎng)格,源對(duì)象的meshRender是禁用的。
3.點(diǎn)開(kāi)MeshBaker-Diffuse-LM-1,然后找到下面的Renderer選項(xiàng),選擇Skinned Mesh Renderer,然后Bake
4.在運(yùn)行,你就能發(fā)現(xiàn)物體在移動(dòng)了
5.注意,可能你在場(chǎng)景中漫游的時(shí)候會(huì)發(fā)現(xiàn)物體突然消失了。你可以調(diào)meshBaker生成出來(lái)網(wǎng)格的Bounds,調(diào)到適當(dāng)大小即可
最好不要勾選Update When Offscreen 比較耗
1.導(dǎo)入Assets->Import Package->Character Controller
2.新建場(chǎng)景,把3rd Person Controller拖到場(chǎng)景中,移除上面除Animation的其他所有腳本
3.把他拖到自己的文件夾內(nèi),當(dāng)成一個(gè)新的預(yù)設(shè)
4.創(chuàng)建對(duì)象,GameObject->CreateOther->MeshBaker->Material Only Baker
5.點(diǎn)擊Open Tools For Adding Objects,彈出如下窗口
6.選中3rd....點(diǎn)擊Add Selected Meshes
7.物體已經(jīng)添加進(jìn)入,然后點(diǎn)Create Empty Asset.....創(chuàng)建一個(gè)預(yù)置的材質(zhì)信息。
8.然后 Bake Materials Into Combined Material這樣預(yù)置材質(zhì)就創(chuàng)建好了,當(dāng)然你可以添加N個(gè)物體一起
后面講解如何使用。
情景再現(xiàn):如一個(gè)RPG游戲,會(huì)刷新很多的怪物,如果不做優(yōu)化的話那么每一個(gè)怪物都需要占用幾個(gè)DC,如何才能動(dòng)態(tài)生成,并且又不占用DC呢?下面就來(lái)操作一下。
使用教程三的場(chǎng)景,就是cube會(huì)上下移動(dòng)的場(chǎng)景。
任務(wù):我們需要在該場(chǎng)景中,動(dòng)態(tài)增加3rd Person Controller這個(gè)預(yù)置,并且保證drawCalls
1.創(chuàng)建對(duì)象,GameObject->CreateOther->MeshBaker->Mesh And MaterialBaker?
命名為MeshBakerEnemy(隨意拉。。),為了方便管理,可以把這個(gè)MeshBaker當(dāng)成只負(fù)責(zé)合并敵人
場(chǎng)景由另一個(gè)來(lái)負(fù)責(zé)
2.選擇Material Bake Result 這個(gè)就是我們 教程四 制作的預(yù)置材質(zhì),Combined mesh Material也一樣
3.下面來(lái)編寫(xiě)代碼,首先來(lái)看下使用前和使用后的對(duì)比
前
后
[csharp]?view plaincopy
核心代碼
參數(shù)1,需要增加的對(duì)象 參數(shù)2,需要?jiǎng)h除的對(duì)象meshBaker.AddDeleteGameObjects(needAddList.ToArray(),null);
meshBaker.Apply();
Cannot add objects. Resulting mesh will have more than 64k vertices. Try using a Multi-MeshBaker component. This will split the combined mesh into several meshes. You don't have to re-configure the MB2_TextureBaker. Just remove the MB2_MeshBaker component and add a MB2_MultiMeshBaker component.
UnityEngine.Debug:LogError(Object)
DigitalOpus.MB.Co
如果遇到這個(gè)報(bào)錯(cuò),使用MB3_MultiMeshBaker替換MB3_MeshBaker
需要?jiǎng)?chuàng)建GameObject->CreateOther->MeshBaker->Multi-Mesh And MaterialBaker 操作和 meshBaker一樣
由于一個(gè)物體身上SkinnedMeshRenderer和MeshRenderer一起合并的話
不知道為什么人物無(wú)法移動(dòng),
但是把某個(gè)MeshRenderer啟用就可以移動(dòng)了,
不知道是什么原因,如果你知道為什么,請(qǐng)留言~~~謝謝
總結(jié)
以上是生活随笔為你收集整理的unity3d meshBaker 基本的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [Swift]LeetCode871.
- 下一篇: SSM Controll返回的页面无法跳