日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

unity3d meshBaker 基本的使用

發(fā)布時(shí)間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • using?UnityEngine;??
  • using?System.Collections;??
  • using?System.Collections.Generic;??
  • ??
  • public?class?EnemyMaker?:?MonoBehaviour?{??
  • ????//我們的水管工人預(yù)置??
  • ????public?GameObject?prefab;??
  • ????//用來(lái)管理敵人的網(wǎng)格??
  • ????public?MB3_MeshBaker?meshBaker;??
  • ????//用來(lái)記錄已經(jīng)生成的預(yù)置??
  • ????private?List<GameObject>?prefabs;??
  • ????//?Use?this?for?initialization??
  • ????void?Awake?()?{??
  • ????????prefabs?=?new?List<GameObject>?();??
  • ????}??
  • ??????
  • ????//?Update?is?called?once?per?frame??
  • ????void?Update?()?{??
  • ??????
  • ????}??
  • ??
  • ????void?OnGUI(){??
  • ????????if(GUI.Button(new?Rect(0,0,100,100),"增加預(yù)置")){??
  • ????????????Vector3?pos?=?new?Vector3(Random.Range(-2,2),1,Random.Range(-2,2));??
  • ????????????Quaternion?dir?=?Quaternion.Euler(new?Vector3(0,Random.Range(0,360.0f),0));??
  • ????????????//生成一個(gè)?工人預(yù)設(shè)??
  • ????????????GameObject?worker?=?Instantiate(prefab,pos,dir)?as?GameObject;??
  • ????????????GameObject?firstMeshRenderer?=?null;??
  • ????????????//獲取對(duì)象身上的所有renderer組件對(duì)象??
  • ????????????List<GameObject>?needAddList=?getRenderers(worker,ref?firstMeshRenderer);??
  • ??
  • ????????????meshBaker.AddDeleteGameObjects(needAddList.ToArray(),null);??
  • ????????????meshBaker.Apply();??
  • ??
  • ????????????//由于一個(gè)物體身上SkinnedMeshRenderer和MeshRenderer一起合并的話不知道為什么人物無(wú)法移動(dòng),??
  • ????????????//但是把某個(gè)MeshRenderer啟用就可以移動(dòng)了,??
  • ????????????//不知道是什么原因,如果你知道為什么,請(qǐng)留言~~~謝謝??
  • ????????????if(firstMeshRenderer){??
  • ????????????????firstMeshRenderer.transform.renderer.materials?=?new?Material[0]{};??
  • ????????????????firstMeshRenderer.transform.renderer.enabled?=?true;??
  • ????????????}??
  • ??
  • ????????????prefabs.Add(worker);??
  • ??
  • ????????}?????
  • ??
  • ????????if(GUI.Button(new?Rect(110,0,100,100),"刪除第一個(gè)")){??
  • ????????????if(prefabs.Count>0){??
  • ????????????????GameObject?worker?=?prefabs[0];??
  • ????????????????GameObject?firstMeshRenderer?=?null;??
  • ????????????????List<GameObject>?needDelList?=?getRenderers(worker,?ref?firstMeshRenderer);??
  • ??
  • ????????????????meshBaker.AddDeleteGameObjects(null,needDelList.ToArray());??
  • ????????????????meshBaker.Apply();??
  • ??
  • ????????????????Destroy(prefabs[0].gameObject);??
  • ??
  • ????????????????prefabs.RemoveAt(0);??
  • ??
  • ??
  • ????????????}??
  • ????????}??
  • ??
  • ????????GUI.Label?(new?Rect(0,110,200,100),"當(dāng)前預(yù)設(shè)數(shù)量:"+prefabs.Count);??
  • ????}??
  • ??
  • ??
  • ????List<GameObject>?getRenderers(GameObject?obj,ref?GameObject?firstMeshRenderer){??
  • ????????List<GameObject>?needAddList?=?new?List<GameObject>();??
  • ??????????
  • ????????SkinnedMeshRenderer[]?smrs?=?obj.GetComponentsInChildren<SkinnedMeshRenderer>();??
  • ????????for?(int?i?=?0;?i?<?smrs.Length;?i++)?{??
  • ????????????needAddList.Add(smrs[i].gameObject);??
  • ????????}??
  • ??
  • ????????MeshRenderer[]?mr?=?obj.GetComponentsInChildren<MeshRenderer>();??
  • ????????for?(int?i?=?0;?i?<?mr.Length;?i++)?{??
  • ????????????if(i?==?0){??
  • ????????????????firstMeshRenderer?=?mr[i].gameObject;??
  • ????????????}??
  • ????????????needAddList.Add(mr[i].gameObject);??
  • ????????}??
  • ????????return?needAddList;??
  • ????}??
  • }??

  • 核心代碼

    參數(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩一级免费片 | 国产夫妻在线观看 | 鸭子av | 91在线无精精品白丝 | 免费在线观看av片 | 国产精品探花在线观看 | 手机在线成人av | 97国产精东麻豆人妻电影 | 极品白嫩少妇无套内谢 | 国产欧美一区二区三区在线老狼 | 奇米四色在线视频 | 在线视频99 | 国产xxxx18| 在线不卡一区 | 神马久久久久久久久久久 | 亚洲AV无码精品色毛片浪潮 | 玖玖综合网 | 色婷婷在线视频 | 日韩视频不卡 | 无码国产精品一区二区免费16 | 一级片免费看视频 | 黄色在线免费网站 | 亚洲免费网 | 又黄又爽的视频在线观看 | 环太平洋3:泰坦崛起 | 玖玖爱av | 亚洲日日日 | 天天射天天射 | 日韩小视频在线观看 | 国产精品s色 | 亚洲乱码国产乱码精品精剪 | 精品熟女一区二区三区 | 亚洲第一综合 | 中文字幕日韩精品无码内射 | 国产精品2020 | 久久久久久久久久91 | 亚洲美女色 | 成人黄色免费在线观看 | 久久久久亚洲av片无码v | julia一区二区三区在线观看 | 香蕉视频官网在线观看 | 激烈的性高湖波多野结衣 | 我要操av | 男男黄色片 | 91精品日韩 | 日本三级精品 | 免费av国产| 一区二区三区久久 | 二级毛片在线观看 | 久久精品一二三区 | 三上悠亚ssⅰn939无码播放 | а√天堂8资源在线官网 | 天堂网av手机版 | 另类专区成人 | 国产亚洲欧美日韩高清 | 91精品国产高清一区二区三区蜜臀 | 成人午夜免费毛片 | 丁香婷婷综合激情五月色 | 国产精品jizz| 人妻熟女一区二区三区 | 亚洲一区二区视频网站 | 精品爱爱 | 精品欧美一区二区三区 | 999xxxxx| 国产毛片久久久 | 亚洲欧美另类自拍 | 国产成人精品一区二区三区在线 | 国产精品永久免费视频 | 双女主黄文 | 成人啪啪| 一级黄色片在线观看 | 1000部多毛熟女毛茸茸 | 亚洲熟妇一区 | 99久久婷婷国产综合精品青牛牛 | 骚五月| 无码人妻精品一区二区中文 | 黑人3p波多野结衣在线观看 | 白白色在线播放 | 亚洲丝袜中文字幕 | 午夜日韩欧美 | 欧美成人做爰大片免费看黄石 | 国产成人无遮挡在线视频 | 男女爱爱网站 | 美女屁股眼视频免费 | 国产色播av在线 | 欧美黑人xxxⅹ高潮交 | 小蝌蚪视频色 | 尤物视频在线观看国产 | 日韩一区二区在线免费观看 | 欧美色炮| 欧美生活一级片 | 日韩在线视频免费观看 | 深夜天堂| 久久精品免费电影 | 成人免费做受小说 | 国产精品丝袜在线观看 | 欧美专区在线观看 | 天堂网在线资源 | 欧美特级黄|