Material 101 – Lec06 Environment Blend Shader
文章目录
Environment Blend Shader
节点图
思路
- 法线贴图需要转换空间才能使用
- 因为想要在法线朝上的面上生成苔藓,所以需要关于朝向z的法线的信息
- 法线贴图的b通道存储的是,朝向z的为1,不朝向z的为0,所以只需要b通道就行了
- 得到关于朝向z的法线的信息,将他作为蒙版,让rock和moss进行混合
- 想要控制对比度,就需要power,让大的越来越大,小的越来越小
- 因为法线的范围是[0-1],所以需要加上一个数,数越大,白色范围就越大
补充信息
Normal
- 法线向量的范围在-1到1之间
- 法线贴图的范围是0-1
normal = normalize(normal * 2.0 - 1.0); //将贴图的范围从[0,1]转换为[-1,1]
- 法线向量的x,y,z对应着颜色的r,g,b
- OpenGL读取的纹理的y(或V)坐标和纹理通常被创建的方式相反,在UE4,贴图里面反转绿通道就可以正常运行了
OpenGL使用的是右手坐标系,所以cross(x,z)所得到的是-y,就需要将法线的通道进行反转,才能得到正确的结果
切线空间转世界空间
- 在UE4中用Transform Vector节点就可以将normal贴图从切线空间转到世界空间,将+z的方向对齐到物体表面的法线方向
切线空间
- 法线贴图中的法线向量定义在切线空间中,在切线空间中,法线永远指着正z方向
- 一般物体的uv值都是连续有序的,渲染管线会利用这点将tangent的方向变为与顶点的uv.v值(或当前像素插值后的v值)一致,所以副法线binormal的方向实际上与u值也是一致的。
- 如果不将切线空间转化为世界空间,那么效果就会发生错误,物体表面指向正y的效果会跟指向正z的效果一样
- 切线空间的一大好处是我们可以为任何类型的表面计算出一个这样的矩阵,由此我们可以把切线空间的z方向和表面的法线方向对齐
- 这种矩阵叫做TBN矩阵这三个字母分别代表tangent、bitangent和normal向量,这是建构这个矩阵所需的向量。要建构这样一个把切线空间转变为不同空间的变异矩阵,我们需要三个相互垂直的向量,它们沿一个表面的法线贴图对齐于:上、右、前
- 已知上向量是表面的法线向量。右和前向量是切线(Tagent)和副切线(Bitangent)向量。下面的图片展示了一个表面的三个向量:
- 将光线转换为切线空间
因为不在一个空间无法相计算,所以就把光线变换为切线空间内(变换光线向量比法线容易一些)