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是否已经被打包在某个图集中
- 使用参数AtlasSize和AtlasShader新建一个空白图集类Atlas,设为当前图集,将当前图集加入返回值变量中
- 遍历SortedTextures中的每一个贴图,直到其中的每个贴图都已经添加到了某个图集中 {
检查当前贴图是否已经被打包过,若是,跳过当前循环
检查当前贴图是否能添加入当前图集:
若能,将其加入且设置TexturePacked[i]为true,将这贴图对应的物体索引数组加入返回值变量中;
若不能,说明当前图集已满,使用参数AtlasSize和AtlasShader新建一个空白图集类Atlas,设为当前图集,将当前图集加入返回值变量中
} - 返回结果