#今日のまとめ(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 