关于LOD

来源:互联网 发布:电脑测内存软件 编辑:程序博客网 时间:2024/04/27 23:17

 

关于LOD

Level of Detail 层次细节 
分模型和贴图两部分。 
模型:离摄像机近的地方,用高的细节网格渲染, 较远的地方用低的细节网格渲染。 
贴图:离摄像机近的地方,用分辨率高的贴图,远的用分辨率低的贴图。用dds文件可以保存贴图的多个mipmap,也就是一系列从高到低的不同分辨率的贴图,从而可以实现此种效果。《精通Unreal引擎技术》P188, DDS File Reference



特别提示:Mipmaps详解 

我 们一直再说的mipmap究竟是什么呢?很简单,mipmap其实就是一系列的纹理,其中,第一个成员拥有最多的细节,接下来的纹理大小减少为上一张的一 半。举个例子,假设有一张原大小为256×256的“高分辨率”纹理,那么下一级别的mipmap就是128×128的,再下来就是64×64的,以此类 推。Direct3D就通过mipmap链来控制渲染时纹理的质量,当然,代价是mipmap将会消耗更多的内存。当对象离摄像机很近的时候,使用高质量 的纹理,而物体远离摄像机时,就是用低分辨率的纹理。 
当创建纹理时,可以使用参数来指定有多少个层次包含在纹理中。这里层次的数目直接与 mipmap链相对应。把这个参数设置为0,Direct3D则会自动在mipmap链中创建一系列纹理,从原始纹理的大小开始,一直递减到大小为 1×1。在我们所举的例子中,在一张256×256的纹理上把这个参数设为0,将会创建9个纹理:256×256、128×128、 64×64,32×32、16×16,8×8,4×4、2×2、1×1。 
当调用SetTexture方法时,Direct3D会根据当前sampler states类中MipFilter的属性值,自动在众多的mipmap中进行筛选。  

DDS是DirectDraw Surface的缩写,它是DirectX纹理压缩(DirectX Texture Compression,简称DXTC)的产物。

DXTC减少了纹理内存消耗的50%甚至更多,有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格式,又称“贴图”,许多fans通过修改dds文件可以生成特殊显示效果。 nVidia提供了PhotoShop使用dds的插件,通过该插件也可以生成dds文件。

还有一种生成dds文件的方法是使用nVidia提供的命令行工具nvdxt.exe

该文章转自[无忧网络网游技术网]:http://www.5uwl.net/Article/ttii/msmir2001/200709/26369.html

实际文件大小比较:

tga:   12K

带mipmap的dxt3:   6K

不带mipmap的dxt3:   5K

不带mipmap的dxt1:   3K


Direct3D9中的纹理贴图 
Texture coordinates are used to define a triangle on the texture that gets mapped to the 3D triangle.

纹理坐标常常被定义为纹理上的一个三角形,这个三角形可以被贴图到3D三角形上。

We can create textures from image files stored on disk using the D3DXCreateTextureFromFile function.

我们可以使用D3DXCreateTextureFromFile函数,根据磁盘上的图像文件来创建纹理。

We can filter textures by using the minification, magnification, and mipmap filter sampler states.

我们可以过滤纹理通过使用缩小过滤,扩大过滤和多线性过滤方式。

Address modes define what Direct3D is supposed to do with texture coordinates outside the [0, 1] range. For example, should the texture be tiled, mirrored, clamped, etc.?

纹理的地址模式定义了Direct3D如何处理当纹理坐标超出了0-1范围时。例如:纹理是应该被平铺,反射,压缩,还是其他操作?