UV的Atlas操作在某些场合下还是很有用途的,比如很常见的对于场景进行的LightMap烘焙时。这时就需要对于整个场景中的几何体元进行Light Map UV的生成,也即是将其投影到了一张Texture中去,且要求所有的几何体元对应唯一的Light Map UV(即在这一张纹理中没有相互重叠,以便取到正确的烘焙信息)。UV Atlas其实是一个传统的NP hard问题,一般来说都是通过某些最优化方法来实现,而且牵涉的面也较广。在DX SDK中也有实现该操作的API:D3DXUVAtlasCreate。
D3DXUVAtlasCreate方法的具体使用就是给它传入一个D3DXMESH类型的数据源,然后它处理后返回一个包含UV Atlas结果的Mesh。其中有以下两点需要一些特别的注意:
- 传入的源Mesh至少需要包含两个基本信息:位置信息与一个UV通道。不过这里源Mesh中的UV通道中的数据并不需要在D3DXUVAtlasCreate进行处理进使用,而主要是因为返回的Mesh与传入的Mesh含有相同的顶点描述结构,因而需要一个UV通道在结果Mesh中保存Atlas后的UV值。而其它的一些参数多是一些功能性设置,如结果Texture的大小,两块UV之间的间距等,具体可以参考:http://msdn.microsoft.com/en-us/library/windows/desktop/bb205479(v=vs.85).aspx