4
0
mirror of https://github.com/nerfstudio-project/nerfstudio.git synced 2026-11-10 18:17:31 +08:00
nerfstudio/tests/utils/test_spherical_harmonics.py
Alexander Kristoffersen a8888e7d9e
Move util functions out of splatfacto (#3538)
* Move util functions out of splatfacto

Nothing else currently uses some of the SH utils, but it might make sense to get them out of splatfacto.

I also moved the k nearest neighbors to utils since it doesn't depend on the model class.

* fix assert

* fix sh test

* convert to using degrees, not levels
2024-12-05 13:25:55 -05:00

17 lines
556 B
Python

import pytest
import torch
from nerfstudio.utils.spherical_harmonics import components_from_spherical_harmonics, num_sh_bases
@pytest.mark.parametrize("degree", list(range(0, 5)))
def test_spherical_harmonics(degree):
torch.manual_seed(0)
N = 1000000
dx = torch.normal(0, 1, size=(N, 3))
dx = dx / torch.linalg.norm(dx, dim=-1, keepdim=True)
sh = components_from_spherical_harmonics(degree, dx)
matrix = (sh.T @ sh) / N * 4 * torch.pi
torch.testing.assert_close(matrix, torch.eye(num_sh_bases(degree)), rtol=0, atol=1.5e-2)