This paper introduces the concept of three dimensional (3D) barcodes. A 3D barcode is composed of an array
of 3D cells, called modules, and each can be either filled or empty, corresponding to two possible values of a bit.
These barcodes have great theoretical promise thanks to their very large information capacity, which grows as
the cube of the linear size of the barcode, and in addition are becoming practically manufacturable thanks to
the ubiquitous use of 3D printers.
In order to make these 3D barcodes practical for consumers, it is important to keep the decoding simple using
commonly available means like smartphones. We therefore limit ourselves to decoding mechanisms based only
on three projections of the barcode, which imply specific constraints on the barcode itself. The three projections
produce the marginal sums of the 3D cube, which are the counts of filled-in modules along each Cartesian axis.
In this paper we present some of the theoretical aspects of the 2D and 3D cases, and describe the resulting
complexity of the 3D case. We then describe a method to reduce these complexities into a practical application.
The method features an asymmetric coding scheme, where the decoder is much simpler than the encoder. We
close by demonstrating 3D barcodes we created and their usability.