https://space.bilibili.com/7398208

BumpMapping介绍

物体的细节尺度

宏观尺度:

  • 特征覆盖很多像素;
  • 由顶点,三角形或者其他几何图元来表示
  • 宏观尺度上建模的例子如创造三维角色时的四肢或头部;

中观尺度:

  • 特征只覆盖几个像素;
  • 描述介于微观尺度与宏观尺度间特征,包含细节较复杂,无法使用单个三角形进行渲染;
  • 但细节又较大,能够让观察者看到几个像素以上的表面曲率变换;
  • 如:人脸皱纹,肌肉细节,衣服褶皱

微观尺度:

  • 特征小于一个像素;
  • 微观尺度在着色模型中工作,着色模型通常在像素着色器中实现,使用纹理贴图作为参数;
  • 着色模型模拟物体表面微观几何形状的相互作用;
  • 如:有光泽物体在微观尺度下光滑,漫反射物体表面在微观尺度下粗糙;

凹凸映射(Bump Mapping)

就是模拟中观尺度的常用方法之一,能够让观察者感觉到比几何模型尺度更小的细节

基本概念

纹理中把尺度细节相关的信息编码进去,着色过程中用稍微受到干扰的表面代替真实表面,使表面看起来具有小尺度的细节。

原理

Bump Mapping分类

上图自左往右分别是只加颜色贴图,加入法线贴图(法线映射),加入高度图(视差映射)

Normal Mapping 法线映射

基础概念

  • 法线贴图是一张存有物体局部表面发现信息的贴图
  • 计算光照时,程序读取法线图,并获取到当前像素点的法线信息,结合光线信息进行光照计算,从而让物体表现更丰富的细节,随光照方向变换出现实时的变化;
  • 使用法线贴图来计算光照,可以让物体表现出更多丰富的细节,且随着光照方向的变化而变化,这是普通的贴图做不到的。
  • 法线贴图一般由高模映射到对应的低模上来生成。对于金属、木头这类细节丰富的物体,可以借助程序化的软件,如PS、SD来生成

法线的存储,一般会放到模型的切线空间中

切线空间

切线空间是以物体表面的切线、副切线和法线组成的空间

在计算光照时,需要把相关的向量放在统一的坐标系下进行运算。此时就需要不同空间坐标的转换矩阵(世界空间转切线空间/切线空间转世界空间)

补充:为什么一定要用切线空间?(https://www.zhihu.com/question/23706933/answer/161968056

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

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

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

世界空间和切线空间的转换

将世界坐标系下顶点的法线(Normal)、切线(Tangent)、副切线(Bitangent)作为切线空间坐标系的正交基。用这三个向量的标准正交基构建转换矩阵。对应关系为:法线方向作为z轴,切线方向作为x轴,副切线方向作为y轴

由于需要转换的都是方向向量,所以只需要构建一个3×3的旋转矩阵来进行世界空间到切线空间的转换,称为TBN矩阵

切线空间到世界空间的转换矩阵为上述TBN矩阵的逆矩阵,因为是正交矩阵,所以逆矩阵就是它的转置矩阵

切线空间的优点

  • 自由度高,若法线记录在模型空间下,则它为相对于模型的绝对法线信息,如球体的法线信息无法传递给环形物体;而切线空间下的是相对法线信息,是对当前物体法线的扰动;
  • 方便UV动画:它对现有法线扰动,当UV在模型上进行偏移时可以实现物体表面凹凸效果偏移从而实现UV动画;
  • 法线贴图重用:如立方体六个面可以使用一张法线贴图;
  • 便于压缩:由于切线空间中,其法线始终垂直于表面向外,在归一化的法线向量里,其法线值始终处于0和1之间;故而可以使用(1-T2 -B2 )1/2推导出法线的值;而模型空间里,理论上法线的值可以为负,即可以从-1到1之间,就不能只通过B和T两个值来推导法线值,必须存储三个值,从而无法实现图像压缩;

法线贴图在Unity中的压缩格式

在非移动平台上,会把法线贴图转化为DXRT5nm格式

这个格式只有两个有效GA通道(就是上边说的只存xy,推出z) ,分别对应法线的x、y分量可以节省空间。

在移动平台上,使用传统RGB通道。

因为模型空间下切线的范围是-1 ~ 1,而法线纹理的通道范围是0 ~ 1,所以进行了一次映射pixel=(normal+1)/2,于是切线空间的法线值(0,0,1)对应了法线纹理中的RGB值(0.5,0.5,1),这就是法线纹理主要为蓝色的原因

在解码时会进行反向操作,先乘2再减1把映射范围从0 ~ 1变回-1 ~ 1

视差映射 Parallax Mapping

基础概念

视差映射主要为了赋予模型表面遮挡关系的细节。引入了一张高度图和法线贴图一起使用,来产生一些真实的效果;高度图一般视为顶点位移来使用,此时需要三角形足够多,模型足够精细,否则看起来会有块状;如果在有限的三角形面的情况下就可以使用视差映射技术。

视差映射技术

利用模型表面高度信息来对纹理进行偏移(例如:低位置的信息被高位置的信息遮挡掉了,所以会采样更高的信息)

视差映射的实现

只改变纹路,不增加三角形

如下图,蓝色水平线为我们的模型表面,我们要让人眼看见底下凹凸不平的效果。随着视线方向看去,在模型表面A点所表现的纹理应该是在B点深度下的采样效果。

知道A的uv值的情况下,知道AB两者的偏移量即可算出B的uv值

 在获得b点坐标后,我们在采样时就不会采样A而是b,由于深度大高度小的A很容易失去被采样的机会,失去表现机会故而产生遮挡;

陡峭视差映射

也是近似解,但比视差映射精确

基本思想是将深度等距分为若干层,从最顶层开始采样,直到当前层的深度大于采样出的深度,则返回此结果

陡视差映射的问题在于分层机制:

  • 分层多,步进次数增多,性能开销会比较大
  • 分层少,渲染出来会有比较明显的锯齿

浮雕映射

相比于视差映射,浮雕映射能够更精确地计算UV偏移量,可以提供更多的深度,还可以做自阴影和闭塞效果

下图中上边两个使用视差贴图,下边两个使用浮雕贴图

 原理

浮雕映射采用射线步进和二分查找来决定UV偏移量,射线步进和视差映射一样,通过视差步进找到近似的位置之后,再通过二分查找找到精确的偏移值

Parallax Occlusion Mapping 视差闭塞贴图

相对于浮雕贴图,不用之处在于最后一步,浮雕贴图是在确认最后步进之后进行二分查找;

视差闭塞贴图是在最后步进的两端uv值进行采样,采样之后再对这两个结果进行插值,插值的结果作为P点最终的偏移值

  • POM比起浮雕映射性能更好,同时比起视差映射也拥有更好的精确度,是一种性价比较高的选择
  • 因为POM最后一步操作是插值,相对比较平滑和连续,在非常起伏凸起的表面可能没法得到正确的结果

作业

加法线贴图和不加的对比图

 float3 NormalMap = UnpackNormal(tex2D(_NormalMap, i.uv));float3x3 TBN = float3x3(i.tDirWS,i.bDirWS,i.nDirWS); float3 nDir = normalize(lerp(i.nDirWS,mul(NormalMap,TBN),_UseNormal)); //lerp这样就可以调整法线强度

视差映射代码:https://zhuanlan.zhihu.com/p/164754522

百人计划(图形部分)Bump Mapping(凹凸贴图映射技术)相关推荐

  1. 从0开始的技术美术之路(十二)Bump Mapping(凹凸贴图映射技术)

    本篇参考B站视频 "技术美术百人计划"·霜狼_may : 视差云的实现 https://zhuanlan.zhihu.com/p/83355147 PBR白皮书https://zh ...

  2. 百人计划 图形 2.5 BUMP图改进

    基础感念 凹凸贴图技术是对物体表面贴图进行变化然后再进行光照计算的一种技术.例如给法线分量添加噪音,或者在一个保存扰动值的纹理图中进行查找,这是一种提升物体真实感的有效办法,但却不需要额外的提升物体的 ...

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

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

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

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

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

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

  6. 【TA-霜狼_may-《百人计划》】图形5.1 PBR基础 BRDF介绍

    [TA-霜狼_may-<百人计划>]图形5.1 PBR基础 BRDF介绍 @[TOC]([TA-霜狼_may-<百人计划>]图形5.1 PBR基础 BRDF介绍 5.1.1 P ...

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

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

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

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

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

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

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

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

最新文章

  1. ubuntu 禁用透明大页_Linux关于透明大页的使用与禁用介绍
  2. Java中读取某个目录下的所有文件和文件夹
  3. 折纸机器人的步骤图解_折纸图解飞机
  4. mysql别名的使用
  5. Apache CXF负载平衡和故障转移
  6. python 输入数字变成密码_如何在python中检查数字的“密码”
  7. Java实现查找2-60以内的完数和盈数
  8. LM358芯片中文资料(搬运)
  9. 【解决方案】完全修改Windows用户名
  10. python正弦波叠加方波_电赛初探(一)——正弦波、方波、锯齿波转换
  11. pytorch以图搜图作业
  12. Excel中根据输入内容 自动填充时间、自动增加边框、自动添加背景颜色
  13. 以往WiFi的最大痛点,终于被WiFi 7给解决掉了
  14. 配音赚钱的软件有哪些 ?推荐以下这3个平台
  15. 报表工具和BI商业智能的区别,你真的弄清楚了吗?
  16. ntlm-auth java_JAVAMAIL:AUTH NTLM失败
  17. 期权希腊字母更多的含义和解释
  18. 互联网早报:腾讯推出“微小号”,用虚拟手机号拨打电话收发短信
  19. html 自适应单位vw,CSS3响应式自适应尺寸视窗单位vw、vh详解
  20. Python 金融量化 均线系统交易策略专题(简单移动平均,加权移动平均,指数加权移动平均,异同移动平均MACD等解读与绘图)

热门文章

  1. 网络安全实验5 证书应用和证书管理
  2. vue-pdf 通过文件流预览pdf文件
  3. 2.语音增强短时谱估计算法——幅度谱减法
  4. python交通流预测算法_一种高速公路交通流预测方法与流程
  5. 【千锋】网络安全笔记(总篇)--- 持续更新
  6. 如何将时间字体LED化(类似电子表)显示
  7. 在线ai伪原创文章生成助手
  8. 下载谷歌瓦片地图并拼接为高清大图
  9. 英文原版jdk 1.8 API文档
  10. lisp调用布置天正的图块_为啥天正电气图块插到原建筑条件图里显示特别小,高手指点下哈!...