将矩形图像数据打包成方形纹理

时间:2008-11-04 23:57:59

标签: image textures packing

我有N个2D图像数据,这些数据将是矩形的,我想尽可能高效地将它们打包成2个纹理的单个幂。

一个简单的非高效且天真的算法来实现打包这些rects很容易,但我确信人们已经提出算法来尽可能地节省空间。我发现了与光照贴图类似的各种参考,它与我正在寻找的相似,但是光照贴图的算法往往会考虑非矩形图像,这实际上使事情变得比我需要的更复杂。

有人有提示吗?我应该google算法或论文作者的名字?

感谢。

4 个答案:

答案 0 :(得分:8)

我需要做你描述的事情。

这是我使用的Python代码,它是Python Cookbook中的一个配方:

Recipe 442299: pack multiple images of different sizes into one image

答案 1 :(得分:6)

1D中的问题称为Bin Packing。也许这是您搜索的良好开端。

请注意,您要解决的问题非常困难(它是NP难的)。所以你不应该寻找最佳解决方案,而是一些聪明的启发式算法。

我认为自下而上的动态编程可用于1D bin打包,但不适用于2D情况。

您可以考虑通过仅解决1D问题来简化问题,制定限制,例如将纹理切割为1维中的多个(可变大小)切片。

另一种可能性是对其进行元启发式优化,如进化算法或粒子群优化。

答案 2 :(得分:4)

这里可以找到非常好的简单包装算法: http://www.blackpawn.com/texts/lightmaps/

它的实现只需要200个C ++行,而不是更多(我想你已经有了Bitmap操作例程)。

JukkaJylänki介绍了背后的理论 (寻找“千种方式打包”)。

本文作者提供的C ++库从我的角度来看确实很臃肿,但另一方面它有很多选项并且有很好的文档记录。

答案 3 :(得分:1)

我有类似的问题,但我正在收拾广场。试试这个:http://www.mrashid.info/blog/stacking-squares-problem.php

C ++代码不是很优雅,但至少你对如何解决这个问题有基本的了解。