Slide 37
Slide 37 text
2頂点からモーションによる回転角を推定
37
パーツのMeshごとに2頂点を適当に取り出し, 位置の差分を diff_pos, UVの差分をdiff_uvとおく.
回転角は
var cos = Vector2.Dot(diff_pos.normalized, diff_uv.normalized);
var sin = Vector3.Cross(diff_pos.normalized, diff_uv.normalized);
と推定できる.
さらに, フラグメントシェーダでNormalMapから取り出した法線を回転すれば,
ピクセルごとの3D空間における向き normal_wsが算出できる.
const half3 normal = UnpackNormal(tex2D(_NormalMapTex, IN.texcoord.xy));
const half x = normal.x * cos - normal.y * sin.magnitude;
const half y = normal.x * sin.magnitude + normal.y * cos;
const half3 normal_ws = half3(x, y, -normal.z);
最後に, 3D空間におけるライトの位置とnormal_wsから反射率を求めてあげれば
光の強さを計算できて, めでたくライティングが行える