MipMap

简介: MipMap 首先从MIPMAP的原理说起,它是把一张贴图按照2的倍数进行缩小。直到1X1。把缩小的图都存储起来。在渲染时,根据一个像素离眼睛为之的距离,来判断从一个合适的图层中取出texel颜色赋值给像素。

首先从MIPMAP的原理说起,它是把一张贴图按照2的倍数进行缩小。直到1X1。把缩小的图都存储起来。在渲染时,根据一个像素离眼睛为之的距离,来判断从一个合适的图层中取出texel颜色赋值给像素。在D3D和OGL都有相对应的API控制接

 

 

透过它的工作原理我们可以发现,硬件总是根据眼睛到目标的距离,来选取最适合当前屏幕像素分辨率的图层。假设一张32768x32768的mipmap贴图,当前屏幕分辨率为1024*1024。眼睛距离物体比较近时,mipmap最大也只可能从1024*1024的Mipmap图层选取texel。再次,当使用三线性过滤(trilinear)时,最大也只能访问2048*2048的图层选取texel,来和1024*1024图层中的像素进行线性插值。

为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap

 

多级渐进纹理由一组分辨率逐渐降低的纹理序列组成,每一级纹理宽度和高度都是上一级纹理宽度和高度的一半。宽和高不一定相等,也就是说,这些纹理不一定都是正方形。

Direct3D在纹理映射时,自动选择一幅与物体大小最接近的纹理进行渲染。当物体离投影平面较远时,Direct3D会选择一张尺寸较小、分辨率较低的纹理进行渲染;当物体离投影平面较近时,Direct3D会选择一张尺寸较大、分辨率较高的纹理进行渲染。Direct3D将纹理序列看成一条多级渐进纹理链。链头处纹理的分辨率最高,下一级往后依次递减,链尾处纹理的分辨率最低。

Direct3D能估计出多级渐进纹理链中哪幅纹理的分辨率最接近想要的输出结果,然后它将像素映射到纹理空间。当最终显示的图形大小介于任意两级纹理图形之间时,Direct3D将两级纹理的相应元素进行混合后显示。

多级渐进纹理过滤能够有效地提高图形渲染速度,当物体离投影平面较远时,Direct3D会选择一张尺寸较小的纹理进行渲染,而无需经过复杂的诸如各项异性纹理过滤,并且由于这时纹理需要的显存比不使用多级渐进纹理时小,因此能有效地减少纹理载入显存的时间。缺点是对内存的要求比较高

 

 

 

设置多级渐进纹理过滤方式

当最终显示的纹理贴图大小介于任意两级纹理之间时,Direct3D能够取得两级纹理元素进行混合后显示,具体的混合方式由指定的多级渐进纹理过滤方式决定。可以调用函数IDirect3DDevice9::SetSamplerState()设置多级渐进纹理过滤方式,将第一个参数设为纹理层序号,第二个参数设为D3DSAMP_MIPFILTER表示多级渐进纹理过滤,第三个参数设为在相邻纹理级之间的过滤方式,可取枚举类型D3DTEXTUREFILTERTYPE的任意值。下面的示例代码设置相邻纹理级之间的过滤方式为线性过滤。

g_device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

如果将第三个参数设为D3DTEXF_NONE,那么就会一直使用最高一级的纹理,即禁用多级渐进纹理过滤。如果将其设为D3DTEXF_POINT,就会只使用与图元大小最匹配的一级纹理。如果将其设为D3DTEXF_LINEAR,Direct3D就将与图元大小最匹配的两级纹理以线性方式混合。

需要注意的是,多级纹理过滤是缩小和放大过滤器的结合。例如,如果将缩小和方法过滤器设为线性过滤,但是多级纹理过滤方式设为最近点采样,Direct3D就会选择与要显示的纹理贴图大小最接近的纹理级别,在该级纹理上完成双线性纹理过滤,并将结果作为像素的值。如果将缩小、放大过滤器和多级渐进纹理都设置为线性过滤,则Direct3D就会在两个最接近的纹理级别上都进行双线性纹理过滤,然后再对相邻两级纹理图形上对应的两个纹理颜色进行加权平均,最后的结果作为单个像素值。这种为了图元中的一个像素,而结合了两幅纹理,共8个像素的技术,称为“三线性过滤”,因为它在纹理的三个方向----u、 v和纹理级别上都进行了线性过滤。

可以通过IDirect3DDevice9::SetSamplerState()函数设置实际渲染时纹理过滤的最大级数,其中需要将第二个参数设为D3DSAMP_MAXMIPLEVEL,第三个参数设为实际渲染时纹理过滤的最大级数。下面的示例代码设置纹理层0的最大多级纹理过滤级数为16。

g_device->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 16);

还可以通过将IDirect3DDevice9::SetSamplerState()的第二个参数设为D3DSAMP_MIPMAPLODBIAS,设置多级纹理映射级数偏移值。如果对某个纹理映射设置正偏移值,得到的图形结果就会比原来的更清晰,但锯齿更多;反之设为负偏移值,得到的图形结果就会更模糊。

 

代码:实例下载

相关文章
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
1548 2
|
资源调度 运维 容灾
中国广电云,全国首个多Region2.0架构升级正式完成并亮相2025CCBN!
2025年4月25日,中国国际广播电视信息网络展览会(CCBN)在北京圆满落幕,在中国广电集团的展台上,阿里云支持建设的“国家文化专网基础设施——中国广电云”接待国家广电总局领导及广电传媒行业专家的参观指导,安全自主、文化特色、全国覆盖、产业智能等中国广电云的鲜明特点给莅临展位的行业同仁留下了深刻的印象。
668 4
|
缓存 前端开发 Linux
PAS工具分享 - FrameScope与RTRadar
本次分享的主题是PAS工具分享 - FrameScope与RTRadar,由阿里云基础软件系统研发团队工程师刘依男、苏峰分享。主要分为三个部分: 1. PAS性能分析套件综述 2. PAS FrameScope 3. PAS RTRadar
478 0
|
存储 人工智能 运维
超大规模云网络技术新突破!阿里云斩获中国自动化学会科技进步一等奖
超大规模云网络技术新突破!阿里云斩获中国自动化学会科技进步一等奖
584 60
|
存储 人工智能 运维
自我提升可以从哪些方面:AI时代的能力重构与终身进化
在数字技术与AI快速发展的背景下,自我提升从“阶段式学习”转变为“持续性进化”。文章从认知升级、技能进化、生态构建三个维度解析AI时代个人能力提升的核心路径。强调个体需从知识积累转向能力重构,通过批判性思维、跨域关联和动态适应性实现思维跃迁;同时构建复合能力体系,并借助AI工具与协作网络,在数字化转型中扮演价值创造者角色。最终,自我提升将超越传统框架,成为能力生态的动态演进过程。
|
人工智能 数据库
Poetry2Image:专为中文古诗词设计的图像生成校正框架,增强了诗歌内容与模型生成图像之间的一致性
Poetry2Image 是一个专为中文古诗词图像生成设计的迭代校正框架,通过自动化反馈和校正循环,提升诗歌与图像之间的一致性,有效捕捉诗歌的语义和艺术精髓。
626 11
Poetry2Image:专为中文古诗词设计的图像生成校正框架,增强了诗歌内容与模型生成图像之间的一致性
|
机器学习/深度学习 自然语言处理
预训练语言模型:从BERT到GPT,NLP的新纪元
自然语言处理(NLP)近年来因预训练语言模型(PLMs)的崛起而发生巨大变革。BERT和GPT等模型在学术与工业界取得突破性进展。本文探讨PLMs原理、发展历程及其实际应用,涵盖文本分类、命名实体识别、问答系统等场景,并通过实战案例展示如何使用这些强大的工具解决复杂的NLP任务。
|
人工智能 自然语言处理 搜索推荐
AI 赋能:开启内容生产效率革命的密钥》
在数字化时代,AI技术正成为提高内容生产效率的关键工具。本文探讨了AI在文章写作、文案创作、翻译、图像识别与生成及数据分析等方面的应用,分析了其提高效率的方式、带来的优势与挑战,并通过新闻媒体、营销、教育等行业案例,展望了AI在内容生产领域的未来。
713 3
|
机器学习/深度学习 编解码 PyTorch
基于MeshCNN和PyTorch的三维对象分类和分割
基于MeshCNN和PyTorch的三维对象分类和分割
731 0
基于MeshCNN和PyTorch的三维对象分类和分割