纹理的应用

环境光贴图

环境光贴图可以让模型反射出周围环境的样子,如下图右侧,而左侧的图像就是环境光贴图。

环境光一般都存储在一个球上(Spherical Map),并且我们可以像展开地球仪一样展开成环境光贴图。

展开后的贴图

通过观察展开后的贴图我们很容易发现,在贴图的顶部、底部都发生了变形扭曲。为了解决该问题,我们可以将保存在球上的环境光照贴图映射到立方体上(Cube Map)。

现在我们就得到了一个拥有6个部分的环境光纹理贴图。

凹凸贴图与法线贴图

纹理除了可以表达环境光之外还可以让几何体呈现出凹凸不平形状。这样的纹理称为凹凸贴图,凹凸贴图上定义了每个点的相对高度(高度差)。事实上,凹凸贴图并没有真正的让几何变得凹凸不平,而是通过定义的高度差产生一个假的法线,而法线会影响光照的渲染从而欺骗人的眼睛造成凹凸不平的视觉效果。**凹凸贴图和法线贴图实际上是一回事。**凹凸贴图定义高度差,而法线贴图直接定义法线的位置。

凹凸贴图记录的是高度差,并没有记录法线的位置,如下图黑色的是原几何曲线,而黄色的是根据凹凸贴图得到的扰动后的曲线,那我们如何计算扰动后法线是什么呢?

我们先来看一个二维的例子

假设在ppp点,原始法线为(0,1)(0,1)(0,1),则经过凹凸贴图扰动后ppp点的法线可以通过该点的切线导出(逆时针旋转90度)。根据差分法,可以得到ppp点处的切线dp=c*[h(p+1) - h(p)],逆时针旋转之后就可以得到法线n(p)=(-dp,1).normalized()

对于三维的情况,我们同样假设原始法线为(0,0,1)(0,0,1)(0,0,1),在ppp点处对两个方向求切线

  • dp/du = c1*[h(u + 1) - h(u)]
  • dp/dv = c2*[h(v + 1) - h(v)]

最后逆时针旋转90度之后就可以得到法线n(p)=(-dp/du,-dp/dv,1).normalized()

这里我们始终假设原始法线为(0,0,1)(0,0,1)(0,0,1),即使在现实场景中法线的位置可能千变万化。因为可以将其看做是在局部坐标中为(0,0,1)(0,0,1)(0,0,1)求解完成后再经过一个简单的坐标变换将其变换到世界坐标。

位移贴图

位移贴图和凹凸贴图记录的信息一致,都是高度差。只不过位移贴图真的会把模型做一个拉伸,移动了模型顶点的位置。位移贴图可以表现出凹凸贴图所不能表现的阴影上的变化和边缘上凹凸不平的变化。

凹凸贴图对模型的精细程度要求较高。但在DirectX上有一个动态曲面细分技术,可以在不进行位移贴图时采用较低质量的网格,而在应用位移贴图时进行一下网格细分,这样就可以满足位移贴图对曲面质量的要求。

三维噪声和三维纹理

对于类似于大理石这样的纹理,我们可以使用定义在三维空间中的噪声函数,对于模型三维空间中任意一点,都可以得到一个噪声值,用该噪声值作为模型的纹理,可以使模型内部也具有纹理信息。

三维纹理通常用于体渲染中。在三维纹理中记录着空间每个点的信息(如密度等),广泛应用于医学影像重建领域。三维纹理是纹理的一种延伸泛化。

使用纹理记录着色信息

纹理也可以记录着色的信息。我们可以将模型的着色结果直接记录到纹理上,然后再去计算环境光遮蔽(阴影),最后将这两部分叠加,应用到模型上,渲染就会非常迅速。

渲染效果上图就是使用纹理记录着色信息,然后再计算环境光遮蔽的。上图左侧是没有考虑环境光遮蔽的着色图,将其记录到纹理上。右侧的图是应用计算好着色纹理后进行环境光遮蔽的效果。

Reference

[1] 闫令琪,GAMES101-现代计算机图形学入门,Lecture 10 Geometry 1 (Introduction). https://www.bilibili.com/video/BV1X7411F744?p=10

现代计算机图形学笔记(八)——纹理的应用(环境光贴图、凹凸贴图、法线贴图)相关推荐

  1. 图形学笔记(八) 光和光照(加工中)

    光和光照 光照模型 光有什么样的几何性质? 光学具有三重领域,按照其诞生的历史顺序分为几何光学.波动光学和量子光学.而在计算机图形学领域,我们仅关注光的几何性质.在几何光学中,我们仅考虑可视光,而不考 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 原文:Introduction to 3D Game P ...

  3. ShaderLab自学笔记(1):法线贴图和法线空间

    法线贴图和法线空间 为啥要有切线空间和啥是切线空间 纹理坐标跟位置坐标是啥关系 切线坐标系的求法 1.为啥要有切线空间和啥是切线空间 为啥要有切线空间? 3D空间中不同的坐标系有不用的用处.如局部空间 ...

  4. openGL法线贴图和纹理贴图结合使用,以增强三维物体表面细节

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一.法线贴图? 二.代码 1.主程序 2.着色器程序 运行效果 源码下载 前言 凹凸贴图的一种替代方法是使用查找表来替换法向量.这样 ...

  5. 3D游戏建模入门初级教学:制作纹理逼真的法线贴图

    下图是一只恐龙的低模布线,细心的朋友估计会看到恐龙头部的布线密度是要远远高于身体和四肢的,这种布线的好处就是可以在你需要着重刻画的部位经过细分后生成的模型面数会远远高于那些次要部分,会使你的细节刻画更 ...

  6. LearnOpenGL笔记——五、高级光照:“法线贴图”和”视差贴图“

    五.高级光照:"法线贴图"和"视差贴图" 5.4 法线贴图 以光照算法的视角考虑的话,只有一件事决定物体的形状,这就是垂直于它的法线向量 砖块表面只有一个法线向 ...

  7. 图形学笔记(八)着色2 —— 纹理映射、重心坐标、双线性插值、Mipmap、三线性插值、各向异性过滤、纹理的应用(环境贴图、法线贴图等)

    图形学笔记(七)着色 -- Blinn-Phone 反射模型.着色频率.渲染管线.GPU 图形学笔记(九)几何 --几何表示方法(CSG.距离函数.水平集 .点云.网格(obj格式)).贝塞尔曲线(面 ...

  8. 一篇学完:GAMES101:现代计算机图形学入门 学习笔记

    文章首发于lengyueling.cn 欢迎访问交流! PDF版本已经附在lengyueling.cn文章末尾,需要自取. 导论 图形学应用场景 电子游戏: PBR:之狼 卡通渲染:无主之地 电影:黑 ...

  9. 图形学笔记(十八)光场、颜色和感知—— 光场相机(全光函数、光线和光场的定义)、可见光谱、谱功率密度、颜色的生物学基础、Tristimulus Theory、同色异谱、加色与减色系统、颜色空间SPD

    图形学笔记(十七)相机,棱镜 --FOV.焦距.曝光.F-Stop.ISO.薄透镜公式.Circle of Confusion Size.景深.理想薄透镜光线追踪 图形学笔记(十九)动画1 -- 动画 ...

最新文章

  1. Count Color(poj 2777)
  2. 细胞膜内流体应力分析
  3. Scrapy爬取妹子图保存到不同目录下
  4. MapReduce基础开发之十二ChainMapper和ChainReducer使用
  5. JavaEE企业级快速开发平台jeesite4的使用和快速搭建项目
  6. 常用于评价回归模型优劣的统计量包括( )。_第四十一讲 R-判断回归模型性能的指标...
  7. hana数据库导入mysql_【SAP HANA】新建表以及操作数据(3)
  8. asterisk配置会议室meetme.conf
  9. poj 1276 多重背包
  10. Docker logs 命令——查看docker容器日志
  11. Fedora中systemctl命令的使用
  12. Linux/Centos源码安装python3任意版本
  13. asp.net 小记
  14. QT每日一练day27:绘制不规则窗体
  15. a pycharm 标记多个_轻松学透Markdown的终极教程 #3:Markdown标准标记语法(全)
  16. No module named ‘win32com‘
  17. 汉字编码对照表(gb2312/Big5/GB2312)
  18. python标准库-math数学函数库介绍
  19. 利用计算机制作3D动画属于,第一部完全以电脑技术制作而成的3D动画长片
  20. [ctf web][csaw-ctf-2016-quals]mfw writeup

热门文章

  1. 半导体检测系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  2. mysql时区怎么修改?
  3. 2023牛客寒假算法基础集训营4 赛时思路+正解
  4. vnpy本地数据导入
  5. 青书学堂c语言作业,青书学堂: (单选题) C语言中非空的基本数据类型包括____(本题2.0分)...
  6. 金山云AI新突破:集智高清让带宽降下去让画质升上来
  7. Echarts双向柱形图
  8. 为什么工厂模式是华而不实的——浅谈工厂模式的利与弊
  9. Socket编程之简单介绍 - 蓝天下的雨 - 博客园
  10. 使用JQgrid常用 (实战经常用)