(normals)
| 402 | |
| 403 | |
| 404 | def tangent_vectors(normals): |
| 405 | x, y, z = normals[..., 0], normals[..., 1], normals[..., 2] |
| 406 | s = (2 * (z >= 0)) - 1.0 # = z.sign(), but =1. if z=0. |
| 407 | a = -1 / (s + z) |
| 408 | b = x * y * a |
| 409 | uv = torch.stack((1 + s * x * x * a, s * b, -s * x, b, s + y * y * a, -y), dim=-1) |
| 410 | uv = uv.view(uv.shape[:-1] + (2, 3)) |
| 411 | |
| 412 | return uv |
| 413 | |
| 414 | |
| 415 | def curvatures( |