A computer implemented method of applying a two-dimensional image to a three-dimensional model, the three-dimensional model composed of a polygon mesh having a plurality of vertices, the method comprising the steps of: creating a membrane by generating an initial adjacency structure for all triangles within the polygon mesh, identifying a triangle within the membrane which contains a desired centre point of the two-dimensional image calculating horizontal and vertical spatial distances between the three vertices of the triangle and desired centre point of the two-dimensional image; adding each of the three neighbouring triangles of the triangle to a list of triangles to process; iteratively processing all the triangles in the list until the list is empty to generate a data set containing a set of points on the membrane and a set of horizontal and vertical distances between each point in the set of points on the membrane and the desired centre point, the iterative process comprising: calculating the horizontal and vertical distances between a vertex in which the distance to the desired centre point is known and the single unknown vertex within the triangle and checking the two remaining edges of the triangle to see if the 2D coordinates of the triangle intersect the boundary rectangle of the two-dimensional image, and if an intersection occurs adding this new triangle neighbour to the triangle list; transforming the points and horizontal and vertical distances into normalised UV-coordinates; and applying the two-dimensional image to the three-dimensional model using the normalised UV-coordinates. creating a membrane by generating an initial adjacency structure for all triangles within the polygon mesh, identifying a triangle within the membrane which contains a desired centre point of the two-dimensional image calculating horizontal and vertical spatial distances between the three vertices of the triangle and desired centre point of the two-dimensional image; adding each of the three neighbouring triangles of the triangle to a list of triangles to process; iteratively processing all the triangles in the list until the list is empty to generate a data set containing a set of points on the membrane and a set of horizontal and vertical distances between each point in the set of points on the membrane and the desired centre point, the iterative process comprising: calculating the horizontal and vertical distances between a vertex in which the distance to the desired centre point is known and the single unknown vertex within the triangle and checking the two remaining edges of the triangle to see if the 2D coordinates of the triangle intersect the boundary rectangle of the two-dimensional image, and if an intersection occurs adding this new triangle neighbour to the triangle list; transforming the points and horizontal and vertical distances into normalised UV-coordinates; and applying the two-dimensional image to the three-dimensional model using the normalised UV-coordinates. calculating the horizontal and vertical distances between a vertex in which the distance to the desired centre point is known and the single unknown vertex within the triangle and checking the two remaining edges of the triangle to see if the 2D coordinates of the triangle intersect the boundary rectangle of the two-dimensional image, and if an intersection occurs adding this new triangle neighbour to the triangle list; transforming the points and horizontal and vertical distances into normalised UV-coordinates; and applying the two-dimensional image to the three-dimensional model using the normalised UV-coordinates.