Exemplo n.º 1
0
    def map_forward(self, p):
        from mitsuba.core import Vector3f

        cos_theta = -p.y
        sin_theta = ek.safe_sqrt(ek.fnmadd(cos_theta, cos_theta, 1))
        sin_phi, cos_phi = ek.sincos(p.x)

        return Vector3f(cos_phi * sin_theta, sin_phi * sin_theta, cos_theta)
Exemplo n.º 2
0
def test40_safe_functions(m):
    x = ek.linspace(m.Float, 0, 1, 10)
    y = ek.linspace(m.Float, -1, 1, 10)
    z = ek.linspace(m.Float, -1, 1, 10)
    ek.enable_grad(x, y, z)
    x2 = ek.safe_sqrt(x)
    y2 = ek.safe_acos(y)
    z2 = ek.safe_asin(z)
    ek.backward(x2)
    ek.backward(y2)
    ek.backward(z2)
    assert ek.grad(x)[0] == 0
    assert ek.allclose(ek.grad(x)[1], .5 / ek.sqrt(1 / 9))
    assert x[0] == 0
    assert ek.all(ek.isfinite(ek.grad(x)))
    assert ek.all(ek.isfinite(ek.grad(y)))
    assert ek.all(ek.isfinite(ek.grad(z)))