当前位置:网站首页>切线空间(tangent space)
切线空间(tangent space)
2022-04-23 13:25:00 【宗浩多捞】
1、什么是切线空间?
Tangent Space 其实一个原点 + 三个坐标轴决定的一个局部空间,它就是一个坐标系
- 坐标原点:就是顶点的位置
- N轴:是该顶点定义的法线方向
- T轴(Tangent):垂直于法线的向量。但这样的切线有很多个,标准的做法是将切线方向和纹理空间(u或v轴)对齐,一般选u
- B轴(Bitangent):通过N轴和T轴叉乘得到
切线空间是对于模型任意一个顶点而言的,模型有多少个点,就有多少个独立的切线空间
通常我们所见的法线纹理(法线贴图)是基于原法线信息构建出来的。每个纹素存储的是每个顶点各自的切线空间中法线方向。如果一个顶点的法线方向不变,还是原本模型自带的法线方向(表面上某位置的法线是该处切平面的垂线),那么在它的切线空间中的法线为 (0, 0, 1) ,但这并不是法线纹理中存放的数值,每个纹素的RGB颜色的分量取值范围为(0, 1),用纹理存放法线,实际上要存放XYZ向量,方向向量XYZ分量取值范围在(-1, 1),因为取值范围不同,所以用纹理的RGB来表示法线的XYZ是表示不了的,因此我们需要做一个映射,即 color = (normal + 1) / 2 。这样,法线值 (0, 0, 1) 存储到纹理中RGB的值为 (0.5, 0.5, 1),几乎整个纹理上存放的法线的b分量都是1或者特别接近1,所以法线纹理在视觉上表现为蓝色。 总结一下就是,法线纹理的RGB通道存储了在每个顶点各自的切线空间中的法线方向的映射值。
2、为什么需要法线贴图
当一个模型有很多凹凸细节时,模型的顶点网格会很密(数据量大),随之而来的就是性能问题。模型凹凸对应的是顶点高度不同,从而法线的方向各异,着色计算后,凹凸感就很强烈。但为了节省空间和计算性能,不想增加模型的面数,怎么办?可以仅仅修改模型原本的法线信息(高度贴图or法线贴图),用修改后的法线替代原本该点的法线,进行着色计算,让模型看起来有凹凸
3、有了法线贴图为什么需要切线空间的法线的贴图
如果法线方向是处于世界坐标中的(world space),那称为world space normal.如果是处于物体本身局部坐标中的,那称为object space normal.很容易想象,world space normal一旦从贴图里解压出来后,就可以直接用了,效率很高.但是有个缺点,这个world space normal 是固定了,如果物体没有保持原来的方向和位置,那原来生成的normal map就作废了.因此又有人保存了object space normal.它从贴图里解压,还需要乘以跟模型相同的model、view矩阵转换到世界坐标,或者转换到其他坐标取决于计算过程及需求。object space normal生成的贴图,物体可以被旋转和位移.基本让人满意.但仍有一个缺点.就是一张贴图只能对应特定的一个模型,模型不能有变形。
- world space normal texture:直接保存模型表面的点在世界中的法线方向,模型的顶点映射纹理后,内部的点采用插值映射。此时如果有两个一模一样的模型,但是摆放的位置、方向不同,是不能应用同一张法线纹理的,不然法线方向就不对了。所以高效率但不灵活。
- object space normal texture:每个纹素保存的是模型空间中每个点法线方向,映射纹理前,还需做一遍与模型相同的的model-view变换。低效率,高灵活,但是不能做变形。
问题来了,我们是否能找到另外一个坐标系统,使模型在变形的时候也能较正确的变换法线到世界坐标系中?
- 变形时,顶点关系改变了,即面的形状,方向改变了.如果面上存在一个固定的坐标系,那当物体变形,移动,旋转时,这个坐标系必定跟着面一起运动,那么在这个坐标系里的某个点或向量,不需要变动.当整个面发生变化时,我们只需要计算面上的坐标系到世界坐标系的转换矩阵,那么定义在这个面上的点或坐标(常量哦),乘以这个矩阵即可得到在世界中的坐标.这个坐标如何构造目前对我们不重要,请务必理解这个概念.我们不过是寻求一个局部坐标系,局部坐标系中的点坐标,乘以局部坐标系到世界坐标系的转换矩阵(这个矩阵是根据模型目前的变换,动态计算得到的),得到局部坐标系中的点在世界坐标系中的坐标。这样法线贴图中存储的法线方向(固定的值)才能用来进行有意义的着色计算.
- 看到这里很明显的,这种做法需要数千个不同的定义在面上的坐标系.低模上有多少个面,就得有多少个这样的坐标系.这种方法的计算量自然是比object space normal map要大一些的.在低模的每个面上,要构造出这个坐标系.这个坐标系术语里称为tangent space.
4、TBN矩阵计算,嗯不会。。以后再补吧
仅供参考,具体请看下面这些
https://blog.csdn.net/damenhanter/article/details/22481563
https://www.zhihu.com/question/23706933/answer/161968056
http://www.opengl-tutorial.org/cn/intermediate-tutorials/tutorial-13-normal-mapping/#%E9%A1%B6%E7%82%B9%E7%9D%80%E8%89%B2%E5%99%A8
https://blog.csdn.net/weixin_46525412/article/details/120278159
版权声明
本文为[宗浩多捞]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Motarookie/article/details/123507610
边栏推荐
- mysql 基本语句查询
- How to build a line of code with M4 qprotex
- "Play with Lighthouse" lightweight application server self built DNS resolution server
- [official announcement] Changsha software talent training base was established!
- XML
- 9419 page analysis of the latest first-line Internet Android interview questions
- 【快排】215. 数组中的第K个最大元素
- Filter and listener of three web components
- Nodejs + Mysql realize simple registration function (small demo)
- Esp32 vhci architecture sets scan mode for traditional Bluetooth, so that the device can be searched
猜你喜欢
Lpddr4 notes
[quick platoon] 215 The kth largest element in the array
[point cloud series] pointfilter: point cloud filtering via encoder decoder modeling
Plato farm, a top-level metauniverse game, has made frequent positive moves recently
Ding ~ your scholarship has arrived! C certified enterprise scholarship list released
数据仓库—什么是OLAP
C语言之字符串与字符数组的区别
[point cloud series] neural opportunity point cloud (NOPC)
【官宣】长沙软件人才实训基地成立!
“湘见”技术沙龙 | 程序员&CSDN的进阶之路
随机推荐
AUTOSAR from introduction to mastery lecture 100 (84) - Summary of UDS time parameters
[official announcement] Changsha software talent training base was established!
十万大学生都已成为猿粉,你还在等什么?
Isparta is a tool that generates webp, GIF and apng from PNG and supports the transformation of webp, GIF and apng
Common interview questions and detailed analysis of the latest Android developers in 2020
[Technical Specification]: how to write technical documents?
超40W奖金池等你来战!第二届“长沙银行杯”腾讯云启创新大赛火热来袭!
POM of SSM integration xml
@优秀的你!CSDN高校俱乐部主席招募!
filter()遍历Array异常友好
9419页最新一线互联网Android面试题解析大全
5道刁钻的Activity生命周期面试题,学完去吊打面试官!
Short name of common UI control
How do ordinary college students get offers from big factories? Ao Bing teaches you one move to win!
2021年6月程序员工资统计,平均15052元,你拖后腿了吗?
ECDSA signature verification principle and C language implementation
C语言之字符串与字符数组的区别
Brief introduction of asynchronous encapsulation interface request based on uniapp
Riscv MMU overview
CSDN College Club "famous teacher college trip" -- Hunan Normal University Station