为什么Texture2D.PackTextures()在地图集中创建了这么多空白空间?

时间:2016-03-26 11:15:10

标签: c# unity3d textures uv-mapping texture-packing

我正在通过脚本创建纹理图集。我用6张图片来做这件事,代码如下:

public void onePassBubbleSort(ArrayList<QuakeEntry> quakeData, int numSorted){
    int j;
    QuakeEntry temp;
  for(int i=0; i<numSorted; i++){
   for( j=0; j<(quakeData.size()-i-1);j++){
         if(quakeData.get(j).getMagnitude()>quakeData.get(j+1).getMagnitude()){
          temp=quakeData.get(j);
          quakeData.set(j,quakeData.get(j+1));
          quakeData.set(j+1,temp);
         }
       } 
      System.out.println("Printing Quakes after "+ i +" pass ");
       for (QuakeEntry qe: quakeData) { 
       System.out.println(qe);
    }
   }

}

包装结果如下:

texture

问题是,为什么这段代码会产生这么多空白空间?因为我总是只使用6个纹理,是否可以使图集更小?

1 个答案:

答案 0 :(得分:0)

图形硬件喜欢处理具有二维幂的纹理,例如128x1024(2 ^ 7 x 2 ^ 10)。它们也可以处理其他纹理尺寸,但效率较低。这就是为什么引擎通常会尝试导入或生成具有两个幂的大小的纹理,即使它留下了一些未使用的纹理空间。由开发人员决定何时覆盖它。