凹凸映射 Bump mapping
使用一张法线纹理(normal map)来直接存储表面法线,又被称为法线映射。
由于法线纹理中存储的法线是切线空间下的方向,因此有2 种选择:
1.在切线空间下进行光照计算,光照方向、视角方向变换到切线空间下。
2.在世界空间下进行光照计算 ,法线方向变换到世界空间下,再和世界空间下的照方向、视角方向进行计算。
引用内容地址:http://www.cnblogs.com/-867259206/p/5627565.html
关于原理详细参考:https://en.wikibooks.org/wiki/Cg_Programming/Unity/Lighting_of_Bumpy_Surfaces
1.在切线空间下计算
Shader "LT/TangentNormal"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color("Color",Color) = (1,1,1,1)
_BumpMap("Normal Map", 2D) = "white" {}
_BumpScale("Bump Scale", Float) = 1.0
_Specular("Specular",Color) = (1,1,1,1) //高光反射颜色
_Gloss("gloss", Range(5,30)) = 10 //高光区域大小
}
SubShader
{
LOD 100
Tags { "LightMode"="ForwardBase" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Specular;
fixed4 _Color;
float _Gloss;
float _BumpScale;
sampler2D _BumpMap;
float4 _BumpMap_ST;
struct appdata
{
float4 vertex : POSITION;
float4 uv : TEXCOORD0;
float3 normal:NORMAL;
float4 tangent: TANGENT;
};
struct v2f
{
float4 uv : TEXCOORD0;
&n