计算机图形学入门13:纹理映射常见问题、MipMap

        上一章介绍了纹理映射,这一章介绍纹理映射常见的问题。

1.纹理太小

 1.1产生原因

        例如要渲染一面墙,它的分辨率4K,但与它对应的纹理大小是256x256,这样要怎样?显然纹理会被拉大。当墙面上一个点去查询纹理时,可能查询到不准确的值,如下:
        1.墙面的最小单位是像素(pixel),纹理的最小单位为纹素(texel)
        2.由于纹理过小,会存在多个像素查询纹理时返回同一个纹素。
        3.墙面渲染时每个像素点映射到了非整数的位置上,只能找最近的texel点,产生不连续情况,就会产生一块一块的。

1.2双线性插值

        如上图所示,红点代表一个像素的中心点的位置,映射到非整数的位置,这个4*4的格子代表一个纹理,黑点表示纹素的中心,这时候红点只能找到最近黑点的颜色,产生不连续现象。

        那么,一个像素映射到纹理的位置是红点的位置时如何查找出准确的值,正确的方式是使用双线性插值(Bilinear interpolation)。

1.2.1双线性插值处理过程

        1.在红色像素点找到临近的四个纹素u00、u01、u10、u11。

        2.以这四个点创建新的纹理坐标系。以u00到u10方向为u方向,u00到u01为v方向,红点的位置是(s,t)s,t范围是0-1

        3.水平方向的线性插值。线性插值的公式如下,x是0-1之间的当前值。

         假设u0u1为上下两个的插值结果,u0以s为当前值从u00和u10之间插值,u1以s为当前值从u01和u11之间插值。

        4.竖直方向方向的线性插值。有了上一步得到的结果u0u1,在竖直方向以t为当前值从u0和u1之间插值。

        在水平方向做一次插值,在竖直方向做一次插值,因此这个方法叫双线性插值。
        纹理过小使用双线性插值的办法外,还有精度更高的处理办法叫双三次插值算法(Bicubic),过程与双线性插值类似,但取的是周围16个texel,同样做竖直的和水平的插值,只不过每次用4个做三次的插值,而非线性的插值,运算量大一些,效果更好,通常高质量伴随高开销,实际双线性插值可以满足大多数需求。如下图所示,是两种插值算法优化后的效果。

2.纹理太大

2.1产生影响

        通常纹理过大会引发更严重的问题。例如渲染一个格栅状地面,纹理是一个小格子,在地面的两个方向上重复平铺,如果按照之前默认的采集方式处理,渲染出来的结果是远处出现摩尔纹,近处出现锯齿,并且越远越差。越远表示一个像素有更多的纹素,也就是纹理过大。如下图所示。那么,出现这样的走样现象,原因是什么呢?

2.2产生原因

        如上图所示,从左到右表示场景中与相机的距离由近到远,当比较近的时候屏幕上一个像素覆盖的面积大概是一个纹素的大小,随着与相机距离的变大,屏幕上一个像素所覆盖的纹理上的面积越来越大,通常每个纹素有自己的颜色,最远距离中覆盖了多个纹素,但只会进行一次采样,采样的结果自然不能代表原理那么多纹素的颜色,所以会出现走样现象。

        回顾前面走样产生的原因,我们知道是因为当采样的频率小于信号的变换频率就会产生走样现象,所以在这里,当只有一个像素点去采样多个纹素的时候,就是信号频率大于采样频率。

2.3解决办法

2.3.1超采样(MSAA)

        使用更多的像素采集,也就是MSAA。比如每个像素使用512个点进行采样,得到很好的结果,如下图右边所示。但是换来的是更大的开销,那有没有其他方法呢?

2.3.2MipMap

2.3.2.1查询分类

        既然采样会引起走样,那么假如不采样会怎么样?那么如何直接获得内部平均值呢?这就是要使用范围查询(Range Query)了。范围查询就是不需要采样,给你任何一个区域,你立刻可以得到它内部的平均值。范围查询还有很多种类,这里是查询平均值,也有查询范围内的最大值和最小值的范围查询。

        而之前是使用的都是点查询,也就是以点为单位去纹理中查询对应位置的值,使用的双线性插值都是点查询。

2.3.2.2MipMap原理

        MipMap是在图形学中广泛应用的经典概念,它允许做范围查询。MipMap做范围查询是非常快速的,但是只能做近似的正方形的范围查询。

        那么,什么是MipMap。如下图,把一张纹理分成若干层,原始纹理为第0层,比如大小为128*128,每增加一层纹理分辨率缩小一半,直到缩小到只剩一个像素,那总层数就是log2(纹理的长或宽)。

        通常MipMap是在渲染前通过预计算完成的,生成对应层级的纹理,经过计算后MipMap变成如下图的结构,称为图像金字塔。如下图所示。相比原始图片的存储量,MipMap只增加了1/3的存储量。

        MipMap需要在正方形区域内做范围查询,如何确定需要查询的区域呢。任何像素都可以映射到纹理上的区域,可以通过一个近似的方法。

        如上图所示,三角形覆盖了一些采样点,以红色点和蓝色点为例,它们会投影到纹理空间上。因为纹理空间是三维空间下的,所以不是正方形。

        如上图,例如我们要确定红色点左下角的采样点(粉色区域)在纹理坐标上查询范围的大小,在纹理空间中以这个点为中心,连接上面和右面的采样点,求出距离,并取最大值,假设最大的长度是L。

        如上图,求出的长度L基本近似采样点(粉红色区域)映射在纹理上的正方形的长度。也就是说用L长的正方形来近似采样点的区域。

        有了正方形的长度就可以通过公式D=log2L来确定去哪一层进行范围查询。

        直接利用层级去MinMap中查询出来的结果,如下图所示。但是会发现颜色之间渐变非常生硬,不是平滑过渡(同一颜色代表同一层级)。

        那如何做到渐变更加平滑呢?还是用到插值,例如你需要查询1.3层,那先查询1层和2层,然后拿两个结果在做一次插值。

        首先在D层使用双线性插值查询该点的值,然后继续使用双线性插值查询出D+1层的值,最后层与层之间做一次插值,我们把这种方法称为三线性插值(Trilinear Interpolation)。

        三线性插值需要做两次查询,一次插值,开销很小,并且效果也非常好。如下图所示。

2.3.2.3MipMap的限制

        如上图所示,左边是用512的MSAA采样的结果,假设是一个准确的结果。右边是用MipMap处理的结果,发现远处细节都糊掉了,这种现象称为模糊过度(Overblur)。为什么会出现这种情况?因为在处理过程中,它只能查询方块区域,而我们查询的方块是近似得到的,而且还用了三线性插值,所以是不完全准确。既然问题出现如何解决,答案是使用各项异性过滤(Anisotropic Filtering)。如下图所示。

        各向异性过滤也就是RipMap,相比MipMap只能做正方形查询,RipMap不同之处在于可以做矩形区域查询。

        上图中, 沿着对角线上的图,水平方向和竖直方向上各缩小一半,称为各项同性,其实也就是MipMap。

        其余的有的只在水平方向发生压缩,有的只在竖直方向发生压缩,也有的在水平和竖直方向同时发生压缩且压缩比例可能会不一样,像这样在不同方向上它的表现各不相同称为各项异性

        各向异性额外的开销是原本的三倍,造成较大的显存开销,能解决部分问题,只能满足矩形区域的范围查询。

        但是屏幕像素映射到纹理空间上可不一定是规律的形状。针对斜着的矩形区域(下图右侧中类似平行四边形)的查询也无能为力。

        对于上述这类情况我们可以使用EWA Filtering来解决,不规则的形状都可以拆成很多个不同的圆形去覆盖,多次查询。当然运算量又会增加。如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研发管理平台有哪些?符合软件公司需求的工具要具备这几个特征!

本人从事TOB行业十余年,目前就职的就是一家软件公司。下面,本人就站在软件公司的角度来讲一讲:我们公司做项目研发时,会选择一个什么样的研发管理工具来辅助?供大家参考。 众所周知,软件研发项目是一个复杂…

电商商品项目||电商竞品分析|主流电商商品API接口在竞品分析中的重要应用

竞争数据采集 竞争数据是对在电子商务业务中彼此存在竞争关系的商家、品牌、产品(即竞争对手)等各项运营数据的总称,在电子商务企业的经营过程中,对竞争对手进行分析可以帮助决策者和管理员了解竞争对手的发展势头,为企业成略制定…

通用视频模板解决方案,视频生产制作更轻松

对于许多企业来说,视频制作往往面临着技术门槛高、制作周期长、成本投入大等难题。为了解决这些问题,美摄科技凭借其领先的跨平台视频技术和完善的工具链,推出了面向企业的视频通用模板解决方案,为企业视频制作带来了全新的革命性…

【elementui源码解析】如何实现自动渲染md文档-第三篇

目录 1.前言 2.webpack.demo.js 3.markdown文档 4.fence.js 1)tokens 2)::: 3) 5.containers.js 1)markdown-it-container 2)md.use() 3)代码逻辑 4)containers小结 6.congfig.js …

5G消息 x 政务 | 新型数智政务服务平台

5G消息 x 政务 | 新型数智政务服务平台 通过 5G 消息,帮助政府部门及公共事业部门优化服务品质、提高服务效能,打造现代政府的展示窗口、便民利企的服务窗口、营商环境的感知窗口,提供多元、透明、高效的线上政务服务。 5G消息 x 政务 —— 优…

转型AI产品经理(11):“损失规避”如何应用在Chatbot产品中

损失规避是行为经济学和心理学中的一个重要概念,它揭示了人们在面对潜在的收益和损失时,表现出对损失的强烈偏好避免,相比于获得同等价值的利益,人们对损失的感受更为强烈。它主要有以下特征: 1、不对称性 损失规避体…

nvm 报错https://npm.taobao.org/mirrors/node/index.json 淘宝镜像更换

文章目录 一、问题背景二、解决问题1. 获取配置文件的位置2. 修改配置文件中的镜像源配置3. 修改 npm 镜像源 一、问题背景 使用nvm的时候报错: Could not retrieve https://npm.taobao.org/mirrors/node/index.json. 由于淘宝的镜像域名更换,npm.taobao.org 域名…

同三维T80004JEH2-4K60 双路4K60 HDMI解码器

输出:2路HDMI2路3.5音频,最高支持1路4K60HDMI输出 可以同源/独立分屏输出两种模式可选:对应两个HDMI输出一样和不一样的信号 同源可以解码36路网络流(1/4/9/16/25/36),两个HDMI输出一样的信号&#xff…

运行vue3项目相关报错

1. VSCode打开TSVue3项目很多地方报错 报错内容 几乎所有文件都会出现未知飘红 error Delete CR prettier/prettier报错原因 插件冲突,Windows系统回车换行符与MAC不一致(所以这个问题Windows系统才会出现) 解决 需要安装Vue - Official…

java的Filter(过滤器),Interceptor(拦截器) 和 Aspect(切面)

文章目录 前言一、过滤器 (Filter) 基本用法二、拦截器 (Interceptor) 基本用法三、Aspect(切面)的基本用法总结 前言 Filter 是servlet层面的,由Servlet容器(如Tomcat)支持,只能在web程序中使用,实现了javax.servlet.Filter接口 Intercept…

NATAPP-内网穿透工具----下载与配置

NATAPP-内网穿透工具 基于ngrok的国内高速内网穿透服务,natapp提供了一种便利的方式,使得开发和测试过程更加高效,尤其是在需要进行远程调试或展示时。无论是进行web开发、微信和支付宝的本地开发调试,还是简单地从外部网络访问家…

Maya 2024 mac/win版:创意无界,设计新生

Maya 2024是一款由Autodesk推出的业界领先的三维计算机图形软件,广泛应用于电影、游戏、广告等创意产业。这款软件以其强大的功能和卓越的性能,为艺术家们提供了一个实现创意梦想的平台。 Maya 2024 mac/win版获取 在建模方面,Maya 2024提供…

作者推荐 | 探索分析从起源到现今的巅峰之旅(MySQL存储模型)

探索分析从起源到现今的巅峰之旅 背景介绍MySQL内部组织与结构MySQL的数据层次和关系InnoDB的数据存储模型数据记录的基本单元 — 行页目录(Page Directory)文件头(File Header)决定页面间的关联方式数据页头(Page Hea…

大模型应用开发技术:Multi-Agent框架流程、源码及案例实战(一)

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

QT:QT中的默认代码 QT 创建控件的两种方式

目录 QT中的默认代码 新项目的结构 主函数 wiget类的声明文件.h wiget类的定义文件.cpp form file界面文件 .pro文件 QT 创建控件的两种方式 通过ui界面创建控件 通过代码方式创建控件 QT中的默认代码 新项目的结构 主函数 基本概念:Qt 在创建的一个 Wi…

AI在线创作歌曲智能绘画对话三合一源码系统 前后端分离 带完整的安装代码包以及搭建教程

系统概述 在数字化时代背景下,艺术与技术的融合正以前所未有的速度推进,催生出一系列创新应用。为了满足创作者对多元化、高效能创作工具的需求,我们自豪地推出了“AI在线创作歌曲、智能绘画对话三合一源码系统”。这一系统不仅实现了音乐、…

白酒:茅台镇白酒的消费者教育计划与推广活动

云仓酒庄豪迈白酒,作为茅台镇的品牌,一直以来都非常重视消费者教育和推广活动。这些计划和活动的目的在于提高消费者对豪迈白酒的认知度和接受度,同时培养消费者的品鉴能力和酒文化素养。 首先,云仓酒庄豪迈白酒通过开展品鉴活动来…

独立游戏之路:Tap篇 -- Unity 集成 TapTap 广告详细步骤

Unity 集成 TapADN 广告详细步骤 前言一、TapTap 广告介绍二、集成 TapTap 广告的步骤2.1 进入广告后台2.2 创建广告计划2.3 选择广告类型三、代码集成3.1 下载SDK3.2 工程配置3.3 源码分享四、常见问题4.1 有展现量没有预估收益 /eCPM 波动大?4.2 新建正式媒体找不到预约游戏…

六西格玛培训:一次学习,终身受益!

六西格玛培训,这个听起来就充满智慧的名字,其实是一种追求卓越的管理哲学。它的核心理念在于减少缺陷、降低变异,以提升企业的运营效率和质量水平。对于我们这些渴望在职场中更上一层楼的人来说,六西格玛培训无疑是一把打开成功之…

太速科技-基于XCVU9P+ C6678的100G光纤的加速卡

基于XCVU9P C6678的100G光纤的加速卡 一、板卡概述 二、技术指标 • 板卡为自定义结构,板卡大小332mmx260mm; • FPGA采用Xilinx Virtex UltralSCALE 系列芯片 XCVU9P; • FPGA挂载4组FMC HPC 连接器; • 板载4路QSPF,每路数据速…