Example #1
0
  def test_rasterize_batch_view_only(self):
    triangles = np.array(((0, 1, 2),), np.int32)
    vertices, view_projection_matrix = _generate_vertices_and_view_matrices()

    _, _, mask = rasterization_backend.rasterize(vertices[0], triangles,
                                                 view_projection_matrix,
                                                 (_IMAGE_WIDTH, _IMAGE_HEIGHT))
    self.assertAllEqual(mask[0, ...], tf.ones_like(mask[0, ...]))
    self.assertAllEqual(mask[1, ...], tf.zeros_like(mask[1, ...]))
Example #2
0
  def test_rasterize_batch_vertices_only(self):
    triangles = np.array(((0, 1, 2),), np.int32)
    vertices, view_projection_matrix = _generate_vertices_and_view_matrices()
    _, _, mask = rasterization_backend.rasterize(vertices, triangles,
                                                 view_projection_matrix[0],
                                                 (_IMAGE_WIDTH, _IMAGE_HEIGHT))
    self.assertAllEqual(mask[0, ...], tf.ones_like(mask[0, ...]))

    gt_layer_1 = np.zeros((_IMAGE_HEIGHT, _IMAGE_WIDTH), np.float32)
    gt_layer_1[_IMAGE_HEIGHT // 2:, _IMAGE_WIDTH // 2:] = 1.0
    self.assertAllEqual(mask[1, ...], gt_layer_1)
Example #3
0
 def test_rasterize_batch_view_only(self):
     triangles = np.array(((0, 1, 2), ), np.int32)
     vertices, view_projection_matrix = _generate_vertices_and_view_matrices(
     )
     vertices = np.array([vertices[0], vertices[0]], dtype=np.float32)
     predicted_fb = rasterization_backend.rasterize(
         vertices, triangles, view_projection_matrix,
         (_IMAGE_WIDTH, _IMAGE_HEIGHT))
     self.assertAllEqual(predicted_fb.foreground_mask[0, ...],
                         tf.ones_like(predicted_fb.foreground_mask[0, ...]))
     self.assertAllEqual(
         predicted_fb.foreground_mask[1, ...],
         tf.zeros_like(predicted_fb.foreground_mask[1, ...]))
Example #4
0
    def test_rasterize_batch_vertices_only(self):
        triangles = np.array(((0, 1, 2), ), np.int32)
        vertices, view_projection_matrix = _generate_vertices_and_view_matrices(
        )
        # Use just first view projection matrix.
        view_projection_matrix = [
            view_projection_matrix[0], view_projection_matrix[0]
        ]
        predicted_fb = rasterization_backend.rasterize(
            vertices, triangles, view_projection_matrix,
            (_IMAGE_WIDTH, _IMAGE_HEIGHT))
        mask = predicted_fb.foreground_mask
        self.assertAllEqual(mask[0, ...], tf.ones_like(mask[0, ...]))

        gt_layer_1 = np.zeros((_IMAGE_HEIGHT, _IMAGE_WIDTH, 1), np.float32)
        gt_layer_1[_IMAGE_HEIGHT // 2:, _IMAGE_WIDTH // 2:, 0] = 1.0
        self.assertAllEqual(mask[1, ...], gt_layer_1)
Example #5
0
def _proxy_rasterize(vertices, triangles, view_projection_matrices):
    return rasterization_backend.rasterize(vertices, triangles,
                                           view_projection_matrices,
                                           (_IMAGE_WIDTH, _IMAGE_HEIGHT))
Example #6
0
    def test_rasterize_preset(self):
        camera_origin = (0.0, 0.0, 0.0)
        camera_up = (0.0, 1.0, 0.0)
        look_at_point = (0.0, 0.0, 1.0)
        field_of_view = (60 * np.math.pi / 180, )
        near_plane = (0.01, )
        far_plane = (400.0, )

        # Construct the view projection matrix.
        model_to_eye_matrix = look_at.right_handed(camera_origin,
                                                   look_at_point, camera_up)
        perspective_matrix = perspective.right_handed(
            field_of_view, (float(_IMAGE_WIDTH) / float(_IMAGE_HEIGHT), ),
            near_plane, far_plane)
        view_projection_matrix = tf.linalg.matmul(perspective_matrix,
                                                  model_to_eye_matrix)
        view_projection_matrix = tf.expand_dims(view_projection_matrix, axis=0)

        depth = 1.0
        vertices = np.array([[(-2.0 * _TRIANGLE_SIZE, 0.0, depth),
                              (0.0, _TRIANGLE_SIZE, depth), (0.0, 0.0, depth),
                              (0.0, -_TRIANGLE_SIZE, depth)]],
                            dtype=np.float32)
        triangles = np.array(((1, 2, 0), (0, 2, 3)), np.int32)

        predicted_fb = rasterization_backend.rasterize(
            vertices, triangles, view_projection_matrix,
            (_IMAGE_WIDTH, _IMAGE_HEIGHT))

        with self.subTest(name="triangle_index"):
            groundtruth_triangle_index = np.zeros(
                (1, _IMAGE_HEIGHT, _IMAGE_WIDTH, 1), dtype=np.int32)
            groundtruth_triangle_index[..., :_IMAGE_WIDTH // 2, 0] = 0
            groundtruth_triangle_index[..., :_IMAGE_HEIGHT // 2,
                                       _IMAGE_WIDTH // 2:, 0] = 1
            self.assertAllEqual(groundtruth_triangle_index,
                                predicted_fb.triangle_id)

        with self.subTest(name="mask"):
            groundtruth_mask = np.ones((1, _IMAGE_HEIGHT, _IMAGE_WIDTH, 1),
                                       dtype=np.int32)
            groundtruth_mask[..., :_IMAGE_WIDTH // 2, 0] = 0
            self.assertAllEqual(groundtruth_mask, predicted_fb.foreground_mask)

        attributes = np.array(((1.0, 0.0, 0.0), (0.0, 1.0, 0.0),
                               (0.0, 0.0, 1.0))).astype(np.float32)
        perspective_correct_interpolation = lambda geometry, pixels: glm.perspective_correct_interpolation(  # pylint: disable=g-long-lambda,line-too-long
            geometry, attributes, pixels, model_to_eye_matrix,
            perspective_matrix,
            np.array((_IMAGE_WIDTH, _IMAGE_HEIGHT)).astype(np.float32),
            np.array((0.0, 0.0)).astype(np.float32))
        with self.subTest(name="barycentric_coordinates_triangle_0"):
            geometry_0 = tf.gather(vertices, triangles[0, :], axis=1)
            pixels_0 = tf.transpose(grid.generate((3.5, 2.5), (6.5, 4.5),
                                                  (4, 3)),
                                    perm=(1, 0, 2))
            barycentrics_gt_0 = perspective_correct_interpolation(
                geometry_0, pixels_0)
            self.assertAllClose(barycentrics_gt_0,
                                predicted_fb.barycentrics.value[0, 2:, 3:, :],
                                atol=1e-3)

        with self.subTest(name="barycentric_coordinates_triangle_1"):
            geometry_1 = tf.gather(vertices, triangles[1, :], axis=1)
            pixels_1 = tf.transpose(grid.generate((3.5, 0.5), (6.5, 1.5),
                                                  (4, 2)),
                                    perm=(1, 0, 2))
            barycentrics_gt_1 = perspective_correct_interpolation(
                geometry_1, pixels_1)
            self.assertAllClose(barycentrics_gt_1,
                                predicted_fb.barycentrics.value[0, 0:2, 3:, :],
                                atol=1e-3)
Example #7
0
def _proxy_rasterize(vertices, triangles, view_projection_matrices):
    return rasterization_backend.rasterize(vertices, triangles,
                                           view_projection_matrices,
                                           (_IMAGE_WIDTH, _IMAGE_HEIGHT),
                                           _ENABLE_CULL_FACE, _NUM_LAYERS)