#今日のまとめ(7/23)
##オブジェクト空間からワールド空間での各値を求める。
- `fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);`
- `fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);`
- `fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w;`

##ノーマルマップを貼る
NormalMapは、接線座標系内の法線方向なので、ノーマルマップをオブジェクトに適応する計算は、接線座標系で行う。

`#include UnityStandardInput.cginc`→`half3 NormalInTangentSpace(float4 texcoords)`
```glsl
//in vert func
  o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
```
```glsl
//in frag func
  fixed3 worldN;
  worldN.x = dot(IN.tSpace0.xyz, o.Normal);
  worldN.y = dot(IN.tSpace1.xyz, o.Normal);
  worldN.z = dot(IN.tSpace2.xyz, o.Normal);
  o.Normal = worldN;
```
タンジェント空間でのノーマル計算したんやから、tangentToWorldのmatrixとかで、変換すれば良いだけな気がするけど、なざ、こうやってるのかは、まだ理解できてない  
↑tangentToWorld Matrixは、頂点ごとに異なる!!

##UnityCG.cginc
- `#define UNITY_PI	3.14159265359f`
- `unpackScaleNormal(half4 packedNormal, half bumpScale)`
- `UnpackNormal()`とは何なのか?[UnpackNormal](http://tiri-tomato.hatenadiary.jp/entry/20131222/1387694442)

##Normal
![normal](https://pbs.twimg.com/media/CKqW0z-VAAA1M0w.jpg)