ISO/IEC 14496-16:2011/Amd 2:2014
(Amendment)Information technology — Coding of audio-visual objects — Part 16: Animation Framework eXtension (AFX) — Amendment 2: Multi-resolution 3D mesh compression
Information technology — Coding of audio-visual objects — Part 16: Animation Framework eXtension (AFX) — Amendment 2: Multi-resolution 3D mesh compression
Technologies de l'information — Codage des objets audiovisuels — Partie 16: Extension du cadre d'animation (AFX) — Amendement 2: Compression de maillages 3D multirésolution
General Information
Relations
Standards Content (Sample)
INTERNATIONAL ISO/IEC
STANDARD 14496-16
Fourth edition
2011-11-01
AMENDMENT 2
2014-01-15
Information technology — Coding of
audio-visual objects —
Part 16:
Animation Framework eXtension (AFX)
AMENDMENT 2: Multi-resolution 3D mesh
compression
Technologies de l'information — Codage des objets audiovisuels —
Partie 16: Extension du cadre d'animation (AFX)
AMENDEMENT 2: Compression de maillages 3D multirésolution
Reference number
ISO/IEC 14496-16:2011/Amd.2:2014(E)
©
ISO/IEC 2014
---------------------- Page: 1 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
COPYRIGHT PROTECTED DOCUMENT
© ISO/IEC 2014
All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized otherwise in any form or by any
means, electronic or mechanical, including photocopying, or posting on the internet or an intranet, without prior written permission.
Permission can be requested from either ISO at the address below or ISO’s member body in the country of the requester.
ISO copyright office
Case postale 56 CH-1211 Geneva 20
Tel. + 41 22 749 01 11
Fax + 41 22 749 09 47
E-mail copyright@iso.org
Web www.iso.org
Published in Switzerland
ii © ISO/IEC 2014 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
Foreword
ISO (the International Organization for Standardization) and IEC (the International Electrotechnical
Commission) form the specialized system for worldwide standardization. National bodies that are members of
ISO or IEC participate in the development of International Standards through technical committees
established by the respective organization to deal with particular fields of technical activity. ISO and IEC
technical committees collaborate in fields of mutual interest. Other international organizations, governmental
and non-governmental, in liaison with ISO and IEC, also take part in the work. In the field of information
technology, ISO and IEC have established a joint technical committee, ISO/IEC JTC 1.
International Standards are drafted in accordance with the rules given in the ISO/IEC Directives, Part 2.
The main task of the joint technical committee is to prepare International Standards. Draft International
Standards adopted by the joint technical committee are circulated to national bodies for voting. Publication as
an International Standard requires approval by at least 75 % of the national bodies casting a vote.
Attention is drawn to the possibility that some of the elements of this document may be the subject of patent
rights. ISO and IEC shall not be held responsible for identifying any or all such patent rights.
Amendment 2 to ISO/IEC 14496-16:2011 was prepared by Joint Technical Committee ISO/IEC JTC 1,
Information technology, Subcommittee SC 29, Coding of audio, picture, multimedia and hypermedia
information.
© ISO/IEC 2014 – All rights reserved iii
---------------------- Page: 3 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
Information technology — Coding of audio-visual objects —
Part 16:
Animation Framework eXtension (AFX)
AMENDMENT 2: Multi-resolution 3D mesh compression
Add 5.2.6:
5.2.6 Multi-Resolution 3D Mesh Coding
Multi-Resolution 3D Mesh Coding (MR3DMC) specifies a progressive compression approach for manifold
triangular 3D meshes providing efficient rate-distortion performances and supporting the following
functionalities:
- Lossless connectivity coding: retrieve the original connectivity with a possible permutation of the mesh
vertices/triangles.
- Spatial scalability: the mesh resolution (i.e. the number of triangles/vertices) is adapted to the terminal
rendering performances and to the available bandwidth.
- Quality scalability: the precision of coordinates/attributes is progressively refined as the bitstream is
decoded.
- Near-lossless encoding of the geometry/attributes: the maximal error permitted, when the entire
bitstream is decoded, is controlled by varying a set of encoder parameters.
5.2.6.1 MR3DMC Bistream structure
The MR3DMC stream describes a multi-resolution representation of any triangular mesh stored as an
IndexedFaceSet, with single or multiple attributes defined per vertex of per triangle. The stream is decoded in
a coarse-to-fine way by exploiting a set of spatial and quality levels of detail (LODs). The bitstream is
composed of two main components (cf. Figure AMD1.1):
- The header: describing general information about the coded mesh.
- The data stream: describing the mesh LODs.
© ISO/IEC 2014 – All rights reserved 1
---------------------- Page: 4 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
Figure AMD1.1 — MR3DMC stream structure
The MR3DMCStream is encapsulated in an AFX stream and has the following AFX object code:
Table AMD1.1 — AFX object code
Type value
AFX object code Object Associated node of
bitwrapper
0x0C Multi-Resolution 3D Mesh IndexedFaceSet 2
When used in a BIFS scene, the value of the field "type" is 2.
5.2.6.2 MR3DMC Bitstream syntax and semantics
5.2.6.2.1 MR3DMC Bistream structure
5.2.6.2.1.1 Syntax
class MR3DMCStream {
MR3DMCStreamHeader header;
MR3DMCStreamData data;
}
5.2.6.2.1.2 Semantics
header: This is the header buffer of MR3DMC.
data: This is the data buffer of MR3DMC.
5.2.6.2.2 MR3DMCStreamHeader class
5.2.6.2.2.1 Syntax
class MR3DMCStreamHeader {
unsigned int (32) streamSize;
2 © ISO/IEC 2014 – All rights reserved
---------------------- Page: 5 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
bit (8) simplificationMode;
bit (16) numberOfSpatialLODs;
float (32) creaseAngle;
bit (1) ccw;
bit (1) solid;
bit (1) convex;
bit (1) colorPerVertex;
bit (1) normalPerVertex;
bit (1) otherAttributesPerVertex;
bit (1) isTriangularMesh;
bit (1) markerBit // always set as 1
unsigned int (32) numberOfCoord;
unsigned int (32) numberOfNormal
unsigned int (32) numberOfTexCoord;
unsigned int (32) numberOfColor;
unsigned int (32) numberOfOtherAttributes;
unsigned int (32) maxNumberOfVerticesInPatch
if (numberOfOtherAttributes >0) {
unsigned int (8) dimensionOfOtherAttributes;
}
if (numberOfCoord>0) {
unsigned int (32) numberOfCoordIndex;
bit(8) QPforGeometry;
}
if (numberOfNormal>0) {
bit(8) QPforNormal;
}
if (numberOfColor>0) {
bit(8) QPforColor;
}
if (numberOfTexCoord>0) {
bit(8) QPforTexCoord;
}
if (numberOfOtherAttributes >0) {
bit(8) QPforOtherAttributes
}
if (numberOfCoord>0) {
for(i=0;i<3;i++) {
float(32) quantMinGeometry[i];
float(32) quantRangeGeometry[i];
}
}
if (numberOfNormal>0) {
for (i=0;i<3;i++) {
float(32) quantMinNormal[i];
float(32) quantRangeNormal[i];
}
}
if(numberOfColor>0) {
for(i=0;i<3;i++) {
float(32) quantMinColor[i];
float(32) quantRangeColor[i];
}
}
if(numberOfTexCoord>0) {
for(i=0;i<2;i++) {
float(32) quantMinTexCoord[i];
© ISO/IEC 2014 – All rights reserved 3
---------------------- Page: 6 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
float(32) quantRangeTexCoord[i];
}
}
if(numberOfOtherAttributes>0) {
for(i=0;i< dimensionOfOtherAttributes;i++) {
float(32) quantMinOtherAttributes[i];
float(32) quantRangeOtherAttributes[i];
}
}
unsigned int (32) numberOfConnectedComponents;
};
5.2.6.2.2.2 Semantics
streamSize: A 32-bit unsigned integer describing the size in bytes of the current MR3DMC stream.
simplificationMode: A 8-bit unsigned integer indicating the simplification strategy
Table AMD1.2 — MR3DMC simplification modes
simplificationMode Method
Geometry aware
0 simplification
Connectivity-based
1 simplification
2-255 ISO reserved
numberOfSpatialLODs: A 16-bit unsigned integer indicating the number of spatial LODs
creaseAngle: A 32-bit float indicating the IFS creaseAngle parameter which controls the default normal
generation process.
ccw: 1-bit flag describing the IFS ccw parameter, which indicates whether the vertices are ordered in a
counter-clockwise direction when the mesh is viewed from the outside.
solid: 1-bit flag describing the IFS solid parameter which indicates whether the shape encloses a volume.
convex: 1-bit flag describing the IFS solid parameter which indicates whether all faces in the shape are
convex (should be always 1 for triangular meshes).
colorPerVertex: 1-bit flag describing the IFS colorPerVertex parameter which indicates whether the colors
are defined per vertex.
normalPerVertex: 1-bit flag describing the IFS normalPerVertex parameter which indicates whether the
normals are defined per vertex.
otherAttributesPerVertex: 1-bit flag describing whether the other attributes are defined per vertex.
isTriangularMesh: 1-bit flag describing whether the mesh is triangular (should be always 1).
markerBit: Always set as 1
4 © ISO/IEC 2014 – All rights reserved
---------------------- Page: 7 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
numberOfCoord: A 32-bit unsigned integer indicating the number of position coordinates in the fine resolution
mesh.numberOfNormal: A 32-bit unsigned integer indicating the number of normal coordinates in the fine
resolution mesh.
numberOfTexCoord: A 32-bit unsigned integer indicating the number of texture coordinates in the fine
resolution mesh.
numberOfColor: A 32-bit unsigned integer indicating the number of color coordinates in the fine resolution
mesh.
numberOfOtherAttributes: A 32-bit unsigned integer indicating the number of the other attributes in the fine
resolution mesh.
maxNumberOfVertiexInPatch: A 32-bit unsigned integer indicating the maximum number of vertices in the
patches, which the spatial LOD consists of.
dimensionOfOtherAttributes: A 32-bit unsigned integer indicating the dimension (i.e., number of attributes)
of the other attributes.
numberOfCoordIndex: A 32-bit unsigned integer indicating the number of faces associated to the position
coordinates.
QPforGeometry: A 8-bit data indicating quantization parameter for geometry.
QPforNormal: A 8-bit data indicating quantization parameter for normals.
QPforColor: A 8-bit data indicating quantization parameter for colour.
QPforTexCoord: A 8-bit data indicating quantization parameter for texture coordinate.
QPforOtherAttributes: A 8-bit data indicating quantization parameter for other attributes
quantMinGeometry[]:1 by 3 array containing 32 bit floating data indicating minimum value used for geometry
quantization
quantRangeGeometry[]: 1 by 3 array containing 32-bit floating point data indicating range values used for
geometry quantization
quantMinNormal[]: 1 by 3 array containing 32 bit floating data indicating minimum value used for normal
quantization
quantRangeNormal[]: 1 by 3 array containing 32-bit floating point data indicating range values used for
normal quantization
quantMinColor[]: 1 by 3 array containing 32 bit floating data indicating minimum value used for color
quantization
quantRangeColor[]: 1 by 3 array containing 32-bit floating point data indicating range values used for color
quantization
quantMinTexCoord[]: 1 by 2 array containing 32 bit floating data indicating minimum value used for texcoord
quantization
quantRangeTexCoord[]: 1 by 2 array containing 32-bit floating point data indicating range values used for
texcoord quantization
quantRangeOtherAttributes[]: 1 by dimensionOfOtherAttributes array containing 32-bit floating point
indicating range values used for normal quantization
© ISO/IEC 2014 – All rights reserved 5
---------------------- Page: 8 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
numberOfConnectedComponents: A 32-bit unsigned integer indicating the number of the connected
components.
5.2.6.2.3 MR3DMCStreamData class
5.2.6.2.3.1 Syntax
class MR3DMCStreamData {
unsigned int (32) numberOfBaseVertices;
unsigned int (32) numberOfBaseTriangles;
TFANIndexDecoder(3, numberOfBaseVertices, numberOfBaseTriangles, 0, 0) baseMesh;
for (int layer = 1; layer < numberOfSpatialLODs; layer++) {
SpatialLODDecoder spatialLODdecoder;
}
}
5.2.6.2.3.2 Semantics
numberOfBaseVertices: A 32-bit unsigned integer indicating the number of vertices in the base mesh.
numberOfBaseTriangles: A 32-bit unsigned integer indicating the number of triangles in the base mesh.
baseMesh: A TFAN strearm (cf. 5.2.5.3.9) describing the base mesh.
spatialLODdecoder: A stream specifying a spatial LOD layer.
5.2.6.2.4 SpatialLODDecoder Class
5.2.6.2.4.1 Syntax
class SpatialLODDecoder {
SpatialLODDecoderHeader spatialLODDecoderHeader;
ConnectivityLODDecoder connectivityLODDecoder;
for (int qlayer = 0; qlayer < numberOfQualityLODs; qlayer++) {
QualityLODDecoder qualityLODDecoder;
}
}
5.2.6.2.4.2 Semantics
spatialLODDecoderHeader: Header buffer specifying the current spatial LOD properties.
connectivityLODDecoder: A ConnectivityLODDecoder stream describing the connectivity information of the
current LOD.
qualityLODDecoder: A QualityLODDecoder stream describing the geometry refinement information for the
different LODs associated with the current spatial LOD.
5.2.6.2.5 SpatialLODHeaderDecoder Class
5.2.6.2.5.1 Syntax
class SpatialLODHeaderDecoder
{
bit (32) numberOfVertices;
6 © ISO/IEC 2014 – All rights reserved
---------------------- Page: 9 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
bit (32) numberOfTriangles;
bit (8) numberOfQualityLayers;
bit (8) qualityLODEncodingStrategy
}
5.2.6.2.5.2 Semantics
numberOfVertices: A 32 bit integer specifying the number of vertices in the current spatial LOD.
numberOfTriangles: A 32 bit integer specifying the number of triangles in the current spatial LOD.
numberOfQualityLODs: A 32 bit integer specifying the number of quality LODs in the current spatial LOD.
qualityLODEncodingStrategy: A 8-bit unsigned integer indicating the quality LOD encoding strategy
5.2.6.2.6 ConnectivityLODDecoder Class
5.2.6.2.6.1 Syntax
class ConnectivityLODDecoder
{
if ( simplificationMode == 0) {
TFANIndexDecoder(3, numberOfVertices, numberOfTriangles, 0, 0) connectivityCurrentLOD;
IntArrayDecoder(numberOfVertices,1) decodedVertexMapping;
}
else {
for ( cc=0; cc < numberOfConnectedComponents; ++cc ) {
unsigned int (32) numberOfRefinedVertices[cc] = 0;
}
for ( cc = 0; cc < numberOfConnnectedComponents; ++cc ) {
unsigned int(32) numberOfConnectivitySymbols;
bit(8) conquestMode
for ( int v = 0; v < numberOfConnectivitySymbols; ++v) {
valenceOfRefinedVertices[v] = arithmetic_decoder.decode();
if ( valenceOfRefinedVertices[v] > 0 ) {
numberOfRefinedVertices[cc]++;
}
}
}
}
}
5.2.6.2.6.2 Semantics
connectivityCurrentLOD: A TFANIndexDecoder stream (cf. 5.2.5.3.9s) describing the connectivity of the
current spatial LOD.
decodedVertexMapping: A bitstream of type IntArrayDecoder specifying for each vertex of the previous LOD
its index the current one.
numberOfConnectivitySymbols: An array of 32 bit unsigned integer specifying the number of connectivity
symbols, which represent the valences of refined vertices or null in the current spatial LOD for each connected
component.
conquestMode: A 8-bit unsigned integer indicating conquest strategy in the current spatial LOD.
© ISO/IEC 2014 – All rights reserved 7
---------------------- Page: 10 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
Table AMD1.3 — MR3DMC conquest modes
conquestMode Method
0 Decimating Conquest
1 Cleaning Conquest
2-255 ISO reserved
valenceOfRefinedVertices: An array of integer describing the valences of inserted vertices or null symbols in
order to refine the previous spatial LOD.
numberOfRefinedVertices: An array of 32-bit unsigned integer indicating the number of the refined vertices
for each spatial LOD
5.2.6.2.7 QualityLODDecoder class
5.2.6.2.7.1 Syntax
class QualityLODDecoder {
QualityLODHeader qualityLODMR3DMCHeader
QualityLODData qualityLODMR3DMCData
}
5.2.6.2.7.2 Semantics
qualityLODHeader: Header buffer specifying the current quality LOD properties.
qualityLODData: A QualityLODData stream describing the compressed predicted approximation errors
associated with the current quality LOD vertices (cf. Annex U.7)
5.2.6.2.8 QualityLODHeader class
5.2.6.2.8.1 Syntax
class QualityLODHeader {
if (qualityLODEncodingStrategy == 0 ) {
bits(8) numberOfCurrentQPLayer;
bits(32) numberOfVerticesOfCurrentQualityLOD;
}
}
5.2.6.2.8.2 Semantics
numberOfCurrentQPLayer: An 8 bit integer indicating the number of QP layer in the current quality LOD.
numberOfVerticesOfCurrentQualityLOD: An 32 bit integer indicating the number of vertices in current
quality LOD.
8 © ISO/IEC 2014 – All rights reserved
---------------------- Page: 11 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
5.2.6.2.9 QualityLODData class
5.2.6.2.9.1 Syntax
class QualityLODData {
If ( qualityLODEncodingStrategy == 0 ) {
for ( j=0; j < qpLayerNumberOfCurrentQualityLOD; ++j ) {
QPLayerLODDecoder qpLayerLODDecoder;
}
}
else {
for ( cc = 0; cc < numberOfConnectedComponents; ++cc ) {
BitPlaneDecoder(numberOfRefinedVertices) bitPlaneDecoder;
}
}
}
5.2.6.2.9.2 Semantics
qpLayerLODDecoder: A QPLayerLODDecoder stream describing the QP layer information of the current
spaital LOD.
numberOfRefinedVertices: A 32-bit unsigned integer indicating the number of the refined vertices in the
current spatial LOD.
itPlaneDecoder: A BitPlaneDecoder stream describing the bit plane information of the current spatial LOD.
5.2.6.2.10 QPLayerLODDecoder class
5.2.6.2.10.1 Syntax
class QPLayerLODDecoder {
QPLayerLODHeader qpLayerLODHeader
QPLayerLODData qpLayerLODData
}
5.2.6.2.10.2 Semantics
qpLayerLODHeader: Header buffer specifying the current QP Layer LOD properties.
qpLayerLODData: A QPLayerLODData stream describing the cascaded quantization based compressed
predicted approximation errors associated with the current QP Layer vertices.
5.2.6.2.11 BitPlaneDecoder class
5.2.6.2.11.1 Syntax
class BitPlaneDecoder {
bit (QPforGeometry) quantizedValue[numberOfRefinedVertices];
bit (numberOfRefinedVertices) signValue;
bit (8) transformMode;
Adaptive_Data_Model mSign(2);
Adaptive_Data_Model mCluster1[QPforGeometry ];
© ISO/IEC 2014 – All rights reserved 9
---------------------- Page: 12 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
Adaptive_Data_Modle mCluster2(2);
Arithmetic_Codec acd(code_bytes, code_buffer);
acd.start_decoder();
for ( i = 0; i < QPforGeometry; ++I ) {
mCluster1[i]. set_alphabet(2);
}
for ( i = 0; i < numberOfRefinedVertices; ++i ) {
ACDecoder(mSign) signValue;
}
AttributeDecoder(numberOfRefinedVertices) attributDecoder;
for ( i = 0; i < QPforGeometry; ++i ) {
for (j = 0; j < numberOfRefinedVertices*3; ++j ) {
if (quantizedValue[j] == 0 ) {
quantizedValue[j][i] = aithmetic_decoder.decode(mCluster1[i]);
}
else {
quantizedValue[j][i] = aithmetic_decoder.decode(mCluster2);
}
}
}
}
5.2.6.2.11.2 Semantics
attributeDecoder: An AttributeDecoder stream describing single or multiple attributes defined per refined
vertex of per refined triangle such as normals, colors, texture coordinates in the current quality LOD.
quantizedValue: A array of QPforGeometry-bit integers of dimension numberOfRefinedVertices indicating for
the quantized values in the current spatial LOD.
signValue: Sign information for the quantized values in the current spatial LOD.
transformMode: A 8-bit unsigned integer indicating the transformation strategy
Table AMD1.4 — MR3DMC transformation modes
Value Transformation Strategy
KL transformation for x
if ( transformMode & 0x001 == 1) coordinate
KL transformation for y
if ( transformMode & 0x010 == 2 ) coordinate
KL transformation for z
if ( transformMode & 0x100 == 4 ) coordinate
5.2.6.2.12 QPLayerLODHeader class
5.2.6.2.12.1 Syntax
class QPLayerLODHeader {
bits(8) qpValueOfCurrentQPLayerLOD ;
}
10 © ISO/IEC 2014 – All rights reserved
---------------------- Page: 13 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
5.2.6.2.12.2 Semantics
qpValueOfCurrentQPLayerLOD: An 8 bit integer indicating the QP value for a given QP layer LOD.
5.2.6.2.13 QPLayerLODData class
5.2.6.2.13.1 Syntax
class QPLayerLODData {
IntArrayDecoder(numberOfVerticesOfCurrentQualityLOD*3, 1) decodedQuantizedVerticesResidue;
}
5.2.6.2.13.2 Semantics
decodedQuantizedVerticesResidue: An array of decoded quantized vertices residue of the QP layer in the
current Quality layer LOD.
5.2.6.2.14 AttributeDecoder class
5.2.6.2.14.1 Syntax
class AttributeDecoder
{
if ( numberOfNormal != 0 )
{
if ( normalPerVertex == 1 )
{
unsigned int (32) numberOfRefinedNormal;
DecodefloatArray(numberOfRefinedNormal, 3, quantMinNormal, quantRangeNormal, tQP)
decodedNormal;
}
else
{
DecodefloatArray(numberOfRefinedVertices, 3, quantMinNormal, quantRangeNormal, tQP)
decodedNormal;
}
}
if ( numberOfColor != 0 )
{
if ( colorPerVertex == 1 )
{
unsigned int (32) numberOfRefinedColor;
DecodedfloatArray(numberOfRefinedColor, 3, quantMinColor, quantRangeColor, tQP) decodedColor
}
else
{
DecodefloatArray(numberOfRefinedColor, 3, quantMinColor, quantRangeColor, tQP) decodedColor
}
}
© ISO/IEC 2014 – All rights reserved 11
---------------------- Page: 14 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
if ( numberOfTexCoord != 0 )
{
unsigned int (32) numberOfRefinedTexCoord;
Decodefloat(numberOfRefinedTexCoord, 2, quantMinColor, quantRangeColor, tQP)
decodedTexCoord;
}
if ( numberOfOtherAttributes != 0 )
{
if ( otherAttributesPerVertex == 1 )
{
unsigned int (32) numberOfRefinedOtherAttributes;
DecodefloatArray(numberOfRefinedOtherAttributes, dimensionOfOtherAttributes,
quantMinOtherAttributes, quantRangeOtherAttributes, tQP) decodedOtherAttributes
}
else
{
DecodefloatArray(numberOfRefinedVertices, dimensionOfOtherAttributes, quantMinOtherAttributes,
quantRangeOtherAttributes, tQP) decodedOtherAttributes
}
}
}
5.2.6.2.14.2 Semantics
numberOfRefinedNormal: A 32-bit unsigned integer describing the number of refined normals in the current
quality LOD.
decodedNormal: A reconstructed normal whose size is 1 by numberOfRefinedNormal*3.
numberOfRefinedColor: A 32-bit unsigned integer describing the number of refined colors in the current
quality LOD.
decodedColor: A reconstructed normal whose size is 1 by numberOfRefinedColor*3
numberOfRefinedTexCoord: A 32-bit unsigned integer describing the number of refined texture coordinates
in the current quality LOD.
decodedTexCoord: A reconstructed normal whose size is 1 by numberOfRefinedTexCoord*2
numRefinedOtherAttributes: A 32-bit unsigned integer describing the number of refined other attributes in
the current quality LOD.
decodedOtherAttributes: A reconstructed other attributes whose size is 1 by numberOfOtherAttributes*
dimensionOfOtherAttributes.
5.2.6.3 Decoding process
5.2.6.3.1 Overview
This clause specifies the decoding process that the decoder shall perform to recover 3D mesh data from the
encoded bitstream. As shown in Figure AMD1.2, the decoding process includes a switch which indicates the
algorithm used in the encoding process. In this document, only triangular meshes are considered.
12 © ISO/IEC 2014 – All rights reserved
---------------------- Page: 15 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
Figure AMD1.2 — MR3DMC decoding process
Figure AMD1.2 illustrates the MR3DMC decoding process.
5.2.6.3.2 Connectivity decoding
The base connectivity layer is decoded by exploiting the TFAN decoding procedure (cf. 5.2.5.4.4). The
connectivity enhancement layers are decoded by using either the TFAN connectivity decoder or the valence-
based connectivity decoder [1]. Here, the choice of the decoding strategy depends on the decimation strategy.
If the geometry aware simplification mode is selected then the TFAN decoder is applied. Otherwise, if the
connectivity-based simplification mode is considered then the valence-based decoding technique is exploited.
The TFAN connectivity encoding and decoding procedures are described in 5.2.5.4.4 and Annex P,
respectively.
The valence-based decoding process starts with an initial seed gate (an oriented edge) and refines the patch,
which is adjacent to the gate, using the decoded degree of decimated vertex. Then the boundary edges of the
refined patch are push onto a first-in-first-out queue. Until all decimated vertices are refined, we repeat the
process with queue.
A detailed description of the valence-based encoder is provided in Annex U.1.
5.2.6.3.3 Inverse binarization
4.2.5.2.18.2.2.1 Cascaded quantization
© ISO/IEC 2014 – All rights reserved 13
---------------------- Page: 16 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
ˆ
x
QL
i
e ˆ
e
0
0
ˆ
e
e
1
1
ˆ
e
e
N
N
Figure AMD1.3 — An illustration of the cascaded inverse quantization
Figure AMD1.3 illustrates the decoding processing when only partial stream for a spatial LOD is received. The
decoding processing is described as:
The predicted error for a quality layer can be calculated by
nN
,
eeˆˆ
n
n 0
N
where is the highest quantization layer for current quality LOD for the received entire/partial stream.
ˆ
And e can be calculated by
n
eˆˆe VF qbits
nn
ˆˆ
ee 32 6
nn
sign eˆ sign e
nn
where indicates a binary left shift and VF=(Qstep 6). The values of VF for 0 QP5 are defined in
the standard as follows:
QP 0 1 2 3 4 5
VF 40 44 52 56 64 72
Since VF is a period of 6, other VFs relative to QPs can be derived accordingly.
5.2.6.3.4 Bit plane decoding
In order to obtain the uniformly quantized vectors, which consist of the tangential components or the transform
coefficients for normal components, the MR3DMC decodes the bit plane, which was encoded with the context-
based arithmetic codec, in the raster scan order from the most significant bit (MSB) planes to the least
significant bit (LSB) planes. The bits are classified into two clusters. In each column, the bits from the MSB to
st nd
the first ‘1’ bit belong to the 1 cluster, while the other bits compose the 2 cluster.
14 © ISO/IEC 2014 – All rights reserved
---------------------- Page: 17 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
Figure AMD1.4 – Bit plane coding
5.2.6.3.5 Inverse KL transform
st
For each quantized vector, the MR3DMC decodes the bits from the 1 cluster until the quantized vector is
nd
zero and then decodes the bits from the 2 cluster.
In order to apply the inverse KL transform to the coefficients, the MR3DMC decoder computes the topological
distance between every pair of decimated vertices and defines the covariance matrix C by
d d
1, 2 1,n
1
d d
2,1 2,n
1
C ,
d
d
n,1
n 2
1
where d is the topological distance between decimated vertex i and j. Since C is real and symmetric, its
i, j
eigen-value decomposition is possible, which is given by
T
C UU ,
where Λ is the diagonal matrix, whose diagonal elements are the eigen-values λ (i = 1, 2, . . . , n) arranged in
i
the decreasing order of the magnitudes. Also, the matrix U has column vectors, which are the eigenvectors.
The inverse KL transform is given by the matrix U and the decoder can construct the normal components from
the coefficient vector through the inverse KL transform by
x Uy ,
where x is the normal component and y is the coefficient of KL transform.
5.2.6.3.6 Inverse Prediction
The MR3DMC decoder progressively decompresses the approximation prediction errors starting from the
n t r
ˆ ˆ ˆ
lower LOD to the higher one. Here, at each step, the three components e , e and e of the predicted
v v v
approximation errors are arithmetically decoded, de-quantized and then used to reconstruct the approximation
error eˆ , as follows:
v
nt**r*
ˆ
eeˆˆ nˆ eˆteˆrˆ ,
vv v v v v v
*
where n is the normal of M* at vertex v, and r and t are two vectors chosen to form a direct orthonormal
v
*
basis with n .
v
© ISO/IEC 2014 – All rights reserved 15
---------------------- Page: 18 ----------------------
ISO/IEC 14496-16:2011/Amd.2:2014(E)
ˆ
Finally, the decoded positions P are given by:
v
11
* *
ˆˆ
ˆ
Pe PP P (1)
* *
vvwv w
**
wv wv
vv
Note that by encoding/decoding the vertices in the reverse order of PM(M*), the MR3DMC
ˆ
encoder/decoder guaranty that when processing the vertex v, the positions P of all its neighbors
w
*
wv
have already been reconstructed. Furthermore, by exploiting the progressive mesh structure PM(M*), the
MR3DMC codec directly supports the spatial scalability functionality. The quality scalability is obtained by
reconstructing all the vertex positions, while setting to zero the non-decoded predicted approximation
ˆ
errors e in equation (1).
v
5.2.6.3.7 Segmentation
Before applying the KL transform, the MR3DMC decoder partitions the current spatial LOD into a number of
patches only using the connectivity information.
In the base mesh, each triangle is corresponded into each patch. During the refinement, the numbers of
vertices in each patch increase. If a patch contains more than the pre-defined number,
maxNumberOfVerticesInPatch of vertices, then the MR3DMC decoder divides the patch into two patches.
5.2.6.3.8 Mesh approximation
The Laplacian matrix L is defined as follows:
1if ji
*
if iV and j i
S
**
ii
Sn
ij,1,,VC1,,V L
*
ij,
if iV and j i
n
**
ii
Sn
1if jC
0otherwise
where,
*
‐ i is the se
...
Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.