Mesh decoding device, mesh decoding method, and program

The mesh decoding device and method address redundancy in conventional technologies by generating and encoding displacement quantization values for each LoD, reducing code usage through strategic flagging and encoding, thereby improving efficiency.

WO2026088616A1PCT designated stage Publication Date: 2026-04-30KDDI CORP
View PDF 0 Cites 0 Cited by

Patent Information

Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
KDDI CORP
Filing Date
2025-09-02
Publication Date
2026-04-30

AI Technical Summary

Technical Problem

Conventional mesh decoding technologies suffer from redundancy due to subdivision methods and syntax related to LoD quantization values in displacement amount parameters, leading to inefficiencies in code usage.

Method used

A mesh decoding device and method that includes a displacement amount decoding unit to generate and output displacement quantization values for each Level of Detail (LoD), utilizing flags to indicate subdivision and encoding only when necessary, thereby reducing the amount of code required.

Benefits of technology

This approach effectively reduces the code amount by strategically encoding subdivision flags and quantization values, enhancing efficiency in mesh decoding processes.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure JP2025030994_30042026_PF_FP_ABST
    Figure JP2025030994_30042026_PF_FP_ABST
Patent Text Reader

Abstract

A mesh decoding device 200 according to the present invention comprises a displacement amount decoding unit 205 that is configured to receive input of a displacement amount bit stream, generate a displacement quantization value for each LoD, and output the displacement quantization value.
Need to check novelty before this filing date? Find Prior Art

Description

Mesh Decoding Device, Mesh Decoding Method, and Program

[0001] The present invention relates to a mesh decoding device, a mesh decoding method, and a program.

[0002] In Non-Patent Document 1, the mesh is decoded by dividing it into a basic mesh representing rough information and a displacement amount representing detailed information, and the displacement amount is decoded by a video codec.

[0003] Khaled Mammou, Jungsun Kim, Alexis Tourapis, Dimitri Podborski, Krasimir Kolarov, “[V-CG] Apple's Dynamic Mesh Coding CfP Response,” ISO / IEC JTC 1 / SC 29 / WG 7 m59281, April 2022.Google Draco, Accessed on May 26, 2022 [Online], https: / / google.github.io / draco

[0004] However, in the conventional technology, there are subdivision methods and syntax regarding LoD quantization values that do not require encoding in the displacement amount parameter set, and there is a problem of redundancy. Therefore, the present invention has been made in view of the above problems, and an object thereof is to provide a mesh decoding device, a mesh decoding method, and a program capable of reducing the amount of code.

[0005] The first feature of the present invention is a mesh decoding device, which comprises a displacement amount decoding unit configured to input a displacement amount bit stream and generate and output a displacement amount quantization value for each LoD.

[0006] The second feature of the present invention is a mesh decoding method, which has a step of inputting a displacement amount bit stream and generating and outputting a displacement amount quantization value for each LoD.

[0007] The third feature of the present invention is a program that causes a computer to function as a mesh decoding device, wherein the mesh decoding device includes a displacement decoding unit configured to receive a displacement bitstream as input, generate and output displacement quantization values ​​for each LoD.

[0008] According to the present invention, it is possible to provide a mesh decoding device, a mesh decoding method, and a program that can reduce the amount of code.

[0009] Figure 1 shows an example of the configuration of a mesh processing system 1 according to one embodiment. Figure 2 shows an example of the functional blocks of a mesh decoding device 200 according to one embodiment. Figure 3 shows an example of the syntax configuration of displ_sequence_parameter_set_rbsp. Figure 4 shows an example of the syntax configuration of displ_frame_parameter_set_rbsp. Figure 5 shows an example of the syntax configuration of displ_header. Figure 6 shows an example of the syntax configuration of displ_quantization_parameters. Figure 7 shows an example of the syntax configuration of Zippering. Figure 8 shows an example of a basic mesh. Figure 9 is a diagram illustrating an example of a decoding method for a subdivided mesh in the subdivided section 203. Figure 10 shows an example of the functional blocks of the boundary correction section 208. Figure 11 is a flowchart illustrating an example of a boundary correction method when the number of subdivisions differs for each submesh. Figure 12 is a schematic representation of the correction in step S208B-13 of Figure 11.

[0010] Embodiments of the present invention will be described below with reference to the drawings. Note that the components in the following embodiments can be replaced with existing components as appropriate, and various variations are possible, including combinations with other existing components. Therefore, the description of the following embodiments does not limit the content of the invention as described in the claims.

[0011] <First Embodiment> The mesh processing system 1 according to this embodiment will be described below with reference to Figures 1 to 12.

[0012] Figure 1 shows an example of the configuration of the mesh processing system 1 according to this embodiment. As shown in Figure 1, the mesh processing system 1 includes a mesh encoding device 100 and a mesh decoding device 200.

[0013] Figure 2 shows an example of the functional blocks of the mesh decoding device 200 according to this embodiment.

[0014] As shown in Figure 2, the mesh decoding device 200 includes a multiplexing unit 201, a basic mesh decoding unit 202, a subdivision unit 203, a mesh decoding unit 204, a displacement decoding unit 205, a video decoding unit 206, an atlas data decoding unit 207, a boundary correction unit 208, and an SEI message decoding unit 209.

[0015] The multiplexing unit 201 is configured to separate the multiplexed bitstream into an SEI bitstream, an atlas bitstream, a basic mesh bitstream, a displacement bitstream, and a texture bitstream.

[0016] The basic mesh decoding unit 202 is configured to decode the basic mesh bitstream, generate a basic mesh, and output it.

[0017] The base mesh is a simplified mesh obtained by reducing the number of faces compared to the mesh before encoding, and is used to represent the basic shape of the mesh.

[0018] Furthermore, the basic mesh consists of one or more submeshes. A submesh is defined as a region of the basic mesh.

[0019] The subdivision unit 203 is configured to generate and output a subdivided mesh from the basic mesh decoded by the basic mesh decoding unit 202 using a subdivision method indicated by the Atlas control information.

[0020] Here, the basic mesh, the added subdivided vertices, and their connection information are collectively referred to as the "subdivided mesh."

[0021] The mesh decoding unit 204 is configured to generate and output a decoded mesh using the atlas control information decoded by the atlas data decoding unit 207, the subdivided mesh generated by the subdivided mesh unit 203, and the displacement amount decoded by the displacement amount decoding unit 205.

[0022] The displacement amount decoding unit 205 is configured to decode the displacement amount bitstream, generate a displacement amount, and output it.

[0023] The video decoding unit 206 is configured to generate and output a decoded texture using a video codec.

[0024] The Atlas data decoding unit 207 is configured to decode the Atlas bitstream and output Atlas control information.

[0025] The boundary correction unit 208 is configured to decode and output a boundary correction decoded mesh using the atlas control information decoded by the atlas data decoding unit 207 and the decoded mesh decoded by the mesh decoding unit 204.

[0026] The SEI message decoding unit 209 is configured to decode the SEI bitstream, decode the SEI control information, and output it.

[0027] (Displacement Decoding Unit 205) The displacement decoding unit 205 is configured to decode the displacement bitstream and output the displacement amount.

[0028] The displacement amount may be defined to be decoded independently for each submesh.

[0029] The control information decoded by the displacement decoding unit 205 will be explained with reference to Figures 3 to 6.

[0030] Firstly, the displacement bitstream includes a sequence displacement parameter set displ_sequence_parameter_set_rbsp, which is a set of control signals for the displacement amount for each sequence.

[0031] Secondly, the displacement bitstream includes a frame displacement parameter set, displ_frame_parameter_set_rbsp, which is a set of control signals relating to the displacement amount for each frame.

[0032] Thirdly, the displacement bitstream includes a header displacement parameter set displ_header, which is a set of control signals for the displacement of each header.

[0033] The `displ_header` is a header for displacement amounts defined in submesh units, LoD units, etc.

[0034] Here, LoD represents the degree of fineness, and this degree changes depending on the number of subdivisions, etc.

[0035] Figure 3 shows an example of the syntax configuration for displ_sequence_parameter_set_rbsp. Here, if the functionality of the syntax is the same, a different syntax name may be used than the one shown in Figure 3.

[0036] In the syntax configuration of displ_sequence_parameter_set_rbsp shown in Figure 3, the Description column indicates how each syntax is encoded, where ue(v) means it is an unsigned zero-order exponential Golomb code, and u(n) means it is an n-bit flag.

[0037] The Description is merely an example, and you may choose an encoding scheme other than the Description in the diagram, such as u(n), ue(v), or ae(v).

[0038] displ_sequence_parameter_set_rbsp includes a control signal dsps_subdivision_flag, which represents a subdivision flag that indicates whether or not to perform subdivision for each sequence.

[0039] Instead of using a subdivision method, encoding a flag to indicate whether or not to perform subdivision is expected to reduce the amount of code in the displacement bitstream.

[0040] When the dsps_subdivision_flag is 1, the displ_sequence_parameter_set_rbsp includes a control signal dsps_subdivision_iteration_count_minus1 that represents the number of subdivisions per sequence.

[0041] When the dsps_subdivision_flag is 1, the number of subdivisions per sequence DspsSubdivisionCount is configured to be decoded by adding 1 to dsps_subdivision_iteration_count_minus1.

[0042] DspsSubdivisionCount may be configured to be decoded by adding an integer N to dsps_subdivision_iteration_count_minus1.

[0043] By adding an integer N to dsps_subdivision_iteration_count_minus1, the range of the number of subdivisions can be extended, and an effect of reducing the coded amount of the displacement amount bitstream can be expected.

[0044] When the dsps_subdivision_flag is 0, the number of subdivisions per sequence DspsSubdivisionCount is configured to be decoded as 0.

[0045] The displ_sequence_parameter_set_rbsp includes a displacement quantization parameter set displ_quantization_parameters(0, DspsSubdivisionCount).

[0046] Figure 4 is a diagram showing an example of the syntax structure of the displ_frame_parameter_set_rbsp. Here, if the functions of the syntax are the same, a syntax name different from the syntax name shown in Figure 4 may be used.

[0047] In the syntax structure of disp1_frame_parameter_set_rbsp shown in FIG. 4, the Description field is the same as that of disp1_sequence_parameter_set_rbsp.

[0048] disp1_frame_parameter_set_rbsp includes a control signal dfps_subdivision_flag, which is a flag indicating whether to perform subdivision for each frame.

[0049] By encoding the flag indicating whether to perform subdivision instead of the subdivision method, the effect of reducing the coded amount of the displacement amount bit stream can be expected.

[0050] When dfps_subdivision_flag is 1, disp1_frame_parameter_set_rbsp includes a control signal dfps_subdivision_iteration_count_minus1, which represents the number of subdivisions per frame.

[0051] When dfps_subdivision_flag is 1, the number of subdivisions per frame, DfpsSubdivisionCount, is configured to be decoded by adding 1 to dfps_subdivision_iteration_count_minus1.

[0052] DfpsSubdivisionCount may be configured to be decoded by adding an integer N to dfps_subdivision_iteration_count_minus1.

[0053] By adding an integer N to dfps_subdivision_iteration_count_minus1, the range of the number of subdivisions can be extended, and the effect of reducing the coded amount of the displacement amount bit stream can be expected.

[0054] When dfps_subdivision_flag is 0, the number of subdivisions per frame, DfpsSubdivisionCount, is configured to be decoded as 0.

[0055] Figure 5 shows an example of the syntax configuration for displ_header. Here, if the functionality of the syntax is the same, a different syntax name may be used than the one shown in Figure 5.

[0056] In the syntax configuration of displ_header shown in Figure 5, the Description field is the same as that of displ_sequence_parameter_set_rbsp.

[0057] The displ_header includes a control signal dh_subdivision_flag, which represents a subdivision flag that indicates whether or not to perform subdivision for each header.

[0058] Instead of using a subdivision method, encoding a flag to indicate whether or not to perform subdivision is expected to reduce the amount of code in the displacement bitstream.

[0059] When dh_subdivision_flag is 1, displ_header includes a control signal dh_subdivision_iteration_count_minus1 which represents the number of subdivisions per header.

[0060] When dh_subdivision_flag is 1, the number of subdivisions per header, DhSubdivisionCount, is configured to be decoded by adding 1 to dh_subdivision_iteration_count_minus1.

[0061] DhSubdivisionCount may be configured to be decoded by adding an integer N to dh_subdivision_iteration_count_minus1.

[0062] By adding an integer N to dh_subdivision_iteration_count_minus1, the range of subdivision counts can be expanded, which is expected to reduce the amount of code in the displacement bitstream.

[0063] Furthermore, the control signal representing the number of subdivisions included in the Atlas bitstream may also be configured to decode the number of subdivisions by adding an integer N.

[0064] When dh_subdivision_flag is 0, the number of subdivisions per header, DhSubdivisionCount, is configured to be 0 when decrypted.

[0065] Figure 6 shows an example of the syntax structure of displ_quantization_parameters. Here, if the functionality of the syntax is the same, a different syntax name may be used than the one shown in Figure 6.

[0066] In the syntax configuration of displ_quantization_parameters shown in Figure 6, the Description field is the same as that of displ_sequence_parameter_set_rbsp.

[0067] The displ_quantization_parameters(qpIndex, subdivisionCount) includes the control signal dsps_displacement_reference_qp_minus49, which represents the displacement reference quantization value, when the quantization value index qpIndex is 0.

[0068] By encoding a control signal that represents the displacement reference quantization value only when qpIndex is 0, it is expected that the amount of code in the displacement bitstream can be reduced.

[0069] Similarly, the control signal representing the displacement reference quantization value included in the Atlas bitstream may also be configured to encode only when qpIndex is 0.

[0070] displ_quantization_parameters includes the LoD quantization difference value dqp_lod_delta_quantization_parameter_value.

[0071] displ_quantization_parameters includes the LoD quantization difference sign value dqp_lod_delta_quantization_parameter_sign.

[0072] When qpIndex is 0, QuantizationParameter is calculated using the following formula:

[0073] QuantizationParameter[qpIndex][i][k] = dsps_displacement_reference_qp_minus49 + 49 + (1 - 2 * dqp_lod_delta_quantization_parameter_sign[qpIndex][i][k]) * dqp_lod_delta_quantization_parameter_value[qpIndex][i][k] When qpIndex is not 0, QuantizationParameter is calculated using the following formula.

[0074] QuantizationParameter[qpIndex][i][k]=QuantizationParameter[qpIndex-1][i][k]+(1-2*dqp_lod_delta_qua ntization_parameter_sign[qpIndex][i][k]) *dqp_lod_delta_quantization_parameter_value[qpIndex][i][k]

[0075] (SEI message decoding unit 209) The SEI message decoding unit 209 is configured to decode the SEI bitstream and output SEI control information.

[0076] Referring to Figure 7, the SEI control information decoded by the SEI message decoding unit 209 will be explained.

[0077] Firstly, the SEI bitstream includes a correction syntax Zippering, which is a set of control information related to submesh boundary correction.

[0078] Zippering can be defined for each individual mesh data, or it can be defined at a finer granularity such as frames, patches, or tiles.

[0079] The following describes the structure of the syntax decoded by the SEI message decoding unit 209 and the decoding method thereof, with reference to Figure 7.

[0080] Figure 7 shows an example of the syntax structure of Zippering. Here, different syntax names may be used if the functionality of the syntax is the same as those shown in Figure 7.

[0081] In the Zippering syntax configuration shown in Figure 7, the Description column indicates how each syntax is encoded. Furthermore, ue(v) indicates an unsigned zero-order exponential Golomb code, and u(n) indicates a fixed code length of n bits.

[0082] The Description is merely an example, and other encoding schemes besides the Descriptions in the diagrams, such as u(n), ue(v), and ae(v), may be selected.

[0083] Zippering includes a control signal zp_persistence_flag that indicates whether to use the correction syntax from the previous frame.

[0084] Zippering includes a control signal zp_send_distance_per_submesh that indicates whether to send a correction distance threshold for each submesh.

[0085] Zippering includes a control signal zp_number_of_submeshes_minus1 which represents the number of corrected submeshes.

[0086] zp_number_of_submeshes_minus1 may be configured to be defined when zp_send_distance_per_submesh is 1.

[0087] Zippering includes a control signal zp_send_distance_per_border_point that indicates whether to send a correction distance threshold for each vertex.

[0088] zp_send_distance_per_border_point may be configured to be defined when zp_send_distance_per_submesh is 1.

[0089] Zippering includes a control signal zp_number_of_border_points which represents the number of boundary vertices within the same submesh that define the correction distance threshold.

[0090] zp_number_of_border_points may be configured to be defined only when zp_send_distance_per_border_point is 1.

[0091] Zippering includes a control signal zp_border_point_distance_bitdepth which represents the bit amount of the correction distance threshold for each vertex.

[0092] zp_border_point_distance_bitdepth may be configured such that it is defined when zp_send_distance_per_border_point is 1.

[0093] By encoding zp_border_point_distance_bitdepth only when zp_send_distance_per_border_point is 1, it is expected that the amount of code in the SEI bitstream can be reduced.

[0094] zp_border_point_distance_bitdepth may be configured to be defined when the index of a boundary vertex is 0.

[0095] By encoding zp_border_point_distance_bitdepth only when the index of a boundary vertex is 0, it is expected that the code size of the SEI bitstream can be reduced.

[0096] zp_border_point_distance_bitdepth may be configured to be defined as an integer.

[0097] zp_border_point_distance_bitdepth may be configured to be defined as a base-2 logarithmic value.

[0098] zp_border_point_distance_bitdepth may be constructed to be defined as a logarithm with base N being a natural number.

[0099] This is expected to reduce the amount of code in the SEI bitstream.

[0100] Zippering includes a control signal zp_border_point_distance which represents the correction distance threshold for each vertex.

[0101] zp_border_point_distance may be configured to be defined when zp_send_distance_per_border_point is 1.

[0102] The bit depth of zp_border_point_distance may also be defined by zp_border_point_distance_bitdepth.

[0103] The bit amount of zp_border_point_distance_bitdepth may be configured to be represented by the control signal zp_border_submesh_distance_bitdepth, which represents the bit amount of the correction distance threshold for each submesh.

[0104] Zippering includes a control signal zp_border_submesh_distance_bitdepth which represents the bit amount of the correction distance threshold for each submesh.

[0105] zp_border_submesh_distance_bitdepth may be configured to be defined when zp_send_distance_per_submesh is 1.

[0106] zp_border_submesh_distance_bitdepth may be configured to be defined when zp_send_distance_per_border_point is 0.

[0107] zp_border_submesh_distance_bitdepth may be configured to be defined only when the submesh index is 0.

[0108] Only when the above conditions are met can we expect to reduce the amount of code in the SEI bitstream by encoding zp_border_submesh_distance_bitdepth.

[0109] The bit depth of zp_border_submesh_distance_bitdepth may be configured to be equal to zp_border_frame_distance_bitdepth.

[0110] zp_border_submesh_distance_bitdepth may be configured to be defined as a base-2 logarithmic value.

[0111] zp_border_submesh_distance_bitdepth may be constructed to be defined as a logarithm with base N of a natural number.

[0112] This is expected to reduce the amount of code in the SEI bitstream.

[0113] Zippering includes a control signal zp_max_match_distance_per_submesh which represents the correction distance threshold for each submesh.

[0114] The bit depth of zp_max_match_distance_per_submesh may also be defined by zp_border_submesh_distance_bitdepth.

[0115] The bit amount of zp_border_submesh_distance_bitdepth may be configured to be represented by the control signal zp_border_frame_distance_bitdepth, which represents the bit amount of the correction distance threshold for each frame.

[0116] zp_max_match_distance_per_submesh may be configured to be defined when zp_send_distance_per_submesh is 1.

[0117] zp_max_match_distance_per_submesh may be configured to be defined when zp_send_distance_per_border_point is 0.

[0118] Zippering may include a control signal zp_border_frame_distance_bitdepth which represents the bit amount of the correction distance threshold for each frame.

[0119] zp_border_frame_distance_bitdepth may be configured to be defined when zp_send_distance_per_submesh is 0.

[0120] zp_border_frame_distance_bitdepth may be configured to be defined when zp_send_distance_per_border_pointt is 0.

[0121] Only when the above conditions are met can we expect to reduce the amount of code in the SEI bitstream by encoding zp_border_frame_distance_bitdepth.

[0122] zp_border_frame_distance_bitdepth may be configured to be defined as a base-2 logarithmic value.

[0123] zp_border_frame_distance_bitdepth may be constructed to be defined as a logarithm with base N.

[0124] This is expected to reduce the amount of code in the SEI bitstream.

[0125] Zippering includes a control signal zp_max_match_distance which represents the correction distance threshold for each frame.

[0126] The encoding bit depth of zp_max_match_distance may also be defined by zp_border_frame_distance_bitdepth.

[0127] zp_max_match_distance may be configured to be defined when zp_send_distance_per_submesh is 0.

[0128] zp_max_match_distance may be configured to be defined when zp_send_distance_per_border_point is 0.

[0129] (Basic Mesh Decoding Unit 202) The basic mesh decoding unit 202 is configured to decode the basic mesh bitstream, generate a basic mesh, and output it.

[0130] Here, the basic mesh consists of one or more submeshes.

[0131] A submesh consists of multiple vertices in three-dimensional space and edges that connect these vertices.

[0132] As shown in Figure 8, the basic mesh is constructed by combining basic faces, each represented by three vertices.

[0133] The basic mesh decoding unit 202 may be configured to decode the basic mesh bitstream using, for example, Draco as shown in Non-Patent Document 2 or other known mesh decoding techniques.

[0134] Multiple submeshes may be configured to be decoded independently using Draco or other known mesh decoding techniques.

[0135] (Subdivision section 203) Referring to Figure 9, the method for decoding the subdivided mesh in the subdivision section 203 will be explained.

[0136] The subdivision unit 203 is configured to output a subdivided mesh, subdivided vertex normals, and subdivision information based on the basic mesh.

[0137] Figure 9 shows an example of a subdivided mesh obtained by subdividing once using the Mid-edge subdivision method. In the Mid-edge subdivision method, a subdivided mesh is generated by subdividing the midpoints of the edges that make up the mesh.

[0138] By repeating the above process, it is possible to generate a finer, more detailed mesh.

[0139] The subdivision section 203 may be configured to decode independently for each submesh.

[0140] (Mesh decoding unit 204) The mesh decoding unit 204 is configured to output a decoded mesh based on the input Atlas control information, subdivided mesh, and displacement amount.

[0141] The mesh decoding unit 204 decodes the decoded mesh by adding the displacement amount to the vertices of the input subdivided mesh.

[0142] In this case, the mesh decoding unit 204 may output multiple decoded meshes for each submesh based on the displacement amount and subdivision mesh corresponding to the submesh.

[0143] Furthermore, the mesh decoding unit 204 may be configured to calculate and output a decoded mesh by setting a coordinate system for the displacement amount based on a control signal representing a coordinate system for the displacement amount defined for each submesh, and adding the displacement amount to the subdivided vertices on the set coordinate system.

[0144] (Boundary Correction Unit 208) Referring to Figures 10 to 12, the method for decoding the boundary correction decoded mesh in the boundary correction unit 208 will be described.

[0145] As shown in Figure 10, the boundary correction unit 208 comprises an initial boundary correction unit 208A and a sub-mesh boundary correction unit 208B that corrects subdivision mismatches.

[0146] (Initial boundary correction unit 208A) The initial boundary correction unit 208A is configured to correct the submesh boundaries of the input decoded mesh and output the initial boundary correction decoded mesh and boundary pairs.

[0147] A boundary pair is represented by a set of pairs of vertices to be corrected (v(i,j), v(k,l))), where v(i,j) represents the vertex with vertex index j belonging to submesh i.

[0148] (Submesh boundary correction unit 208B for subdivision number mismatch) Using Figure 11, the method of boundary correction when the number of subdivisions differs for each submesh will be explained.

[0149] As shown in Figure 11, in step S208B-1, the sub-mesh boundary correction unit 208B initializes the sub-mesh index smIdx to 0 and the adjacent sub-mesh index j to 0, and the method proceeds to step S208B-2.

[0150] In step S208B-2, the submesh boundary correction unit 208B determines whether the subdivision number mismatch submesh boundary correction unit 208B satisfies the condition smIdx < PostRecMeshFrame.submeshCount. If the answer is Yes, the method proceeds to step S208B-3; otherwise, the method terminates.

[0151] Here, PostRecMeshFrame.submeshCount represents the number of submeshes in the initial boundary-corrected decoded mesh.

[0152] In step S208B-3, the submesh boundary correction unit 208B determines whether j < submeshAdjacencyCounts[smIdx] is satisfied. If yes, the method proceeds to step S208B-4; if no, the method proceeds to step S208B-5.

[0153] Here, submeshAdjacencyCounts[smIdx] represents the submesh adjacent to the submesh smIdx.

[0154] The submesh boundary correction unit 208B for subdivision mismatch may be configured to skip subsequent correction processing if the submesh smIdx and the adjacent submesh j use different subdivision methods.

[0155] Furthermore, the submesh boundary correction unit 208B for subdivision mismatch may be configured to skip subsequent correction processing if either the submesh smIdx or the adjacent submesh j is subdivided using a method other than the Mid-Edge subdivision method.

[0156] In step S208B-4, the submesh boundary correction unit 208B determines whether the condition (number of subdivisions of submesh smIdx) - (number of subdivisions of adjacent submesh j) > 0 is satisfied. If the answer is Yes, the method proceeds to step S208B-6; if the answer is No, the method proceeds to step S208B-7.

[0157] In step S208B-5, the sub-mesh boundary correction unit 208B adds 1 to smIdx, and the method proceeds to step S208B-2.

[0158] In step S208B-6, the submesh boundary correction unit 208B finds firstUnmatchedLodVertexIdx, the smallest vertex index of the submesh smIdx belonging to "LoD (number of subdivisions of adjacent submesh j + 1)", initializes i with firstUnmatchedLodVertexIdx, and proceeds to step S208B-8.

[0159] Here, "LoD N" represents the set of vertices generated by the Nth subdivision.

[0160] In step S208B-8, the sub-mesh boundary correction unit 208B determines whether i < maxVertexIdx is satisfied. If yes, the method proceeds to step S208B-9; if no, the method proceeds to step S208B-7.

[0161] Here, maxVertexIdx is the maximum value of the vertex index of the submesh smIdx.

[0162] In step S208B-9, the sub-mesh boundary correction unit 208B determines whether vertex v(smIdx,i) is a boundary vertex. If the answer is Yes, the method proceeds to step S208B-10; if the answer is No, the method proceeds to step S208B-11.

[0163] In step S208B-10, the sub-mesh boundary correction unit 208B determines the boundary vertices v(smIdx, i1) and v(smIdx, i2) adjacent to vertex v(smIdx, i), and the method proceeds to step S208B-12.

[0164] In step S208B-11, the sub-mesh boundary correction unit 208B adds 1 to i, and the method proceeds to step S208B-8.

[0165] In step S208B-12, the sub-mesh boundary correction unit 208B searches for boundary pairs and finds boundary vertex pairs v(smIdx, m1) and v(smIdx, m2) of boundary vertices v(smIdx, i1) and v(smIdx, i2).

[0166] In step S208B-13, the sub-mesh boundary correction unit 208B corrects the coordinates of vertex v(smIdx,i) using the midpoint of v(smIdx,i) and v(smIdx,m3), and the method proceeds to step S208B-11.

[0167] v(smIdx, m3) is a vertex generated by subdividing edge E(v(smIdx, m1) and v(smIdx, m2)).

[0168] E(x, y) represents an edge whose endpoints are vertices x and y.

[0169] The submesh boundary correction unit 208B for subdivision number mismatch may perform the correction using a known method such as weighted averaging instead of the midpoint.

[0170] The submesh boundary correction unit 208B for subdivision mismatch may add vertex v(smIdx, i) and vertex v(smIdx, m3) to the boundary pair.

[0171] Figure 12 is a schematic diagram illustrating the correction in step S208B-13.

[0172] As shown in Figure 12, the vertex v(smIdx, m3) may generate an edge by connecting to other vertices.

[0173] The submesh boundary correction unit 208B for subdivision mismatch may generate vertices v(smIdx, m3) using known subdivision methods other than the Mid-Edge subdivision method, such as Loop, LS3, or Batterfy.

[0174] The submesh boundary correction unit 208B may, when the number of subdivisions differs for adjacent edges, generate new vertices and perform corrections using the same procedure as described above.

[0175] This allows for highly accurate correction of submesh boundaries, even when the subdivision method differs for each submesh or edge.

[0176] Furthermore, when the number of subdivisions differs between adjacent submeshes or on an edge-by-edge basis, the submesh may be configured to reduce the number of vertices for the submesh with the higher number of subdivisions.

[0177] In this case, the system may be configured not to perform any processing if the subdivision methods do not match or if neither uses the Mid-Edge subdivision method.

[0178] This allows for highly accurate correction of submesh boundaries, even when the subdivision method differs for each submesh or edge.

[0179] According to this embodiment, a subdivision flag is introduced in the displacement bitstream to indicate whether or not to perform subdivision, and the amount of code can be reduced by deciding whether or not to encode the number of subdivisions according to the subdivision flag.

[0180] Furthermore, according to this embodiment, by performing submesh boundary correction for cases with different subdivision counts only when the subdivision method for each submesh is the same, it is possible to appropriately correct submesh boundaries even when a subdivision method other than the Mid-edge subdivision method is set.

[0181] Furthermore, according to this embodiment, the number of bits can be reduced by encoding the boundary correction distance threshold with the bit depth of the encoded boundary correction distance threshold.

[0182] The mesh coding device 100 and mesh decoding device 200 described above may be implemented as programs that cause a computer to execute each function (each process).

[0183] Furthermore, according to this embodiment, for example, it is possible to achieve an overall improvement in service quality in video communication, thereby contributing to Goal 9 of the United Nations-led Sustainable Development Goals (SDGs), "Build resilient infrastructure, promote sustainable industrialization and expand innovation."

[0184] 1...Mesh processing system 100...Mesh coding device 200...Mesh decoding device 201...Multiplex separation unit 202...Basic mesh decoding unit 203...Subdivision unit 204...Mesh decoding unit 205...Displacement decoding unit 206...Video decoding unit 207...Atlas data decoding unit 208...Boundary correction unit 209...SEI message decoding unit

Claims

1. A mesh decoding device comprising a displacement decoding unit configured to receive a displacement bitstream as input, generate and output displacement quantization values ​​for each LoD.

2. The mesh decoding device according to claim 1, characterized in that the displacement decoding unit decodes and outputs a control signal representing the number of subdivisions for each sequence when the control signal representing the subdivision flag, which is a flag indicating whether or not to perform subdivision for each sequence, is 1.

3. The mesh decoding device according to claim 1, characterized in that the displacement decoding unit decodes and outputs the number of subdivisions for each sequence by adding an integer N to a control signal representing the number of subdivisions for each sequence.

4. The mesh decoding device according to claim 1, characterized in that the displacement decoding unit decodes and outputs a control signal representing the number of subdivisions per frame when a control signal representing a subdivision flag, which is a flag indicating whether or not to perform subdivision for each frame, is 1.

5. The mesh decoding device according to claim 1, characterized in that the displacement decoding unit decodes and outputs the number of subdivisions for each frame by adding an integer N to a control signal representing the number of subdivisions for each frame.

6. The mesh decoding device according to claim 1, characterized in that the displacement decoding unit decodes and outputs a control signal representing the number of subdivisions for each header when a control signal representing a subdivision flag, which is a flag indicating whether or not to perform subdivision for each header, is 1.

7. The mesh decoding device according to claim 1, characterized in that the displacement decoding unit decodes and outputs the number of subdivisions for each header by adding an integer N to a control signal representing the number of subdivisions for each header.

8. The mesh decoding device according to claim 1, characterized in that the displacement decoding unit decodes and outputs a control signal representing the displacement reference quantization value when the quantization value index is 0.

9. A mesh decoding method, characterized by having a step of inputting a displacement bitstream, generating and outputting displacement quantization values ​​for each LoD.

10. A program that causes a computer to function as a mesh decoding device, wherein the mesh decoding device comprises a displacement decoding unit configured to receive a displacement bitstream as input, generate and output displacement quantization values ​​for each LoD.