基础感念

凹凸贴图技术是对物体表面贴图进行变化然后再进行光照计算的一种技术。例如给法线分量添加噪音,或者在一个保存扰动值的纹理图中进行查找,这是一种提升物体真实感的有效办法,但却不需要额外的提升物体的几何复杂度。这种方式在提升物体表面细节或者表面不规则形方面有显著效果。

凹凸映射分类

Bump Mapping 的种类主要有:法线映射、视察映射、浮雕映射。

最常用的是发现映射,一般的增加法线贴图后会对局部的物体表面进行法线扰动,进而改变明暗关系,从而达到增加表面细节的效果。

Normal Mapping 法线映射

normal map是一张存有物体局部表面法线信息的一张贴图。在计算光照的时候,程序会去读取法线贴图,并获取到当前像素点的法线信息,结合光照信息进行光照计算。使用法线贴图计算光照可以让物体表现出更加丰富的细节,并随着光照方向的变化实时变化。

*法线贴图一般由高模映射到对应的底模上来生成;但像金属,木头等这些细节丰富的物体,可借助程序化的软件:Photo Shop、SD等生成对应的法线贴图。(而法线一般储存在模型的切线空间中)

什么是切线空间?

切线空间是以法线向量为Z轴以顶点为原点定义的坐标系,另外两个坐标轴就是和该点相切的两条切线(Tangent)

这样的切线本来有无数条,但模型一般会给定该顶点的其中一个Tangent。

Normal:法线,软件生成可编辑。

Tangent:切线,引擎生成

B-Tangent:根据N和T的叉乘计算得到

为什么要用切线空间?

实际上,法线本身储存在那个坐标系中都是可以的。例如世界空间、模型空间、切线空间。

但问题是,我们并不是单纯的想要得到法线,后续的光照计算才是我们的目的,不管使用那个坐标系都面临着一个选择,就是最后光照计算使用的坐标系究竟是哪一个?

对于切线空间,我们需要把视线方向、光照方向在顶点着色器中转换到切线空间中,然后在片元着色器对法线纹理采样后直接进行光照计算。

世界空间和切线空间如何转换?

将世界坐标系下的顶点法线(normal)和切线(Tangent)以及副切线(Bitangent)作为切线空间坐标系的正交基。

并用这三个向量的标准正交基来构建转换矩阵,对应关系为法线作为z轴,切线作为x轴,副切线作为y轴。

构成一个3*3的矩阵空间来做空间向量的坐标系转换,一般叫该矩阵为TBN矩阵,其逆矩阵就是从切线空间到世界空间的转换矩阵标记TBN^-1,因为TBN是正交矩阵,所以其逆矩阵就是TBN的转置矩阵。

使用切线空间有什么好处?

自由度高,切线空间记录的是相对法线信息,这意味着即便吧纹理应用到一个完全不同的网格上,也可以得到一个相对合理的结果。

可进行UV动画,例如我们可以移动一个纹理的UV坐标来实现一个凹凸移动的效果,这种uv动画可以在水或者火山熔岩这种类型的物体比较类似。

可以重用normal map,例如一个砖块我们可以仅使用一张normal map 贴图就可以用到所以的六个面上。

可压缩,由于切线空间中法线z方向总是正方向,因此我们可以仅储存xy方向,通过叉乘得到z方向。

unity中法线贴图的压缩方式

在unity中非移动平台上unity会把法线贴图转换成DXRT5nm格式。这种格式只有两个有效通道:GA通道。这样可以节约空间,而移动平台unity使用传统的RGB通道。在DRXTnm格式中,GA储存对应法线的x、y分量,z分量需要简单计算得到

关于切线空间的补充

通常我们所见的那种偏蓝色的法线纹理,其实就是储存在切下空间中每个顶点法线的扰动方向。

也就是说,如果我们一个顶点的法线方向不变,那么在他的切线空间中新的normal值就是z轴方向,也就是说值为(0,0,1)。但这并不是法线纹理中储存的最终值,因为一个向量每个维度的取值范围在(-1,1),而纹理每个通道的值范围在(0,1),因此我们需要做一个映射变化,即pixel = (normal + 1)/ 2。这样,之前的法线值(0,0,1)实际上对应了法线纹理中RGB的值为(0.5,0.5,1),而这个颜色也就是法线中那大片蓝色。

parallax mapping视差映射

法线映射虽然能展示较为逼真的模型表面细节,但毕竟发法线映射只能改变法线,并不能让模型表面产生让人信服的遮挡效果。所以我们引入视差映射。

原理:我们制作的模型在一个三角面即为切线空间下,所有点都位于切线和副切线组成的平面内(下图水平0.0),但实际物体要有更多的细节。

如下图当计算我们当前视角的片元A时,真正应该计算的点是视线与物体表面的实际交点,即B点。

如何计算B点?需要知道A,B两点在平面上uv的偏差。更具高度图以及切线空间下的视角方向,近似的求解偏移量。视角方向(v),A点的高度值来近似的求解,并可以通过一个缩放值(scale)来控制。

Steep Parallax Mapping陡视差映射

陡视差映射的基本思想是将深度分为等距的若干层,然后从最顶端开始采样,并且每次沿着视角方向偏移一定的值,若当前层的深度大于采样出的深度,则停止检查并返回最后的结果。

*陡视差是一个近似的解,但相比于普通视察映射要精确的多,效果也更好。并且会对纹理偏移进行合理性的检查。但如果分层多,开销会较大;分层少,则容易出现锯齿。

Relief Mapping浮雕映射

想要更你更精确的效果,视察映射是不够的,使用更大大uv偏移,是擦汗映射就会导致失真。于是引入浮雕映射,浮雕映射更容易提供更多的深度,还可以做自阴影以及闭塞效果。

a,b使用的视察映射;c,d使用了浮雕映射

原理:浮雕映射一般采用射线步进,和二分查找来决定uv偏移量。

为什么不直接使用二分查找?

因为直接用二分查找可能会漏掉较薄的区域导致结果不准确。所以第一步,使用射线步进来确定交点位于那个步进内。然后在该步进内使用二分查找,快速确定交点位置,最后返回结果,偏移贴图。

Parallax Occlusion Mapping视差遮蔽映射

视差遮蔽隐射(POM)是浮雕映射的另外一个版本,计算出的视差效果更加真实

作业

未加法线贴图

加入法线贴图

视差暂时有点儿问题,没有成功。

百人计划 图形 2.5 BUMP图改进相关推荐

  1. 百人计划 图形1.4 PC手机图形API介绍

    前言 电脑工作原理:电脑是有各种不同的硬件组成,由驱动软件驱使硬件进行工作.所有的如软件工程师都会直接或间接使用到驱动. 定义:是一个针对GPU的图形库,用于渲染2D.3D矢量图形的跨语言.跨平台的应 ...

  2. 百人计划 图形2.1 色彩空间

    色彩发送器 色彩认知:光源是出生点,光源发出光线,光线通过直射反射折射等路径最终进入人眼.在接收到光线后,人眼产生了一系列化学反应.由此把产生的信号传入大脑,大脑对颜色产生了认知感知. 光的要素: 光 ...

  3. 百人计划 图形2.2 模型与材质基础

    渲染流水线大致过程 1.顶点数据输入到顶点着色器中进行相关的顶点计算,然后进行图元装配,通过点与点之间的关系将点进行连接.2.再到几何着色器(可选着色器)进行图元的增加,再到光栅化通过遍历像素点将一个 ...

  4. 【TA-霜狼_may-《百人计划》】图形3.4 延迟渲染管线介绍

    [TA-霜狼_may-<百人计划>]图形3.4 延迟渲染管线介绍 @[TOC]([TA-霜狼_may-<百人计划>]图形3.4 延迟渲染管线介绍 3.4.1 渲染路径 3.4. ...

  5. 【TA-霜狼_may-《百人计划》】图形3.7.2 command buffer简

    [TA-霜狼_may-<百人计划>]图形3.72command buffer 及urp概述 @[TOC]([TA-霜狼_may-<百人计划>]图形3.72command buf ...

  6. 【TA-霜狼_may-《百人计划》】图形4.5 DoF景深基础

    [TA-霜狼_may-<百人计划>]图形4.5 Dof景深基础 @[TOC]([TA-霜狼_may-<百人计划>]图形4.5 Dof景深基础 4.5.1 景深 离散圈 4.5. ...

  7. 【TA-霜狼_may-《百人计划》】图形2.7.2 GPU硬件架构概述

    [TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 @[TOC]([TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 GPU是什么 GP ...

  8. 技美 百人计划 (图形)1.1渲染流程

    技美 百人计划 (图形) 图形 1.1 渲染流水管线2.1数学基础 很早之前就有关注百人计划这个系列的课程,也跟着看到了2.几的教学但是一直没有写笔记,最近看到百人计划已经快更新完毕了,决定从头看一遍 ...

  9. 个人学习笔记 ——【技术美术百人计划】图形 2.1 色彩空间介绍

    个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 一.色彩发送 ...

最新文章

  1. 在析构函数中delete this指针问题
  2. CVPR Oral:我给大家表演一个无中生有|北航商汤耶鲁
  3. 何恺明、陈鑫磊新研究:提出实例分割新方法,效果比肩Mask R-CNN
  4. 7-spark学习笔记-spark性能调优
  5. 2020年全国儿童青少年总体近视率为52.7%,比上年上升2.5%播
  6. 分析数据库CitusDB:提供弹性计算能力
  7. [转帖]FPGA--Vivado
  8. simulink怎么生成vxworks的执行程序_让天下没有难改的Simulink模型
  9. linux进程名称最大长度,linux – 进程名称长度的最大允许限制是多少?
  10. 1079 Total Sales of Supply Chain(25 分)
  11. 在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?
  12. 宏的录制之工资条的制作
  13. 【Chrome插件】广告屏蔽神器 Adblock Plus使用教程
  14. Spring中bean的scop
  15. 面试遇到这么一位满嘴骚话的 HR,真牛皮!
  16. 计算机关闭自带杀毒,Win10专业版系统中关闭自带杀毒软件操作方法
  17. RNA 10. SCI 文章中基因表达富集之 KEGG 注释
  18. thingsboard 编译及分析
  19. %d,%c,%s,%x各代表什么
  20. HTTP请求的过程与TCP连接的过程

热门文章

  1. C语言数据结构预备知识模块二:结构体
  2. [附源码]JAVA+ssm计算机毕业设计高校教材管理系统(程序+Lw)
  3. c++ 中auto 类型
  4. 电脑账户服务器未能登录拒绝访问,“Group Policy Client服务器未能登陆拒绝访问”的解决方案...
  5. 搅拌站ERP管理系统-砼友ERP
  6. ThingJS:定义3D摄像头的开发标准
  7. 如何抓住蝴蝶效应中的那只蝴蝶
  8. 1688.item_search_suggest获得1688搜索词推荐 API接入
  9. 10-数组--highgh的博客--JavaScript的学习笔记
  10. 江西小学计算机说课稿,《美丽的家乡》说课稿(江西省省级优课).docx