UNITY材質球合併

2021-08-27 05:24:48 字數 1653 閱讀 6454

材質球合併,分以下幾步走,首先我們討論普通的meshrenderer的材質球合併,然後再討論skinnedmeshrenderer的材質球合併。

普通的meshrenderer的材質球合併:

1.合併所有材質球所攜帶的貼圖,新建乙個材質球,並把合併好的貼圖賦予新的材質球。

2.記錄下每個被合併的貼圖所處於新貼圖的rect,用乙個rect陣列存下來。

3.合併網格,並把需要合併的各個網格的uv,根據第2步得到的rect刷一遍。

4.把新的材質球賦予合併好的網格,此時就只占有1個drawcall了。

下面是關鍵**:

void combinemesh()

materials[i] = mrchildren[i].sharedmaterial

; texture2d tx = materials[i].gettexture("_maintex") as texture2d;

texture2d tx2d = new texture2d(tx.width, tx.height, textureformat.argb32, false);

tx2d.setpixels(tx.getpixels(0, 0, tx.width, tx.height));

textures[i] = tx2d;

}material materialnew = new material(materials[0].shader);

materialnew.copypropertiesfrommaterial(materials[0]);

mrself.sharedmaterial = materialnew;

texture2d texture = new texture2d(1024, 1024);

materialnew.settexture("_maintex", texture);

rect rects = texture.packtextures(textures, 10, 1024);

for (int i = 0

; i < mfchildren.length; i++)

rect rect = rects[i];

mesh meshcombine = mfchildren[i].mesh

; vector2 uvs = new vector2[meshcombine.uv

.length];

//把網格的uv根據貼圖的rect刷一遍

for (int j = 0

; j < uvs.length; j++)

meshcombine.uv = uvs;

combine[i].mesh = meshcombine;

combine[i].transform = mfchildren[i].transform

.localtoworldmatrix

; mfchildren[i].gameobject

.setactive(false);

}mesh newmesh = new mesh();

newmesh.combinemeshes(combine, true,true);//合併網格

mfself.mesh = newmesh;

}

Unity實現動態修改模型材質球

一 定義需要替換的材質球 且載入該材質球 private material highlightmat 實現閃爍高亮效果材質球 highlightmat resources.load prefabs highlightmat gradient hightblue as material 二 編寫修改材...

Unity中材質球無法修改問題的解決

今天在使用unity18過程中,發現有些情況下匯入材質會出現材質 貼圖丟失的情況。並且材質無法更改。網上有不少相似的問題但都沒有解決清楚。於是決定寫一小段詳細說明一下此問題的解決方法。我們發現材質球沒有問題,而是材質球上的貼圖出現了丟失,但材質球並不能修改 17中貌似沒有這個問題 這種情況是mate...

Unity MeshRender更換材質球方法

自csdn布萊克漢 幹活的時候遇到了這樣乙個問題,當要用 給這個模型換材質球的時候,單獨獲取renderer元件裡的materials陣列裡的materials 1 或者materials 2 是無法改變材質球的,此時採用以下兩種方法可以實現功能 1.getcomponent material.co...