使用切线空间
每一个顶点都有自己的切线空间。在该空间中,z轴是顶点的法线方向,x轴是顶点的切点方向,而y方向则是两者叉积的方向。
我们需要在顶点着色器中把视角方向和光照方向从模型空间变换到切线空间中,即我们需要从模型空间到切线空间的变换矩阵。而很好求的是,这个变换矩阵的逆矩阵正是在顶点着色器中切线(x轴),副切线(y轴),法线(z轴)的顺序!!按列!!排列即可得到。
并且,如果变换中仅存在平移和旋转变换,则变换矩阵的逆矩阵就是它的转置。所以变换矩阵即是按行排列xyz轴之后的结果。
Shader中的实现
使用切线空间来实现的方式
Shader "Unity Shaders Learn/Chapter 7/Normal Map In Tangent Space" {
Properties {
_Color ("Color Tint", Color) = (1,1,1,1)
_MainTex ("Main Tex", 2D) = "white" {}
_BumpMap("Normal Map", 2D) = "bump"{}
_BumpScale("Bumo Scale",Float) = 1.0
_Gloss("Gloss", Range(8.0,256)) = 20
_Specular("Specular", Color) = (1,1,1,1)
}
SubShader{
Pass{
Tags { "LightMode"