public static Quaternion LookRotationNormal(Vector3 normal, Vector3 up = null) { if (up != Vector3.zero) { return QuaternionEx.LookRotationForcedUp(up, normal); } if (normal == Vector3.up) { return QuaternionEx.LookRotationForcedUp(Vector3.forward, normal); } if (normal == Vector3.down) { return QuaternionEx.LookRotationForcedUp(Vector3.back, normal); } if (normal.y == 0f) { return QuaternionEx.LookRotationForcedUp(Vector3.up, normal); } Vector3 vector3 = Vector3.Cross(normal, Vector3.up); return QuaternionEx.LookRotationForcedUp(-Vector3.Cross(normal, vector3), normal); }
public static Quaternion LookRotationGradient(Vector3 normal, Vector3 up) { return QuaternionEx.LookRotationForcedUp(Vector3.Cross(normal, (normal == Vector3.up ? Vector3.forward : Vector3.Cross(normal, Vector3.up))), up); }