【GAMES101】Lecture08 09 Shading 3 (Texture Mapping cont.) 纹理映射 续集

目录

  • 0 引言
  • 1 如何在三角形内进行插值:重心坐标
    • 1.1 为什么要在三角形内插值
    • 1.2 重心坐标
    • 1.3 使用重心坐标做三角形内颜色插值
  • 2 应用纹理
    • 2.1 简单的纹理映射:漫反射
    • 2.2 问题:纹理放大(采用插值解决)
    • 2.2 点查询和范围查询
      • 点查询
      • 范围查询
    • 2.3 【扩展】超采样
    • 2.4 【拓展】MipMap
      • MipMap的原理
      • MipMap的优势
      • MipMap的缺点
      • 应用
      • 其他抗锯齿技术
    • 2.5 MipMap(PPT的内容)
    • 2.6 各项异性过滤
      • 各项异性过滤的原理
      • 各项异性过滤与MipMap的区别

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:计算机图形学专栏
  • 💥 标题:【GAMES101】Lecture08 Shading 3 (Texture Mapping cont.) 纹理映射 续集
  • ❣️ 寄语:对知识永远有兴趣!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

本文是博主自己的学习笔记,只是简单的将ppt粘贴过来,有些概念会重新梳理。

1 如何在三角形内进行插值:重心坐标

1.1 为什么要在三角形内插值

因为我们只计算了三角形三个顶点的值,三角形内部的值需要进行插值。

在这里插入图片描述

1.2 重心坐标

在这里插入图片描述

那A点自己的重心坐标是什么?

在这里插入图片描述

那三个参数如何计算?通过面积比计算

在这里插入图片描述

三角形的重心在三分之一处,可以分成三个等面积的三角形

在这里插入图片描述

在这里插入图片描述

1.3 使用重心坐标做三角形内颜色插值

重心坐标(Barycentric coordinates)是在一个给定的凸多边形或者凸多面体中描述点位置的一种方法。这种方法描述了一个点相对于多边形或者多面体顶点的位置,通常表示为三个非负实数的组合,它们的总和等于1。重心坐标在计算机图形学、计算机辅助几何设计、有限元分析等领域有广泛的应用。

重心坐标有很多用途,其中一些主要的包括:

  1. 几何形状插值和变形:在计算机图形学中,重心坐标可用于描述几何形状的内部点位置,从而实现形状的插值、变形等操作。

  2. 纹理映射:在计算机图形学中,重心坐标也经常用于纹理映射,即将纹理贴图映射到三角形网格或其他几何形状上。

  3. 碰撞检测:在游戏开发和物理模拟中,重心坐标可以用于检测物体之间的碰撞或确定物体是否在另一个物体内部。

  4. 有限元分析:在工程领域,有限元分析中经常使用重心坐标来描述和计算复杂结构中的节点位置,从而进行力学分析。

  5. 形状识别和分割:在计算机视觉和模式识别中,重心坐标可以用于描述和分割图像中的对象形状。

总的来说,重心坐标是一种非常有用的数学工具,可以用于解决各种几何和计算问题,从而在多个领域中发挥作用。

在这里插入图片描述

2 应用纹理

2.1 简单的纹理映射:漫反射

漫反射纹理映射是一种简单而常见的纹理映射技术,它通过将每个三角形顶点的UV坐标与纹理上的像素值进行插值,来计算三角形内每个位置的UV坐标,并最终确定其颜色。下面是一个简单的漫反射纹理映射的过程:

  1. 顶点UV坐标计算:对于每个三角形,通常会在顶点处指定UV坐标,这些UV坐标指定了纹理上与该顶点相关联的位置。对于内部的点,可以通过插值计算出其UV坐标。这通常是通过重心坐标插值来实现的,其中对于每个内部点,都根据其在三角形内的位置计算出与三个顶点UV坐标的加权平均。

  2. 纹理采样:一旦计算出了内部点的UV坐标,就可以利用这些坐标在纹理图像上进行采样。通常,纹理采样可以通过在UV坐标处插值来获得像素的颜色值。这通常使用双线性插值或三线性插值来实现,以获得更平滑和精确的纹理映射结果。

  3. 像素值赋值:最后,将纹理采样得到的像素值赋给相应的位置。这样就完成了漫反射纹理映射的过程。

简单示例代码(伪代码)如下:

for each triangle in mesh:
    for each pixel in triangle:
        # 计算像素在三角形内的重心坐标
        barycentric_coords = calculate_barycentric_coordinates(pixel)
        
        # 根据重心坐标插值计算像素的UV坐标
        uv_coords = interpolate_uv_coordinates(barycentric_coords, triangle_uv_coords)
        
        # 在纹理图像上根据UV坐标进行采样
        texel_color = sample_texture(texture_image, uv_coords)
        
        # 将采样到的像素颜色赋给像素
        set_pixel_color(pixel, texel_color)

这样,就实现了对每个三角形内每个像素的漫反射纹理映射

在这里插入图片描述


2.2 问题:纹理放大(采用插值解决)

纹理放大(Texture Magnification)

在这里插入图片描述

高清的影像但是纹理的分辨率很低

在这里插入图片描述

Bilinear Interpolation 双线性插值,使用周围的点(4个点)的值,计算出其他点的值。

在这里插入图片描述

Bicubic Interpolation 三次插值,使用周围的点(16个点)的值,计算出其他点的值。

前面讨论的都是纹理尺寸太小导致纹理放大后有锯齿。假如现在纹理尺寸过大呢?

在这里插入图片描述

点采样纹理存在的问题:

在这里插入图片描述

形成这种结果的原因:近处的屏幕像素覆盖的纹理区域小,如下图中左侧所示。远处的屏幕像素覆盖纹理区域大,如右边所示。假如使用覆盖纹理区域像素的平均值来给屏幕像素赋值,就会导致刚才的那种现象。所以这种方法需要改进。

在这里插入图片描述

使用超采样解决,如下图所示:缺点计算量太大

在这里插入图片描述

如何解决锯齿问题呢?

  • 锯齿形成的原因,采样的频率跟不上信号的频率(体现在纹理采样中就是,使用一个采样点对一块9x9大小的纹理进行采样,此时纹理是不断变化的,但是我们只用一个像素点进行采样就会导致锯齿),所以使用超采样的方式可以解决,也就是增加我们采样的频率。但是这样效率太低。
  • 那么既然采样会导致锯齿,可不可以不进行采样就立刻知道范围内的平均值是多少呢?可以的,MipMap技术

2.2 点查询和范围查询

点查询

点查询是指在数据集中查询单个点的值。这种类型的查询通常用于获取特定位置或时间点的确切数据。在图形处理中,点查询可以通过不同的插值方法实现,用于计算或估算某一特定点的属性值,如颜色、亮度等。

  • 线性插值:是一种简单的插值方法,用于通过两个已知点的值来估算在这两点之间任意位置的值。线性插值假设两个点之间的变化是均匀的,适用于变化平缓的数据。
  • 三次插值:比线性插值提供了更平滑的结果,它通过考虑更多的样本点(通常是四个)来估计目标点的值,能更好地处理数据的曲线变化。

范围查询

范围查询是指查询给定区域或范围内的数据值。这种查询通常用于统计分析、图形渲染中的MipMap技术、GIS中的瓦片加载等场合,其中需要考虑一个区域内所有数据点的信息。

  • 统计分析中,范围查询可能用于计算一个区间内的平均值、最大值或最小值等。
  • 图形渲染中的MipMap技术,范围查询用于选取最适合当前视图距离和尺寸的纹理级别,实际上是从多个纹理样本中选择一个代表值。
  • GIS应用中,范围查询用于加载用户当前视图范围内的地图瓦片,这些瓦片覆盖了指定的地理区域。

这两种查询方法各有优势和应用场景。点查询适用于需要精确数据或进行精细处理的情况,而范围查询适合于需要考虑区域性特征或进行宏观分析的场景。在实际应用中,根据具体需求灵活选择和结合使用这两种查询方法,可以有效地处理和分析数据。

2.3 【扩展】超采样

超采样抗锯齿(Supersampling Antialiasing,简称SSAA)是一种高质量图形渲染技术,用于改善计算机图形中的视觉效果,减少或消除图像中的锯齿边缘。锯齿通常在边缘不平滑或斜率较大的地方出现,尤其是在3D游戏和图形应用程序中更为常见。

SSAA通过在图像的实际显示分辨率之上使用更高的分辨率渲染图像来工作。这意味着如果你的显示器分辨率是1920x1080,超采样抗锯齿可能会以3840x2160或更高的分辨率渲染图像,然后将其缩小以适应实际的显示分辨率。这种方法可以更精细地平滑边缘,减少锯齿现象,因为在缩小过程中,多个像素被合并成一个像素,自然地模糊了边缘。

  • 如何工作

    1. 渲染阶段:在超过显示器原生分辨率的分辨率上渲染整个场景。例如,对于1080p(1920x1080)的显示器,可能以4K(3840x2160)分辨率渲染场景。
    2. 降采样阶段:将高分辨率图像缩小至目标显示分辨率。这个过程通过平均多个像素的颜色值来创建单个像素的颜色,从而实现平滑边缘的效果。
  • 优点与缺点

    • 优点
    • 提供最高质量的图像平滑,可以非常有效地减少锯齿。
    • 简单直接,不需要复杂的算法或大量的预处理。
      • 缺点
    • 性能成本高:由于需要渲染更多的像素,所以需要更强大的图形处理能力,这可能导致帧率下降。
    • 内存消耗大:更高的渲染分辨率需要更多的视频内存。

尽管SSAA提供了优秀的图像质量,但由于其对硬件资源的高需求,它在实际应用中可能不如其他抗锯齿技术(如MSAA(多重采样抗锯齿)或FXAA(快速近似抗锯齿))那样受欢迎。然而,对于追求图像质量至上,并且拥有足够强大硬件的用户来说,SSAA仍然是一个值得考虑的选择。

2.4 【拓展】MipMap

要解决锯齿问题,可以采用几种不同的技术方法,每种方法都有其特点和适用场景。除了超采样(SSAA)以外,MipMap技术也是一种广泛使用的方法,尤其是在处理纹理映射时。下面介绍MipMap技术以及其他一些流行的抗锯齿技术。

MipMap技术是一种用于纹理贴图的优化技术,主要目的是提高图形渲染的效率和质量。其核心思想在于为每个纹理图像创建一系列预计算的、分辨率逐步降低的图像集合(称为MipMap链)。这种技术在三维图形渲染中尤其有用,可以有效地解决纹理贴图中出现的锯齿、摩尔纹(Moire Patterns)和纹理波动等问题。

MipMap的原理

  1. 创建MipMap链:对于每个纹理,生成一系列的缩小版本,每个级别的纹理尺寸都是前一级别的一半。例如,如果原始纹理大小为256x256像素,则MipMap链中的下一个级别为128x128,然后是64x64,一直到1x1像素。这个过程通常在纹理被加载到显存中时完成。

  2. 级别选择:渲染时,根据物体表面与摄像机的相对距离和角度,动态选择最合适的MipMap级别进行纹理采样。如果物体远离摄像机或者在视野中较小,使用较低分辨率的纹理;如果物体接近摄像机或较大,使用较高分辨率的纹理。

  3. 过滤:为了进一步提高纹理贴图的质量,还会使用各种过滤技术(如线性过滤、各向异性过滤)在不同的MipMap级别之间进行插值,以实现更平滑的过渡效果。

MipMap的优势

  • 减少混叠和摩尔纹:通过使用与视图距离相匹配的纹理分辨率,可以减少因为纹理采样过度而引起的锯齿和摩尔纹现象。
  • 提高渲染效率:使用更小的纹理进行渲染可以减少显存的带宽需求,尤其是在渲染远处物体时,这有助于提升渲染效率。
  • 改善性能:减少了对高分辨率纹理的依赖,特别是在视图中只需要较小纹理表示的情况下,可以有效降低图形处理器的负载。

MipMap的缺点

  • 占用额外的存储空间:由于需要存储原始纹理的多个缩小版本,所以MipMap技术会占用比单一纹理更多的存储空间。然而,由于每个降级的纹理尺寸减半,整个MipMap链所需的额外空间通常小于原始纹理的50%。

应用

MipMap技术广泛应用于各种图形渲染场景中,包括游戏、模拟、可视化等领域。通过动态选择合适的纹理级别,MipMap技术能够在保持视觉质量的同时,提升渲染效率和性能,尤其适用于对动态场景进行实时渲染的应用。

其他抗锯齿技术

  • 多重采样抗锯齿(MSAA):这种技术只对边缘进行超采样,而不是整个屏幕,从而在一定程度上降低了超采样的性能开销。它提供了较好的图像质量与性能之间的平衡。
  • 快速近似抗锯齿(FXAA):一种屏幕空间抗锯齿技术,通过分析像素在屏幕空间的亮度梯度来平滑边缘,效率高,对性能的影响较小,但可能会导致图像略微模糊。
  • 时域抗锯齿(TAA):通过结合当前帧与前几帧的信息来平滑边缘,可以有效地减少锯齿同时也降低了闪烁,但可能会引入一些运动模糊。

每种技术都有其优势和适用场景。例如,MSAA和SSAA更适合需要高图像质量的应用场景,而FXAA和TAA则在保证一定图像质量的同时提供了更高的性能。在选择抗锯齿技术时,需要根据具体的应用需求和硬件性能进行权衡。

2.5 MipMap(PPT的内容)

Mip 这个词来自拉丁语言,表示很多的小空间

在这里插入图片描述

MipMap技术可以被视为一种图像金字塔的实现

在这里插入图片描述

如何计算MipMap的级别呢?

在这里插入图片描述

在这里插入图片描述

2.6 各项异性过滤

各项异性过滤(Anisotropic Filtering, AF)和MipMap是两种提高3D图形纹理质量的技术,它们以不同的方式工作,并且经常被结合使用以获得最佳效果。下面详细解释各项异性过滤的原理,以及它与MipMap的区别。

各项异性过滤的原理

各项异性过滤是一种纹理过滤技术,目的是改善观察角度倾斜(非垂直观察)时纹理的视觉质量。在3D图形中,当表面与视线角度接近平行时,标准的纹理映射方法(如双线性过滤和三线性过滤)往往无法提供足够的细节,导致纹理模糊或拉伸。AF通过在多个方向上采样纹理,考虑了这种观察角度的差异,以此来提高倾斜视角下纹理的清晰度和细节。

AF通过对纹理进行不同方向上的采样并综合这些采样信息来提高纹理质量。这种方法使得即使在极端角度下观察,纹理表面也能保持较高的细节清晰度。AF的效果可以通过设置过滤级别(如2x、4x、8x、16x)来调整,过滤级别越高,采样点越多,纹理质量越好,但相应地也会增加更多的性能开销。

各项异性过滤与MipMap的区别

  • 目标差异:MipMap旨在通过使用不同分辨率的纹理级别来优化远距离物体的纹理质量和渲染性能,减少纹理混叠。而各项异性过滤则专注于提高从倾斜角度观察物体时的纹理清晰度,解决纹理模糊和拉伸问题。
  • 工作方式:MipMap通过选择与物体视距匹配的纹理级别来工作,而各项异性过滤通过在多个方向上对纹理进行采样并综合这些采样信息来提高倾斜视角下的纹理质量。
  • 使用场景:MipMap主要用于处理纹理在不同距离下的显示问题,适用于所有类型的纹理映射。各项异性过滤则主要用于改善特定的视角问题,特别是在表面与视线几乎平行的情况下。

结合使用MipMap和各项异性过滤可以在保持高性能的同时,从不同的距离和角度获得清晰详细的纹理表现。这种组合方法充分利用了两种技术的优势,为3D图形应用提供了丰富和高质量的视觉

在这里插入图片描述

解决了矩形的查询,因为MipMap只能使用正方形进行范围查询

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt主窗口 之:停靠/悬浮窗口(QDockWidget)

一、QDockWidget概述 QDockWidget 是 Qt 中的一个窗口部件,用于创建可停靠的窗口,通常用于构建多文档接口(MDI)或可定制的用户界面。QDockWidget 允许用户将窗口停靠在应用程序的主窗口周围,或将其拖动到独立的浮动窗…

STM32

GPIO通用输入输出口 GPIO:8种输入输出模式 浮空输入可读取引脚电平,若引脚悬空,电平不确定上拉输入可读取引脚电平,内部接上拉电阻,悬空时默认为高电平下拉输入可读取引脚电平,内部接下拉电阻,悬空时默认…

视频编辑的瑞士军刀,MoviePy库的详解与应用示例

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。 公众号:一点sir,关注领取python编程资料 在数字媒体的时代,视频内容的创作和编辑变得越来越重要。无论是社交媒体上的短视频&…

【数据结构】初识数据结构与复杂度总结

前言 C语言这块算是总结完了,那从本篇开始就是步入一个新的大章——数据结构,这篇我们先来认识一下数据结构有关知识,以及复杂度的相关知识 个人主页:小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1.什么是数据结构 2.…

原创【matcap材质在ue4中的实现办法】

matcap材质在ue4中的实现办法 2023-08-29 15:34 https://www.bilibili.com/video/BV1GR4y1b76n/?spm_id_from333.337.search-card.all.click&vd_sourced76b773892c830a157c0ccc97ba78411 评论(0)

PS从入门到精通视频各类教程整理全集,包含素材、作业等(8)复发

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 B站-PS异闻录:萌新系统入门课课程视频 …

Golang学习系列1-pprof性能调优

1. pprof 简述 一位亦师亦友的话让我记忆犹新,他说“学习一个新事务,应该从三个方面入手what,why,how;且三者的重要程度应该是递减”。所以在本文的第一部分先叙述下pprof的what & why。 1.1 What? pprof是golang自身提供的一种性能分…

基于顺序表的学生成绩管理系统

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

【Flink技术原理构造及特性】

1、Flink简介 Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。它的最大亮点是流处理,是业界最顶级的开源流处理引擎。 Flink最适合的应用场景是低时延的数据处理(Data Processin…

算法练习—day1

title: 算法练习—day1 date: 2024-04-03 21:49:55 tags: 算法 categories:LeetCode typora-root-url: 算法练习—day1 网址:https://red568.github.io 704. 二分查找 题目: 题目分析: 左右指针分别为[left,right],每次都取中…

练习 19 Web [BJDCTF2020]Easy MD5

如果你是第一批做这个题的,这道题一点也不easy 打开在前端代码里面看到,输入框输入的内容实际是’password’ 随意输入内容,查看响应header中的内容有一句SQL代码,可知我们要让password在md5后返回值为true 然后尬住&#xff…

区间DP模型

目录 环形石子合并思路代码实现 能量项链代码实现 加分二叉树思路代码实现 凸多边形的划分代码实现 棋盘分割题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 佬的题解代码实现 环形石子合并 题目描述: 将 n n n 堆石子绕圆形操场排放,现要将…

前端(动态雪景背景+动态蝴蝶)

1.CSS样式 <style>html, body, a, div, span, table, tr, td, strong, ul, ol, li, h1, h2, h3, p, input {font-weight: inherit;font-size: inherit;list-style: none;border-spacing: 0;border: 0;border-collapse: collapse;text-decoration: none;padding: 0;margi…

C++从入门到精通——入门知识

1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称都将存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的就是对标识符的名…

43.1k star, 免费开源的 markdown 编辑器 MarkText

43.1k star, 免费开源的 markdown 编辑器 MarkText 分类 开源分享 项目名: MarkText -- 简单而优雅的开源 Markdown 编辑器 Github 开源地址&#xff1a; https://github.com/marktext/marktext 官网地址&#xff1a; MarkText 支持平台&#xff1a; Linux, macOS 以及 Win…

中文Mistral模型介绍(Chinese-Mistral)——中文大语言模型

中文Mistral简介 Chinese-Mistral由清华大学地学系地球空间信息科学实验室开发。 该模型基于Mistral发布的Mistral-7B-v0.1训练得到。首先进行中文词表扩充&#xff0c;然后采用实验室提出的PREPARED训练框架&#xff08;under review&#xff09;在中英双语语料上进行增量预训…

C++Date类的实现

目录 前言&#xff1a; 1.显示日期 2.构造函数与获取某年某月的日期的函数 3.日期比较 4.日期加减天数 5.日期减日期 6.前置后置与-- 7.完整代码 8.测试 总结&#xff1a; 感谢支持&#xff01; 前言&#xff1a; 结合了前面的内容的学习&#xff0c;本篇来对之前的…

面试篇:杂乱篇

String s " "; 1. String类的常用方法有哪些&#xff1f; s.length()&#xff1a; 返回字符串长度s.substring()&#xff1a; 截取字符串s.split()&#xff1a; 分割字符串s.equlas()&#xff1a; 字符串比…

Ai智能生成图片神器,多种风格任你选,探索无限可能的视觉盛宴

在数字化浪潮中&#xff0c;图片已成为我们表达创意、传递情感、展示品牌的重要工具。然而&#xff0c;不是每个人都有专业的设计背景&#xff0c;也不是每个创作者都能轻松驾驭各种风格。这时&#xff0c;一款强大而灵活的AI智能生成图片神器应运而生&#xff0c;它将为你的创…

Vol.34 Good Men Project:一个博客网站,每月90万访问量,通过付费订阅和广告变现

今天给大家分享的案例网站是&#xff1a;Good Men Project&#xff0c;这是一个专门针对男性成长的博客网站&#xff0c;内容包括人际关系、家庭、职业发展等话题。 它的网址是&#xff1a;The Good Men Project - The Conversation No One Else Is Having 流量情况 我们先看…