视差贴图--learnOpenGL

视差贴图

视差贴图是与法线贴图相似,他能极大提升表面细节,试物体表面具有深度感。法线贴图技术是,根据一张法线贴图,在切线空间内对物体的表面法线进行偏移。从而制造出凹凸感,实际上并没有对顶点进行操作。

视差贴图也属于位移贴图技术的一种,位移贴图技术会对根据储存在纹理中的几何信息对顶点进行位移或者偏移。
置换顶点的位移贴图技术有一个问题就是,他对模型的定点数量有着极高的要求,低顶点数量的模型效果不会很好。同时对于多顶点良好效果的模型,顶点计算又存在着极大地消耗。
而视差贴图比起置换顶点技术能实现不错的效果,又能节省大量的运算,并且对模型的顶点数量也没有什么要求。

视差贴图技术的原理:他的核心思想是在一个片段着色器中,根据观察方向和高度贴图,修改其纹理坐标,使其fragment看起来更高或者更低。

请添加图片描述


红线代表高度贴图中的值,V代表观察方向。如果我们采用置换顶点的技术,那么观察者看向模型的A点,则最终会看到点B。
顶点置换技术是直接将顶点进行偏移,偏移后对其交互点进行计算最终得到与偏移前不同的观察结果。
而视差贴图技术则是,跳过了顶点偏移的环节,直接用数学公式模拟偏移后的结果。并在这个基础上进行uv的取样,来节省对顶点进行计算的环节,从而节省大量的消耗。
具体做法:与顶点置换后的交互点B相比,顶点置换的交互点依旧是A,而我们对交互点进行偏移使其取样到点B。那么最终所呈现的效果就仿佛观察者看到的点B。
核心的问题就是,如何对A进行偏移使其uv偏移到B?
视差贴图的做法是,根据通过fragmeng A的高度对V值进行缩放。我们会缩放V的长度使其与在点A出取样的高度图值相等。
我们之后会根据向量P以及P在原平面上的投影作为texture 的 offset值。之所以能够这样做是因为向量P是根据高度图的采样值进行计算的,fragment的高度越高,他所表现置换效果越好。
在大多数场景表现良好,但是也有表现差的时候,当高度图中有一段剧烈变化时会看起来不真实。
另外一个需要接卷的问题是,当表面进行任意旋转时他很难从P中恢复P的值。为了解决这个问题会在一个不同的坐标空间内进行计算,这个坐标空间的x和y总是对准texture的表面。切线空间符合我们的要求。

视差贴图

对于视差贴图我们倾向于使用一个2D的Plane,目的是我们可以在cpu中就能计算它的切线和副切线。
准备素材,一张diffuse texture,一张normal map以及一张displacement map。在这个例子中我们将共同使用视差贴图技术与法线贴图技术。

最终实现效果
视差贴图前

请添加图片描述


视差贴图后

请添加图片描述

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...