Juda texture
From KlayGE
Juda Texture是KlayGE中的虚拟纹理技术,名称来自于中文的“巨大”一词。
技术指标
- 最大大小: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格式