Ejemplo n.º 1
0
def performance_regular_sampler(width, height):
    sam = RegularSampler(width, height)
    runtimes = [Runtime(), Runtime(), Runtime(), Runtime()]
    sam.prepare(runtimes)
    sam.set_pass(0)

    code = """
ret = 1
nsamples = 0
while ret != 0:
    ret = generate_sample(sample)
    if ret == 0:
        break
    nsamples = nsamples + 1
    """
    sample = Sample(0.0, 0.0, 0, 0, 1.0)
    props = {'sample': sample, 'ret': 0, 'nsamples': 0}
    bas = BasicShader(code, props)
    bas.prepare(runtimes, [sam.shader])

    start = time.clock()
    bas.execute()
    end = time.clock()
    print("Exectution of generating %i samples took %f" %
          (bas.shader.get_value('nsamples'), end - start))
Ejemplo n.º 2
0
    def atest_material_manager(self):
        sam_mgr = SampledManager()
        register_rgb_shadepoint()

        runtimes = [Runtime(), Runtime()]
        mat = Material()
        mat.load('lambertian', sam_mgr, spectral=False)
        mat.set_value('diffuse', RGBSpectrum(0.2, 0.3, 0.4))

        mgr = MaterialManager()
        mgr.add('material1', mat)

        mgr.compile_shaders(sam_mgr, spectral=False)
        mgr.prepare_shaders(runtimes)

        code = """
hp = HitPoint()
sp = ShadePoint()
material_reflectance(hp, sp, 0)
spec = sp.material_reflectance
        """
        spec = RGBArg('spec', RGBSpectrum(0.5, 0.5, 0.5))
        shader = Shader(code=code, args=[spec])
        shader.compile(shaders=[mgr.ref_shader])
        shader.prepare(runtimes)
        shader.execute()

        s = shader.get_value('spec')
        ls = RGBSpectrum(0.2, 0.3, 0.4) * (1.0 / math.pi)

        self.assertAlmostEqual(s.r, ls.r)
        self.assertAlmostEqual(s.g, ls.g)
        self.assertAlmostEqual(s.b, ls.b)
Ejemplo n.º 3
0
    def test_assign1(self):

        code = """
shadepoint.light_intensity = spectrum(0.25)

sample = sample_hemisphere()
sample = (0.6, 0.4, 0.8)
#w = hitpoint.normal 

w = (2.3, 2.5, 8.8)
w = normalize(w)
tv = (0.0034, 1.0, 0.0071)
v = cross(tv, w)
v = normalize(v)
u = cross(v, w)
ndir = u * sample[0] + v * sample[1] + w * sample[2]
shadepoint.wi = normalize(ndir)

shadepoint.pdf = dot(w, shadepoint.wi) * 0.318309886

        """
        props = {}
        col_mgr = ColorManager(spectral=True)
        brdf = SurfaceShader(code, props, col_mgr=col_mgr)
        mat = Material(bsdf=brdf)
        mgr = MaterialManager()
        mgr.add('blue_velvet', mat)
        runtime = Runtime()
        runtime2 = Runtime()
        runtimes = [runtime, runtime2]

        #bs.prepare([runtime])
        shader = mgr.prepare_bsdf('brdf', runtimes)
        #print (bs.shader._code)

        #bs.execute()
        sh = ShadePoint()
        code = """
hp = Hitpoint()
sp = Shadepoint()
brdf(hp, sp, 0)
spec = sp.light_intensity
wi = sp.wi
pdf = sp.pdf
        """
        wi = Vector3(2, 2, 2)
        spec = col_mgr.black()
        props = {'spec': spec, 'wi': wi, 'pdf': 0.0}
        bs = BasicShader(code, props, col_mgr=col_mgr)
        bs.prepare(runtimes, shaders=[shader])
        print (bs.shader._code)

        bs.execute()

        print(bs.shader.get_value('spec'))
        print(bs.shader.get_value('wi'))
        print(bs.shader.get_value('pdf'))
        print(next_direction())
Ejemplo n.º 4
0
    def test_sincos_ps(self):
        asm = Tdasm()
        mc = asm.assemble(SINCOS_CODE_PS)
        runtime = Runtime()
        load_math_func("fast_sincos_ps", runtime)
        ds = runtime.load("sincos_ps", mc)

        for x in range(1000):
            num1 = random.random() * 2000
            num2 = random.random() * 2000
            num3 = random.random() * 2000
            num4 = random.random() * 2000
            ds["v1"] = (num1, num2, num3, num4)
            runtime.run("sincos_ps")
            rez_asm_sin = ds["v1"]
            rez_asm_cos = ds["v2"]
            rez_py1_sin = math.sin(num1)
            rez_py2_sin = math.sin(num2)
            rez_py3_sin = math.sin(num3)
            rez_py4_sin = math.sin(num4)
            rez_py1_cos = math.cos(num1)
            rez_py2_cos = math.cos(num2)
            rez_py3_cos = math.cos(num3)
            rez_py4_cos = math.cos(num4)

            self.assertAlmostEqual(rez_asm_sin[0], rez_py1_sin, 3)
            self.assertAlmostEqual(rez_asm_sin[1], rez_py2_sin, 3)
            self.assertAlmostEqual(rez_asm_sin[2], rez_py3_sin, 3)
            self.assertAlmostEqual(rez_asm_sin[3], rez_py4_sin, 3)
            self.assertAlmostEqual(rez_asm_cos[0], rez_py1_cos, 3)
            self.assertAlmostEqual(rez_asm_cos[1], rez_py2_cos, 3)
            self.assertAlmostEqual(rez_asm_cos[2], rez_py3_cos, 3)
            self.assertAlmostEqual(rez_asm_cos[3], rez_py4_cos, 3)
Ejemplo n.º 5
0
def test_mesh_b(mesh, nrays=1):
    dep_shader = type(mesh).isect_b_shader('ray_flat_mesh_b_isect')
    dep_shader.compile()
    runtimes = [Runtime()]
    dep_shader.prepare(runtimes)

    code = """
min_dist = 99999.0
ret = ray_flat_mesh_b_isect(ray, mesh, min_dist)
    """

    origin = calculate_origin(mesh)
    rpoint = random_in_bbox(mesh._grid.bbox)
    direction = rpoint - origin
    direction.normalize()

    ray = Ray(origin, direction)
    r_arg = StructArg('ray', ray)
    mesh_arg = StructArg('mesh', mesh)
    ret = IntArg('ret', 6)

    args = [r_arg, mesh_arg, ret]
    shader = Shader(code=code, args=args)
    shader.compile([dep_shader.shader])

    shader.prepare(runtimes)

    hp = mesh.isect_b(ray)
    shader.execute()
    print("Bool isect", hp, shader.get_value('ret'))
Ejemplo n.º 6
0
    def test_isect_b(self):
        point = Vector3(0.0, 0.0, 55.92)
        e1 = Vector3(55.28, 0.0, 0.0)
        e2 = Vector3(0.0, 54.88, 0.0)
        normal = Vector3(0.0, 0.0, -1.0)
        rectangle = Rectangle(point, e1, e2, normal)

        origin = Vector3(3.0, 2.5, 0.0)
        direction = Vector3(0.0, 0.1, 0.88)
        direction.normalize()
        ray = Ray(origin, direction)

        runtime = Runtime()
        rectangle.isect_asm_b([runtime], "ray_rectangle_intersection")

        assembler = create_assembler()
        mc = assembler.assemble(self.asm_code_bool())
        ds = runtime.load("test", mc)

        Ray.populate_ds(ds, ray, 'ray1')
        Rectangle.populate_ds(ds, rectangle, 'rec1')

        runtime.run("test")
        hp = rectangle.isect(ray)

        if hp is False: self.assertFalse(ds["ret"] != 0)
        if ds["ret"] == 0: self.assertFalse(hp)
Ejemplo n.º 7
0
    def test_shader1(self):
        factory = renmas2.Factory()
        ren = renmas2.Renderer()
        irender = renmas2.IRender(ren)
        #ren.spectral_rendering = True
        runtime = Runtime()
        irender.add_light(type="pointlight",
                          name="light1",
                          source=(4.0, 4.0, 4.0),
                          position=(10.1, 10, 10))
        irender.add_shape(type="sphere",
                          name="Sphere00",
                          radius=3.0,
                          position=(0.0, 0.0, 0.0))
        ren.prepare()

        ren.intersector.visibility_asm([runtime], "ray_scene_visibility")
        ren.shader.shade_asm([runtime], "shade", "ray_scene_visibility")
        mc = ren.assembler.assemble(self.asm_code1(ren))
        ds = runtime.load("test", mc)
        ds["hp.hit"] = (4.4, 2.2, 1.0, 0.0)
        ds["hp.t"] = 2.2
        ds["hp.normal"] = (0.0, 1.0, 0.0, 0.0)
        ds["hp.mat_index"] = 0

        runtime.run("test")
        hit = renmas2.Vector3(4.4, 2.2, 1.0)
        normal = renmas2.Vector3(0.0, 1.0, 0.0)
        hp = renmas2.shapes.HitPoint(2.2, hit, normal, 0)
        ret = ren.shader.shade(hp)
        print(ret)
        print(ds["hp.l_spectrum.values"])
Ejemplo n.º 8
0
    def test_sampled_spec_to_vec(self):
        mgr = SampledManager()
        shader = sampled_to_vec_shader(mgr)
        shader.compile()
        runtime = Runtime()
        shader.prepare([runtime])
        code = """
rez = spectrum_to_vec(r1)
        """

        vals = [(450, 0.13), (480, 0.45), (620, 0.58)]
        samples = create_samples(vals, 32, 400, 700)
        sam_spec = SampledSpectrum(samples)
        s = SampledArg('r1', sam_spec)

        rez = Vec3Arg('rez', Vector3(0.0, 0.0, 0.0))
        shader2 = Shader(code=code, args=[rez, s])
        shader2.compile([shader])
        shader2.prepare([runtime])
        shader2.execute()

        val = shader2.get_value('rez')
        conv = mgr.sampled_to_rgb(sam_spec)

        self.assertAlmostEqual(val.x, conv.r, places=6)
        self.assertAlmostEqual(val.y, conv.g, places=6)
        self.assertAlmostEqual(val.z, conv.b, places=6)
Ejemplo n.º 9
0
    def test_sampled_spectrum(self):

        code = """
spec2 = Spectrum(spec, 0.23)
        """

        vals = [(450, 0.13), (480, 0.45), (620, 0.58)]
        samples = create_samples(vals, 32, 400, 700)
        sam_spec = SampledSpectrum(samples)
        spec = SampledArg('spec', sam_spec)

        vals = [(450, 0.11)]
        samples = create_samples(vals, 32, 400, 700)
        sam_spec = SampledSpectrum(samples)
        spec2 = SampledArg('spec2', sam_spec)

        shader = Shader(code=code, args=[spec, spec2])
        shader.compile()
        runtime = Runtime()
        shader.prepare([runtime])
        shader.execute()

        val = shader.get_value('spec2')
        for i in range(len(val.samples)):
            self.assertAlmostEqual(val.samples[i], 0.23)
Ejemplo n.º 10
0
    def test_hemisphere_cos(self):
        factory = renmas2.Factory()
        ren = renmas2.Renderer()
        runtime = Runtime()

        mat1 = ren.shader.material("default")
        sam = renmas2.materials.HemisphereCos(1.5)
        mat1.add(sam)

        normal = factory.vector(2, 4, 5)
        normal.normalize()
        hit_point = factory.vector(3, 5, 6)
        hp = renmas2.shapes.HitPoint(1.5, hit_point, normal, 0)

        ren.macro_call.set_runtimes([runtime])
        mat1.next_direction_asm([runtime], ren.structures, ren.assembler)
        mc = ren.assembler.assemble(self.asm_code1(ren))
        ds = runtime.load("test", mc)
        ds["next_dir_ptr"] = runtime.address_module(mat1.nd_asm_name)
        ds["hp.normal"] = (normal.x, normal.y, normal.z, 0.0)
        ds["hp.t"] = 1.5
        ds["hp.hit"] = (hit_point.x, hit_point.y, hit_point.z)
        runtime.run("test")

        print(ds['hp.wi'])
        print(ds['hp.ndotwi'])
        print(ds['hp.pdf'])

        mat1.next_direction(hp)
        print(hp.ndotwi)
        print(hp.wi)
        print(hp.pdf)
Ejemplo n.º 11
0
    def test_isect1(self):
        factory = renmas2.Factory()
        ren = renmas2.Renderer()
        runtime = Runtime()

        ply = renmas2.core.Ply()
        ply.load("I:/Ply_files/Horse97K.ply")
        vb = ply.vertex_buffer
        tb = ply.triangle_buffer
        mesh = factory.create_mesh(vb, tb)

        mesh.isect_asm([runtime], "ray_smooth_mesh_intersection",
                       ren.assembler, ren.structures)
        mc = ren.assembler.assemble(self.asm_code1(ren))
        ds = runtime.load("test", mc)

        for i in range(1000):
            ray = self.random_ray()
            self.ray_ds(ds, ray, "ray1")
            self.smooth_mesh_ds(ds, mesh, "mesh1")
            runtime.run("test")
            hp = mesh.isect(ray)
            if hp:
                #print(hp.t, ds["hp1.t"])
                n1 = hp.normal
                n2 = ds["hp1.normal"]

                self.assertAlmostEqual(n1.x, n2[0], 3)
                self.assertAlmostEqual(n1.y, n2[1], 3)
                self.assertAlmostEqual(n1.z, n2[2], 3)
Ejemplo n.º 12
0
    def test_isect1(self):
        factory = renmas2.Factory()
        ren = renmas2.Renderer()
        runtime = Runtime()

        triangle = factory.create_triangle(v0=(2, 2, 2),
                                           v1=(5, 2, 2),
                                           v2=(3.5, 5, 2))
        triangle = factory.create_triangle(v0=(3.64479, 19.4901, 31.67),
                                           v1=(1.5157999, 0.6639999, 31.8798),
                                           v2=(1.4469, 0.663999, 31.415))
        ray = factory.create_ray(origin=(280.0, 110.0, 244.0),
                                 direction=(-0.759278, -0.2980911,
                                            -0.57847869))
        #hp = triangle.isect(ray)

        triangle.isect_asm([runtime], "ray_triangle_intersection",
                           ren.assembler, ren.structures)
        mc = ren.assembler.assemble(self.asm_code(ren))
        ds = runtime.load("test", mc)

        self.ray_ds(ds, ray, "ray1")
        self.triangle_ds(ds, triangle, "tri1")
        runtime.run("test")
        self.intersect(ray, triangle, runtime, ds)
        for i in range(1000):
            r = self.random_ray()
            t = self.random_triangle()
            self.intersect(r, t, runtime, ds)
Ejemplo n.º 13
0
    def _build_runtime(self):
        start = time.clock()
        self._runtime = runtime = Runtime()
        self._sampler.get_sample_asm(runtime, "get_sample")
        self._camera.ray_asm(runtime, "generate_ray")

        self._world_arrays = {}
        darr = renmas.utils.DynamicArray(self._grid.struct())
        darr.add_instance(self._grid.attributes())
        self._world_arrays[type(self._grid)] = darr

        renmas.shapes.linear_isect_asm(runtime, "scene_isect",
                                       self._world_arrays)
        renmas.shapes.visible_asm(runtime, "visible", "scene_isect")

        renmas.core.generate_shade(runtime, "shade", "visible", self)
        self._film.add_sample_asm(runtime, "add_sample")

        if self._algorithm_name == "raycast_asm":
            renmas.integrators.prepare_raycast_asm(runtime)  #alogorithm
        else:
            renmas.integrators.prepare_pathtracer_asm(runtime)  #alogorithm
        end = time.clock()

        log.info("Time to builde Runtime object: " + str(end - start))

        return runtime
Ejemplo n.º 14
0
    def test_isect_b_rect(self):
        rect_shader = Rectangle.isect_b_shader('isect_b_rectangle')
        rect_shader.compile()
        runtimes = [Runtime()]
        rect_shader.prepare(runtimes)

        code = """
min_dist = 99999.0
p1 = isect_b_rectangle(ray, rectangle, min_dist)
        """

        origin = Vector3(3.0, 2.5, 0.0)
        direction = Vector3(0.0, 0.1, 0.88)
        direction.normalize()
        ray = Ray(origin, direction)

        point = Vector3(0.0, 0.0, 55.92)
        e1 = Vector3(55.28, 0.0, 0.0)
        e2 = Vector3(0.0, 54.88, 0.0)
        normal = Vector3(0.0, 0.0, -1.0)
        rectangle = Rectangle(point, e1, e2, normal)

        r_arg = StructArg('ray', ray)
        sph_arg = StructArg('rectangle', rectangle)
        p1 = IntArg('p1', 6)

        args = [r_arg, sph_arg, p1]
        shader = Shader(code=code, args=args)
        shader.compile([rect_shader.shader])

        shader.prepare(runtimes)
        shader.execute()

        result = shader.get_value('p1')
        self.assertEqual(result, 1)
Ejemplo n.º 15
0
    def test1(self):
        mgr = ColorManager()

        sampler = RandomSampler(2, 2, pixel=1.0)
        tile = Tile(0, 0, 3, 3)
        tile.split(1)
        runtime = Runtime()
        mgr.macro_call.set_runtimes([runtime])

        sampler.get_sample_asm([runtime], "get_sample", mgr.assembler)
        mc = mgr.assembler.assemble(self.asm_code())
        ds = runtime.load('test', mc)

        sampler.set_tile(tile)

        while True:
            sample = sampler.get_sample()
            if sample is None:
                break

            runtime.run('test')
            self.show_samples(sample, ds)

        runtime.run('test')
        ret = ds['kraj']
        self.assertFalse(ret)
Ejemplo n.º 16
0
    def test_pow_ps(self):
        asm = Tdasm()
        mc = asm.assemble(POW_CODE_PS)
        runtime = Runtime()
        load_math_func("fast_pow_ps", runtime)
        ds = runtime.load("pow_ps", mc)

        for x in range(1000):
            num1 = random.random() * 3
            num2 = random.random() * 3
            num3 = random.random() * 3
            num4 = random.random() * 3
            num5 = random.random() * 3
            num6 = random.random() * 3
            num7 = random.random() * 3
            num8 = random.random() * 3
            ds["v1"] = (num1, num2, num3, num4)
            ds["v2"] = (num5, num6, num7, num8)
            runtime.run("pow_ps")
            rez_asm = ds["v1"]
            rez_py1 = math.pow(num1, num5)
            rez_py2 = math.pow(num2, num6)
            rez_py3 = math.pow(num3, num7)
            rez_py4 = math.pow(num4, num8)

            self.assertAlmostEqual(rez_asm[0], rez_py1, 1)
            self.assertAlmostEqual(rez_asm[1], rez_py2, 1)
            self.assertAlmostEqual(rez_asm[2], rez_py3, 1)
            self.assertAlmostEqual(rez_asm[3], rez_py4, 1)
Ejemplo n.º 17
0
    def test_addsample(self):
        ren = renmas2.Renderer()
        runtime = Runtime()

        #ren.spectrum_rendering = True
        ren.film.nsamples = 2
        ren.prepare()
        ren.converter.to_rgb_asm("spectrum_to_rgb", [runtime])
        ren.film.add_sample_asm([runtime], "add_sample", "spectrum_to_rgb")
        mc = ren.assembler.assemble(self.asm_code(ren))
        ds = runtime.load("test", mc)

        ds["sp1.ix"] = 10
        ds["sp1.iy"] = 10
        ds["sp1.xyxy"] = (10.4, 10.4, 10.4, 10.4)
        sample = renmas2.samplers.Sample(10.4, 10.4, 10, 10, 0.5)
        spec = ren.converter.create_spectrum((0.70, 0.2, 0.3))
        ren.film.add_sample(sample, spec)
        ds["spec1.values"] = spec.to_ds()
        runtime.run("test")

        ds["sp1.ix"] = 15
        ds["sp1.iy"] = 19
        ds["sp1.xyxy"] = (15.7, 19.4, 15.7, 19.4)
        sample = renmas2.samplers.Sample(10.4, 10.4, 15, 19, 0.5)
        spec = ren.converter.create_spectrum((0.50, 0.4, 0.1))
        ren.film.add_sample(sample, spec)
        ds["spec1.values"] = spec.to_ds()
        runtime.run("test")

        print(ren.film._ds[0]["temp"])
Ejemplo n.º 18
0
    def test_assign4(self):
        code = """
spec1 = sh.spectrum1
sh.spectrum2 = spec2
        """

        nsamples = 32
        rgb = SampledSpectrum([0.1] * nsamples)
        rgb2 = SampledSpectrum([0.2] * nsamples)
        rgb3 = SampledSpectrum([0.3] * nsamples)
        rgb4 = SampledSpectrum([0.4] * nsamples)

        sh = ShadePoint(rgb3, rgb4)
        props = {'spec1': rgb, 'spec2': rgb2, 'sh': sh}
        col_mgr = ColorManager(spectral=True)
        col_mgr._nsamples = 32  #NOTE HACK - just for testing spectrum asm commands
        bs = BasicShader(code, props, col_mgr=col_mgr)
        runtime = Runtime()
        bs.prepare([runtime])
        #print (bs.shader._code)

        bs.execute()
        val1 = bs.shader.get_value('spec1')
        val2 = bs.shader.get_value('sh.spectrum1')
        for i in range(nsamples):
            self.assertAlmostEqual(val1.samples[i], val2.samples[i], places=5)
        val1 = bs.shader.get_value('spec2')
        val2 = bs.shader.get_value('sh.spectrum2')
        for i in range(nsamples):
            self.assertAlmostEqual(val1.samples[i], val2.samples[i], places=5)
Ejemplo n.º 19
0
def intersect_ray_spheres_bool(n):
    asm = util.get_asm()
    mc = asm.assemble(ASM1)
    runtime = Runtime()

    #Sphere.intersectbool_asm(runtime, "ray_sphere_intersect")
    Sphere.intersect_asm(runtime, "ray_sphere_intersect")
    ds = runtime.load("test", mc)

    for x in range(n):
        sphere = generate_sphere()
        ray = generate_ray()
        ds["sph.origin"] = v4(sphere.origin)
        ds["sph.radius"] = sphere.radius
        ds["sph.mat_index"] = sphere.material

        ds["r1.origin"] = v4(ray.origin)
        ds["r1.dir"] = v4(ray.dir)

        hp = sphere.intersect(ray, 999999.0)

        runtime.run("test")

        if hp is not False and ds["hit"] == 0:
            print(hp.t, ds["t"], ds["hit"])
        if hp is False and ds["hit"] == 1:
            print(ds["t"], ds["hit"])

        if hp is not False:
            print_hitpoint(ds, hp)
Ejemplo n.º 20
0
    def test_assign3(self):
        code = """
spec1 = sh.spectrum1
sh.spectrum2 = spec2
        """
        rgb = RGBSpectrum(0.2, 0.3, 0.2)
        rgb2 = RGBSpectrum(0.1, 0.8, 0.9)
        rgb3 = RGBSpectrum(0.5, 0.3, 0.1)
        rgb4 = RGBSpectrum(0.1, 0.2, 0.2)
        sh = ShadePoint(rgb3, rgb4)
        props = {'spec1': rgb, 'spec2': rgb2, 'sh': sh}
        col_mgr = ColorManager(spectral=False)
        bs = BasicShader(code, props, col_mgr=col_mgr)
        runtime = Runtime()
        bs.prepare([runtime])
        #print (bs.shader._code)

        bs.execute()
        val1 = bs.shader.get_value('spec1')
        val2 = bs.shader.get_value('sh.spectrum1')
        self.assertAlmostEqual(val1.r, val2.r, places=5)
        self.assertAlmostEqual(val1.g, val2.g, places=5)
        self.assertAlmostEqual(val1.b, val2.b, places=5)
        val1 = bs.shader.get_value('spec2')
        val2 = bs.shader.get_value('sh.spectrum2')
        self.assertAlmostEqual(val1.r, val2.r, places=5)
        self.assertAlmostEqual(val1.g, val2.g, places=5)
        self.assertAlmostEqual(val1.b, val2.b, places=5)