法线贴图一般用于计算光照。可以表现更多的细节。

法线贴图:一般根据高多边形模型或者高度图生成。

一、法线详解

法线图的存储一般分为在切线空间和模型空间。

切线空间                                                              模型空间

法线贴图存的是:模型顶点在切线空间下的法线方向。也就是说Z轴是顶点法线方向。x是顶点的切线方向,Y是副切线方向。这里可压缩,只存X和Y,叉乘得到Z。

且因为在切线空间下,每个轴的范围都是-1到1。但图片取值在0~1。所以大部分法线是(0,0,1)的映射到颜色空间就是(0.5,0.5,1)呈现蓝紫色。因为每个顶点的切线空间都是以自己为原点,所以相较于模型坐标系,多了统一性。不会像模型坐标系那样五颜六色。

模型空间优点:(存的是什么,怎么读取怎么会插值更平滑?)

1.不需要TBN转换

2.相较切线空间法线,模型空间法线插值出来的值更平滑,因为处于同一个空间。因为坐标系的不同,插值的精确度降低了。有更光滑的边界。

切线空间:

1.自由度高,因为存的是相对法线的信息,在不同的网格上也会有合理的效果。

2.可进行UV动画。模型空间就不行,还是因为相对法线的优势。

3.可重用。砖头六个面使用同样的法线贴图。

4.可压缩,法线空间中的法线Z总是正方向,可以只存xy方向,推导出Z方向。(怎么推导?)

二、法线相关的技术

2.1法线混合技术

对于需要将两个法线的数据混合,不能单纯的像颜色贴图那样lerp。因为大多数法线贴图存储的是相对法线。且为了保存两个法线的细节而不是被平均就有了很多的算法。

具体可看:

https://zhuanlan.zhihu.com/p/364821684

这里截取上文中的对于适用于低端机的UDN方法和Unity的算法和改进算法。

2.1.1UDN方法

只会消耗ALU(逻辑运算单元)实例5个。

2.1.2 Unity的方法

改进:Reoriented Normal Mapping(RNM Blending)

Normalize后的ALU是8,不Normalize是5。

2.2视差偏移

视差贴图 - LearnOpenGL CN

视差偏移技术是利用的视错觉。需要模型的高度图和切线空间下的视线方向。实际上是使用的深度图,就是基本贴图的反色。下面还是称为高度图。

因为高度图是相对顶点的,所以这里需要的是切线空间下的视线方向。

会根据高度图,修改UV坐标。也就是当如下图,我们需要一个根据视线方向变化的UV。如下图,视线方向是一定的,可将这个平面对应到UV的x坐标,有一个视线方向v,再加上高度H的信息,就可以将v缩放的P。因为切线空间,x方向就是uv的u方向,所以这个向量可以直接与uv相加减。这样的计算也只是粗略的计算。陡峭视差偏移就是多次采样数据,去达到最佳效果。

half height = tex2D(_ParallaxMap, uv_parallax);

uv_parallax = uv_parallax - (0.5 - height) *  view_tangentspace.xy * _Parallax * 0.01f;

法线贴图及其用法详解相关推荐

  1. Blender图解教程:不使用插件烘焙法线贴图的流程详解

    本文介绍了在不使用任何插件的情况下,完全依靠Blender2.8来烘焙法线贴图的步骤 步骤 准备工作 高模 低模 烘焙步骤 1. 为低模添加材质 2. 窗口设置 3. 新建法线贴图目标图像 4. 编辑 ...

  2. python 折线图 尾部_Matplotlib 折线图plot()所有用法详解

    散点图和折线图是数据分析中最常用的两种图形.其中,折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况. Matplotlib 中绘制 ...

  3. 教程-Delphi中Spcomm使用属性及用法详解

    Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...

  4. python定义类object_Python之ClassObject用法详解

    类和对象的概念很难去用简明的文字描述清楚.从知乎上面的一个回答中可以尝试去理解: 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行 ...

  5. fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...

    最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...

  6. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

  7. python中ndim是什么_Numpy中ndim、shape、dtype、astype的用法详解

    本文介绍numpy数组中这四个方法的区别ndim.shape.dtype.astype. 1.ndim ndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度. 2.shape shape ...

  8. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  9. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  10. ssh转发代理:ssh-agent用法详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 使用ssh-agent之前 使用ssh公钥认证的方式可以免去ssh客户端(如 ...

最新文章

  1. JTable是Swing编程中很常用的控件
  2. Android 模糊效果
  3. Spring MVC 搭建web项目示例
  4. [译]yield关键字都做了什么?
  5. 【论文串讲】从GPT和BERT到XLNet
  6. HttpServletRequest的方法详细说明
  7. java版电子商务spring cloud分布式微服务b2b2c社交电商:服务容错保护(Hystrix断路器)...
  8. http参数修改以及拦截
  9. 30个实用的 Photoshop 动作《免费下载》
  10. vbs表白代码制作教程
  11. 【数字IC验证快速入门】7、验证岗位中必备的数字电路基础知识(含常见面试题)
  12. matlab傅里叶变换程序
  13. 强大实用的win10任务栏创建分组菜单工具
  14. P1957 口算练习题[c++版]
  15. 王慧文清华产品课(六)
  16. 解决pychram:卡在Updating Python Interpreter
  17. 使用docer创建spring boot镜像
  18. STM32不能进入睡眠模式
  19. 绩点 计算 html,GPA算法大全,教你怎么算GPA
  20. 国外LEAD赚钱的一些习惯

热门文章

  1. 如何用LOTO示波器TDR方法测试电线长度?
  2. GSM、PLMN区、msc区、位置区、基站区、小区、TAC、CI 名词解析
  3. IP协议及IPV4地址
  4. 2022考研笔记-政治(思修)
  5. 图解css3:核心技术与案例实战. 导读
  6. [笔记]--tensorrt及神经网络常用的.wts权重格式解析
  7. 招5000人!美团2023届校园招聘全面启动
  8. 微信小程序学习笔记——环境准备 【注册账号】【获取APPID】
  9. Python 基础知识 Day2
  10. 苹果设备(iPhone、iPad、iPod)尺寸及数据 iOS