A method of encoding 3D data, comprising: converting (32, 34) 3D data consisting of PointTexture data into adaptive octree data where all nodes are given labels; encoding nodes of the adaptive octree; and generating a bitstream from the encoded data; wherein the converting of the 3D data into adaptive octree data comprises: converting input 3D PointTexture data into voxel data using a 3D bounding volume; converting 3D data consisting of voxel data into an octree; and converting the octree into an adaptive octree where all nodes are given labels; wherein the labels are used for indicating a case 'S' where a node of a tree indicating the 3D data consists of sub-nodes, a case 'W' where a node consists of white voxels, a case 'B' where a node consists of black voxels, a case 'P' where voxel values within a node are encoded by a PPM (prediction by partial matching) algorithm; by: if the bounding volume contains an object, labeling the root node with "S" and subdividing the volume into eight volumes with respective nodes; if a subdivided volume contains only white voxels or only black voxels, labeling the corresponding node with "W" or "B" respectively, and otherwise labeling the corresponding node with "S" and further subdividing the volume; repeating until the octree has a predetermined depth; encoding nodes at the predetermined depth with a partial matching scheme and labeling the corresponding node with "P"; characterised in that the labels include a case 'E' representing an empty node having no voxel space, wherein no information for the empty node is encoded and in that resolution information of the 3D bounding volume is encoded as header information. converting (32, 34) 3D data consisting of PointTexture data into adaptive octree data where all nodes are given labels; encoding nodes of the adaptive octree; and generating a bitstream from the encoded data; wherein the converting of the 3D data into adaptive octree data comprises: converting input 3D PointTexture data into voxel data using a 3D bounding volume; converting 3D data consisting of voxel data into an octree; and converting the octree into an adaptive octree where all nodes are given labels; converting input 3D PointTexture data into voxel data using a 3D bounding volume; converting 3D data consisting of voxel data into an octree; and converting the octree into an adaptive octree where all nodes are given labels; wherein the labels are used for indicating a case 'S' where a node of a tree indicating the 3D data consists of sub-nodes, a case 'W' where a node consists of white voxels, a case 'B' where a node consists of black voxels, a case 'P' where voxel values within a node are encoded by a PPM (prediction by partial matching) algorithm; by: if the bounding volume contains an object, labeling the root node with "S" and subdividing the volume into eight volumes with respective nodes; if a subdivided volume contains only white voxels or only black voxels, labeling the corresponding node with "W" or "B" respectively, and otherwise labeling the corresponding node with "S" and further subdividing the volume; repeating until the octree has a predetermined depth; encoding nodes at the predetermined depth with a partial matching scheme and labeling the corresponding node with "P"; characterised in that the labels include a case 'E' representing an empty node having no voxel space, wherein no information for the empty node is encoded and in that resolution information of the 3D bounding volume is encoded as header information. if the bounding volume contains an object, labeling the root node with "S" and subdividing the volume into eight volumes with respective nodes; if a subdivided volume contains only white voxels or only black voxels, labeling the corresponding node with "W" or "B" respectively, and otherwise labeling the corresponding node with "S" and further subdividing the volume; repeating until the octree has a predetermined depth; encoding nodes at the predetermined depth with a partial matching scheme and labeling the corresponding node with "P"; characterised in that the labels include a case 'E' representing an empty node having no voxel space, wherein no information for the empty node is encoded and in that resolution information of the 3D bounding volume is encoded as header information.