Juda texture

From KlayGE
Revision as of 11:06, 30 April 2012 by Gongminmin (Talk | contribs)

Jump to: navigation, search

Juda TextureKlayGE中的虚拟纹理技术,名称来自于中文的“巨大”一词。

技术指标

  • 最大大小:1Mx1M
  • 纹理格式:ARGB8,ABGR8,GR8,R8

用途

地形渲染

地形数据可以直接存放在Juda Texture中,并在运行期根据需要自动载入。地形编辑器和渲染都将得益于Juda Texture。

纹理打包

可以把一个游戏所用到的所有纹理都打包入一个Juda Texture中,省去载入的麻烦。

实现方法

整个Juda Texture被表示成一棵四叉树,树的每个节点保存一个数据块。原始数据提交给Juda Texture的时候,会被分成大小相同的块,先存于对应位置的叶子节点中。接着,上一级节点会被更新成降采样后的数据,而叶子节点仅仅保存上一级节点超采样后与自己的残差。如果一个子树的残差之和小于某个阈值,该子树就会被砍掉。这样依次向上更新整棵树,直到根节点为止。最后,每个节点的数据块都通过LZMA算法无损地压缩。 在运行期,当需要某个块的时候,Juda Texture会在树中搜索从根节点到存储该数据块的叶子节点的整条路径,经过解压和累加后放入一个纹理缓存中。shader里通过间接索引来访问纹理缓存,得到该块数据。

工具集

JudaTexPacker

JudaTexPacker可以把多张普通的纹理打包成一个Juda Texture文件。原纹理在Juda Texture中的排布通过一个JTML文件来描述。

JudaTexViewer

JudaTexViewer可以查看Juda Texture的内容。

未来的工作

  • 更大的压缩率
  • 可视化编辑工具
  • 支持HDR格式