def test_scene_auto(device_): scene = fresnel.Scene() geom1 = fresnel.geometry.Sphere(scene, position=[[-9, -2, 0], [-5, -1, 0], [4, 0, 0], [2, 1, 0]], radius=1.0) assert scene.camera == 'auto' fresnel.preview(scene)
def test_scene_default_camera(device_): """Test that there is a default camera.""" scene = fresnel.Scene() fresnel.geometry.Sphere(scene, position=[[-9, -2, 0], [-5, -1, 0], [4, 0, 0], [2, 1, 0]], radius=1.0) fresnel.preview(scene, anti_alias=False)
def test_background_color(device_): """Test the background_color property.""" scene = fresnel.Scene(device=device_) scene.background_color = fresnel.color.linear((0.125, 0.75, 0.375)) numpy.testing.assert_array_equal( scene.background_color, fresnel.color.linear((0.125, 0.75, 0.375))) scene.background_alpha = 0.5 assert scene.background_alpha == 0.5 scene.camera = fresnel.camera.Orthographic(position=(0, 0, 10), look_at=(0, 0, 0), up=(0, 1, 0), height=7) buf_proxy = fresnel.preview(scene, w=100, h=100, anti_alias=False) buf = buf_proxy[:] numpy.testing.assert_array_equal( buf[:, :, 3], numpy.ones(shape=(100, 100), dtype=buf.dtype) * 128) numpy.testing.assert_array_equal( buf[:, :, 0:3], numpy.ones(shape=(100, 100, 3), dtype=buf.dtype) * (32, 191, 96))
def test_primitive_color_mix(scene_hex_sphere_, generate=False): """Test the primitive_color_mix property.""" geometry = scene_hex_sphere_.geometry[0] geometry.material = fresnel.material.Material(solid=1.0, color=fresnel.color.linear( [1, 0, 0]), primitive_color_mix=1.0) geometry.color[0] = fresnel.color.linear([1, 0, 0]) geometry.color[1] = fresnel.color.linear([0, 1, 0]) geometry.color[2] = fresnel.color.linear([0, 0, 1]) geometry.color[3] = fresnel.color.linear([1, 0, 1]) geometry.color[4] = fresnel.color.linear([0, 1, 1]) geometry.color[5] = fresnel.color.linear([0, 0, 0]) buf_proxy = fresnel.preview(scene_hex_sphere_, w=100, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_material.test_primitive_color_mix.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / 'reference' / 'test_material.test_primitive_color_mix.png')
def test_camera(scene_hex_sphere_, generate=False): """Test the camera property.""" scene_hex_sphere_.camera = fresnel.camera.Orthographic(position=(1, 0, 10), look_at=(1, 0, 0), up=(0, 1, 0), height=6) numpy.testing.assert_array_equal(scene_hex_sphere_.camera.position, (1, 0, 10)) numpy.testing.assert_array_equal(scene_hex_sphere_.camera.look_at, (1, 0, 0)) numpy.testing.assert_array_equal(scene_hex_sphere_.camera.up, (0, 1, 0)) assert scene_hex_sphere_.camera.height == 6 buf_proxy = fresnel.preview(scene_hex_sphere_, w=100, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_scene.test_camera.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / 'reference' / 'test_scene.test_camera.png')
def test_face_color(scene_eight_polyhedra_, generate=False): buf_proxy = fresnel.preview(scene_eight_polyhedra_, w=150, h=100) geometry = scene_eight_polyhedra_.geometry[0] geometry.color_by_face = 1.0 geometry.material.primitive_color_mix = 1.0 buf_proxy = fresnel.preview(scene_eight_polyhedra_, w=150, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_convex_polyhedron.test_face_color.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_convex_polyhedron.test_face_color.png')
def test_render(scene_four_spheres_, generate=False): buf_proxy = fresnel.preview(scene_four_spheres_, w=150, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_sphere.test_render.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_sphere.test_render.png')
def test_multiple(scene_tetrahedra_, generate=False): buf_proxy = fresnel.preview(scene_tetrahedra_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_mesh.test_multiple.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_mesh.test_multiple.png')
def test_multiple_geometries(device_, generate=False): scene = fresnel.Scene(lights=conftest.test_lights()) scene.camera = fresnel.camera.orthographic(position=(0, 0, 10), look_at=(0,0,0), up=(0,1,0), height=7) geom1 = fresnel.geometry.Sphere(scene, position = [[-4, 1, 0], [-4, -1, 0], [-2, 1, 0], [-2, -1, 0]], radius=1.0) geom1.material = fresnel.material.Material(solid=1.0, color=fresnel.color.linear([0.42,0.267,1])) geom1.outline_width = 0.12 geom2 = fresnel.geometry.Sphere(scene, position = [[4, 1, 0], [4, -1, 0], [2, 1, 0], [2, -1, 0]], radius=1.0) geom2.material = fresnel.material.Material(solid=0.0, color=fresnel.color.linear([1,0.874,0.169])) buf_proxy = fresnel.preview(scene, w=200, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_scene.test_multiple_geometries1.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_scene.test_multiple_geometries1.png') geom1.disable() buf_proxy = fresnel.preview(scene, w=200, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_scene.test_multiple_geometries2.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_scene.test_multiple_geometries2.png') geom1.enable() buf_proxy = fresnel.preview(scene, w=200, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_scene.test_multiple_geometries3.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_scene.test_multiple_geometries3.png') geom2.remove() buf_proxy = fresnel.preview(scene, w=200, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_scene.test_multiple_geometries4.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_scene.test_multiple_geometries4.png')
def test_color(scene_hex_sphere_, generate=False): geometry = scene_hex_sphere_.geometry[0] geometry.material.color = fresnel.color.linear([0,0,1]) assert geometry.material.color == tuple(fresnel.color.linear([0,0,1])) buf_proxy = fresnel.preview(scene_hex_sphere_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_material.test_color.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_material.test_color.png')
def test_render(scene_box_, generate=False): """Test that Box renders properly.""" buf_proxy = fresnel.preview(scene_box_, w=150, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode="RGBA").save( open("output/test_geometry_box.test_render.png", "wb"), "png") else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / "reference" / "test_geometry_box.test_render.png")
def test_metal(scene_hex_sphere_, generate=False): geometry = scene_hex_sphere_.geometry[0] geometry.material.metal = 1.0 assert geometry.material.metal == 1.0 buf_proxy = fresnel.preview(scene_hex_sphere_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_material.test_metal.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_material.test_metal.png')
def check_preview_render(scene, name, w=150, h=100, tolerance=2, anti_alias=False, generate=False): """Preview render the given scene and check the image matches the ref.""" buf_proxy = fresnel.preview(scene, w=w, h=h, anti_alias=anti_alias) _validate_or_generate_image(buf_proxy, name, generate, tolerance)
def test_light_dir(scene_hex_sphere_, generate=False): scene_hex_sphere_.lights[0].direction = (1, 0, 0) scene_hex_sphere_.lights[0].color = (0.5, 0.5, 0.5) assert scene_hex_sphere_.lights[0].direction == (1, 0, 0) assert scene_hex_sphere_.lights[0].color == (0.5, 0.5, 0.5) buf_proxy = fresnel.preview(scene_hex_sphere_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_scene.test_light_dir.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_scene.test_light_dir.png')
def test_outline(scene_one_triangle_, generate=False): geometry = scene_one_triangle_.geometry[0] geometry.outline_width = 0.1 buf_proxy = fresnel.preview(scene_one_triangle_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_mesh.test_outline.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_mesh.test_outline.png')
def test_rounded(scene_rounded_polygons_, generate=False): geometry = scene_rounded_polygons_.geometry[0] geometry.outline_width = 0.1 buf_proxy = fresnel.preview(scene_rounded_polygons_, w=150, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_polygon.test_rounded.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_polygon.test_rounded.png')
def test_color_interp(scene_one_triangle_, generate=False): geometry = scene_one_triangle_.geometry[0] geometry.material.primitive_color_mix = 1.0 buf_proxy = fresnel.preview(scene_one_triangle_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_mesh.test_color_interp.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_mesh.test_color_interp.png')
def test_set_material(scene_hex_sphere_, generate=False): geometry = scene_hex_sphere_.geometry[0] geometry.material = fresnel.material.Material(solid=0.0, color=fresnel.color.linear([1,0,0]), primitive_color_mix=0.0) assert geometry.material.solid == 0.0 assert geometry.material.color == tuple(fresnel.color.linear([1,0,0])) assert geometry.material.primitive_color_mix == 0.0 buf_proxy = fresnel.preview(scene_hex_sphere_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_material.test_set_material.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_material.test_set_material.png')
def test_camera(scene_hex_sphere_, generate=False): scene_hex_sphere_.camera = fresnel.camera.orthographic(position=(1, 0, 10), look_at=(1,0,0), up=(0,1,0), height=6) assert scene_hex_sphere_.camera.position == (1,0,10) assert scene_hex_sphere_.camera.look_at == (1,0,0) assert scene_hex_sphere_.camera.up == (0,1,0) assert scene_hex_sphere_.camera.height == 6 buf_proxy = fresnel.preview(scene_hex_sphere_, w=100, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save(open('output/test_scene.test_camera.png', 'wb'), 'png'); else: conftest.assert_image_approx_equal(buf_proxy[:], 'reference/test_scene.test_camera.png')
def test_render(scene_one_triangle_, generate=False): """Test that Mesh renders properly.""" buf_proxy = fresnel.preview(scene_one_triangle_, w=100, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_mesh.test_render.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / 'reference' / 'test_geometry_mesh.test_render.png')
def test_multiple(scene_tetrahedra_, generate=False): """Test that Mesh supports multiple instances.""" buf_proxy = fresnel.preview(scene_tetrahedra_, w=100, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_mesh.test_multiple.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / 'reference' / 'test_geometry_mesh.test_multiple.png')
def test_angle(scene_polygons_, generate=False): geometry = scene_polygons_.geometry[0] a = numpy.array([-0.8, 0.5], dtype=numpy.float32) geometry.angle[:] = a numpy.testing.assert_array_equal(a, geometry.angle[:]) buf_proxy = fresnel.preview(scene_polygons_, w=150, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_polygon.test_angle.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_polygon.test_angle.png')
def test_face_color(scene_eight_polyhedra_, generate=False): """Test that faces can be colored individually.""" buf_proxy = fresnel.preview(scene_eight_polyhedra_, w=150, h=100, anti_alias=False) geometry = scene_eight_polyhedra_.geometry[0] geometry.color_by_face = 1.0 geometry.material.primitive_color_mix = 1.0 buf_proxy = fresnel.preview(scene_eight_polyhedra_, w=150, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_convex_polyhedron.test_face_color.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / 'reference' / 'test_geometry_convex_polyhedron.test_face_color.png')
def test_render(scene_eight_polyhedra_, generate=False): """Test that convex polyhedra render properly.""" buf_proxy = fresnel.preview(scene_eight_polyhedra_, w=150, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_convex_polyhedron.test_render.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / 'reference' / 'test_geometry_convex_polyhedron.test_render.png')
def test_radius(scene_four_spheres_, generate=False): geometry = scene_four_spheres_.geometry[0] r = numpy.array([0.5, 0.6, 0.8, 1.0], dtype=numpy.float32) geometry.radius[:] = r numpy.testing.assert_array_equal(r, geometry.radius[:]) buf_proxy = fresnel.preview(scene_four_spheres_, w=150, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_sphere.test_radius.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_sphere.test_radius.png')
def test_background_color(device_): scene = fresnel.Scene(device=device_) scene.background_color = fresnel.color.linear((0.125, 0.75, 0.375)) assert scene.background_color == tuple(fresnel.color.linear((0.125, 0.75, 0.375))) scene.background_alpha = 0.5 assert scene.background_alpha == 0.5 buf_proxy = fresnel.preview(scene, w=100, h=100) buf = buf_proxy[:] numpy.testing.assert_array_equal(buf[:,:,3], numpy.ones(shape=(100,100), dtype=buf.dtype)*128) numpy.testing.assert_array_equal(buf[:,:,0:3], numpy.ones(shape=(100,100,3), dtype=buf.dtype)*(32,191,96))
def test_position(scene_four_spheres_, generate=False): geometry = scene_four_spheres_.geometry[0] p = numpy.array([[1.5, 0, 1], [1.5, 0, -1], [-1.5, 0, 1], [-1.5, 0, -1]], dtype=numpy.float32) geometry.position[:] = p numpy.testing.assert_array_equal(p, geometry.position[:]) buf_proxy = fresnel.preview(scene_four_spheres_, w=150, h=100) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_sphere.test_position.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], 'reference/test_geometry_sphere.test_position.png')
def test_box_radius(scene_box_, generate=False): """Test the box_radius property.""" geometry = scene_box_.geometry[0] r = 0.1 geometry.box_radius = r assert r == pytest.approx(geometry.box_radius) buf_proxy = fresnel.preview(scene_box_, w=150, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode="RGBA").save( open("output/test_geometry_box.test_box_radius.png", "wb"), "png") else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / "reference" / "test_geometry_box.test_box_radius.png")
def test_outline(scene_four_spheres_, generate=False): """Test that outlines render properly.""" geometry = scene_four_spheres_.geometry[0] geometry.outline_width = 0.1 buf_proxy = fresnel.preview(scene_four_spheres_, w=150, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode='RGBA').save( open('output/test_geometry_sphere.test_outline.png', 'wb'), 'png') else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / 'reference' / 'test_geometry_sphere.test_outline.png')
def test_radius(scene_box_, generate=False): """Test the radius property.""" geometry = scene_box_.geometry[0] r = numpy.array(0.1, dtype=numpy.float32) geometry.radius[:] = r numpy.testing.assert_array_equal(r, geometry.radius[:]) buf_proxy = fresnel.preview(scene_box_, w=150, h=100, anti_alias=False) if generate: PIL.Image.fromarray(buf_proxy[:], mode="RGBA").save( open("output/test_geometry_box.test_radius.png", "wb"), "png") else: conftest.assert_image_approx_equal( buf_proxy[:], dir_path / "reference" / "test_geometry_box.test_radius.png")