Unity的Mesh合并(2)——PackAllTexturesInScene

合并Mesh的第二步,需要对整个场景中贴在物体上的贴图进行图集打包
这个函数实际完成的功能是找到场景中所有的贴图,对贴图进行边缘扩展,并建立shader到贴图上的映射,material到贴图上的映射以及贴图到其所贴在的一组物体上的映射以供后续使用

算法:

遍历场景中所有的物体,对这些物体做 {

  • 获取物体的材料,检查该材料是否为null,若null则Debug.LogWarning

  • 检查该材料的shader是否出现过,若出现过,将这材料添加到以该shader为键的字典
    Dictionary>>项中,表示这个shader的一组贴图

  • 若该材料的shader未出现过,为字典新建一个以该shader为键的项并添加到此项中

  • 获取物体的贴图,检查该材料是否出现过,若出现过,将这物体添加到以该贴图为键的字典Dictionary>项中,表示这个贴图所贴在的一组物体

  • 若未出现过,则做检查属性是否符合合并要求(wrapmode不为repeat,物体面数、贴图尺寸不超过限制等),不符合要求则Continue跳过当前循环,进入下一个物体的检查

  • 若符合要求,则对该贴图进行边缘扩展1-2个像素(为贴图的四个边缘添加一个像素,这些像素的颜色用对应的边缘的颜色来填充),边缘扩展的目的是使uv映射避免边缘效应(物体边缘的贴图错误的现象)

  • 检查这个扩展的贴图是否第一次出现,若是则在字典Dictionary>中添加一个新项,表示这个贴图所贴在的一组物体
    }
    遍历字典Dictionary>>,按Shader类型对那一组贴图使用DividingTextures方法进行打包

你可能感兴趣的:(Unity的Mesh合并(2)——PackAllTexturesInScene)