May 26, 2022
Трансформация нормалей
Для трансформации нормалей на объекте с отрицательным скейлом метод Unity transform.TransformDirection() дает некорректный результат. Вместо него нужно использовать более дорогой, но правильный код
public static Vector3 TransformDir(Transform transform, Vector3 dir){ var matrix = transform.localToWorldMatrix; var matrixInverse = matrix.inverse; var matrixTranspose = matrixInverse.transpose; var n = (Vector3) (matrixTranspose * dir); return n; }
Подробное объяснение в главе 4.5 книги Mathematics for 3D Game Programming and Computer Graphics