纹理映射

  • 1 环境贴图(Environment Map)
    • 1.1 Spherical Environment Map
    • 1.2 Cube Map
  • 2 凹凸贴图
  • 3 法线贴图(Bump Mapping)
  • 4 位移贴图(Displacement Mapping)
  • 5 三维纹理
    • 5.1 三维纹理
    • 5.2 体渲染(Volume Rendering)
  • 6 AO(环境光遮蔽)贴图

纹理可以理解为GPU上的一块内存,内存上有一块区域可以做点查询也可以做范围查询,并且很快,可以认为纹理是一块数据,可以做不同类型的查询,不限于把它理解成图像,纹理可以表示很多东西,比如环境光照(环境光映射/环境贴图)

1 环境贴图(Environment Map)

例如在一个房间中的某一位置,任何一个方向都可以照射到这个位置,将所有照射到这里的光记录下来就是环境贴图
下图中左侧,向房间中每个方向望去,把看到四面墙展开放在一张图上,这张图像可以理解为从四周进入到人的眼睛的光,右侧是渲染的犹他茶壶,这个茶壶会被环境光照亮,也就是说会被房间里任何方向的光照射,同时也会反射出任何方向的环境光进入人的眼睛,如果你仔细观察会发现茶壶表面会一一对应左侧的环境光贴图,我们用一张贴图描述环境光,这就比用点光源来描述更加简单方便

1.1 Spherical Environment Map

可以把环境光记录在球面上,可以通过鱼眼摄像机获取或者多拍几张照片360/720度合成

之后呢可以把球面展开,得到一张二维图,会发现顶部和底部有明显的扭曲问题

球形环境贴图,做到了描述一个球体,但不是一个均匀的描述,会在靠近球体两极的地方出现扭曲(例如地球南极北极地区实际比在地图上看起来要更大)

1.2 Cube Map

针对球形环境贴图无法对环境进行一个均匀的描述,人们想出了另外一个办法,在原来球体上取一个包围盒,一个立方体,把环境光的信息存放在立方体上

立方体有六个面,展开后如下所示

与球形环境光贴图相比,解决了两极的扭曲问题,计算时需要先找到对应的面在去查询而不是直接根据角度在球面上读取,但是这个计算过程非常快,几乎没什么影响,所以立方体贴图在环境光照的实现中被广泛使用

2 凹凸贴图

纹理处理可以描述颜色之外,还可以定义不同位置的任何属性,可以定义一点的相对高度,这个相对高度指的是先定义一个基础表面,在这个基础表面上沿着法线向上向下变化的偏移量,这个相对高度的集合就是凹凸贴图

如上图,右侧橘子表面会不规则的上下凹凸,如果这种效果通过若干个三角形来渲染,那计算量会非常大,但是我们可以通过凹凸贴图实现同样的效果,首先定义三角形的顶点上的纹理坐标,有一张上下凹凸的纹理贴图,就可以通过查询出来的任意一个点的相对高度,也就是说通过凹凸贴图,可以在不把几何形体变复杂的情况下,影响到法线的变化,着色后会产生明暗对比,人们的视觉就认为物体表面有凹凸的东西

3 法线贴图(Bump Mapping)

法线贴图与凹凸贴图其实是一回事,不过是通过定义不同位置的高度和邻近位置的高度差来重新计算它的法线,给任何一个像素的法线做个扰动。可以通过高度的变化改变法线,如下图黑色线是原本光滑的表面,该表面上的一点p,进过凹凸贴图应用后变成了黄线上的那个点,很明显两个点的法线发生巨大变化

如何知道它是怎么变化的呢,
我们把问题简单化,假设原本表面是一维函数,几何法线方向是向上的,在P点的法线为(0,1)
凹凸贴图定义了下图中的蓝色波浪线,先计算曲线上任意一个点的切线(梯度、函数的导数),假设这个点沿水平方向向右移动一个单位,向上移动的距离就是 dp = c * [h( p + 1 ) -h( p )] c表示凹凸贴图影响大小,这时向量 (1,dp) 就是要求的切线

我们知道法线和切线相互垂直,这时只需要将切线逆时针旋转90就是法线,根据旋转矩阵的特性将y变负,x和y对调,就是逆时针旋转90度,即要求的法线为 (-dp,1) 最后归一化就得到了新的法线

实际使用(3d)


如上图,实际使用实在三维空间中,思路是一致的,大致归纳一下:

  1. 先假设原本的平面法线为(0,0,1)
  2. 计算切线,贴图有U方向和V方向,对应的需要分别求出任一点U方向的上的切线(dp/du)和V方向的切线(dp/dv)
  3. 逆时针旋转并归一化,(-dp/du,-dp/dv,1).normalized() 计算的结果就是新的法线 (或者使用U、V方向切线向量叉乘得到新法线)

注意:第一步假设平面法线坐标为(0,0,1)使用的局部坐标系,计算完法线后需要转换回世界坐标系

4 位移贴图(Displacement Mapping)

位移贴图和凹凸贴图使用的是一样的纹理,输入是一样的,但位移贴图会真的把三角形的顶点做一个位置移动。呈现的效果也是不一样的,如下图左侧凹凸贴图在渲染过程中改变法线,欺骗人们的眼睛,仔细观察会发现表面虽然看起来凹凸不平,凸起的部分也没有阴影,而位移贴图是实际改变了几何体的顶点,凸起部分会有阴影,效果也更加真实,但是是需要代价的,几何体的顶点数量要足够多,多到可以支持凹凸部分平滑变化

能不能二者兼得或者有更好的思路呢,有的,起初模型较粗糙点(三角形少一点),在应用位移贴图的过程中检测一下是否需要把三角形变得更细,需要的话先拆分再做位移贴图。Direct X就这么做的但是只能windows系统,另外UE5的Nanite也是这个道理

5 三维纹理

5.1 三维纹理

二维纹理只应用在物体表面,是没法看的物体内部的构造,这时三维纹理就出现了,在空间中定义了任何一个点的值的集合就是三维纹理


通常三维纹理不是保存起来的图片,而是通过噪声函数生成,三维空间中的点都有一个解析式可以算出来噪声的值,这个噪声可以进行一系列的处理:二值化、加、减、乘等运算,如上图中大理石材质就是利用有名的柏林噪声(perlin noise)产生的三维纹理渲染的

5.2 体渲染(Volume Rendering)

三维的纹理广泛的应用于体积的渲染,除了在医学领域应用,也可以用于地质勘探、气象分析、分子模型构造等领域。体绘制技术也能用于自然界中很多视觉效果是不规则的体,如流体、云、烟等,它们很难用常规的几何元素进行建模,使用粒子系统的模拟方法也不能尽善尽美,而使用体绘制可以达到较好的模拟效果

6 AO(环境光遮蔽)贴图


在上图中比较第一幅图和第三幅图,人的眼窝越深的地方越暗,这就是环境光遮蔽的效果,越深的地方被眉骨凸起部分遮挡的可能越大,接收光照越少就会越暗,这个效果是通过一张预计算好的贴图,在渲染时采样的该贴图的值,作为可见性与原来的色相乘得到的,这张贴图就是AO贴图
这个效果利用一些光照算法也可以达到,但计算复杂难开销较大以做到实时应用 。在实时渲染中一般选AO贴图模拟。

计算机图形学(九)-纹理的应用,环境贴图、凹凸贴图、法线贴图、位移贴图相关推荐

  1. 计算机图形学九:几何1—隐式曲面(代数形式,CSG, 距离函数,分型几何)与显式曲面

    隐式曲面与显式曲面 1 隐式曲面(Implicit Surface)与显示曲面(Explicit Surface)的特点 1.1 隐式曲面的特点 1.2 显式曲面的特点 2 具体的几种隐式曲面 2.1 ...

  2. 计算机图形学之纹理的作用

    说到纹理我们很难用文字描述: 我先上图: 大家发现了什么吗. 细细看: 我们第二幅模型是通过纹理映射技术给了模型一些真实感,纹理映射这个概念待会谈. 那么大家千万不要以为第二幅图就一定使用了纹理映射不 ...

  3. 计算机图形学 九大行星旋转的动画演示

  4. 9、计算机图形学——纹理的应用(环境贴图、凸凹贴图、法线贴图以及位移贴图)

    一.环境贴图 比如下面的这张图,左边的是一张表示环境光的纹理,这个纹理表示屋子内部四面八方都是啥样,右边是一个茶壶, 将纹理映射到这个茶壶上,就能茶壶上渲染出周围的环境 还有这样的球形环境贴图(sph ...

  5. [计算机图形学]纹理的高级应用(前瞻预习/复习回顾)

    一.前言 上节课我们讲了纹理的放大缩小产生问题后,我们的解决方法,那么纹理是什么呢?在现代GPU中,我们可以理解为是内存+范围查询(滤波),也就是对一块区域做点查询/范围查询,并且做的非常快,也就是说 ...

  6. 计算机图形学名词解释

    最近跟着UC Berkeley的课程学习计算机图形学,名词好多... 3D 三维(three dimension).客观世界中静止的物体都是三维的,在计算机图形学中常在一定的坐标系中用(x,y,z)坐 ...

  7. 计算机图形学一(补充):特征分解和奇异值分解的几何解释

    特征分解与奇异值分解的几何解释 在计算机图形学一中介绍了一些具体的变换矩阵,如旋转,缩放,位移等等,但这些矩阵都有特定的形式,那么如何去理解一个任意的2维或3维变换矩阵的几何意义呢,在本节中将会利用特 ...

  8. 图形学基础 真假位移(法线贴图、凹凸贴图和位移贴图、向量位移贴图的对比与区别)

    写在前面: 本文是在阅读了知乎题目为<高度图,视差贴图(Bump-maps),置换贴图(displacement),法线贴图的本质>一文后,对翻译内容有些疑问,故而去查阅原文,做出的翻译. ...

  9. 计算机图形学与虚拟环境pdf,计算机图形学与虚拟现实环境.ppt

    计算机图形学与虚拟现实环境 双目视差.调节.收敛 双目视差 左右眼间的图像差别 朝所处环境的任意地方看,交替用两眼看,图像水平地从左到右然后从右到左地来回切换 调节 调节透镜让场景中的店对准焦点的过程 ...

  10. OpenGL南邮计算机图形学实验报告二——两个纹理的渐变变换和移动

    OpenGL南邮计算机图形学实验报告二--两个纹理的渐变变换和移动 计算机图形学的新题目要求 OpenGL配置参考: 南邮老前辈wonz哥的OpenGL配置(Shader.h始终不用改).SOIL2 ...

最新文章

  1. OPencv java Mat 基本操作像素点(7)
  2. SpringSecurity-短信验证码接口开发
  3. IDEA启动项目:找不到或无法加载主类
  4. Python中operator模块的操作
  5. JsRender 前端渲染模板常用API学习
  6. xml生成java代码_在Eclipse中从XML生成Java代码
  7. 动物行为检测计算机视觉_当动物行为研究遇见机器视觉——“红外热成像+计算机视觉”动物行为研究系统...
  8. C#文件过滤器filter
  9. 优动漫PAINT入门宝典(应用篇)——颜色配置文件
  10. 【目标检测】11、Region Proposal by Guided Anchoring
  11. Unbuntu20.04环境下一款开源翻译软件:goldendict的安装与配置(图文)
  12. 【有利可图网】PS实战系列:简单易学的PS把照片转素描效果
  13. PLC程序案例一:喷泉电路(采用中间继电器完成分步控制)
  14. HTML5 UI 模板
  15. python几行代码实现邮件解析
  16. n个元素的全排列(递归+去重)
  17. 学习诸如 Oculus Rift 等虚拟现实设备开发需要掌握哪些知识和技术?
  18. QT4.8.6调用zlib库实现数据流的压缩与解压缩
  19. ttl mysql_TTL 生存时间
  20. 莫烦pytorch CNN卷积神经网络

热门文章

  1. C语言比赛评分系统报告,c语言编程:本课题模拟一个简单的比赛评分系统,选手从1号开始连续编号,选手得分分为专业素质得分和综...
  2. [乐意黎]某音上超酷炫的 Word Clock 文字云时钟屏保配置
  3. 访问网上邻居-修改账号密码
  4. 树莓派接入USB摄像头
  5. scrapy1.5文档(第二节 Scrapy Tutorial)
  6. 深度可分离卷积(Depthwise separable convolution)
  7. Hi3559A项目开发计划
  8. Mixly-呼吸灯及可调灯
  9. php 颜值测试源码,微软小冰颜值测试PHP最新代码
  10. kali系统更新命令