美文网首页
Unity的Mesh合并(3)——DividingAllText

Unity的Mesh合并(3)——DividingAllText

作者: DarkKnightRedoc | 来源:发表于2018-02-09 09:34 被阅读0次

DividingTextures完成的功能实际上还是处在Mesh合并过程的第二步:打包图集

函数原型

Dictionary<Atlas, List<int[]>> DividingTextures(Dictionary<Texture2D, List<int>> AllTextureOfSameShader, int AtlasSize, Shader AtlasShader)

返回值
Atlas类为键值,List<int[]>为映射值的字典。于是返回的会有若干个图集,且每个图集将会有个List<int[]>映射,这个链表的每一项是int[]类型,可以看成是这个图集中的每一个贴图,这个贴图对应一个int数组,代表这个贴图所贴在的物体的索引的数组

参数
AllTextureOfSameShader : 一组shader相同的贴图,以及到其所贴在的物体索引数组的映射
AtlasSize : 打包后的图集的大小
AtlasShader : 这个图集所使用的shader

函数功能
将shader相同的一组贴图打包成一个或多个图集并返回


算法

  • 将参数AllTextureOfSameShader中的键值贴图取出,按尺寸大小将其排序并存在SortedTextures
  • 建立bool数组TexturePacked,使用TexturePacked[i]表示贴图i是否已经被打包在某个图集中
  • 使用参数AtlasSizeAtlasShader新建一个空白图集类Atlas,设为当前图集,将当前图集加入返回值变量中
  • 遍历SortedTextures中的每一个贴图,直到其中的每个贴图都已经添加到了某个图集中 {
     检查当前贴图是否已经被打包过,若是,跳过当前循环
     检查当前贴图是否能添加入当前图集:
       若能,将其加入且设置TexturePacked[i]为true,将这贴图对应的物体索引数组加入返回值变量中;
       若不能,说明当前图集已满,使用参数AtlasSizeAtlasShader新建一个空白图集类Atlas,设为当前图集,将当前图集加入返回值变量中

    }
  • 返回结果

相关文章

网友评论

      本文标题:Unity的Mesh合并(3)——DividingAllText

      本文链接:https://www.haomeiwen.com/subject/bskizxtx.html