A method of 3D print modelling, comprising the steps of: generating (s1810) a point cloud representation of a target virtual object for 3D printing; generating (s1820) a voxel representation of the point cloud by adding a respective first voxel when a respective first point from the point cloud representation is located in the notional volume occupied by that first voxel; assigning (s1830) a first colour associated with the first point to all the faces of the first voxel; and if a second point from the point cloud representation is located within the volume of the first voxel, assigning (s1840) a second colour associated with the second point to a respective face of the first voxel corresponding to a surface normal of the second point to change the colour assigned to the respective face to the second colour, the surface normal of the second point corresponding to a normal of a surface of the target virtual object; and thickening (s1850) the voxel representation of the point cloud by generating a duplicate voxel adjacent to the first voxel and along a first axis passing through the two opposing faces of the first voxel respectively having the first and second colours; wherein the first voxel and the duplicate voxel are respectively assigned the first colour and the second colour. generating (s1810) a point cloud representation of a target virtual object for 3D printing; generating (s1820) a voxel representation of the point cloud by adding a respective first voxel when a respective first point from the point cloud representation is located in the notional volume occupied by that first voxel; assigning (s1830) a first colour associated with the first point to all the faces of the first voxel; and if a second point from the point cloud representation is located within the volume of the first voxel, assigning (s1840) a second colour associated with the second point to a respective face of the first voxel corresponding to a surface normal of the second point to change the colour assigned to the respective face to the second colour, the surface normal of the second point corresponding to a normal of a surface of the target virtual object; and thickening (s1850) the voxel representation of the point cloud by generating a duplicate voxel adjacent to the first voxel and along a first axis passing through the two opposing faces of the first voxel respectively having the first and second colours; wherein the first voxel and the duplicate voxel are respectively assigned the first colour and the second colour. assigning (s1840) a second colour associated with the second point to a respective face of the first voxel corresponding to a surface normal of the second point to change the colour assigned to the respective face to the second colour, the surface normal of the second point corresponding to a normal of a surface of the target virtual object; and thickening (s1850) the voxel representation of the point cloud by generating a duplicate voxel adjacent to the first voxel and along a first axis passing through the two opposing faces of the first voxel respectively having the first and second colours; wherein the first voxel and the duplicate voxel are respectively assigned the first colour and the second colour. <EOS>