A method of converting at least a portion of a 3-D object into a format suitable for printing, the method comprising: (a) determining a material volume coverage vector for each voxel of a 3-D bit map of a 3-D object, the 3-D bit map comprising a plurality of voxels, each voxel located at a unique 3-D location; (b) determining a rectangular cuboid comprising an MxNxL array of voxel locations enclosing at least a portion of the 3-D object; (c) providing a halftone threshold matrix comprising an array of threshold values; characterized in that providing a halftone threshold matrix comprises: generating a OxPxQ 3-D halftone threshold matrix comprising a OxPxQ 3-D array of threshold values by converting a predetermined OxP 2-D halftone threshold matrix into an OxPxQ 3-D halftone threshold matrix, wherein converting the predetermined OxP 2-D halftone threshold matrix comprises determining a third dimension Q of the 3-D halftone threshold matrix based on the percentage area coverage of each 2-D slice of the 3-D object; and generating a 2-D array of threshold values for each level of the determined third dimension; (d) replicating the halftone threshold matrix to an MxNxL 3-D array of threshold values; and (e) comparing each material volume coverage vector with each threshold value of the replicated 3-D halftone threshold matrix at corresponding 3-D locations to select a printable voxel at each 3-D location to convert the at least a portion of the 3-D object into a format suitable for printing. (a) determining a material volume coverage vector for each voxel of a 3-D bit map of a 3-D object, the 3-D bit map comprising a plurality of voxels, each voxel located at a unique 3-D location; (b) determining a rectangular cuboid comprising an MxNxL array of voxel locations enclosing at least a portion of the 3-D object; (c) providing a halftone threshold matrix comprising an array of threshold values; characterized in that providing a halftone threshold matrix comprises: generating a OxPxQ 3-D halftone threshold matrix comprising a OxPxQ 3-D array of threshold values by converting a predetermined OxP 2-D halftone threshold matrix into an OxPxQ 3-D halftone threshold matrix, wherein converting the predetermined OxP 2-D halftone threshold matrix comprises determining a third dimension Q of the 3-D halftone threshold matrix based on the percentage area coverage of each 2-D slice of the 3-D object; and generating a 2-D array of threshold values for each level of the determined third dimension; generating a OxPxQ 3-D halftone threshold matrix comprising a OxPxQ 3-D array of threshold values by converting a predetermined OxP 2-D halftone threshold matrix into an OxPxQ 3-D halftone threshold matrix, wherein converting the predetermined OxP 2-D halftone threshold matrix comprises determining a third dimension Q of the 3-D halftone threshold matrix based on the percentage area coverage of each 2-D slice of the 3-D object; and generating a 2-D array of threshold values for each level of the determined third dimension; (d) replicating the halftone threshold matrix to an MxNxL 3-D array of threshold values; and (e) comparing each material volume coverage vector with each threshold value of the replicated 3-D halftone threshold matrix at corresponding 3-D locations to select a printable voxel at each 3-D location to convert the at least a portion of the 3-D object into a format suitable for printing.