DDS文件格式

来源:互联网 发布:简单的java程序代码 编辑:程序博客网 时间:2024/05/01 02:22
DX中开发的游戏DDS是首选,就类似ios中的pvr格式一样强大,因为那是显卡支持的。
一、DX下DDS文件的优点:
1.cpu上运算速度快,不需要解析为RGB数据就可以直接由DX函数加载提交给显卡渲染贴图。
2.内存占用少效率高,因为不需要创建临时的内存来存放解析的数据,所以避免了内存和申请释放和内存飙升。
3.压缩效率高,通过更少为位数有损压缩,但是画质也非常好,压缩效率比同等画质的jpg还高。
4.可以从文件格式内部支持mipMap/CubeMap/VolumeMap纹理特性,比在内存中才构造这些纹理效率高。

二、DDS文件格式
有3种DXTC的格式可供使用,分别是DXT1,DXT3和DXT5。
DXT1 压缩比例:1:8 压缩比最高,它只有1Bit Alpha,Alpha通道信息几乎完全丧失。一般将不带Alpha通道的图片压缩成这种格式。如Worldwind 用的卫星图片。
DXT3 压缩比例:1:4 使用了4Bit Alpha,可以有16个Alpha值,可很好地用于alpha通道锐利、对比强烈的半透和镂空材质。
DXT5 压缩比例:1:4 使用了线形插值的4Bit Alpha,特别适合Alpha通道柔和的材质,比如高光掩码材质。
大部分3D游戏引擎都可以使用DDS格式的图片用作贴图,也可以制作法线贴图
dds压缩比率见:http://www.poopinmymouth.com/tutorial/dds_types.html
DDS文件格式文档:
https://msdn.microsoft.com/en-us/library/bb172993.aspx

DDS文件格式:

通过文档可以了解到:
1.dds可以是DDPF_FOURCC压缩的或DDPF_RGB非压缩的,一般使用压缩的dds文件格式,DWORD dwFourCC用DXT1,DXT3,DXT5等。
2.DDS头部是dwMagic 和 DDSURFACEDESC2,前面的dwMagic和dwSize用来标识是一个dds文件。
3.DDSURFACEDESC2结构体定义了贴图宽高,像素格式(非压缩)或者压缩形式,以及它内部的DDPIXELFORMAT ddpfPixelFormat,DDCAPS2 ddsCaps都定义了它的dwFlags贴图的特性,后面的如果存在特性则有值,否则就是0。
4.数据部分,可以有一个或多个Surface Data,因为DDS是支持mipMap/Cubemap/volume Texture的,所以内部数据还是比较复杂的,如果是非压缩的DDS直接根据DDS图片格式特性访问就可以读取到数据,如果说是压缩的DDS那么还需要DXTi类型的解码,然后用DDS图片指定的格式特性解析才能得到像素数据。除非是非DX的环境下使用DDS否则是没有这个必要的。

三、DDS插件和DirectX Texture Tool 使用
ps查看和导出dds插件:
https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop
3dsmax现在的版本都应该支持dds贴图作为才材质的了,不过通过http://www.nvidia.cn/object/3dsmax_dds_plugins.html下载的原码可以窥探一下nvidia写的导入dds的插件代码。
dds文件格式编辑
DirectX Texture Tool 可以编辑dds文件使用的压缩格式DXT1,DXT3,DXT5等,可以编辑文件mipMap/CubeMap/VolumeMap纹理特性。可以查看alpha通道信息等,具体使用见https://msdn.microsoft.com/en-us/library/bb219744.aspx

0 0
原创粉丝点击