掌桥专利:专业的专利平台
掌桥专利
首页

缓存管理方法及装置

文献发布时间:2024-07-23 01:35:21


缓存管理方法及装置

本申请要求在2023年01月10日提交中国专利局、申请号为202310036790.8的中国专利申请的优先权,该申请的内容通过引用结合在本申请中。

技术领域

本申请一些实施例涉及视频处理技术领域。更具体地讲,涉及一种缓存管理方法及装置。

背景技术

在沉浸式媒体的场景描述框架中完整的支持沉浸式媒体的几何信息和属性信息会给用户更加真实和沉浸式的体验,因此在沉浸式媒体的场景描述标准中支持这些沉浸式媒体信息的表示具有重要意义。

现有沉浸式媒体的场景描述框并不能完整的支持所有类型的媒体的全部属性信息的表示。当媒体类型为基于几何的点云压缩(Geometry-based Point CloudCompression,G-PCC)编码点云时,对应的网格描述模块的基元的属性(mash.primitives.attributes)中的语法元素仅包括:position(三维坐标)、normal(法向量)、tangent(切向量)、texcoord_n(ST纹理坐标)、color_n(颜色:RGB或RGBA)、joints_n(与Skin相关的属性)以及weights_n(与Skin相关的属性)。若类型为G-PCC编码点云的媒体文件具有反射率、材质ID、透明度、不透明度、帧编号、帧索引、帧索引、帧编码等属性时,由于现有的沉浸式媒体的场景描述文件中是没有对这些属性的数据的数据类型、访问方式等进行定义,所以现有沉浸式媒体的场景描述框架中不支持类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引、帧索引、帧编码等属性。

发明内容

本申请示例性的实施方式提供一种缓存管理方法及装置,用于实现在沉浸式媒体的场景描述框架中支持类型为G-PCC编码点云的媒体文件中的反射率、材质ID、透明度、不透明度、帧编号、帧索引、帧索引、帧编码等属性。

本申请一些实施例提供技术方案如下:

第一方面,本申请一些实施例提供了一种缓存管理方法,包括:

接收目标缓存器的描述信息和所述目标缓存切片的描述信息,所述目标缓存器为用于缓存扩展属性的属性数据的缓存器,所述目标缓存切片为用于缓存所述扩展属性的属性数据的缓存切片,所述扩展属性的源数据属于类型为基于几何的点云压缩G-PCC编码点云的目标媒体文件,所述扩展属性包括:反射率、材质识别码ID、透明度、不透明度、帧编号以及帧索引中的至少一个;

根据所述目标缓存器的描述信息和所述目标缓存切片的描述信息创建所述目标缓存器,以使媒体接入函数将所述扩展属性的属性数据写入所述目标缓存器,显示引擎从所述目标缓存器中获取所述扩展属性的属性数据,以及根据所述扩展属性的属性数据进行三维场景的渲染。

第二方面,本申请一些实施例提供了一种缓存管理装置,包括:

缓存器,被配置为缓存计算机程序;

处理器,被配置为用于在调用计算机程序时,使得所述缓存管理装置实现第一方面所述的缓存管理方法。

第三方面,本申请一些实施例提供了一种计算机可读缓存介质,所述计算机可读缓存介质上缓存有计算机程序,当所述计算机程序被计算设备执行时,使得所述计算设备实现第一方面所述的缓存管理方法。

第四方面,本申请一些实施例提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机实现所述的缓存管理方法。

由以上技术方案可知,本申请实施例提供的缓存管理方法在接收到目标缓存器的描述信息和所述目标缓存切片的描述信息后,可以根据所述目标缓存器的描述信息和所述目标缓存切片的描述信息创建所述目标缓存器,因此媒体接入函数可以扩展属性的属性数据写入所述目标缓存器中,显示引擎可以从所述目标缓存器中读取所述扩展属性的属性数据,以及基于所述扩展属性的属性数据写入对待渲染三维场景进行渲染,因此本申请实施例可以使场景描述框中的缓存管理模块支持类型为G-PCC编码点云的媒体文件中的反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性。

附图说明

为了更清楚地说明本申请一些实施例或相关技术中的实施方式,下面将对实施例或相关技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1示出了一些实施例中的沉浸式媒体描述框架的结构示意图;

图2示出了一些实施例中的场景描述文件的结构示意图;

图3示出了本申请另一些实施例中的场景描述文件的结构示意图;

图4示出了一些实施例中的G-PCC编码器的结构示意图;

图5示出了一些实施例中的LOD划分过程的示意图;

图6示出了一些实施例中的提升变换过程的示意图;

图7示出了一些实施例中的RAHT变换过程的示意图;

图8示出了一些实施例中的G-PCC解码器的结构示意图;

图9示出了另一些实施例中的场景描述文件的结构示意图;

图10示出了另一些实施例中的场景描述文件的结构示意图;

图11示出了一些实施例提供的类型为G-PCC编码点云的媒体文件对应的管线的示意图;

图12示出了一些实施例中的场景描述文件的生成方法的步骤流程图;

图13示出了一些实施例中的场景描述文件的解析方法的步骤流程图;

图14示出了一些实施例中的媒体文件的处理方法的步骤流程图;

图15示出了一些实施例中的三维场景的渲染方法的步骤流程图;

图16示出了一些实施例中的缓存管理方法的步骤流程图;

图17示出了一些实施例中的三维场景的渲染方法的交互流程图。

具体实施方式

为使本申请的目的和实施方式更加清楚,下面将结合本申请示例性实施例中的附图,对本申请示例性实施方式进行清楚、完整地描述,显然,描述的示例性实施例仅是本申请一部分实施例,而不是全部的实施例。

需要说明的是,本申请中对于术语的简要说明,仅是为了方便理解接下来描述的实施方式,而不是意图限定本申请的实施方式。除非另有说明,这些术语应当按照其普通和通常的含义理解。

术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的所有组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。

说明书中提及“一些实现方式”、“一些实施例”等是表明所描述的实现方式或实施例可包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指同一实现方式。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实现方式(无论本文是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。

本申请一些实施例涉及沉浸式媒体的场景描述。参照图1所示的沉浸式媒体的场景描述框架,为了使显示引擎11能够专注于媒体渲染,沉浸式媒体的场景描述框架将媒体文件的访问与处理和媒体文件的渲染进行了解耦,且设计了媒体接入函数(Media AccessFunction,MAF)12来负责媒体文件的访问与处理功能。同时设计了媒体接入函数应用程序编程接口(Application Programming Interface,API),显示引擎11与媒体接入函数12之间通过媒体接入函数API进行指令交互。显示引擎11可以通过媒体接入函数API向媒体接入函数12下达指令,媒体接入函数12也可以通过媒体接入函数API向显示引擎11请求指令。

沉浸式媒体的场景描述框架的一般工作流程包括:1)、显示引擎11获取沉浸式媒体服务方提供的场景描述文件(Scene Description Documents)。2)、显示引擎11解析场景描述文件,获取媒体文件的访问地址、媒体文件的属性信息(媒体类型及编解码参数等)和经过处理的媒体文件的格式要求等参数或信息,并调用媒体接入函数API将解析场景描述文件得到的全部或部分信息传递给媒体接入函数12。3)、媒体接入函数12根据显示引擎11传递的信息,从媒体资源服务器请求下载指定的媒体文件或者从本地获取指定的媒体文件,并为该媒体文件建立相应的管线(pipeline),随后在管线中对媒体文件进行解封装、解密、解码、后处理等处理,以将媒体文件从封装格式转换为显示引擎11规定的格式。4)、管线将完成所有处理得到的输出数据存放到指定的缓存中。5)、最后,显示引擎11在指定的缓存中读取经过完备处理的数据,并根据从缓存中读取的数据进行媒体文件的渲染。

以下进一步对沉浸式媒体的场景描述框架所涉及的文件和功能模块进行说明。

一、场景描述文件

在沉浸式媒体的场景描述框架的工作流程中,场景描述文件用于描述三维场景的结构(可用三维网格描述其特征)、纹理(如纹理贴图等)、动画(旋转、平移)、相机视点位置(渲染视角)等内容。

相关技术领域中,GL传输格式2.0(glTF2.0)已被确定为一种场景描述文件的候选格式,可以满足动态图像专家组-浸入式(MPEG-Immersive,MPEG-I)和六自由度(Degreesof Freedom,6DoF)应用的需求。例如,在github.com/KhronosGroup/glTF/tree/master/specification/2.0#specifying-extensions可获得的Khronos Group的GL传输格式(glTF)版本2.0中,描述了glTF2.0。参照图2所示,图2为glTF2.0场景描述标准(ISO/IEC12113)中的场景描述文件的结构示意图。如图2所示,glTF2.0场景描述标准中的场景描述文件包括但不限于:场景描述模块(scene)201、节点描述模块(node)202、网格描述模块(mesh)203、访问器描述模块(accessor)204、缓存切片描述模块(bufferView)205、缓存器描述模块(buffer)206、相机描述模块(camera)207、光照描述模块(light)208、材质描述模块(material)209、纹理描述模块(texture)210、采样器描述模块(sampler)211以及纹理贴图描述模块(image)212、动画描述模块(animation)213、蒙皮描述模块(skin)214。

图2所示场景描述文件中的场景描述模块(scene)201用于描述场景描述文件中包含的三维场景。一个场景描述文件中可能包含任意数量的三维场景,每一个三维场景分别使用一个场景描述模块201进行表示。场景描述模块201与场景描述模块201之间为并列关系,即三维场景和三维场景之间为并列关系。

图2所示场景描述文件中的节点描述模块(node)202为场景描述模块201的下一层级描述模块,用于描述场景描述模块201所描述的三维场景中所包含的物体。每一个三维场景中都可能存在许多具体物体,比如虚拟数字人、近处的三维物体、远处的背景图片等,场景描述文件会通过节点描述模块202对这些具体物体进行描述。每个节点描述模块202可以表示一个物体或者是数个物体组成的一组物体集合,节点描述模块202之间的关系反映了场景描述模块201所描述的三维场景中各个组成部分之间的关系,一个场景描述模块201描述的场景中可以包含一个或多个节点。多个节点之间可以是并列关系或是层级关系,即节点描述模块202之间存在包含与被包含的关系,这使得多个具体物体可以集合在一起进行描述,也可以分别对多个具体物体进行描述。如果一个节点被另一个节点包含,则被包含的节点称为子节点(children),对于子节点使用"children"替换"node"进行表示。灵活使用节点与子节点进行组合,就可以构成层级化的节点结构,从而表达丰富的场景内容。

图2所示场景描述文件中的网格描述模块(mesh)203为节点描述模块202的下一层级描述模块,用于描述节点描述模块202所代表的物体的特征。网格描述模块203为由一个或多个基元(primitives)组成的集合,每基元又可以包括一个属性(attributes),基元的属性定义了图形处理器(Graphics Processing Unit,GPU)渲染时需要使用的属性。属性可以包括:position(三维坐标),normal(法向量),tangent(切向量),texcoord_n(纹理坐标),color_n(颜色:RGB或RGBA),joints_n(与蒙皮描述模块214相关的属性),和weights_n(与蒙皮描述模块214相关的属性)等。由于网格描述模块203中包含的顶点数量非常大,每个顶点又包含了多种属性信息,因此不便将媒体文件中包含的大量媒体数据直接缓存在场景描述文件的网格描述模块203中,而是在场景描述文件中指出了媒体文件的访问地址(Uniform Resource Identifier,URI),当需要取用媒体文件中的数据时再进行下载即可,从而实现场景描述文件与媒体文件的分离。所以一般情况下网格描述模块203中不缓存媒体数据,而是缓存每一个属性对应的访问器描述模块(accessor)204的索引值,并通过访问器描述模块204指向缓存器(buffer)的缓存切片(bufferView)中相应的数据。

在一些实施例中,还可以将场景描述文件与媒体文件融合起来,形成一个二进制文件,从而减少文件的种类与数量。

此外,网格描述模块203的基元的中还可能有模式(mode)这一语法元素。模式语法元素用于描述图形处理器(Graphics Processing Unit,GPU)绘制三维网格时的拓扑结构,比如mode=0代表散点,mode=1代表线,mode=4代表三角形等。

示例性的,以下为一个网格描述模块203的JSON示例:

在上述网格描述模块203中″position"的值为1,指向了索引为1的访问器描述模块204,并最终指向缓存器中缓存的顶点坐标数据;″color_0″的值为2,指向了索引为2的访问器描述模块204,并最终指向了缓存器中缓存的颜色属性的数据。

网格描述模块203的基元的属性(mesh.primitives.attributes)中的语法元素的定义如下表1所示:

表1

网格描述模块203的基元的属性(mesh.primitives.attributes)中索引的访问器的类型的定义如下表2所示:

表2

网格描述模块203的基元的属性(mesh.primitives.attributes)中的数据类型的定义如下表3所示:

表3

图2所示场景描述文件中的访问器描述模块(accessor)204、缓存切片描述模块(bufferView)205以及缓存器描述模块(buffer)206共同实现网格描述模块203对媒体文件的数据的逐层精细化的索引。如上所述,网格描述模块203中不缓存具体的媒体数据,而是缓存对应的访问器描述模块204的索引值,并通过索引值所索引的访问器描述模块204描述的访问器来访问具体的媒体数据。网格描述模块203对媒体数据的索引过程包括:首先网格描述模块203中的语法元素声明的索引值会指向对应的访问器描述模块204;然后,访问器描述模块204又会指向对应的缓存切片描述模块205;最后,缓存切片描述模块205再指向对应的缓存器描述模块206。图2所示场景描述文件中的缓存器描述模块206主要负责指向对应的媒体文件,包含了媒体文件的URI,媒体文件的字节长度等信息,用于描述缓存媒体文件的媒体数据的缓存器。一个缓存器可以被划分为一个或多个缓存切片,缓存切片描述模块205主要负责对缓存器中的媒体数据进行部分访问,包含了访问数据的起始字节偏移与访问数据的字节长度等,通过这缓存切片描述模块205以及缓存器描述模块206可以实现对媒体文件的数据的部分访问。访问器描述模块204主要负责为缓存切片描述模块205中划定的部分数据增添附加信息,比如数据类型,该类型数据的数量,该类型数据的数值范围等。这样的三层结构可以实现从一个媒体文件中取用部分数据的功能,有利于数据的精准取用,也便于减少媒体文件的数量。

图2所示场景描述文件中的相机描述模块(camera)207为节点描述模块202的下一层级描述模块,用于描述用户观看节点描述模块202所描述的物体时的视点、视角等与视觉观看相关的信息。为了使用户能够置身于三维场景之中,且能够观看三维场景,节点描述模块202还可以指向相机描述模块207,并通过相机描述模块207描述用户观看节点描述模块202所描述的物体时的视点、视角等与视觉观看相关的信息。

图2所示场景描述文件中的光照描述模块(light)208为节点描述模块202的下一层级描述模块,用于描述节点描述模块202所描述的物体的光照强度、环境光颜色、光照方向、光源位置等与光照相关的信息。

图2所示场景描述文件中的材质描述模块(material)209为网格描述模块203的下一层级描述模块,用于描述网格描述模块203所描述的三维物体的材质信息。在描述的三维物体时,仅借助网格描述模块203描述三维物体的几何信息,或单调地定义三维物体颜色和/或位置,是无法提高三维物体的真实感的,这就需要在三维物体的表面附加更多的信息。对于三维网格模型等三维模型技术,这一过程也可以简称为纹理贴图或添加纹理等。glTF2.0场景描述标准中的场景描述文件也沿用了这一描述模块。材质描述模块209使用一组通用参数定义材质,以描述三维场景中出现的几何对象的材质信息。该材质描述模块209普遍使用金属-粗糙度模型(metallic-roughness)描述虚拟物体的材质,基于金属-粗糙度模型的材质特性参数采用广泛使用的基于物理的渲染(Physically Based-Rendering,PBR)的材质表示。基于此,材质描述模块209对物体的金属-粗糙度材质属性做了详细的说明,材质描述模块209中的语法元素的定义如表4所示:

表4

在一些实施例中,材质描述模块209的金属-粗糙度(material.PbrMetarialRoughness)中的语法元素的定义如下表5所示:

表5

材质描述模块209的金属-粗糙度中的每个属性的值可以使用因子和/或纹理(例如baseColorTexture和baseColorFactor)定义。如果未给定纹理,则可以确定此材质模型中的所有相应纹理组件的值均为1.0。如果同时存在因子和纹理,则因子值充当相应纹理值的线性乘数。纹理绑定由纹理对象的索引和可选的纹理坐标索引定义。

示例性的,以下为一个材质描述模块209的JSON示例:

解析上述材质描述模块209,可以通过材质名称语法元素及其值("name":"gold"),确定当前材质命名为"gold",再通过pbrMetallicRoughness数组下的颜色语法元素及其值("basecolorFactor":[1.000,0.766,0.336,1.0]),确定当前材质的基础颜色的值为[1.000,0.766,0.336,1.0],通过pbrMetallicRoughness数组下金属性语法元素及其值("metalnessFactor":1.0),确定当前材质的金属性值为"1.0",通过pbrMetallicRoughness数组下的粗糙度语法元素及其值("roughnessFactor":0.0),确定当前材质的粗糙度值为"0.0"。

图2所示场景描述文件中的纹理描述模块(texture)210为材质描述模块209的下一层级描述模块,用于描述材质描述模块209所描述的三维物体的颜色以及材质定义中使用的其他特性。纹理是赋予对象真实外观的一个重要方面。通过纹理可以定义对象的主颜色以及材质定义中使用的其他特性,以便精确描述渲染对象的外观。材质本身可以定义多个纹理对象,这些纹理对象可以在渲染期间用作虚拟物体的纹理,并且可以用于编码不同的材质属性。纹理描述模块210使用采样器语法元素和纹理贴图语法元素索引来引用一个采样器描述模块(sampler)211和一个纹理贴图描述模块(image)212。纹理贴图描述模块212包含一个统一资源标识符(Uniform Resource Identifier,URI),该URI链接到纹理描述模块210实际使用的纹理贴图或二进制文件包。而采样器描述模块211则是用于描述纹理的过滤和包装模式。材质描述模块209、纹理描述模块210、采样器描述模块211以及纹理贴图描述模块212各自的职责与协作关系包括:材质描述模块209与纹理描述模块210一起定义了物体表面的颜色和物理信息。采样器描述模块211定义了如何将纹理贴图贴在物体表面。纹理描述模块210指定了采样器描述模块211和纹理贴图描述模块212,通过纹理贴图描述模块212实现了添加纹理,而纹理贴图描述模块212则使用URI进行标识和索引,并使用访问器描述模块204进行数据的访问。采样器描述模块211则实现了纹理的具体调整和包装。纹理描述模块210中的语法元素的定义如下表6所示:

表6

在一些实施例中,纹理描述模块210的sample(texture.sample)中的语法元素的定义如下表7所示:

表7

示例性的,以下为一个材质描述模块209、纹理描述模块210、采样器描述模块211以及纹理贴图描述模块212的JSON示例:

图2所示场景描述文件中的动画描述模块(animation)213为节点描述模块202的下一层级描述模块,用于描述为节点描述模块202所描述的物体添加的动画信息。为了让节点描述模块202所代表的物体不被限制在静止的状态,可以为节点描述模块202所描述的物体增添动画,因此场景描述文件中的动画描述模块213这一描述层级是被节点描述模块202所指定的,即动画描述模块213是节点描述模块202的下一层级描述模块,动画描述模块213同样与网格描述模块203具有对应关系。动画描述模块213可通过位置移动、角度旋转、大小缩放三种方式进行动画的描述,同时可以规定动画的开始、结束时间以及动画的实现方式。比如为一个代表三维物体的网格描述模块203增添一个动画,则该网格描述模块203所代表的三维物体就可以在指定的时间窗口内,通过位置移动、角度旋转、大小缩放的融合,完成规定的动画过程。

图2所示场景描述文件中的蒙皮描述模块(skin)214为节点描述模块202的下一层级描述模块,用于描述为节点描述模块202所描述的节点所添加骨骼与表物体表面信息的网格之间的运动协作关系。当节点描述模块202描述的节点代表了人、动物、机械等运动自由度较大的物体时,为了优化这些物体的运动表现效果,可以向物体的内部填充骨骼,代表物体表面信息的三维网格此时在概念上就成为了蒙皮。蒙皮描述模块214这一描述层级是被节点描述模块202所指定的,即蒙皮描述模块214是节点描述模块202的下一层级描述模块,蒙皮描述模块214与网格描述模块203具有对应关系。以骨骼的运动带动物体表面的网格进行运动,再结合仿真仿生的设计,可以实现较为逼真的运动效果,比如当人的手进行握拳动作时,表面的皮肤会随着内部的骨骼发生拉伸、遮盖等变化,此时在手部模型内预先填充的骨骼,再定义骨骼与蒙皮之间的协作关系就可以实现对这一动作的逼真模拟。

上述glTF2.0场景描述标准中的场景描述文件各个描述模块只是具备了最基本的描述三维物体的能力,存在不能支持动态的三维沉浸式媒体,不支持音频文件,不支持场景更新等问题。glTF同时也声明了其每个对象属性下都有一个可选的扩展对象属性(extensions),允许在其任何部分使用extensions进行扩展以达到更完善的功能。包括场景描述模块(scene)、节点描述模块(node)、网格描述模块(mesh)、访问器描述模块(accessor)、缓存描述模块(buffer)、动画描述模块(animation)等及其这些内部定义的语法元素都有可选的扩展对象属性,以支持在glTF2.0的基础上进行一定的功能扩展。

目前主流的沉浸式媒体主要有点云(Point Cloud)、三维网格(Mesh)、6DoF全景视频、基于MIV的视频等。在三维场景中,多种类型的沉浸式媒体往往同时存在。这就要求渲染引擎支持多种不同类型的沉浸式媒体的编解码,根据所支持编解码器的种类和数量不同,产生了不同种类的渲染引擎。不同供应商设计的渲染引擎支持的媒体类型不同,为了实现对不同种类媒体所组成的三维场景的跨平台描述,动态图像专家组(Moving PictureExperts Group,MPEG)启动了MPEG场景描述标准的制订,标准号为ISO/IEC 23090-14。该标准主要解决MPEG media(包括MPEG制订的编解码器、MPEG文件格式、MPEG传输机制)在三维场景中的跨平台描述问题。

MPEG#128次会议决议以glTF2.0(ISO/IEC 12113)作为基础,制订MPEG-I SceneDescription标准。目前已制订出第一版的MPEG场景描述标准,处于FDIS投票阶段。MPEG场景描述标准在第一版标准的基础上,通过添加相应扩展,以解决三维场景跨平台描述中仍未实现的需求,包括交互性、AR锚定、用户和化身表示、触觉支持,以及扩展对沉浸式媒体编解码器的支持等。

已制订出的第一版MPEG场景描述标准主要制订了以下内容:

1)MPEG场景描述标准定义了一种用于描述沉浸式三维场景的场景描述文件格式,此格式结合了原来glTF2.0(ISO/IEC 12113)的内容并在其基础上进行了一系列扩展。

2)MPEG场景描述定义了一个场景描述框架以及其中用于模块间协作的应用程序编程接口(Application Program Interface,API),实现了沉浸式媒体的获取与处理过程同媒体渲染过程的解耦,有益于实现进行沉浸式媒体对不同网络条件的适应、部分获取沉浸式媒体文件、针对沉浸式媒体的不同细节层次的访问以及内容质量的调整等方面的优化。沉浸式媒体的获取与处理过程同沉浸式媒体渲染过程的解耦是实现三维场景跨平台描述的关键。

3)MPEG场景描述提出了一系列基于国际标准化组织基本媒体文件格式(International Standardization Organization Base Media File Format,ISOBMFF)(ISO/IEC 14496-12)的扩展用于传输沉浸式媒体内容。

参照图3所示,在图2所示场景描述文件的基础上MPEG场景描述标准中对场景描述文件进行了扩展,相比于glTF2.0场景描述标准中的场景描述文件(图2所示场景描述文件),MPEG场景描述标准中的场景描述文件的扩展可以分为两组:

第一组扩展包括:MPEG媒体(MPEG_media)301、MPEG时变访问器(MPEG_accessor_timed)302以及MPEG环形缓存器(MPEG_buffer_circular)303。其中,MPEG媒体301为独立扩展,用于引用外部媒体源;MPEG时变访问器302为访问器层级的扩展,用于访问时变媒体;MPEG环形缓存器为缓存器层级的扩展用于支持循环缓存器。第一组扩展提供了对场景中媒体的基本描述和格式,满足了在场景描述框架中描述时变的沉浸式媒体的基本需求。其中,MPEG时变访问器(MPEG_accessor_timed)302是用来访问时变媒体的。由于glTF2.0的场景描述标准中不支持时变媒体,因此在需要媒体数据随时间变化时,需要通过更新glTF2.0的场景描述标准下的场景描述文件来实现。例如:在glTF2.0的场景描述标准中需要更新物体表面的纹理贴图,使物体表面的纹理贴图能够随着时间而变化,则必须要更新glTF2.0的场景描述标准下的场景描述文件。而频繁更新场景描述文件需要频繁解析、处理和传输场景描述文件,增加三维场景渲染过程中的性能开销。基于此,MPEG设计了MPEG时变访问器(MPEG_accessor_timed)302,MPEG时变访问器内的参数可以随时间变化,以改变媒体数据的访问方式,实现了访问到的数据随时间变化,从而避免了频繁解析、处理和传输场景描述文件。

第二组扩展包括:MPEG动态场景(MPEG_scene_dynamic)304、MPEG纹理(MPEG_texture_video)305、MPEG音频空间(MPEG_audio_spatial)306、MPEG视角推荐(MPEG_viewport_recommended)307、MPEG网格映射(MPEG_mesh_linking)308以及MPEG动画时间(MPEG_animation_timing)309。其中,MPEG_scene_dynamic 304为场景层级扩展,用于支持动态场景更新;MPEG_texture_video 305为纹理层级扩展,用于支持视频形式的纹理;MPEG_audio_spatial 306,为节点层级和相机层级扩展,用于支持空间3D音频,MPEG_viewport_recommended 307为场景层级扩展,用于支持在二维显示时描述推荐视角,MPEG_mesh_linking 308为网格层级扩展,用于支持链接两个网格并提供映射信息;MPEG_animation_timing 309为场景层级扩展,用于支持控制动画时间线。

下面将对上述各个扩展部分进行详细展开说明:

MPEG场景描述文件中的MPEG媒体用于对媒体文件的类型进行描述,并对MPEG类型的媒体文件进行必要的说明,以便后续取用这些MPEG类型的媒体文件。其中,MPEG媒体的第一层级的语法元素的定义如下表8所示:

表8

MPEG媒体的媒体列表(MPEG_media.media)中的语法元素的定义如下表9所示:

表9

MPEG媒体的媒体列表中的可选项(MPEG_media.alternatives)中的语法元素的定义如下表10所示:

表l0

MPEG媒体的媒体列表的可选项中的轨道数组(MPEG_media.alternatives.tracks)中的语法元素的定义如下表11所示:

表11

此外,基于ISOBMFF(ISO/IEC 14496-12),ISO/IEC 23090-14还定义了与场景描述文件的交付以及与glTF 2.0扩展相关的数据交付的传输格式。为了便于将场景描述文件交付给客户端,ISO/IEC23090-14定义了如何将glTF文件和相关数据作为非时变和时变的数据(例如,作为轨道样本)封装在ISOBMFF文件中。MPEG_scene_dynamic、MPEG_mesh_linking、MPEG_animation_timing向显示引擎提供了特定形式的时变数据,显示引擎11应根据这些变化的信息进行相应的操作。ISO/IEC 23090-14还定义了每个扩展的时变数据的格式,以及将其封装在ISOBMFF文件中的方式。MPEF媒体(MPEG_media)允许引用通过RTP/SRTP、MPEG-DASH等协议传递的外部媒体流。为了允许在不知道实际协议方案、主机名或端口值的情况下对媒体流进行寻址,ISO/IEC 23090-14定义了一个新的统一资源定位符(Uniform Resource Locator,URL)方案。该方案要求在查询部分中存在一个流标识符,但没有指定特定类型的标识符,允许使用媒体流标识方案(Media Stream Identificationscheme,RFC5888)、标记方案(labeling scheme,RFC4575)或基于0的索引方案。

二、显示引擎

参照图1所示,在沉浸式媒体的场景描述框架的工作流程中,显示引擎11主要作用包括获取场景描述文件,并对获取到的场景描述文件进行解析,以获取待渲染三维场景的组成结构和待渲染三维场景中的细节信息,以及根据解析场景描述文件得到的信息进行待渲染三维场景的渲染与展示。本申请实施例中不对显示引擎11具体工作流程和原理进行限制,以显示引擎11能够解析场景描述文件,并通过媒体接入函数API向媒体接入函数12下达指令,通过缓存API向缓存管理模块13下达指令,以及从缓存中取用经过处理的数据并完成三维场景及其中物体的渲染与展示为准。

三、媒体接入函数

在沉浸式媒体的场景描述框架的工作流程中,媒体接入函数12可以接收来自显示引擎11的指令,并根据显示引擎11发送的指令完成媒体文件的访问与处理功能。具体包括:获取到媒体文件后,对媒体文件进行处理。不同类型的媒体文件的处理过程存在较大差异,为了实现广泛的媒体类型支持,也考虑到媒体接入函数的工作效率,于是在媒体接入函数中设计了多种管线,在处理过程中启用匹配于媒体类型的管线即可。

管线的输入是从服务器下载的媒体文件或本地缓存控件读取的媒体文件,这些媒体文件往往具有较为复杂的结构,无法直接被显示引擎11使用,所以管线的主要功能就是对这种媒体文件的数据进行处理,使媒体文件的数据符合显示引擎11的要求。

在沉浸式媒体的场景描述框架的工作流程中,管线处理完成的媒体数据需要以规范的排列结构交付给显示引擎11使用,这就需要缓存API与缓存管理模块13的参与,缓存API与缓存管理实现了根据经过处理的媒体数据的格式,创建相应的缓存,并负责对缓存的后续管理,比如更新、释放等操作。缓存管理模块13可以通过缓存API与媒体接入函数12进行通信,也可以与显示引擎11进行通信,与显示引擎11和/或媒体接入函数12通信的目标都是实现缓存的管理。当缓存管理模块13与媒体接入函数12进行通信时,需要显示引擎11将缓存管理的相关指令先通过媒体接入函数API发送给媒体接入函数12,媒体接入函数12再通过缓存API将缓存管理的相关指令通过缓存API发送给缓存管理模块13。当缓存管理模块13与显示引擎11通信时,只需要显示引擎11将场景描述文件中解析出来的缓存管理描述信息直接通过缓存API发送给缓存管理模块13即可。

上述实施例介绍场景描述框架渲染包括沉浸式媒体的三维场景的基本流程,以及场景描述框架中各个功能模块或文件的内容及作用。三维场景中的沉浸式媒体文件可以为基于点云媒体文件、基于三维网格的媒体文件、基于6DoF的媒体文件、MIV媒体文件等。本申请一些实施例涉及基于场景描述框架渲染包括点云的三维场景,因此以下首先对点云相关内容进行说明。

点云是指海量三维点的集合,在获取物体表面每个采样点的空间坐标后,得到的是一个点的集合,称之为点云。点云中的点除了三维坐标,以外还可还包括了一些其它属性信息,比如颜色,法向量,反射率,透明度,材质ID等。点云可以由多种方式得到。在一些实施例中,获取点云的实现方式包括:使用空间中已知固定位置的相机阵列来观察一个物体,并用相机阵列中拍摄得到的二维图像使用一些相关的算法得到物体的三维表示,从而获取物体对应的点云。在另一些实施例中,获取点云的实现方式包括:使用激光雷达扫描设备获取物体对应的点云。激光雷达扫描设备的传感器会记录雷达发出的电磁波被物体表面反射的电磁波,从而得到的物体体积信息,以及根据物体体积信息获取物体对应的点云。在另一些实施例中,获取点云的实现方式还可以包括:通过使用人工智能或计算机视觉算法,根据二维图像创建三维体积信息,从而获取物体对应的点云。

点云为物理世界精细数字化提供了高精度的三维表达方式,广泛应用于三维建模、智慧城市、自主导航系统、增强现实等领域,但由于数据海量、非结构化、密度不均等特点,点云的缓存和传输面临巨大的挑战。所以需要对点云进行高效地压缩,目前针对点云的压缩标准主要有基于几何的点云压缩(Geometry-based Point Cloud Compression,G-PCC)和基于视频的点云压缩(Video-based Point Cloud Compression,V-PCC)两种。以下进一步对G-PCC的原理及相关算法进行说明。

参照图4所示,G-PCC编码器400可以分为几何编码模块41和属性编码模块42两部分,几何编码模块41又可以进一步分为基于八叉树(Octree)的几何编码单元411和基于预测树的几何编码单元412。

如图4所示,G-PCC编码器的几何编码模块41编码待编码点云的几何信息的主要编码步骤包括:S401、提取待编码点云中的几何信息(positions);S402、对几何信息进行坐标转换,使待编码点云全都包含在一个包围盒(bounding box)中;S403、对坐标转换后的几何信息进行体素化。即首先对坐标转换后的几何信息进行量化,以对待编码点云进行缩放。由于量化取整,会使得待编码点云中的部分点的位置相同,因此对坐标转换后的几何信息进行量化还需要根据参数来决定是否移除重复点,而量化和移除重复点这一过程称为体素化过程。完成几何信息的体素化之后,分别通过基于八叉树的几何编码单元411和基于预测树的几何编码单元412进行编码,以得到待编码点云的几何信息码流。

基于八叉树的几何编码单元411的编码流程包括:S404、树划分;包括:按照广度优先遍历(Breath First Search)的顺序不断对包围盒进行树划分(八叉树/四叉树/二叉树),并对每个节点的占位码进行编码。即,将包围盒依次划分得到子立方体,对非空的(包含点云中的点)的子立方体继续进行划分,直到划分得到的叶子结点为1x1x1的单位立方体时停止。其次对叶子节点中所包含的点数进行编码,最终完成几何八叉树的编码,生成二进制码流。S405、基于三角面片(trisoup,triangle soup)对几何信息进行表面拟合。表面拟合同样也先进行八叉树划分,但不需要将待编码点云逐级划分到边长为1x1x1的单位立方体,而是划分到子块(block)的边长为预设值时停止划分,然后基于每个子块中点云的分布所形成的表面,得到该表面与子块的十二条边所产生的至多十二个交点(vertex),依次编码每个子块的交点坐标,生成二进制码流。

基于预测树的几何编码单元412的编码流程包括:S406、构建预测树结构。包括:对待编码点云中的点进行排序,排序方式包括:无序、莫顿序、方位角序和径向距离序等方式,以及利用两种不同的方式(高时延慢速方式和低时延快速方式)构建预测树结构。S407、基于预测树的结构,遍历预测树中的每个节点,通过选取不同的预测模式对节点的位置信息进行预测得到预测残差,并且利用量化参数对几何预测残差进行量化。S408、算术编码;包括:通过不断迭代,对预测树节点位置信息的预测残差、预测树结构以及量化参数等进行算术编码,生成二进制几何信息码流。

如图4所示,G-PCC编码器属性编码模块42编码待编码点云的属性信息的流程中主要包括:S408、提取待编码点云中的属性信息(attributes);在通过步骤S408提取了待编码点云中的属性信息后,可以如下两种方式中的任一种获取变换系数,一种方式包括步骤S409和S410;另一种方式包括S411;S409、对属性信息进行属性预测;S410、对属性信息进行提升(Lifting)变换获取提升变换系数;S411、对属性信息进行区域自适应层次变换(Region Adaptive Hierarchical Transform,RAHT)变换获取RAHT变换系数;S412、对RAHT变换系数或提升变换系数进行量化;S413、对量化后的RAHT变换系数或提升变换系数进行算术编码,以得到属性信息码流。此外,由于属性编码模块42是基于重建的几何信息进行处理的,因此在有损几何编码完成后,需要执行如下步骤S414和S415:步S414、根据几何码流重建几何信息,以及对原始属性信息和重建几何信息进行匹配。S415、对几何信息进行重新着色。其中,步骤S415中的重新着色部分就是利用原始点云为重建点云赋予属性信息,目标是为了使重建点云的属性数据与待编码点云的属性数据尽可能的相似,使误差最小化。

属性预测算法是一种利用三维空间中已经重建的点的重建属性数据加权求和得到当前待预测点的预测属性数据的算法。属性预测算法可以有效的去除属性空间冗余,从而达到压缩属性信息的目的。在一些实施例中,属性预测的实现方式可以包括:首先通过层次细节(Level of Detail,LOD)算法对待编码点云进行层次划分,建立待编码点云的层级结构。其次,对低层级的点先进行编解码以及利用低层级的点和同一层级已重建的点对高层级的点进行预测,从而实现渐进式编码。其中,通过LOD算法对待编码点云进行层次划分的实现方式可以包括:首先将待编码点云中的所有点均标记为未访问,并将已访问点集表示为V,初始状态时,已访问点集V为空。循环遍历待编码点云中的所有未访问的点,计算当前点到访问点集V的最小距离D,如果D小于阈值距离则忽略当前点,否则将当前点标记为已访问,并添加到已访问点集V和当前子空间中。最后合并各个子空间和各个子空间之前的全部子空间中的点,得到待编码点云的层级结构。

示例性的,参照图5所示,图5中以待编码点云包括点P1~P9为例示出。基于距离的LOD划分过程,在第一次循环遍历时,依次将点P0、P2、P4、P5添加到了已访问点集V和层级R0中,在第二次循环遍历时,依次将点P1、P3、P8添加到了已访问点集V和层级R1,在第三次循环遍历时,完成了全部点的遍历,且依次将点P6、P7、P9添加到了已访问点集V和层级R2,最后合并各个层级和各个层级之前的全部层级中的点,得到待编码点云的层级结构包括三个层级。其中,第一层级为LOD

提升变换建立在预测变换之上,包含了分割、预测和更新三个部分。参照图6所示,分割模块61将待编码点云进行空间分割为高层次点云H(N)和低层次点云L(N)两部分,高层次点云H(N)和低层次点云L(N)之间有一定的相关性。预测模块62利用低层次点云L(N)的属性对高层次点云H(N)进行属性预测,得到预测残差为:D(N)=H(N)-P(N),其中,P(N)为预测模块62对低层次点云L(N)进行预测后输出的特征。在分割模块61和预测模块62的过程中,由于LOD划分中的预测策略使得较低层LOD层中的点更有影响力,因此更新模块63基于预测残差D(N)、预测点与其邻近点之间的距离来定义和递归更新每个点的影响权重。其中,递归更新是指多次进行提升变换,且上一次提升变换的输出数据为下一次提升变换的输入数据;基于预测残差D(N)、预测点与其邻近点之间的距离来定义和递归更新每个点的影响权重,包括:基于预测残差D(N)、预测点与其邻近点之间的距离以及公式L′(N)=L(N)+U(N)定义和递归更新每个点的影响权重;U(N)为更新模块63对预测残差D(N)进行预测后输出的特征。

RAHT变换是一种基于哈尔小波变换的分层区域自适应变换算法。基于分层的树结构,在同一个父结点中对占用子节点以自下而上的方式沿着每一个维度进行递归变换,将变换得到的低频系数传递给变换过程的下一级,以及对高频系数进行量化和熵编码。

在一些实施例中,可以通过基于上采样预测的RAHT变换实现上述RAHT变换。在基于上采样预测的RAHT变换中,RHAT变换整体树结构由自下而上改为自上而下,变换仍在2×2×2的块内进行。参照图7所示,在一个2×2×2的块内,变换流程包括:首先在第一方向上对体素块71进行RAHT变换。若第一方向上存在相邻的体素块,则二者进行RAHT,得到相邻两点属性数据的加权平均值(DC系数)与残差(AC系数)。其中,得到的DC系数作为父节点的体素块122的属性信息存在,并进行下一层的RAHT变换;而AC系数保留起来,用于最后的编码。若不存在相邻点,则将该体素块71的属性数据直接传递给第二层父节点。第二层RAHT变换时,沿第二方向进行,若第二方向上存在相邻体素块,二者进行RAHT变换,并得到相邻两点属性数据的加权平均值(DC系数)与残差(AC系数)。之后,第三层RAHT变换沿第三方向进行,并得到三种颜色深度相间的父节点体素块73作为八叉树中下一层的子节点,再沿第一方向、第二方向、第三方向循环进行RAHT变换,直至整个待编码点云只存在一个父节点为止。

参照图8所示,G-PCC解码器800可以分为几何解码模块81和属性解码模块82,几何编解模块81又可以进一步分为基于八叉树的几何解码单元811以及基于预测树的几何解码单元812。

如图8所示,G-PCC解码器通过几何解码模块81的基于八叉树的几何解码单元811对几何信息码流进行解码的主要步骤包括:S801、算术解码;S802、八叉树合成;S803、表面拟合;S804、重建几何;S805、逆坐标转换的步骤,得到点云的几何信息。其中,基于八叉树的几何解码单元811的几何解码包括:按照广度优先遍历的顺序,通过不断解析得到每个节点的占位码,并且依次不断划分节点,直至划分得到1x1x1的单位立方体时停止划分,解析得到每个叶子节点中包含的点数,最终恢复得到几何重构点云信息。G-PCC解码器通过几何解码模块81的基于预测树的几何解码单元812对几何信息码流进行解码的主要步骤包括:S801、算术解码;S806、重构预测树;S807、残差计算;S804、重建几何;S805、逆坐标转换的步骤,得到点云的几何信息。基于G-PCC解码器800的属性解码模块82进行属性解码主要步骤包括:S808、算术解码;S809、反量化;在通过步骤S809反量化之后,若编码过程中是通过上述步骤S409和S410获取提升变换系数,则执行如下步骤S810和S811,若编码过程中是通过上述步骤S411获取RAHT变换系数,则执行如下步骤S812;S810、进行属性预测;S811、提升变换,获取提升变换系数;S812、基于RAHT的逆变换获取RAHT变换系数;S813、进行颜色反变换得到点云的属性信息。最后,基于几何信息和属性信息还原待编码的点云数据的三维图像模型。G-PCC解码器基于属性解码模块82对属性信息码流进行解码的主要步骤与G-PCC编码器基于属性编码模块82对属性信息进行编的主要步骤互为逆过程,在此不再赘述。

需要说明的是,在上述内容的基础上,上述编码器还可包括降采样器、编码控制器、变换模块、量化模块、内预测模块、互预测模块、熵编码器等。上述解码器还可包括降采样器、解码控制器、反变换模块、反量化模块、内预测模块、互预测模块、熵解码器等。这种模块是本领域技术人员已知的并且为了呈现的清晰起见在本文中不作进一步论述。此外,编码器和解码器可经由任何适当的设备来实现,例如服务器、个人计算机、膝上型计算机、平板设备、平板手机、智能电话、数字相机、游戏机、可穿戴设备、显示设备、一体化设备、二合一设备,等。例如,就本文使用的而言,系统、设备、计算机或计算设备可包括任何这种设备或平台。

沉浸式三维媒体有点云、MIV、三维网格等,沉浸式媒体可以包含三维坐标的几何信息和颜色,法向量,反射率、材质ID、透明度、不透明度、帧编号、帧索引等属性信息。在场景描述中完整的支持对沉浸式媒体的几何信息和属性信息的表示会给用户更加真实和沉浸式的体验。因此在ISO/IEC 23090-14场景描述标准中支持这些沉浸式媒体信息的表示具有重要意义。然而,由上述关于网格描述模块(mesh)的介绍可知,场景描述文件用网格描述模块(mesh)描述一个具体三维物体的特征,且网格描述模块(mesh)被定义为由一个或多个基元(primitive)模块组成的集合,包含了一些用于GPU绘制所需的数据定义。其中,每个基元可以包括一个属性(attributes)模块,属性(attributes)模块定义了GPU绘制中需要使用的属性,且某一三维物体将类型为G-PCC编码点云的媒体文件的数据作为实际数据时,属性(attributes)中具体有position(三维坐标),normal(法向量),tangent(切向量),texcoord_n(ST纹理坐标),color_n(颜色:RGB或RGBA),joints_n(与Skin相关的属性)以及weights_n(与Skin相关的属性)。

如上所述,当某一三维物体将类型为G-PCC编码点云的媒体文件的数据作为实际数据时,对应的网格描述模块203的基元的属性(mesh.primitives.attributes)中的语法元素仅包括:position(三维坐标),normal(法向量),tangent(切向量),texcoord_n(ST纹理坐标),color_n(颜色:RGB或RGBA),joints_n(与Skin相关的属性)以及weights_n(与Skin相关的属性),当类型为G-PCC编码点云的媒体文件只含有三维坐标,颜色,法向量等信息时,按照相关的场景描述文件格式规定的方法是可以支持这些信息的表示的。例如:几何信息可以使用场景描述文件的网格描述模块的基元的属性(mesh.primitives.attributes)中的位置语法元素(position)规定的数据类型和访问方式进行描述,颜色、法向量等属性信息可以分别使用网格描述模块的基元的属性(mesh.primitives.attributes)中的颜色语法元素(color_n)、法向量语法元素(normal)语法元素规定的数据类型和访问方式进行描述,但是当类型为G-PCC编码点云的媒体文件含有反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性时,由于相关的场景描述文件中是没有对类型为G-PCC编码点云的媒体文件这些扩展属性的属性数据类型和访问方式进行定义的,所以相关场景描述框架中不支持类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的描述、解析、缓存、访问、渲染以及展示。也就是说采用相关的场景描述文件的网格描述模块的基元的属性(mesh.primitives.attributes)中定义的语法元素是不足以完全支撑类型为G-PCC编码点云的媒体文件的属性信息的表示和访问的。亟需在场景描述框架中对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等属性的数据类型和访问方式进行相关扩展定义,支持类型为G-PCC编码点云的媒体文件的这些属性信息。

针对相关场景描述框架中不支持类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的问题,本申请一些实施例提供了一种支持对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性描述、解析、缓存、访问、渲染以及展示的场景描述框架,具体内容包括:场景描述文件对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持、显示引擎对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持、媒体接入函数API对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持、媒体接入函数对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持、缓存API对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持、缓存管理模块对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持等内容。

基于场景描述框架渲染包括反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件的过程包括:首先,显示引擎通过网络协议下载或者本地缓存读取等方式从三维场景提供方接收场景描述文件。其中,显示引擎得到的场景描述文件包含了对整个三维场景以及场景中的类型为G-PCC编码点云的媒体文件的描述信息,类型为G-PCC编码点云的媒体文件的描述信息包括了类型为G-PCC编码点云的媒体文件的访问地址、类型为G-PCC编码点云的媒体文件的属性信息(封装类型,使用的编解码器等)等,同时还包括了对该类型为G-PCC编码点云的媒体文件解码处理所得数据的格式要求。对该类型为G-PCC编码点云的媒体文件解码处理后所得数据的格式要求包括了对反射率、材质ID、透明度、不透明度、帧编号、帧索引等属性数据的格式要求(数据类型及数据访问方式等)以及对其他媒体数据的格式要求等。显示引擎解析场景描述文件后,调用媒体接入函数API将类型为G-PCC编码点云的媒体文件的地址、反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的格式要求传递给媒体接入函数。然后,媒体接入函数根据显示引擎传递的类型为G-PCC编码点云的媒体文件地址信息,向服务器请求下载指定的类型为G-PCC编码点云的媒体文件或者从本地获取指定的类型为G-PCC编码点云的媒体文件。之后,媒体接入函数根据封装类型、编解码参数等媒体文件的描述信息为类型为G-PCC编码点云的媒体文件建立相应的管线将获取到的媒体数据从封装格式转换为场景描述文件中要求的格式,其中对于反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据也会在管线中转换为场景描述文件中规定的格式(数据类型和访问方式等)。随后管线将处理为场景描述文件规定格式的反射率、材质ID、透明度、不透明度、帧编号、帧索引等属性数据以及其他媒体数据存放到指定的缓存器中。最后,显示引擎在指定的缓存中以场景描述文件规定的格式读取反射率、材质ID、透明度、不透明度、帧编号、帧索引等属性数据以及其他媒体数据,以完成对三维场景的渲染和展示。

以下分别对支持类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的场景描述文件、显示引擎、媒体接入函数API、媒体接入函数、缓存API、缓存管理模块进行说明。

一、场景描述文件对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持

为了使场景描述文件能够正确地描述类型为G-PCC编码点云的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性,本申请一些实施例对使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的属性(mesh.primitives.attribute)内的语法元素进行了扩展,具体扩展包括以下至少一项:

扩展1、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的属性(mesh.primitives.attribute)中扩展反射率语法元素,并通过反射率语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的反射率信息。

在一些实施例中,所述反射率信息的访问器类型为标量(scalar)。

在一些实施例中,所述反射率信息的数据类型可以是浮点数(float)、无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

在一些实施例中,所述反射率语法元素可以为:_MPEG_ATTR_REFLECTANCE。

扩展2、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的属性(mesh.primitives.attribute)中扩展材质类型语法元素,并通过材质类型语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的材质ID。

在一些实施例中,所述材质ID的访问器类型为标量(scalar)。

在一些实施例中,所述材质ID的数据类型可以是无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

在一些实施例中,所述材质类型语法元素可以为:_MPEG_ATTR_MATERIAL_ID。

扩展3、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格的基元的属性(mesh.primitives.attribute)中扩展透明度语法元素,并通过透明度语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的透明度信息。

在一些实施例中,所述透明度信息的访问器类型为标量(scalar)。

在一些实施例中,所述透明度信息的数据类型可以是浮点数(float)、无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

扩展4、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格的基元的属性(mesh.primitives.attribute)中扩展不透明度语法元素,并通过不透明度语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的不透明度信息。

在一些实施例中,所述不透明度信息的访问器类型为标量(scalar)。

在一些实施例中,所述不透明度信息的数据类型可以是浮点数(float)、无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

扩展5、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格的基元的属性(mesh.primitives.attribute)中扩展帧编号语法元素,并通过帧编号语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的子帧编号信息。

在一些实施例中,所述子帧编号信息的访问器类型为标量(scalar)。

在一些实施例中,所述子帧编号信息的数据类型可以是无符号字节(unsignedbyte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

扩展6、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格的基元的属性(mesh.primitives.attribute)中扩展帧索引语法元素,并通过帧索引语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的子帧索引信息。

在一些实施例中,所述子帧索引信息的访问器类型为标量(scalar)。

在一些实施例中,所述子帧索引信息的数据类型可以是无符号字节(unsignedbyte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

当表示G-PCC编码点云中的点关联的反射率信息的反射率语法元素为:_MPEG_ATTR_TRANSPARENCY,表示G-PCC编码点云中的点关联的材质ID的材质类型语法元素为:_MPEG_ATTR_MATERIAL_ID,表示G-PCC编码点云中的点关联的透明度信息的透明度语法元素为:_MPEG_ATTR_OPCITY,表示G-PCC编码点云中的点关联的不透明度信息的不透明度语法元素为:_MPEG_ATTR_REFLECTANCE,表示G-PCC编码点云中的点关联的子帧编号信息的帧编号语法元素为:_MPEG_ATTR_FRAME_NUMBER,表示G-PCC编码点云中的点关联的子帧索引信息的帧索引语法元素为:_MPEG_ATTR_FRAME_INDEX,则基于上述扩展1~扩展6对场景描述文件进行扩展后,使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的属性(mesh.primitives.attributes)中的语法元素的定义如下表12所示:

表12

参照图9所示,图9为基于上述实施例中的扩展1~扩展4对使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的属性(mesh.primitives.attribute)内的语法元素进行扩展后的场景描述文件的结构示意图。场景描述文件中包括但不限于以下模块:MPEG媒体(MPEG_media)901,场景描述模块(scene)902、节点描述模块(node)903、网格描述模块(mesh)904、访问器描述模块(accessor)905、缓存切片描述模块(bufferView)906、缓存器描述模块(buffer)907、相机描述模块(camera)908、材质描述模块(material)909、纹理描述模块(texture)910、采样器描述模块(sampler)911、纹理贴图描述模块(image)912、蒙皮描述模块(skin)913以及动画描述模块(animation)914。其中,网格描述模块的基元的属性(mesh.primitives.attribute)包括扩展的用于表示媒体文件的顶点关联的反射率信息的反射率语法元素9041、用于表示媒体文件的顶点关联的材质ID的材质类型语法元素9042、用于表示媒体文件的顶点关联的透明度信息的透明度语法元素9043以及用于表示媒体文件的顶点关联的透明度信息的透明度语法元素9044。图9所示场景描述文件中的其它模块的作用、访问器类型、数据类型等信息与在图2或图3所示场景描述文件中类似,在此不再赘述。

为了使场景描述文件能够正确地描述类型为G-PCC编码点云的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性,本申请另一些实施例在场景描述文件的网格描述模块的基元的扩展列表(mesh.primitives.extensions)内扩展了扩展属性数组,并对扩展属性数组内的语法元素进行了扩展。在扩展属性数组内扩展的语法元素包括以下至少一个:

扩展1、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的扩展列表(mesh.primitives.extensions)的扩展属性数组中扩展反射率语法元素,并通过反射率语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的反射率信息。

在一些实施例中,所述反射率信息的访问器类型为标量(scalar)。

在一些实施例中,所述反射率信息的数据类型可以是浮点数(float)、无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

在一些实施例中,所述反射率语法元素可以为:_MPEG_ATTR_REFLECTANCE。

扩展2、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的扩展列表(mesh.primitives.extensions)的扩展属性数组中扩展材质类型语法元素,并通过材质类型语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的材质ID。

在一些实施例中,所述材质ID的访问器类型为标量(scalar)。

在一些实施例中,所述材质ID的数据类型可以是无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

在一些实施例中,所述材质类型语法元素可以为:_MPEG_ATTR_MATERIAL_ID。

扩展3、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的扩展列表(mesh.primitives.extensions)的扩展属性数组中扩展透明度语法元素,并通过透明度语法元素描述类型为G-PCC编码点云的媒体文件中的点关联的透明度信息。

在一些实施例中,所述透明度信息的访问器类型为标量(scalar)。

在一些实施例中,所述透明度信息的数据类型可以是浮点数(float)、无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

扩展4、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的扩展列表(mesh.primitives.extensions)的扩展属性数组中扩展不透明度语法元素,并通过不透明度语法元素描述类型为G-PCC编码点云的媒体文件中的点关联的不透明度信息。

在一些实施例中,所述不透明度信息的访问器类型为标量(scalar)。

在一些实施例中,所述不透明度信息的数据类型可以是浮点数(float)、无符号字节(unsigned byte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

扩展5、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的扩展列表(mesh.primitives.extensions)的扩展属性数组中扩展帧编号语法元素,并通过帧编号语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的子帧编号信息。

在一些实施例中,所述子帧编号信息的访问器类型为标量(scalar)。

在一些实施例中,所述子帧编号信息的数据类型可以是无符号字节(unsignedbyte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

扩展6、在使用类型为G-PCC编码点云的媒体文件的数据作为实际数据的网格对应的网格描述模块的基元的扩展列表(mesh.primitives.extensions)的扩展属性数组中扩展帧索引语法元素,并通过帧索引语法元素及其值描述类型为G-PCC编码点云的媒体文件中的点关联的子帧索引信息。

在一些实施例中,所述子帧索引信息的访问器类型为标量(scalar)。

在一些实施例中,所述子帧索引信息的数据类型可以是无符号字节(unsignedbyte)、无符号短整型(unsigned short)、无符号整型(unsigned int)中的至少一个。

当表示G-PCC编码点云中的点关联的反射率信息的透明度语法元素为:_MPEG_ATTR_TRANSPARENCY,表示G-PCC编码点云中的点关联的材质ID的材质类型语法元素为:_MPEG_ATTR_MATERIAL_ID,表示G-PCC编码点云中的点关联的透明度信息的透明度语法元素为:_MPEG_ATTR_REFLECTANCE,表示G-PCC编码点云中的点关联的不透明度信息的不透明度语法元素为:_MPEG_ATTR_REFLECTANCE,表示G-PCC编码点云中的点关联的子帧编号信息的帧编号语法元素为:_MPEG_ATTR_FRAME_NUMBER,表示G-PCC编码点云中的点关联的子帧索引信息的帧索引语法元素为:_MPEG_ATTR_FRAME_INDEX,网格描述模块的基元的扩展数组的扩展属性数组的语法元素名称为:MPEG_primitive_MEDIA_ATTR,则基于上述扩展1~扩展6对场景描述文件进行扩展后,网格描述模块的基元的扩展数组的扩展属性数组(mesh.primitives.extensions.MPEG_primitive_MEDIA_ATTR)中的语法元素的定义如下表13所示:

表13

参照图10所示,图10为基于上述实施例对网格描述模块的基元的属性(mesh.primitives.attribute)内的语法元素进行扩展后的场景描述文件的结构示意图。场景描述文件中包括但不限于以下模块:MPEG媒体(MPEG_media)1001,场景描述模块(scene)1002、节点描述模块(node)1003、网格描述模块(mesh)1004、访问器描述模块(accessor)1005、缓存切片描述模块(bufferView)1006、缓存器描述模块(buffer)1007、相机描述模块(camera)1008、材质描述模块(material)1009、纹理描述模块(texture)1010、采样器描述模块(sampler)1011、纹理贴图描述模块(image)1012、蒙皮描述模块(skin)1013以及动画描述模块(animation)1014。其中,网格描述模块的基元的扩展数组(mesh.primitives.attribute)包括扩展属性数组(MPEG_primitive_MEDIA_ATTR)10040,所述扩展属性数组包括:用于表示G-PCC编码点云中的点关联的反射率信息的反射率语法元素10041、用于表示G-PCC编码点云中的点关联的材质ID的材质类型语法元素10042、用于表示G-PCC编码点云中的点关联的透明度信息的透明度语法元素10043以及用于表示G-PCC编码点云中的点关联的不透明度信息的不透明度语法元素10044。图10所示场景描述文件中的其它模块的作用、访问器类型、数据类型等信息与在图2或图3所示场景描述文件中类似,在此不再赘述。

示例性的,以下结合场景描述文件1对本申请实施例提供的支持对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度表示和访问的场景描述文件进行说明。

上述示例中的第1行与第189行的一对大括号之间包含了支持对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度表示和访问的场景描述文件1的主要内容,场景描述文件1包括:数字资产描述模块(asset)、扩展使用列表(extensionUsed)、MPEG媒体(MPEG_media)、场景声明(scene)、场景列表(scenes)、节点列表(nodes)、网格列表(meshes)、访问器列表(accessors)、缓存切片列表(bufferViews)、缓存器列表(buffers)。以下分别对各个部分的内容以及在解析角度各个部分内容所包含的信息进行说明。

1、数字资产描述模块(asset):数字资产描述模块为第2~4行。由于数字资产描述模块中的版本语法元素及其"version":"2.0",因此可以确定该场景描述文件是基于glTF2.0版本编写的,该版本也是场景描述标准的参考版本。从解析角度看,显示引擎可以根据数字资产描述模块确定应该选取哪种解析器来解析该场景描述文件。

2、扩展使用列表(extensionUsed):扩展使用列表为第6~13行。由于扩展使用列表包括:MPEG媒体(MPEG_media)、MPEG环形缓存器(MPEG_buffer_circular)、MPEG时变访问器(MPEG_accessor_timed)、反射率语法元素(_MPEG_ATTR_REFLECTANCE),材质类型语法元素(_MPEG_ATTR_MATERIAL_ID)以及透明度语法元素(_MPEG_ATTR_TRANSPARENCY)六个扩展,因此可以确定该场景描述文件中使用了该六种MPEG扩展。从解析角度看,显示引擎可以根据扩展使用列表的内容提前获知了后续解析所涉及的扩展项目包括:"MPEG_media"、"MPEG_buffer_circular"、"MPEG_accessor_timed"、"_MPEG_ATTR_REFLECTANCE","_MPEG_ATTR_MATERIAL_ID"以及"_MPEG_ATTR_TRANSPARENCY"。

3、MPEG媒体(MPEG_media):MPEG媒体为第15~37行。MPEG_media实现了对三维场景中包含的媒体文件的声明,并通过第24行的媒体类型语法元素及其"mimeType":"application/mp4"指出了媒体文件对应的封装文件的文件类型,通过第25行的统一资源标识符语法元素及其值"uri":"http://www.example.com/G-PCCexample.mp4"指出了媒体文件的访问地址,通过第28行的第一轨道索引语法元素及其值"track":"trackIndex=1"指出了媒体文件的轨道信息,通过第29行的编解码参数语法元素及其值"codecs":"gpc1"指出了媒体文件的编解码参数信息,通过第19行的媒体名称语法元素及其"name":"G-PCCexample"指出了媒体文件的名称,通过第20行的自动播放语法元素及其"autoplay":"true"指出了媒体文件应该自动播放,通过第21行的循环播放语法元素"loop"及其"true"指出了媒体文件应该循环播放。从解析角度看,显示引擎通过解析MPEG媒体(MPEG_media)可以确定待渲染三维场景中存在一个G-PCC编码点云,并且获知了访问及解析该G-PCC编码点云的方法。

4、场景声明(scene):场景声明为第39行。因为一个场景描述文件在理论上可以包括多个三维场景,所以上述场景描述文件中首先通过第39行的场景声明及其"scene":0,指出了基于该场景描述文件,后续处理和渲染的三维场景为场景列表中的第一个三维场景,即第42~46行的大括号所囊括的三维场景。从解析角度看,该部分内容明确了整个场景描述框架应该选取三维场景序列中的第一个三维场景进行后续处理和渲染。

5、场景列表(scenes):场景列表为第41~47行。场景列表(scenes)中仅包含了一个大括号,说明该场景描述文件中仅包含了一个三维场景,在大括号内通过第40至42行的节点索引语法元素及其"nodes":"0"指出了三维场景中仅包括一个对应节点描述模块的索引值为0的节点。从解析角度看,场景列表(scenes)明确了三维场景的总体结构,并且指向了更详细的下一层节点描述模块(node)。

6、节点列表(nodes):节点列表为第49~54行。节点列表中仅包含了一个大括号,说明该三维场景中只具有一个节点,且该节点与场景列表中的节点索引中的索引值0指向是同一个节点,两者通过索引的方式实现关联。在表示该节点的大括号中,通过第51行的节点名称语法元素及其值"name":"G-PCCexample_node"指出了该节点的名称为"G-PCCexample_node",通过第52行的网格索引语法元素及其值"mesh":"0"指出了节点上所挂载的内容为网格列表中的一个三维网格,这与下一层的网格描述模块(mesh)是对应的。从解析角度看,该部分内容指出了节点上所挂载的内容是一个三维网格,以及该三维网格的对应的网格描述模块的索引值为0。

7、网格列表(meshes):网格列表为第56~73行,网格列表中仅包含了一个大括号,说明该三维场景中只具有一个三维网格,且该三维网格与节点描述模块中的索引值为0的三维网格是同一网格。在表示该网格的大括号中,通过第55行的网格名称语法元素及其值"name":"G-PCCexample_mesh"指出了三维网格的名称为"G-PCCexample_mesh",该名称仅用作辨识标记,通过第59行的语法元素"primitives"指出了该三维网格具有基元,即primitives,分别通过第61行的语法元素"attributes"和第69行的语法元素"mode",指出了基元存在属性(attribute)和模式(mode)两类信息,分别通过第62~67行的位置语法元素及其值"position":0、颜色语法元素及其值"color_0":1、法向量语法元素及其值:"normal":2、反射率语法元素"_MPEG_ATTR_REFLECTANCE":3、材质类型语法元素及其值"MPEG_ATTR_MATERIAL_ID":4、透明度语法元素及其值"MPEG_ATTR_TRANSPARENCY":5指出了三维网格具有三维坐标、颜色、法向量、反射率、材质ID、透明度六种数据,且三维坐标、颜色、法向量、反射率、材质ID、透明度对应的访问器分别为访问器列表中的第一个访问器描述模块对应的访问器、第二个访问器描述模块对应的访问器、第三个访问器描述模块对应的访问器、第四个访问器描述模块对应的访问器、第五个访问器描述模块对应的访问器、第六个访问器描述模块对应的访问器。此外,还可以通过模式语法元素及其值"mode":0确定该三维网格的拓扑为散点结构。从解析角度看,该部分内容确定了三维网格具有的实际数据种类、访问三维网格具有的数据的访问器对应的访问器描述模块的索引值以及三维网格的拓扑类型。

8、缓存器列表(buffers):缓存器列表为第177~188行。缓存器列表中仅包含了一个大括号,说明了该三维场景的显示仅需要一个缓存器的支持。在该大括号中,使用了MPEG环形缓存器(MPEG_buffer_circular)这一扩展,说明了该缓存器是一个使用MPEG扩展进行改造的环形缓存器。通过第183行的媒体索引语法元素及其值"media":0说明了该环形缓存器中缓存的数据来源是前文中MPEG媒体(MPEG_media)这一扩展内声明的第一个媒体文件,通过第183行的第二轨道索引语法元素及其值"tracks":"#trackIndex=1"说明了缓存器中缓存的该环形缓存器中缓存的数据来源是该媒体文件的第一个码流轨道,在这里不对第一个码流轨道做限定,它可以是单轨道封装的媒体文件的唯一轨道,也可以是多轨道封装的媒体文件的参考轨道。此外,根据"MPEG_buffer_circular"中的环节数量语法元素及其"count":6还可以确定该环形缓存器具有六个存储环节,根据"MPEG_buffer_circular"中的第一字节长度语法元素及其值"byteLength":"34000",还可以确定该环形缓存器的容量为34000字节。从解析角度看,缓存器列表实现了将MPEG_media中声明的媒体文件对应到缓存器,或者说实现了缓存器对此前仅声明但未使用的媒体文件进行了引用。需要说明的是,在该处引用的媒体文件是未经处理的封装文件,封装文件需要经过媒体访问函数的处理,才能够提取出网格描述模块中提到过的三维坐标、颜色、法向量、反射率、材质ID、透明度等这样的可直接用于渲染的信息。

9、缓存切片列表(bufferViews):缓存切片列表为第144~175行。缓存切片列表中包含了六个并列的大括号,结合缓存器描述模块确定的仅有一个缓存器,说明在缓存切片描述模块中将缓存器缓存的数据分为了六个缓存切片。在第一个大括号中,首先指向了索引为0的缓存器,即缓存器描述模块中提到的唯一缓存器,然后通过第二字节长度语法元素及其值"byteLength":12000、偏移量语法元素及其值"byteOffset":0限定了该缓存切片的数据切片范围为前12000个字节。在第二个大括号中,同样指向了索引为0的缓存器,然后通过第二字节长度语法元素及其值"byteLength":3000、偏移量语法元素及其值"byteOffset":12001限定了该缓存切片的数据切片范围为第12001~15000个字节。在第三个大括号中,同样指向了索引为0的缓存器,然后通过第二字节长度语法元素及其值"byteLength":12000、偏移量语法元素及其值"byteOffset":15001限定了该缓存切片的数据切片范围为第15001~27000个字节。在第四个大括号中,同样指向了索引为0的缓存器,然后通过第二字节长度语法元素及其值"byteLength":4000、偏移量语法元素及其值"byteOffset":27001限定了该缓存切片的数据切片范围为第27001~31000个字节。在第五个大括号中,同样指向了索引为0的缓存器,然后通过第二字节长度语法元素及其值"byteLength":1000、偏移量语法元素及其值"byteOffset":31001限定了该缓存切片的数据切片范围为第31001~32000个字节。在第六个大括号中,同样指向了索引为0的缓存器,然后通过第二字节长度语法元素及其值"byteLength":2000、偏移量语法元素及其值"byteOffset":32001限定了该缓存切片的数据切片范围为第32001~34000个字节。

10、访问器列表(accessor):访问器列表为第75~142行。访问器列表与缓存切片列表的结构类似,都包含了六个并列的大括号,说明该三维场景的显示需要通过六个访问器进行媒体数据的访问。此外,六个大括号中都具有MPEG时变访问器(MPEG_accessor_timed)扩展,说明这六个访问器均为MPEG定义的时变访问器。在第一个大括号中,"MPEG_accessor_timed"扩展中的内容指向了索引值为0的bufferView。在第一个大括号中,还通过第77和78行的数据类型语法元素及其值"componentType":5126和访问器类型语法元素及其值"type":"VEC3"说明了,该访问器中缓存的数据格式是32位浮点数构成的三维向量,"count":1000说明了这样格式的数据在该访问器中有1000个,每个32位浮点数占用4个字节,因此该访问器包含了12000字节的数据,这与索引值为0的缓存切片描述模块中的规定是相同的。其余访问器的内容也是类似的,更换了缓存切片描述模块的索引值,且定义了相关的数据类型和访问器类型,根据这些参数计算出的数据字节长度是与缓存切片所属的缓存器的容量是一致的,第一个访问器描述模块描述的访问器,第二个访问器描述模块描述的访问器,第三个访问器描述模块描述的访问器分别为三维坐标、颜色、法向量对应的访问器。第四个访问器描述模块描述的访问器、第五个访问器描述模块描述的访问器、第六个访问器描述模块描述的访问器分别为反射率,材质ID和透明度对应的访问器,其访问器类型(type)和数据类型(componentType)参见上述实施例。从解析角度看,该部分内容完善了对渲染所需数据的完全定义,比如在缓存切片描述模块和缓存器描述模块中缺少的数据类型就在访问器描述模块中进行了定义。

示例性的,以下结合场景描述文件2对本申请实施例提供的支持对类型为G-PCC编码点云的媒体文件的反射率、材质ID、不透明度等扩展属性表示和访问的场景描述文件进行说明。

上述示例中的第1行与第191行的一对大括号之间包含了支持对类型为G-PCC编码点云的媒体文件的反射率、材质ID、不透明度表示和访问的场景描述文件2的主要内容,支持对类型为G-PCC编码点云的媒体文件的反射率、材质ID、不透明度表示和访问的场景描述文件2包括:数字资产描述模块(asset)、扩展使用列表(extensionUsed)、MPEG媒体(MPEG_media)、场景声明(scene)、场景列表(scenes)、节点列表(nodes)、网格列表(meshes)、访问器列表(accessors)、缓存切片列表(bufferViews)、缓存器列表(buffers)。以下对场景描述文件2与场景描述文件1的区别进行说明。

区别1、场景描述文件2与场景描述文件1中的扩展使用列表(extensionUsed)不同。场景描述文件2中的扩展使用列表为第6~14行。由于场景描述文件2的扩展使用列表包括:MPEG媒体(MPEG_media)、MPEG环形缓存器(MPEG_buffer_circular)、MPEG时变访问器(MPEG_accessor_timed)、属性扩展数组(MPEG_primitive_MEDIA_ATTR)四个扩展,因此可以确定该场景描述文件中使用了该四种MPEG扩展,相比于场景描述文件1,场景描述文件中未使用透明度语法元素(MPEG_ATTR_TRANSPARENCY)这一扩展,但使用了属性扩展数组(MPEG_primitive_MEDIA_ATTR)和不透明度语法元素(_MPEG_ATTR_OPACITY)这两个扩展。从解析角度看,显示引擎可以根据扩展使用列表的内容提前获知了后续解析所涉及的扩展项目包括:"MPEG_media"、"MPEG_buffer_circular"、"MPEG_accessor_timed"、"MPEG_primitive_MEDIA_ATTR"。

区别2、场景描述文件2与场景描述文件1中的网格列表(meshes)不同。场景描述文件2中的网格列表为第54~75行。不同之处在于,场景描述文件2通过属性中第60~62行的位置语法元素及其值"position":0、颜色语法元素及其值"color_0":1、法向量语法元素及其值:"normal":2指出了三维网格具有三维坐标、颜色、法向量三种原始数据,且三维坐标、颜色、法向量对应的访问器分别为访问器列表中的第一个访问器描述模块对应的访问器、第二个访问器描述模块对应的访问器、第三个访问器描述模块对应的访问器。基元(primitives)中除了包括属性信息(attributes)和模式信息(mode)外,还包括扩展数组(extensions)。扩展数组内包括属性扩展数组(MPEG_primitive_MEDIA_ATTR),场景描述文件2通过属性扩展数组中67~69行的材质类型语法元素及其值"MPEG_ATTR_MATERIAL_ID":4、透明度语法元素及其值"MPEG_ATTR_OPACITY":5指出了三维网格还具有反射率、材质ID、不透明度、三种扩展属性,且反射率、材质ID、不透明度对应的访问器分别为访问器列表中的第四个访问器描述模块对应的访问器、第五个访问器描述模块对应的访问器、第六个访问器描述模块对应的访问器。

除上述区别1和区别2以外,场景描述文件2中的数字资产描述模块(asset)、MPEG媒体(MPEG_media)、场景声明(scene)、场景列表(scenes)、节点列表(nodes)、网格列表(meshes)、访问器列表(accessors)、缓存切片列表(bufferViews)、缓存器列表(buffers)分别与场景描述文件1中的数字资产描述模块(asset)、MPEG媒体(MPEG_media)、场景声明(scene)、场景列表(scenes)、节点列表(nodes)、网格列表(meshes)、访问器列表(accessors)、缓存切片列表(bufferViews)、缓存器列表(buffers)的内容以及在解析角度所包含的信息相同,为避免赘述,此处不再详细说明。

二、显示引擎对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持

在沉浸式媒体的场景描述框架的工作流程中,显示引擎的主要功能包括:解析场景描述文件获取渲染三维场景的渲染方法;通过媒体接入函数API向媒体接入函数发送媒体访问指令和媒体数据处理指令;通过缓存API向缓存管理模块发送缓存管理指令;从缓存中取用经过处理的数据,并根据读取的数据完成三维场景及三维场景中物体的渲染与展示,因此支持包括反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件的显示引擎的功能包括:1、能够解析支持类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的场景描述文件;2、能够通过媒体接入函数API与媒体接入函数传递媒体访问指令和媒体数据处理指令;其中,媒体访问指令和媒体数据处理指令来自于对支持类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的场景描述文件的解析结果;3、能够通过缓存API向缓存管理模块发送缓存管理指令;4、能够从缓存中取用经过处理的类型为G-PCC编码点云的媒体文件中的反射率数据、材质ID数据、透明度数据、不透明度数据、帧编号数据以及帧索引数据等扩展属性的属性数据,并根据读取的数据完成三维场景及三维场景中的类型为G-PCC编码点云的媒体文件的渲染与展示。

三、媒体接入函数API对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持

在沉浸式媒体的场景描述框架的工作流程中,显示引擎可以通过解析场景描述文件获取渲染三维场景的方法,且需要将渲染三维场景的方法传递给媒体接入函数或基于渲染三维场景的方法向媒体接入函数发送指令,而将渲染三维场景的方法传递给媒体接入函数或基于渲染三维场景的方法向媒体接入函数发送指令的过程就是通过媒体接入函数API实现的。

在一些实施例中,显示引擎可以通过媒体接入函数API向媒体接入函数发送媒体访问指令或媒体数据处理指令。其中,显示引擎通过媒体接入函数API向媒体接入函数发送的媒体访问指令和媒体数据处理指令来自于对支持类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的场景描述文件的解析结果,媒体访问指令和媒体数据处理指令可以包括:类型为G-PCC编码点云的媒体文件的索引、类型为G-PCC编码点云的媒体文件的URL、类型为G-PCC编码点云的媒体文件的封装类型、类型为G-PCC编码点云的媒体文件使用的编解码器、对经过处理的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据及其他媒体数据的格式要求等。

在一些实施例中,媒体接入函数也可以通过媒体接入函数API向显示引擎请求媒体访问指令或媒体数据处理指令。

四、媒体接入函数对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持

在沉浸式媒体的场景描述框架的工作流程中,媒体接入函数接收到显示引擎通过媒体接入函数API下发的媒体访问指令或媒体数据处理指令后,会执行显示引擎通过媒体接入函数API下发的媒体访问指令或媒体数据处理指令。例如:获取包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件、为包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件建立合适的管线、将包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件处理为场景描述文件规定格式、将反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据写入指定的缓存器等。

在一些实施例中,媒体接入函数获取包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件,包括:使用网络传输服务从服务器中下载包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件。

在一些实施例中,媒体接入函数获取包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件,包括:从本地缓存空间中读取包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件。

媒体接入函数获取包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件后,需要对包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的类型为G-PCC编码点云的媒体文件进行处理。不同类型的媒体文件的处理过程存在较大差异,为了实现广泛的媒体类型支持,也考虑到媒体接入函数的工作效率,于是在媒体接入函数中设计了多种管线,在处理媒体文件的过程中只启用匹配于媒体类型的管线即可。

当包含反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的媒体文件的类型为G-PCC编码点云时,媒体接入函数需要为类型为G-PCC编码点云的媒体文件建立相应的管线,并通过建立的管线对类型为G-PCC编码点云的媒体文件进行解封装、解码、后处理等操作,以完成对类型为G-PCC编码点云的媒体文件的处理,将类型为G-PCC编码点云的媒体文件处理为可被显示引擎用于直接渲染的数据格式。

参照图11所示,图11为本申请一些实施例中G-PCC编码点云对应的管线的结构示意图。如图11所示,支持类型为G-PCC编码点云的媒体文件的管线1100包括:输入模块111、解封装模块112、几何解码器113、属性解码器114、第一后处理模块115、第二后处理模块116。

输入模块111用于接收G-PCC封装文件,并将G-PCC封装文件输入解封装模块112中。其中,G-PCC封装文件是对点云数据进行G-PCC编码得到的G-PCC码流进行封装得到的文件。由于G-PCC封装文件是以轨道的形式呈现的,所以输入模块111接收到的是G-PCC封装文件的轨道码流。此外,由G-PCC码流的封装规则可知,G-PCC封装文件可以是单轨道的,也可以是多轨道的,因此本申请实施例中输入模块111接收到的G-PCC封装文件可以是单轨道的,也可以是多轨道的,本申请实施例对此不做限定。

解封装模块112用于对输入模块111输入的G-PCC封装文件进行解封装获取G-PCC码流(包括几何信息码流和属性信息码流,将几何信息码流输入几何解码器113,以及将属性信息码流输入属性解码器114。需要说明的是,随着相关技术的发展,G-PCC码流还可能会增加其它信息的码流,当G-PCC码流还包括其它信息的码流时,解封装模块112对会G-PCC封装文件进行解封装获取其它信息的码流,并将其它信息的码流输入对应的解码器。

几何解码器113用于对解封装模块112输出的几何信息码流进行解码,获取点云的几何信息。其中,几何解码器113对几何信息码流进行解码的主要步骤包括:通过算术解码、八叉树合成、表面拟合、重建几何、逆坐标转换等,得到点云的几何信息。几何解码器113对几何信息码流进行解码的具体实现可以参照图8中几何解码模块81的工作流程,在此不再详细说明。

属性解码器114用于对解封装模块112输入的属性信息码流进行解码,获取点云的属性信息。其中,属性解码器114对几何信息码流进行解码的主要步骤包括:属性预测、提升和RAHT变换的逆运算等,得到属性信息码流。属性解码器114对属性信息码流进行解码的具体实现可以参照图8中属性解码模块82的工作流程,在此不再详细说明。

第一后处理模块115,用于对几何解码器113输出的几何信息进行处理。在完成几何信息码流的解码后,可以得到G-PCC编码点云中的点的几何信息,且在一些情况下得到的几何信息已能够被显示引擎直接使用的,但是由于场景描述框架不对显示引擎进行过多的限制或对其进行专门的定义,所以可能会出现种类繁多的显示引擎。这些不同的显示引擎对输入数据的要求可能存在不同,所以在完成几何信息码流的解码后,增添了第一后处理模块115,从而保证管线的输出的几何信息对于任何显示引擎都是可用的。在一些实施例中,第一后处理模块115对几何信息进行处理包括:对几何信息进行格式转换。

第二后处理模块116,用于对属性解码器114输出的属性信息进行处理。在完成属性信息码流的解码后,可以得到G-PCC编码点云中的点的属性信息,且在一些情况下属性信息已能够被显示引擎直接使用的,但是由于场景描述框架不对显示引擎进行过多的限制或对其进行专门的定义,所以可能会出现种类繁多的显示引擎。这些不同的显示引擎对输入数据的要求可能存在不同,所以在完成属性信息码流的解码后,增添了第二后处理模块116,从而保证管线的输出的属性信息对于任何显示引擎都是可用的。在一些实施例中,第一后处理模块115对几何信息进行处理包括:对属性信息进行格式转换。

最后,第一后处理模块115输出的处理后的几何信息和第二后处理模块116输出的处理后的属性信息写入缓存器117,以便显示引擎118根据需要从缓存器中读取几何信息和属性信息,以及根据读取的几何信息和属性信息渲染并展示三维场景中的G-PCC编码点云。

承上所述,管线的输出就是转换为场景描述文件中规定格式的类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据和其他媒体数据,之后需要将这些处理好的数据存放到指定的缓存中,该缓存可以由显示引擎通过缓存API调用缓存管理模块分配,如果显示引擎没有分配相应缓存,也可以由媒体接入函数通过缓存API调用缓存管理模块分配。

五、缓存API对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持

媒体接入函数通过管线完成类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据和其他媒体数据的处理后,媒体接入函数还需要将经过处理的数据需要以规范的排列结构交付给显示引擎,这需要将经过处理的数据正确地写入缓存中,该工作由缓存管理模块完成,但是缓存管理模块需要通过缓存API从媒体接入函数或显示引擎获取缓存管理指令。

在一些实施例中,媒体接入函数可以通过缓存API向缓存管理模块发送缓存管理指令。其中,所述缓存管理指令为显示引擎通过媒体接入函数API向媒体接入函数发送的缓存管理指令。

在一些实施例中,显示引擎可以通过缓存API向缓存管理模块发送缓存管理指令。

即,缓存管理模块可以通过缓存API与媒体接入函数进行通信,也可以通过缓存API与显示引擎进行通信,且与媒体接入函数或显示引擎进行通信的目的都是实现缓存的管理。当缓存管理模块通过缓存API与媒体接入函数进行通信时,需要显示引擎将缓存管理指令先通过媒体接入函数API发送给媒体接入函数,媒体接入函数再通过缓存API将缓存管理指令通过缓存API发送给缓存管理模块;当缓存管理模块通过缓存API与显示引擎通信时,只需要显示引擎根据场景描述文件中解析出来的缓存管理信息生成缓存管理指令,并通过缓存API发送给缓存管理模块即可。

在一些实施例中,缓存管理指令可以包括:开辟缓存的指令、更新缓存的指令、释放缓存的指令中的一个或多个。

六、缓存管理模块对类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的支持

在沉浸式媒体的场景描述框架的工作流程中,媒体接入函数通过管线完成了类型为G-PCC编码点云的媒体文件的反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据和其他媒体数据的处理后,经过处理的数据需要以规范的排列结构交付给显示引擎,这需要将经过处理的数据正确地缓存在缓存器中,该工作由缓存管理模块负责。

缓存管理模块实现了缓存的开辟、更新、释放等管理操作,操作的指令通过缓存API接收。缓存管理的规则在场景描述文件中进行了记录,并通过显示引擎进行解析,最终由显示引擎或媒体接入函数下达给了缓存管理模块。当媒体文件被媒体接入函数处理完毕后,需要缓存在合适的缓存中,再被显示引擎进行取用,缓存管理的作用就在于良好地管理这些缓存,使其与经过处理的媒体数据的格式相匹配,而不会打乱经过处理的媒体数据。媒体管理模块的具体设计方法应该以显示引擎以及媒体接入函数的设计为参照。

在上述内容的基础上,本申请一些实施例提供了一种场景描述文件的生成方法,参照图12所示,该场景描述文件的生成方法,包括如下步骤S121~S123:

S121、确定待渲染三维场景中的各个媒体文件的类型以及各个媒体文件中是否包含扩展属性的源数据。

其中,所述扩展属性包括:反射率(reflectance)、材质ID(material ID)、透明度(transparency)、不透明度(opacity)、帧编号(frame number)以及帧索引(frame index)中的至少一个。

本申请实施例中的媒体文件的类型可以包括:G-PCC编码点云、V-PCC编码点云、触觉媒体文件、6DoF视频、MIV视频等中的一种或多种,且同一种类型的媒体文件可以包任意数量个。例如:所述待渲染三维场景中可以仅包括一个类型为G-PCC编码点云的媒体文件。再例如:所述待渲染三维场景中可以包括一个类型为G-PCC编码点云的媒体文件以及一个类型为V-PCC编码点云的媒体文件。再例如:所述待渲染三维场景中可以包括两个类型为G-PCC编码点云的媒体文件以及一个类型为V-PCC编码点云的媒体文件。

本申请实施例中,扩展属性的源数据是指在视频编码和封装过程中对扩展属性的属性数据进行编码、封装等处理后得到的数据,本申请实施例中对扩展属性的源数据的数据格式、数据类型等不做限制,以对扩展属性的源数据进行解封装、解码等操作可以获取扩展属性的属性数据为准。

在上步骤S121中,若类型为G-PCC编码点云的目标媒体文件包含所述扩展属性的源数据,则执行如下步骤S122:

S122、在所述待渲染三维场景的场景描述文件的目标网格描述模块中添加所述扩展属性对应的扩展属性语法元素。

其中,所述目标网格描述模块为所述待渲染三维场景中的目标三维网格对应的网格描述模块,所述目标三维网格为网格数据包括所述扩展属性的属性数据的三维网格。即,目标三维网格为以所述扩展属性的属性数据为实际数据的三维网格。

本申请实施例中,扩展属性的属性数据是指G-PCC编码点云中的点关联的扩展属性的属性值。扩展属性的属性数据可以通过对扩展属性的源数据进行解封装、解码等处理获取。

需要说明的是,目标三维网格的网格数据中可以仅包括一种扩展属性的属性数据,也可以包括多种扩展属性的属性数据,当目标三维网格的网格数据中包括多种扩展属性的属性数据时,需要在目标网格描述模块中添加各种扩展属性分别对应的扩展属性语法元素。

例如:目标三维网格的网格数据仅包括反射率的属性数据,则仅需要在目标网格描述模块中添加反射率对应的扩展属性语法元素。

再例如:目标三维网格的网格数据包括材质ID的属性数据和不透明度的属性数据,则需要在目标网格描述模块中添加材质ID对应的扩展属性语法元素和不透明度对应的扩展属性语法元素。

需要说明的是,所述目标三维网格的网格数据中除了包含扩展属性的属性数据外,目标三维网格的网格数据中还可以坐标数据、颜色的属性数据、法向量的属性数据等,本申请实施例对此不做限定,以所述目标三维网格的网格数据中包括至少一种扩展属性的属性数据为准。

S123、将所述扩展属性语法元素的值设置为用于访问所述扩展属性的属性数据的目标访问器对应的目标访问器描述模块的索引值。

当目标三维网格的网格数据包括多种扩展属性的属性数据时,需要分别将各个扩展属性语法元素的值设置用于访问相应扩展属性的属性数据的访问器的访问器描述模块的索引值。

例如:目标三维网格的网格数据包括材质ID的属性数据和不透明度的属性数据,则需要在目标网格描述模块中添加材质ID对应的扩展属性语法元素和不透明度对应的扩展属性语法元素,并将材质ID对应的扩展属性语法元素的值设置为用于访问材质ID的属性数据的访问器对应的访问器描述模块的索引值,以及将不透明度对应的扩展属性语法元素的值设置为用于访问不透明度的属性数据的访问器对应的访问器描述模块的索引值。

本申请实施例提供的场景描述文件生成方法在生成待渲染三维场景的场景描述文件时,首先确定待渲染三维场景中的媒体文件的类型以及各个媒体文件中是否包含反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性的源数据,并在类型为G-PCC编码点云的目标媒体文件包含所述扩展属性的源数据时,在网格数据包括所述扩展属性的属性数据的目标三维网格对应的目标网格描述模块中添加所述扩展属性对应的扩展属性语法元素,以及将所述扩展属性语法元素的值设置为用于访问所述扩展属性的属性数据的目标访问器对应的目标访问器描述模块的索引值。由于本申请实施例可以在类型为G-PCC编码点云的目标媒体文件包含反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性的源数据时,在网格数据包括所述扩展属性的属性数据的目标三维网格对应的目标网格描述模块中添加所述扩展属性对应的扩展属性语法元素,以及将所述扩展属性语法元素的值设置为用于访问所述扩展属性的属性数据的目标访问器对应的目标访问器描述模块的索引值,因此本申请实施例可以实现在场景描述文件中表示类型为G-PCC编码点云的媒体文件中的反射率、材质ID、透明度、不透明度、帧编号、帧索引、帧索引、帧编码等扩展属性。

在一些实施例中,上述步骤S122(在所述待渲染三维场景的场景描述文件的目标网格描述模块中添加所述扩展属性对应的扩展属性语法元素),的实现方式包括如下步骤122a~122c:

步骤122a、在所述目标网格描述模块的基元(primitives)中添加扩展列表(extensions)。

步骤122b、在所述扩展列表(extensions)中添加扩展属性数组。

在一些实施例中,所述扩展属性数组可以为MPEG_primitive_MEDIA_ATTR。

需要说明的是,所述扩展属性数组还可以为其它名称,例如:MPEG_primitive_ATTR等,本申请实施例对此不做限定,后续以扩展属性数组为MPEG_primitive_MEDIA_ATTR为例进行说明。

步骤122c、在所述扩展属性数组(MPEG_primitive_MEDIA_ATTR)中添加所述扩展属性对应的扩展属性语法元素。

示例性的,基于上述步骤122a~122c提供的实现方式,当目标三维网格的网格数据包括反射率、材质ID以及透明度三个扩展属性的属性数据,且用于访问反射率、材质ID以及透明度的属性数据的访问器对应的访问器描述模块的索引值分别为3、4、5,则所述目标三维网格对应的目标网格描述模块可以如下所示:

其中,目标三维网格对应的网格描述模块基元(primitives)中包括扩展列表(extensions),所述扩展列表中又包括扩展属性数组(MPEG_primitive_MEDIA_ATTR),扩展属性数组中包括反射率对应的反射率语法元素(_MPEG_ATTR_REFLECTANCE)、材质ID对应的材质ID语法元素(_MPEG_ATTR_MATERIAL_ID)以及透明度对应的透明度语法元素(_MPEG_ATTR_TRANSPARENCY),且反射率语法元素、材质ID语法元素、透明度语法元素的值分别被设置为了用于访问反射率、材质ID以及透明度的属性数据的访问器对应的访问器描述模块的索引值。

在一些实施例中,上述步骤S122(在所述待渲染三维场景的场景描述文件的目标网格描述模块中添加所述扩展属性对应的扩展属性语法元素),包括:在所述目标网格描述模块的基元(primitives)的属性(attributes)中添加所述扩展属性对应的扩展属性语法元素。

示例性的,基于上述实现方式,当目标三维网格的网格数据包括材质ID和不透明度两个扩展属性的属性数据,且用于访问材质ID以及不透明度的属性数据的访问器对应的访问器描述模块的索引值分别为3和4,则目标三维网格对应的所述网格描述模块可以如下所示:

其中,目标三维网格对应的网格描述模块基元(primitives)的属性(attributes)中包括材质ID对应的材质ID语法元素(_MPEG_ATTR_MATERIAL_ID)和不透明度对应的不透明度语法元素(_MPEG_ATTR_OPACITY),且材质ID语法元素和不透明度语法元素的值分别被设置为用于访问材质ID和不透明度的属性数据的访问器对应的访问器描述模块的索引值。

在一些实施例中,在所述待渲染三维场景的场景描述文件的目标网格描述模块中添加所述扩展属性对应的扩展属性语法元素之前,所述方法还包括:根据所述目标三维网格的描述信息生成所述目标网格描述模块(mesh);将所述目标网格描述模块添加到所述场景描述文件的网格列表(meshes)中。

在一些实施例中,根据所述目标三维网格的描述信息生成所述目标网格描述模块,包括如下步骤a1~a4中的至少一项:

步骤a1、在所述目标网格描述模块中添加网格名称语法元素(name),并根据所述目标三维网格的名称设置所述网格名称语法元素的值。

例如:所述目标三维网格的名称为G-PCCexample_mesh,则将所述网格名称语法元素及其值设置为"name":"G-PCCexample_mesh"。

步骤a2、在所述目标网格描述模块中添加位置语法元素(position),并将所述位置语法元素的值设置为用于访问所述目标三维网格的坐标数据的访问器对应的访问器描述模块的索引值。

步骤a3、在所述目标网格描述模块中添加基础属性语法元素,并将所述基础属性语法元素的值设置为用于访问所述目标三维网格的基础属性的属性数据的访问器对应的访问器描述模块的索引值。其中,所述基础属性包括:法向量(normal)、切向量(tangent)、颜色(color)、纹理坐标(texcoord)、关节(joints)、权重(weights)中的至少一个。

步骤a4、在所述目标网格描述模块的基元(primitives)中添加模式语法元素(mode),并根据所述目标三维网格的拓扑结构类型设置所述模式语法元素的值。

在一些实施例中,在所述目标网格描述模块中添加位置语法元素和/或基础属性语法元素,包括:

在所述目标网格描述模块的基元(primitives)中添加扩展列表(extensions),在所述扩展列表(extensions)中添加目标扩展数组以及在所述目标扩展数组中添加所述位置语法元素和/或所述基础属性语法元素。

在一些实施例中,所述目标扩展数组可以为MPEG_primitve_G-PCC。

在一些实施例中,在所述目标扩展数组(MPEG_primitve_G-PCC)中添加所述位置语法元素和/或所述基础属性语法元素包括:基于第一语法元素集合中的语法元素,在所述目标扩展数组(MPEG_primitve_G-PCC)中添加所述位置语法元素和/或所述基础属性语法元素。其中,所述第一语法元素集合为ISO/IEC 23090-14MPEG-I场景描述标准中规定的场景描述文件的网格描述模块的基元的属性(primitives.attributes)中支持的语法元素组成的集合。

具体的,ISO/IEC 23090-14MPEG-I场景描述标准中规定的场景描述文件的网格描述模块的基元的属性支持的语法元素,包括:position、color_n、normal、tangent、texcoord、joints、weights,因此第一语法元素集合为:{position,color_n,normal,tangent,texcoord,joints,weights}。

示例性的,目标三维网格的网格数据包括坐标数据、颜色的属性数据以及透明度的属性数据,用于访问所述坐标数据的访问器对应的访问器描述模块的索引值为0,用于访问所述颜色的属性数据的访问器对应的访问器描述模块的索引值为1,用于访问所述透明度的属性数据的访问器对应的访问器描述模块的索引值为2,则基于上述实现方式生成的目标三维网格对应的目标网格描述模块可以如下所示:

在一些实施例中,在所述目标网格描述模块中添加位置语法元素和/或基础属性语法元素,包括:基于预设置的G-PCC编码点云对应的语法元素组成的第二语法元素集合,在所述目标网格描述模块中添加位置语法元素和/或基础属性语法元素。

示例性的,G-PCC编码点云对应的语法元素可以包括:G-PCC_position、G-PCC_color_n、G-PCC_normal、G-PCC_tangent、G-PCC_texcoord、G-PCC_joints、G-PCC_weights,相应的,第二语法元素集合为:{G-PCC_position、G-PCC_color_n、G-PCC_normal、G-PCC_tangent、G-PCC_texcoord、G-PCC_joints、G-PCC_weights}。

示例性的,目标三维网格的网格数据包括坐标数据、颜色的属性数据以及材质ID属性的属性数据,用于访问所述坐标数据的访问器对应的访问器描述模块的索引值为0,用于访问所述颜色的属性数据的访问器对应的访问器描述模块的索引值为1,用于访问所述材质ID的属性数据的访问器对应的访问器描述模块的索引值为2,则所述目标三维网格对应的目标网格描述模块可以如下所示:

在一些实施例中,在所述目标网格描述模块中添加位置语法元素和/或基础属性语法元素,包括:在所述网格描述模块的基元(primitives)的属性(attributes)中添加所述位置语法元素和/或所述基础属性语法元素。

在一些实施例中,在所述目标网格描述模块的基元(primitives)的属性(attributes)中添加所述位置语法元素和/或所述基础属性语法元素,包括:基于所述第一语法元素集合,在所述目标网格描述模块的基元(primitives)的属性(attributes)中添加所述位置语法元素和所述基础属性语法元素。

其中,所述第一语法元素集合为ISO/IEC 23090-14MPEG-I场景描述标准中规定的场景描述文件的网格描述模块的基元的属性中支持的语法元素组成的集合。

即,针对场景描述文件中的所有三维网格(不论是实际数据来自类型为G-PCC编码点云的媒体文件的三维网格,还是实际数据来自其它类型的媒体文件的三维网格),均基于ISO/IEC 23090-14MPEG-I场景描述标准中规定的场景描述文件的网格描述模块的基元的属性中支持的语法元素在对应的网格描述模块的基元(primitives)的属性(attributes)中添加语法元素。

示例性的,目标三维网格的网格数据包括坐标数据、颜色的属性数据以及不透明度的属性数据,用于访问所述坐标数据的访问器对应的访问器描述模块的索引值为1,用于访问所述颜色的属性数据的访问器对应的访问器描述模块的索引值为2,用于访问所述不透明度的属性数据的访问器对应的访问器描述模块的索引值为3,则所述目标三维网格对应的目标网格描述模块可以如下所示:

在一些实施例中,在网格描述模块的基元(primitives)的属性(attributes)中添加位置语法元素和/或基础属性语法元素,包括:基于第一语法元素集合中的语法元素,在第一网格描述模块的基元(primitives)的属性(attributes)中添加位置语法元素和/或基础属性语法元素,以及基于第二语法元素集合中的语法元素,在第二网格描述模块的基元的属性中添加位置语法元素和/或基础属性语法元素。

其中,所述第一网格描述模块为实际数据为类型为G-PCC编码点云的媒体文件的三维网格对应的网格描述模块,所述第二网格描述模块为实际数据不为类型为G-PCC编码点云的媒体文件的三维网格对应的网格描述模块。

在一些实施例中,所述第一语法元素集合为ISO/IEC 23090-14MPEG-I场景描述标准中规定的场景描述文件的网格描述模块的基元的属性中支持的语法元素组成的集合;所述第二语法元素集合为预设值的G-PCC编码点云对应的语法元素组成的集合。

即,在网格描述模块的基元的属性中添加对应的三维网格所包含的各个种类的数据对应的语法元素时,需要根据三维网格的实际数据是否属于类型为G-PCC的媒体文件,将场景描述文件中的三维网格分为两类,对于实际数据为类型为G-PCC编码点云的媒体文件的三维网格,基于第一语法元素集合中的语法元素,在对应的网格描述模块的基元的属性中添加其所包含的各个种类的数据对应的语法元素;对于实际数据不为类型为G-PCC编码点云的媒体文件的三维网格,基于第二语法元素集合中的语法元素在对应的网格描述模块的基元的属性中添加其所包含的各个种类的数据对应的语法元素。

示例性的,场景描述文件中包括两个三维网格,该两个三维网格的名称分别为V-PCCexample_mesh和G-PCCexample_mesh。其中,V-PCCexample_mesh的实际数据来自类型为V-PCC的媒体文件,包括三维坐标和颜色,用于访问V-PCCexample_mesh的坐标数据的访问器对应的访问器描述模块的索引值为0,用于访问V-PCCexample_mesh的颜色的属性数据的访问器对应的访问器描述模块的索引值为1,G-PCCexample_mesh的实际数据来自类型为G-PCC的媒体文件,包括三维坐标和颜色,用于访问G-PCCexample_mesh的坐标数据的访问器对应的访问器描述模块的索引值为2,用于访问G-PCCexample_mesh的颜色的属性数据的访问器对应的访问器描述模块的索引值为3,则所述场景描述文件中的网格列表(meshes)可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:

根据目标节点的描述信息生成所述目标节点对应的节点描述模块;将所述目标节点对应的节点描述模块添加到所述场景描述文件的节点列表中。其中,所述目标节点为所述待渲染三维场景中挂载所述目标三维网格的节点。

在一些实施例中,根据目标节点的描述信息生成所述目标节点对应的节点描述模块,包括如下步骤b1和/或步骤b2:

步骤b1、在所述目标节点对应的节点描述模块中添加节点名称语法元素(name),以及根据所述目标节点的名称设置所述节点名称语法元素(name)的值。

步骤b2、在所述目标节点对应的节点描述模块中添加网格索引列表(mesh),并在所述网格索引列表(mesh)中添加所述目标节点挂载的三维网格对应的网格描述模块的索引值。

由于目标节点为所述待渲染三维场景中挂载所述目标三维网格的节点,因此在所述目标节点对应的节点描述模块的网格索引列表中添加的索引值包括所述目标三维网格对应的目标网格描述模块的索引值。

例如:所述待渲染三维场景包括两个节点,该两个节点的名称分别为G-PCCexp_node1和G-PCCexp_node2,节点G-PCCexp_node1包含的三维网格对应的网格描述模块的索引值分别为0、1,节点G-PCCexp_node2包含的目标三维网格对应的目标网格描述模块,且目标网格描述模块的索引值为2,则该场景描述文件的节点列表(nodes)部分可以如下所示:

在上述示例中,待渲染三维场景对应的场景描述文件的节点列表(nodes)中包括两个节点描述模块,第一个节点描述模块为第n+2~n+5行的大括号所囊括的内容,第二个节点描述模块为第n+6~n+9行的大括号所囊括的内容。第一个节点描述模块中的节点名称语法元素(name)的值被设置为了对应节点的名称"G-PCCexp_node1",第一个节点描述模块中的网格索引语法元素(mesh)的值被设置为了节点G-PCCexp_node1挂载的三维网格的网格描述模块的索引值0和1,第二个节点描述模块(目标节点描述模块)中的节点名称语法元素(name)的值被设置为了对应节点的名称"G-PCCexp_node2",第二个节点描述模块中的网格索引语法元素(mesh)的值被设置为了节点G-PCCexp_node2挂载的目标三维网格的目标网格描述模块的索引值2。

在一些实施例中,所述场景描述文件的生成方法还包括:根据所述待渲染三维场景的描述信息生成所述待渲染三维场景对应的目标场景描述模块;将所述目标场景描述模块添加到所述场景描述文件的场景列表(scenes)中。

在一些实施例中,所述根据所述待渲染三维场景的描述信息生成所述待渲染三维场景对应的目标场景描述模块,包括:在所述目标场景描述模块中添加节点索引列表(nodes),并在所述节点索引列表(nodes)中添加所述待渲染三维场景中的节点对应的节点描述模块的索引值。

由于所述目标节点为所述待渲染三维场景中节点,因此在所述节点索引列表(nodes)中添加的索引值包括所述目标节点对应的节点描述模块的索引值。

例如:所述待渲染三维场景包括包括两个节点,且该两个节点对应的节点描述模块(node)的索引值分别为0和1,则在所述场景描述文件中添加的所述待渲染三维场景对应的目标场景描述模块可以如下所示:

在上述示例中,待渲染三维场景包括两个节点,且该两个节点对应的节点描述模块的索引值分别为0和1,因此在所述待渲染三维场景对应的目标场景描述模块的节点列表(nodes)中添加0和1两个索引值。

在一些实施例中,所述场景描述文件的生成方法还包括:根据所述目标媒体文件的描述信息生成所述目标媒体描述模块;将所述目标媒体描述模块添加到所述场景描述文件的MPEG媒体(MPEG_media)的媒体列表(media)中。

在一些实施例中,所述根据所述目标媒体文件的描述信息生成所述目标媒体描述模块,包括如下步骤c1~c7中的至少一项:

步骤c1、在所述目标媒体描述模块中添加媒体名称语法元素(name),并根据所述目标媒体文件的名称设置所述媒体名称语法元素的值。

例如:所述目标媒体描述模块中的媒体名称语法元素为"name",所述目标媒体文件的名称为"G-PCCexample",则在所述目标媒体描述模块中添加语法元素"name",并将媒体名称语法元素及其的值设置为"name":"G-PCCexample"。

步骤c2、在所述目标媒体描述模块中添加自动播放语法元素(autoplay),并根据所述目标媒体文件是否需要自动播放设置所述自动播放语法元素的值。

例如:所述目标媒体描述模块中的自动播放语法元素为"autoplay",所述目标媒体文件需要自动播放,则在所述目标媒体描述模块中添加语法元素"autoplay",并将自动播放语法元素及其值设置为"autoplay":ture。

再例如:所述目标媒体描述模块中的自动播放语法元素为"autoplay",所述目标媒体文件需要自动播放,则在所述目标媒体描述模块中添加语法元素"autoplay",并将自动播放语法元素及其值设置为"autoplay":false。

步骤c3、在所述目标媒体描述模块中循环播放语法元素(loop),并根据所述目标媒体文件是否需要循环播放设置所述循环播放语法元素的值。

例如:所述目标媒体描述模块中的自动播放语法元素为"loop",所述目标媒体文件需要循环播放,则在所述目标媒体描述模块中添加语法元素"loop",并将循环播放语法元素及其值设置为"loop":ture。

再例如:所述目标媒体描述模块中的自动播放语法元素为"loop",所述目标媒体文件需要循环播放,则在所述目标媒体描述模块中添加语法元素"loop",并将循环播放语法元素及其值设置为"loop":。

步骤c4、在所述目标媒体描述模块的可选项(alternatives)中添加媒体类型语法元素(mimeType),并将所述媒体类型语法元素的值设置为G-PCC编码点云对应的封装格式值。

在一些实施例中,G-PCC编码点云对应的封装格式为MP4,G-PCC编码点云对应的封装格式值为:application/mp4。

示例性的,当所述媒体类型语法元素为mimeType",所述G-PCC编码点云对应的封装格式值为"application/mp4",则在所述目标媒体描述模块的可选项中添加语法元素"mimeType",并将媒体类型语法元素及其值设置为"mimeType":"application/mp4"。

步骤c5、在所述目标媒体描述模块的可选项(alternatives)中添加统一资源标识符语法元素(uri),并将所述统一资源标识符语法元素的值设置为所述目标媒体文件的访问地址。

例如:所述统一资源标识符语法元素为"uri",所述目标媒体文件的访问地址为"http://www.exp.com/G-PCCexp.mp4",则在所述目标媒体描述模块的可选项中添加语法元素"uri",并将统一资源标识符语法元素及其值设置为"uri":"http://www.exp.com/G-PCCexp.mp4"。

步骤c6、在所述目标媒体描述模块的可选项(alternatives)的轨道数组(tracks)中添加第一轨道索引语法元素(track),并根据所述目标媒体文件的封装方式设置所述第一轨道索引语法元素(track)的值。

在一些实施例中,根据所述目标媒体文件的封装方式设置所述第一轨道索引语法元素(track)的值,包括:

当所述目标媒体文件为单轨道封装文件时,将所述第一轨道索引语法元素的值设置为所述目标媒体文件的码流轨道的索引值;

当所述目标媒体文件为多轨道封装文件时,将所述第一轨道索引语法元素的值设置为所述目标媒体文件的几何码流轨道的索引值。

即,当G-PCC编码点云作为MPEG_media.alternative.tracks中的一项被场景描述文件引用,并且被引用的项符合ISOBMFF中轨道(track)的规定时:对于单轨道封装的G-PCC编码点云,在MPEG媒体(MPEG_media)中引用的轨道是G-PCC码流轨道。例如,G-PCC数据被ISOBMFF封装成一条MIHS轨道,则在MPEG媒体(MPEG_media)中引用的轨道就是这条码流轨道。对于多轨道封装的G-PCC数据,在MPEG_media中引用的轨道为G-PCC几何码流轨道。

本申请实施例中,所述G-PCC编码点云的封装方式包括单轨道封装和多轨道封装。其中,单轨道封装是指将G-PCC编码点云的几何码流和属性码流封装在同一码流轨道的中的封装方式,而多个轨道封装是指将G-PCC编码点云的几何码流和属性码流封装在多个码流轨道的中的封装方式。

步骤c7、在所述目标媒体描述模块的可选项的轨道数组中添加编解码参数语法元素(codecs),并根据所述目标媒体文件的编码参数、所述目标媒体文件的码流的类型以及ISO/IEC 23090-18G-PCC数据传输标准设置所述编解码参数语法元素的值。

例如:ISO/IEC 23090-18G-PCC数据传输标准规定,在G-PCC编码点云采用DASH封装时,当MPD文件中使用G-PCC预选信令时,预选信令的“codecs”属性应设置为'gpc1',表示预选媒体是基于几何的点云;当G-PCC容器中存在多个G-PCC Tile轨道时,Main G-PCCAdaptation Set的“codecs”属性应被设置为'gpcb'或'gpeb',表示适配集包含G-PCC Tile基本轨道数据。当Tile Component Adaptation Sets只向单个G-PCC组件数据发送信号时,Main G-PCC adaptivesset的“codecs”属性应被设置为'gpcb'。当Tile ComponentAdaptation Sets向所有G-PCC组件数据发送信号时,Main G-PCC Adaptation Set的“codecs”属性应被设置为'gpeb'。当MPD文件中使用G-PCC Tile预选信令时,预选信令的“codecs”属性应设置为'gpt1',表示预选媒体是基于几何的点云碎片,则可以在G-PCC编码点云采用DASH封装且MPD文件中使用G-PCC预选信令时,将所述目标媒体描述模块的"alternatives"的"tracks"中的"codecs"的值设置为'gpc1'。

示例性的,当所述待渲染三维场景中的媒体文件仅包括一个类型为G-PCC编码点云的媒体文件(目标媒体文件)、G-PCC编码点云对应的封装格式值为"application/mp4",所述目标媒体文件的名称为"G-PCCexample"、所述目标媒体文件自动播放且循环播放、所述目标媒体文件的访问地址为:http://www.exp.com/G-PCCexp.mp4、所述目标媒体文件为单轨道封装文件且所述目标媒体文件为的码流轨道的索引值为1、所述目标媒体文件采用DASH封装且MPD文件中使用G-PCC预选信令时,所述目标媒体文件对应的目标媒体描述模块可以如下所示:

在所述待渲染三维场景的场景描述文件的MPEG媒体(MPEG_media)的媒体列表(media)中添加所述目标媒体描述模块之后,所述场景描述文件的MPEG媒体可以如下所示:

在一些实施例中,所述待渲染三维场景中还可以包括多个媒体文件,且多个媒体文件中的一个或多个媒体文件的类型为G-PCC编码点云,在生成所述场景描述文件时,需要根据上述实施例添加类型为G-PCC编码点云的媒体文件对应的媒体描述模块,以及根据其它类型的媒体文件场景描述文件生成方式添加其它类型的媒体文件对应的媒体描述模块。

示例性的,当所述待渲染三维场景中的媒体文件包括一个类型为G-PCC编码点云的目标媒体文件以及一个触觉媒体文件,所述G-PCC编码点云对应的封装格式值为"application/mp4"、所述目标媒体文件的名称为"G-PCCexample"、所述目标媒体文件自动播放且循环播放、所述目标媒体文件的访问地址为"uri":http://www.exp.com/G-PCCexp.mp4、所述目标媒体文件为单轨道封装文件,被引用的项符合ISOBMFF中轨道(track)的规定,且所述目标媒体文件的码流轨道的索引值为1、所述目标媒体文件用DASH封装且MPD文件中使用G-PCC预选信令,则所述场景描述文件的MPEG媒体可以如下所示:

在上述示例中,MPEG媒体的媒体列表(media)中包括两个大括号,第一个大括号(第n+2~n+18行)囊括了类型为G-PCC编码点云的目标媒体文件对应的目标媒体描述模块,第二个大括号(第n+19~n+35行)囊括了触觉媒体文件对应的媒体描述模块。

在一些实施例中,所述场景描述文件的生成方法还包括:根据目标访问器的描述信息生成所述目标访问器对应的目标访问器描述模块,将所述目标访问器描述模块添加到所述场景描述文件的访问器列表(accessors)中。其中,所述目标访问器为用于访问所述扩展属性的属性数据的访问器。

在一些实施例中,根据所述目标访问器的描述信息生成所述目标访问器对应的目标访问器描述模块,包括如下步骤d1~d7中的至少一项:

步骤d1、在所述目标访问器描述模块中添加数据类型语法元素(componentType),并根据目标访问器所访问的数据的类型设置所述数据类型语法元素的值。

由于目标访问器所访问的数据为所述扩展属性的属性数据,因此根据目标访问器所访问的数据的类型设置对应的所述数据类型语法元素的值即为根据所述扩展属性的属性数据的数据类型设置所述数据类型语法元素的值。

例如:目标访问器所访问的数据的数据类型为5126,则将所述目标访问器描述模块中的数据类型语法元素及其值设置为:"componentType":5126。

再例如:目标访问器所访问的数据为反射率的属性数据(目标访问器为用于访问反射率的属性数据),则将所述目标访问器描述模块中的数据类型语法元素(componentType)的设置为反射率的属性数据的数据类型对应的值。

步骤d2、在所述目标访问器描述模块中添加访问器类型语法元素(type),并根据所述目标访问器的类型设置所述访问器类型语法元素的值。

例如:目标访问器访问的访问器类型为三维向量,则将所述目标访问器描述模块中的访问器类型语法元素(type)及其值设置为:"type":"VEC3"。

步骤d3、在所述目标访问器描述模块中添加数据数量语法元素(count),并根据目标访问器所访问的数据的数量设置所述数据数量语法元素的值。

例如:目标访问器访问所访问的数据的数量为1000,则将所述目标访问器描述模块中的数据数量语法元素(count)及其值设置为:"count":1000。

由于目标访问器所访问的数据为所述扩展属性的属性数据,因此根据目标访问器所访问的数据的数量设置所述数据数量语法元素的值即为根据所述扩展属性的属性数据的数量设置所述数据数量语法元素的值。

步骤d4、在所述目标访问器描述模块中添加第一缓存切片索引语法元素(bufferView),并将所述第一缓存切片索引语法元素(bufferView)的值设置为目标缓存切片对应的缓存切片描述模块的索引值。其中,所述目标缓存切片为用于缓存所述扩展属性的属性数据的缓存切片。

由于目标访问器为用于缓存所述扩展属性的属性数据的缓存器,所述目标缓存切片为用于缓存所述扩展属性的属性数据的缓存切片,因此所述目标缓存切片为所述目标访问器的缓存切片。此外,所述目标缓存切片中换出的数据可以能用于缓存所述目标媒体文件的其它解码数据。

例如:当缓存所述扩展属性的属性数据的缓存切片对应的缓存切片描述模块为场景描述文件的缓存切片列表(bufferViews)中的第四个缓存切片描述模块,则将所述目标访问器描述模块的MPEG时变访问器中的第一缓存切片索引语法元素及其值设置为:"bufferView":3。

步骤d5、在所述目标访问器描述模块中添加MPEG时变访问器(MPEG_accessor_timed)。

步骤d6、在所述MPEG时变访问器中添加第二缓存切片索引语法元素(bufferView),并将所述第二缓存切片索引语法元素(bufferView)的值设置为时变参数缓存切片对应的缓存切片描述模块的索引值。其中,所述时变参数缓存切片为用于缓存所述目标访问器的时变参数的缓存切片。

步骤d7、在所述MPEG时变访问器中添加时变语法元素(immutable),并根据对应的目标访问器内的语法元素的取值是否随时间变化设置所述时变语法元素的值。

在一些实施例中,当所述目标访问器内的语法元素的取值不随时间变化,则将所述目标访问器描述模块的MPEG时变访问器中的时变语法元素及其值设置为:"immutable":ture,当所述目标访问器内的语法元素的取值会随时间变化,则将所述目标访问器描述模块的MPEG时变访问器中的时变语法元素及其值设置为:"immutable":false。

示例性的,目标访问器所访问的数据的类型为5121,所述目标访问器的访问器类型为VEC2,所述目标访问器所访问的数据的数量为4000,缓存所述目标访问器所访问的数据的缓存切片对应的缓存切片描述模块的索引值为1,且所述目标访问器内的语法元素的取值不随时间变化,则在所述场景描述文件的访问器列表(accessors)中添加的所述目标访问器描述模块可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:根据目标缓存器的描述信息生成所述目标缓存器对应的缓存器描述模块(buffer),将所述目标缓存器对应的缓存器描述模块添加到所述场景描述文件的缓存器列表(buffers)中。其中,所述目标缓存器为用于缓存所述扩展属性的属性数据的缓存器。

由于所述扩展属性的属性数据属于目标媒体文件的解码数据,因此所述目标缓存器为用于缓存所述目标媒体文件的解码数据的缓存器中的一个或多个,且所述目标缓存器中除了用于缓存所述扩展属性的属性数据外,还可能用于缓存所述目标媒体文件的其它解码数据。

在一些实施例中,根据目标缓存器的描述信息生成所述目标缓存器对应的缓存器描述模块以下步骤e1~e5中的至少一项:

步骤e1、在所述目标缓存器描述模块中添加第一字节长度语法元素(byteLength),并根据所述目标缓存器的容量设置所述第一字节长度语法元素(byteLength)的值。

需要说明的是,虽然所述目标缓存器为用于缓存所述扩展属性的属性数据的缓存器,但所述目标缓存器中也可能会用于缓存有所述目标媒体文件的其它解码数据,因此所述目标缓存器的容量可能并不等于所述扩展属性的属性数据的数据量。

示例性的,当所述目标缓存器的容量为15000字节,则将所述目标缓存器描述模块中的第一字节长度语法元素及其设置为:"byteLenth":15000。

步骤e2、在所述目标缓存器描述模块中添加MPEG环形缓存器(MPEG_buffer_circular)。

步骤e3、在所述MPEG环形缓存器中添加环节数量语法元素(count),并根据目标缓存器的存储环节数量设置对应的所述环节数量语法元素(count)的值。

例如:所述目标缓存器的存储环节数量为5,则将所述MPEG环形缓存器中的环节数量语法元素及其值设置为:"count":5。

步骤e4、在所述MPEG环形缓存器中添加媒体索引语法元素(media),并根据所述目标媒体文件对应的目标媒体描述模块的索引值设置所述媒体索引语法元素(media)的值。

例如:所述目标媒体文件对应的目标媒体描述模块为所述场景描述文件的MPEG媒体的媒体列表中的第一个媒体描述模块(索引值为0),则将所述MPEG环形缓存器中的"media"及其值设置为:"media":0。

步骤e5、在所述MPEG环形缓存器中添加第二轨道索引语法元素(tracks),并根据所述目标缓存器所缓存的数据的源数据的轨道索引值设置所述第二轨道索引语法元素(tracks)的值。

需要说明的是,目标缓存器所缓存的数据的源数据包括所述扩展属性的源数据,还可能包括其它目标媒体文件中的其它数据的源数据,因此第二轨道索引语法元素的值可能仅包括所述扩展属性的源数据的轨道索引值,也可能包括所述扩展属性的源数据的轨道索引值,还包括目标媒体文件中的其它源数据的轨道索引值。

例如:所述MPEG环形缓存器缓存的数据所属的码流轨道的索引值为1,则可以将所述MPEG环形缓存器的描述模块中的第二轨道索引语法元素及其值设置为:"tracks":"#trackIndex=1"。

示例性的,所述缓存器的容量为9000字节,该缓存器的存储环节数量为3,该缓存器缓存的数据的源数据所属的媒体文件对应的媒体描述模块的索引值为1,所述MPEG环形缓存器缓存的数据的源数据的轨道索引值为1,则在所述场景描述文件的缓存器列表中添加的该缓存器对应的缓存器描述模块可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:根据目标缓存切片的描述信息生成所述目标缓存切片对应的目标缓存切片描述模块,将所述目标缓存切片描述模块添加到所述场景描述文件的缓存切片列表(bufferViews)中。其中,所述目标缓存切片为用于缓存所述裤扩展属性的属性数据的缓存切片。

由于目标访问器为用于缓存所述扩展属性的属性数据的缓存器,所述目标缓存切片为用于缓存所述扩展属性的属性数据的缓存切片,因此所述目标缓存切片为所述目标访问器的缓存切片。

在一些实施例中,在所述场景描述文件的缓存切片列表中添加所述目标缓存切片描述模块,包括如下步骤f1~f3中的至少一项:

步骤f1、在所述目标缓存切片对应的缓存切片描述模块中添加缓存器索引语法元素(buffer),并根据所述目标缓存器对应的缓存器描述模块的索引值所述缓存器索引语法元素(buffer)的值。

例如:所述目标缓存器对应的缓存器描述模块的索引值为2,则将所述目标缓存切片描述模块中的"buffer"及其值设置为:"buffer":2。

步骤f2、在所述目标缓存切片对应的缓存切片描述模块中添加第二字节长度语法元素(byteLength),并根据缓存切片的容量设置所述第二字节长度语法元素(byteLength)的值。

步骤f3、在所述目标缓存切片描述模块中添加偏移量语法元素(byteOffset),并根据对应缓存切片的缓存数据的偏移量设置所述偏移量语法元素的值。

例如:所述目标缓存切片的数据范围为[1,12000]时,则基于上述步骤b2和步骤b3将所述目标缓存切片描述模块中的第二字节长度语法元素及其值设置为:"byteLenth":12000,将所述目标缓存切片描述模块中的偏移量语法元素及其值设置为:"byteOffset":0。

再例如:所述目标缓存切片的数据范围为[12001,15000]时,则基于上述步骤b2和步骤b3将所述目标缓存切片描述模块中的第二字节长度语法元素及其值设置为:"byteLenth":3000,将所述目标缓存切片描述模块中的偏移量语法元素及其值设置为:"byteOffset":12000。

示例性的,所述目标缓存器对应的缓存器描述模块的索引值为1,该缓存器的容量为8000,且所述目标缓存器包括两个缓存切片,第一个缓存切片的容量为6000,偏移量为0,第二个缓存切片的容量为2000,偏移量为6000,则所述目标缓存器的缓存切片对应的缓存切片描述模块可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:

在所述场景描述文件中添加数字资产描述模块(asset),在所述数字资产描述模块中添加版本语法元素(version)以及根据所述场景描述文件的版本信息设置所述版本语法元素的值。

例如:在所述场景描述文件为基于glTF2.0版本编写场景描述文时,将所述版本语法元素的值设置为2.0。

示例性的,在所述场景描述文件添加的数字资产描述模块可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:

在所述场景描述文件中添加扩展使用列表(extensionsUsed),并在所述扩展使用列表中添加所述场景描述文件使用的MPEG对glTF2.0版本的场景描述文件的扩展项。

示例性的,场景描述文件中使用的MPEG扩展项包括:MPEG媒体(MPEG_media)、MPEG环形缓存器(MPEG_buffer_circular)、MPEG时变访问器(MPEG_accessor_timed)、反射率语法元素(_MPEG_ATTR_REFLECTANCE)、材质ID语法元素(_MPEG_ATTR_MATERIAL_ID)以及不透明度语法元素(_MPEG_ATTR_OPACITY),则在所述场景描述文件中添加的扩展使用列表可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:

在所述场景描述文件中添加场景声明(scene),并将所述场景声明的值设置为所述待渲染场景对应的场景描述模块的索引值。

示例性的,待渲染场景对应的场景描述模块的索引值为0,则在所述场景描述文件中添加场景声明可以如下所示:

本申请一些实施例还提供了一种场景描述文件的解析方法,参照图13所示,该场景描述文件的解析方法,包括如下步骤:S131~S133:

S131、获取待渲染三维场景的场景描述文件。

其中,所述待渲染三维场景中包括目标媒体文件;所述目标媒体文件的类型为G-PCC编码点云,所述目标媒体文件包括扩展属性的源数据,所述扩展属性包括:反射率、材质ID、透明度、不透明度、帧编号以及帧索引中的至少一个。

本申请实施例中的待渲染三维场景中可以包括一个或多个媒体文件,且当所述待渲染三维场景中包括多个媒体文件时,所述多个媒体文件中的一个或多个媒体文件可以为类型为G-PCC编码点云且包括扩展属性的源数据的目标媒体文件。当所述待渲染三维场景包括多个类型为G-PCC编码点云且包括扩展属性的源数据的目标媒体文件时,可以分别对各个目标媒体文件执行本申请实施例提供的场景描述文件的解析方法中的后续步骤。

S132、从所述场景描述文件的目标网格描述模块中获取所述扩展属性对应的扩展属性语法元素声明的索引值。

其中,所述目标网格描述模块为所述待渲染三维场景中的目标三维网格对应的网格描述模块,所述目标三维网格为网格数据包括所述扩展属性的属性数据的三维网格。

在一些实施例中,上述步骤S132(从所述场景描述文件的目标网格描述模块中获取所述扩展属性对应的扩展属性语法元素声明的索引值)包括:

从所述目标网格描述模块(mesh)的基元(primitives)的扩展列表(extensions)的扩展属性数组(MPEG_primitive_MEDIA_ATTR)中获取所述扩展属性对应的扩展属性语法元素声明的索引值。

示例性的,当目标网格描述模块如下所示:

则,可以从所述目标网格描述模块(mesh)的基元(primitives)的扩展列表(extensions)的扩展属性数组(MPEG_primitive_MEDIA_ATTR)中获取反射率对应的反射率语法元素(_MPEG_ATTR_REFLECTANCE)声明的索引值3、材质ID对应的材质ID语法元素(_MPEG_ATTR_MATERIAL_ID)声明的索引值4以及透明度对应的透明度语法元素(_MPEG_ATTR_TRANSPARENCY)声明的索引值5。

在一些实施例中,上述步骤S132(从所述场景描述文件的目标网格描述模块中获取所述扩展属性对应的扩展属性语法元素声明的索引值)包括:

从所述目标网格描述模块的基元(primitives)的属性(attributes)中获取所述扩展属性对应的扩展属性语法元素声明的索引值。

示例性的,当目标网格描述模块如下所示:

则,可以从所述目标网格描述模块的基元(primitives)的属性(attributes)中获取材质ID对应的材质ID语法元素(_MPEG_ATTR_MATERIAL_ID)声明的索引值3以及不透明度对应的不透明度语法元素(_MPEG_ATTR_OPACITY)声明的索引值4。

S133、根据所述扩展属性语法元素声明的索引值获取用于访问所述扩展属性的属性数据的目标访问器的描述信息。

在一些实施例中,上述步骤S133(根据所述扩展属性语法元素声明的索引值获取用于访问所述扩展属性的属性数据的目标访问器的描述信息),包括如下步骤1331和1332:

步骤1331、根据所述扩展属性语法元素声明的索引值从所述场景描述文件的访问器列表(accessors)中获取所述目标访问器对应的目标访问器描述模块。

例如:反射率语法元素声明的索引值为0,则获取场景描述文件的访问器列表中的第一个访问器描述模块作为用于访问反射率的属性数据的访问器对应的访问器描述模块。

再例如:透明度语法元素声明的索引值为3,则将场景描述文件的访问器列表中的第四个访问器描述模块作为用于访问透明度的属性数据的访问器对应的访问器描述模块。

步骤1332、根据所述目标访问器描述模块获取所述目标访问器的描述信息。

在一些实施例中,根据所述访问器对应的访问器描述模块获取所述访问器的描述信息,包括以下步骤g1~g7中的至少一项:

步骤g1、根据所述目标访问器描述模块中的数据类型语法元素(componentType)的值确定所述扩展属性的属性数据的数据类型。

需要说明的是,根据所述目标访问器描述模块中的数据类型语法元素的值可以确定所述目标访问器所访问的数据的类型,而目标访问器所访问的数据为所述扩展属性的属性数据,因此根据所述目标访问器描述模块中的数据类型语法元素的值可以确定所述扩展属性的属性数据的数据类型。

例如:所述目标访问器描述模块中的数据类型语法元素及其值为:"componentType":5126,则可以确定所述扩展属性的属性数据的数据类型为32位的浮点数(float)。

步骤g2、根据所述目标访问器描述模块中的访问器类型语法元素(type)的值确定所述目标访问器的类型。

例如:用于访问材质ID的属性数据的访问器对应的访问器描述模块中的访问器类型语法元素及其值为:"type":scalar,则可以确定用于访问材质ID的属性数据的访问器的类型为标量。

步骤g3、根据所述目标访问器描述模块中的数据数量语法元素(count)的值确定所述扩展属性的属性数据的数量。

例如:用于访问透明度的属性数据的访问器对应的访问器描述模块中的数据数量语法元素及其值为:"count":4000,则可以确定透明度的属性数据的数量为4000。

步骤g4、根据所述目标访问器描述模块中的第一缓存切片索引语法元素(bufferView)的值确定缓存所述扩展属性的属性数据的目标缓存切片对应的缓存切片描述模块。

例如:目标访问器描述模块的第一缓存切片索引语法元素及其值为"bufferView":1,则可以确定所述目标访问器的时变参数缓存于缓存切片列表(bufferViews)中的第二个缓存切片描述模块对应的缓存切片中。

步骤g5、根据所述目标访问器描述模块中是否包含MPEG时变访问器(MPEG_accessor_timed)确定所述目标访问器是否为基于MPEG扩展改造的时变访问器。

在一些实施例中,根据所述目标访问器描述模块中是否包含MPEG时变访问器(MPEG_accessor_timed)确定所述目标访问器是否为基于MPEG扩展改造的时变访问器,包括:若所述目标访问器描述模块中包含MPEG时变访问器,则确定所述目标访问器为基于MPEG扩展改造的时变访问器,而若所述目标访问器描述模块中不包含MPEG时变访问器,则确定所述目标访问器不为基于MPEG扩展改造的时变访问器。

步骤g6、根据所述目标访问器描述模块的MPEG时变访问器(MPEG_accessor_timed)中的第二缓存切片索引语法元素(bufferView)的值确定缓存所述目标访问器的时变参数的时变参数缓存切片对应的缓存切片描述模块。

需要说明的是,根据所述目标访问器描述模块的MPEG时变访问器中的第一缓存切片索引语法元素的值可以确定缓存所述目标访问器所访问的数据的缓存切片对应的缓存切片描述模块,而目标访问器所访问的数据为所述扩展属性的属性数据,因此根据所述目标访问器描述模块的MPEG时变访问器中的第一缓存切片索引语法元素的值可以确定缓存所述扩展属性的属性数据的目标缓存切片对应的目标缓存切片描述模块。

例如:用于访问所述目标三维网格的不透明度的属性数据的访问器对应的访问器描述模块的MPEG时变访问器中的第一缓存切片索引语法元素及其为:"bufferView":3,则可以确定所述目标三维网格的不透明度的属性数据缓存于缓存切片列表中的第四个缓存切片描述模块对应的缓存切片中。

步骤g7、根据所述访问器描述模块的MPEG时变访问器(MPEG_accessor_timed)中的时变语法元素(immutable)的值,确定访问器内的语法元素的取值是否随时间变化。

在一些实施例中,根据访问器描述模块的MPEG时变访问器中的时变语法元素(immutable)的值,确定访问器内的语法元素的取值是否随时间变化,包括:若所述访问器描述模块的MPEG时变访问器中的时变语法元素及其值为:"immutable":true,则确定所述访问器内的语法元素的取值不随时间变化,而若所述访问器描述模块的MPEG时变访问器中的时变语法元素及其值为:"immutable":false,则确定所述访问器内的语法元素的取值会随时间变化。

示例性的,用于访问反射率的属性数据的访问器对应的访问器描述模块如下所示:

则,根据所述目标访问器描述模块获取的该访问器的描述信息包括:反射率的属性数据的数据类型为5123;用于访问反射率的属性数据的访问器的类型为标量(SCALAR);反射率的属性数据的数量为1000;用于访问反射率的属性数据的访问器为基于MPEG扩展的改造时变访问器;反射率的属性数据缓存于缓存切片列表中的第二个缓存切片描述模块对应的缓存切片中;用于访问反射率的属性数据的访问器内的语法元素的取值不随时间变化。

本申请实施例提供的场景描述文件的解析方法在获取包括目标媒体文件的待渲染三维场景的场景描述文件之后,可以先从所述场景描述文件的目标网格描述模块中获取所述扩展属性对应的扩展属性语法元素声明的索引值,然后再根据所述扩展属性语法元素声明的索引值获取用于访问所述扩展属性的属性数据的目标访问器的描述信息。由于目标媒体文件为类型为G-PCC编码点云且包括扩展属性的源数据的媒体文件,而通过本申请实施例提供的场景描述文件的解析方法可以获取用于访问反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性的属性数据的目标访问器的描述信息,因此本申请实施例实现可以支持对场景描述文件中表示的反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性的属性数据的访问。

在一些实施例中,所述场景描述文件的解析方法还包括:根据所述目标网格描述模块获取所述目标三维网格的描述信息。

在一些实施例中,根据所述目标网格描述模块获取所述目标三维网格的描述信息包括如下步骤h1~h4中的至少一项:

步骤h1、根据所述目标网格描述模块中的网格名称语法元素(name)获取目标三维网格的名称。

步骤h2、根据所述目标网格描述模块中的位置语法元素(position)的值获取用于访问所述目标三维网格的坐标数据的访问器对应的访问器描述模块的索引值。

步骤h3、根据所述目标网格描述模块中的基础属性语法元素的值获取用于访问所述目标三维网格的网格数据中的基础属性的属性数据的访问器对应的访问器描述模块的索引值。其中,所述基础属性包括:法向量、切向量、颜色、纹理坐标、关节信息以及权重信息中的至少一个。

步骤h4、根据所述目标网格描述模块的基元(primitives)中的模式语法元素(mode)的值获取所述目标三维网格的拓扑结构的类型。

在一些实施例中,获取所述目标网格描述模块中的位置语法元素(position)的值和/或基础属性语法元素的值,包括:从所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的目标扩展数组(MPEG_primitve_G-PCC)中获取所述位置语法元素(position)的值和/或基础属性语法元素的值。

例如:所述目标网格描述模块的基元(primitives)的扩展列表(extensions)如下所示:

则,可以根据所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的目标扩展数组(MPEG_primitve_G-PCC)中的位置坐标语法元素(position)及其值,确定所述目标三维网格包括还位置坐标,且用于访问坐标数据的访问器对应的访问器描述模块为访问器列表中的第一个访问器,根据所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的目标扩展数组(MPEG_primitve_G-PCC)中的颜色语法元素(color_0),确定所述目标三维网格还包括颜色属性,且用于访问颜色的属性数据的访问器对应的访问器描述模块为访问器列表中的第二个访问器,以及根据所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的目标扩展数组(MPEG_primitve_G-PCC)中的法向量语法元素(normal),确定所述目标三维网格还包括法向量属性,且用于法向量的属性数据的访问器对应的访问器描述模块为访问器列表中的第三个访问器。

再例如:所述目标三维网格对应的网格描述模块的基元(primitives)的扩展列表(extensions)如下所示:

则,可以根据所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的目标扩展数组(MPEG_primitve_G-PCC)中的位置坐标语法元素(G-PCC_position)及其值,确定所述目标三维网格包括还位置坐标,且用于访问坐标数据的访问器对应的访问器描述模块为访问器列表中的第一个访问器,根据所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的目标扩展数组(MPEG_primitve_G-PCC)中的颜色语法元素(G-PCC_color_0),确定所述目标三维网格还包括颜色属性,且用于访问颜色的属性数据的访问器对应的访问器描述模块为访问器列表中的第二个访问器,以及根据所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的目标扩展数组(MPEG_primitve_G-PCC)中的法向量语法元素(G-PCC_normal),确定所述目标三维网格还包括法向量属性,且用于法向量的属性数据的访问器对应的访问器描述模块为访问器列表中的第三个访问器。

在一些实施例中,获取所述目标网格描述模块中的位置语法元素(position)的值和/或基础属性语法元素的值,包括:从所述目标网格描述模块的基元(primitives)的属性(attributes)中获取所述位置语法元素(position)的值和/或基础属性语法元素的值。

例如:所述目标三维网格对应的网格描述模块的基元(primitives)的属性(attributes)如下所示:

则,可以根据所述目标网格描述模块的基元(primitives)的属性(attributes)中的位置坐标语法元素(position)及其值,确定所述目标三维网格包括还位置坐标,且用于访问坐标数据的访问器对应的访问器描述模块为访问器列表中的第一个访问器,根据所述目标网格描述模块的基元(primitives)的属性(attributes)中的颜色语法元素(color_0),确定所述目标三维网格还包括颜色属性,且用于访问颜色的属性数据的访问器对应的访问器描述模块为访问器列表中的第二个访问器,以及根据所述目标网格描述模块的基元(primitives)的属性(attributes)中的法向量语法元素(normal),确定所述目标三维网格还包括法向量属性,且用于法向量的属性数据的访问器对应的访问器描述模块为访问器列表中的第三个访问器。

再例如:所述目标三维网格对应的网格描述模块的基元(primitives)的属性(attributes)如下所示:

则,可以根据所述目标网格描述模块的基元(primitives)的属性(attributes)中的位置坐标语法元素(G-PCC_position)及其值,确定所述目标三维网格包括还位置坐标,且用于访问坐标数据的访问器对应的访问器描述模块为访问器列表中的第一个访问器,根据所述目标网格描述模块的基元(primitives)的属性(attributes)中的颜色语法元素(G-PCC_color_0),确定所述目标三维网格还包括颜色属性,且用于访问颜色的属性数据的访问器对应的访问器描述模块为访问器列表中的第二个访问器,以及根据所述目标网格描述模块的基元(primitives)的属性(attributes)中的法向量语法元素(G-PCC_normal),确定所述目标三维网格还包括法向量属性,且用于法向量的属性数据的访问器对应的访问器描述模块为访问器列表中的第三个访问器。

在一些实施例中,根据目标网格描述模块中的模式语法元素(mode)的值获取所述目标三维网格的拓扑结构的类型,包括:当所述模式语法元素的值为0时,确定所述目标三维网格的拓扑结构的类型为散点,当所述模式语法元素的值为1时,确定所述目标三维网格的拓扑结构的类型为线,当所述模式语法元素的值为4时,确定所述目标三维网格的拓扑结构的类型为三角形。

示例性的,所述目标三维网格对应的目标网格描述模块如下所示:

则,根据目标网格描述模块获取的目标三维网格的描述信息包括:所述目标三维网格的名称为:G-PCCexample_mesh;所述目标三维网格的拓扑类型为散点;所述目标三维网格的网格数据包括坐标数据,该三维网格的网格数据包括颜色和法向量两种基础属性的属性数据,该三维网格的网格数据包括反射率、材质ID以及透明度三种扩展属性的属性数据;用于访问坐标数据、颜色的属性数据、法向量的属性数据、反射率的属性数据、材质ID的属性数据、透明度的属性数据的访问器对应的访问器描述模块依次为访问器列表(accessores)中的第一访问器描述模块至第六个访问器描述模块。

在一些实施例中,所述场景描述文件的解析方法还包括:从所述场景描述文件的MPEG媒体(MPEG_media)的媒体列表(media)中获取所述目标媒体文件对应的目标媒体描述模块;根据所述目标媒体描述模块获取所述目标媒体文件的描述信息。

示例性的,从所述场景描述文件的MPEG媒体(MPEG_media)的媒体列表(media)中获取的所述目标媒体文件对应的目标媒体描述模块可以如下所示:

在一些实施例中,根据所述目标媒体描述模块获取所述目标媒体文件的描述信息,包括如下步骤i1~i7中的至少一项:

步骤i1、根据所述目标媒体描述模块中的媒体名称语法元素(name)的值获取所述目标媒体文件的名称。

如上所示,所述目标媒体描述模块中的媒体名称语法元素及其值为:"name":"G-PCCexample",则可以确定所述目标媒体文件的名称为:G-PCCexample。

步骤i2、根据所述目标媒体描述模块中的自动播放语法元素(autoplay)的值确定所述目标媒体文件是否需要自动播放。

在一些实施例中,根据所述目标媒体描述模块中的自动播放语法元素(autoplay)的值确定所述目标媒体文件是否需要自动播放,包括:若所述目标媒体描述模块中的自动播放语法元素(autoplay)及其值为:"autoplay":true,则确定所述目标媒体文件需要自动播放;而若所述目标媒体描述模块中的自动播放语法元素(autoplay)及其值为:"autoplay":false,则确定所述目标媒体文件不需要自动播放。

步骤i3、根据所述目标媒体描述模块中的循环播放语法元素(loop)的值确定所述目标媒体文件是否需要循环播放。

在一些实施例中,根据所述目标媒体描述模块中的循环播放语法元素(loop)的值确定所述目标媒体文件是否需要循环播放,包括:若所述目标媒体描述模块中的循环播放语法元素(loop)及其值为:"loop":true,则确定所述目标媒体文件需要循环播放;而若所述目标媒体描述模块中的循环播放语法元素(loop)及其值为:"loop":false,则确定所述目标媒体文件不需要循环播放。

步骤i4、根据所述目标媒体描述模块的可选项(alternatives)中的媒体类型语法元素(mimeType)的值获取所述目标媒体文件的封装格式。

由于媒体文件的类型为G-PCC编码点云时,媒体文件对应的媒体描述模块中的媒体类型语法元素(mimeType)的值会被设置为G-PCC编码点云对应的封装格式值,且G-PCC编码点云对应的封装格式值可以为:"application/mp4",因此当G-PCC编码点云对应的封装格式值为:"application/mp4",可以获取所述目标媒体文件的封装格式为MP4。

步骤i5、根据所述目标媒体描述模块的可选项(alternatives)中的统一资源标识符语法元素(uri)的值获取所述目标媒体文件的访问地址。

例如:所述目标媒体描述模块的可选项(alternatives)中的统一资源标识符语法元素(uri)及其值为:"uri":"http://www.example.com/G-PCCexample.mp4",则可以确定所述目标媒体文件的访问地址为:http://www.example.com/G-PCCexample.mp4。

步骤i6、根据所述目标媒体描述模块的可选项(alternatives)的轨道数组(tracks)中的第一轨道索引语法元素(track)的值获取所述目标媒体文件的轨道信息。

在一些实施例中,根据所述目标媒体描述模块的可选项(alternatives)的轨道数组(tracks)中的第一轨道索引语法元素(track)的值获取所述目标媒体文件的轨道信息,包括:当所述目标媒体文件的封装文件为单轨道封装文件时,将所述第一轨道索引语法元素的值确定为所述目标媒体文件的码流轨道的索引值;当所述目标媒体文件为多轨道封装文件时,将所述第一轨道索引语法元素的值确定为所述目标媒体文件的几何码流轨道的索引值。

步骤i7、根据所述目标媒体描述模块的可选项(alternatives)的轨道数组(tracks)中的编解码参数语法元素(codecs)的值以及SO/IEC 23090-18G-PCC数据传输标准确定所述目标媒体文件的码流的类型和解码参数。

在一些实施例中,上步骤i7(根据所述目标媒体描述模块的可选项(alternatives)的轨道数组(tracks)中的编解码参数语法元素(codecs)的值以及SO/IEC23090-18G-PCC数据传输标准确定所述目标媒体文件的码流的类型和解码参数)包括如下步骤i71和i72:

步骤i71、根据所述目标媒体描述模块的可选项(alternatives)的轨道数组(tracks)中的编解码参数语法元素(codecs)的值以及SO/IEC 23090-18G-PCC数据传输标准确定所述目标媒体文件的码流的类型和编码参数。

ISO/IEC 23090-18G-PCC数据传输标准规定,在G-PCC编码点云采用DASH封装时,当MPD文件中使用G-PCC预选信令时,预选信令的codecs属性应设置为'gpc1',表示预选媒体是基于几何的点云;当G-PCC容器中存在多个G-PCC Tile轨道时,Main G-PCCAdaptation Set的“codecs”属性应被设置为'gpcb'或'gpeb',表示适配集包含G-PCC Tile基本轨道数据。当Tile Component Adaptation Sets只向单个G-PCC组件数据发送信号时,Main G-PCC adaptivesset的“codecs”属性应被设置为'gpcb'。当Tile ComponentAdaptation Sets向所有G-PCC组件数据发送信号时,Main G-PCC Adaptation Set的“codecs”属性应被设置为'gpeb'。当MPD文件中使用G-PCC Tile预选信令时,预选信令的“codecs”属性应设置为'gpt1',表示预选媒体是基于几何的点云碎片,则可以在G-PCC编码点云采用DASH封装且MPD文件中使用G-PCC预选信令时,将所述目标媒体描述模块的"alternatives"的"tracks"中的"codecs"的值设置为'gpc1'。因此根据所述目标媒体描述模块的可选项(alternatives)的轨道数组(tracks)中的编解码参数语法元素(codecs)的值以及SO/IEC 23090-18G-PCC数据传输标准可以确定所述目标媒体文件的封装方式和编码参数。

步骤i72、根据所述目标媒体文件的编码参数确定所述目标媒体文件的解码参数。

由于所述目标媒体文件的解码过程与所述目标媒体文件的编码过程互为逆操作,因此可以根据所述目标媒体文件的编码参数确定所述目标媒体文件的解码参数。

示例性的,当所述目标媒体文件对应的目标媒体描述模块如下所示:

则,根据所述目标媒体描述模块获取的所述目标媒体文件的描述信息包括:所述目标媒体文件的名称为:AAAA,所述目标媒体文件不需要自动播放,但需要循环播放;所述目标媒体文件的封装格式为MP4,所述目标媒体文件的访问地址为:http://www.bbbb.com/AAAA.mp4;所述目标媒体文件的参考轨道为索引值为0的码流轨道,所述目标媒体文件的封装/解封装方式为MP4,所述目标媒体文件的编解码参数为gpc1。

在一些实施例中,上述实施例提供的场景描述文件的解析方法还包括:

从所述场景描述文件的场景列表(scenes)中获取所述待渲染三维场景对应的目标场景描述模块(scene),以及根据所述目标场景描述模块获取所述待渲染三维场景的描述信息。

在一些实施例中,可以从所述场景描述文件中获取场景声明(scene)及其声明的索引值,并根据场景声明及其声明的索引值从所述场景描述文件的场景列表中获取所述待渲染三维场景对应的目标场景描述模块。

例如:场景声明及其声明的索引值为:"scene":0,则可以根据场景声明及其声明的索引值从所述场景描述文件的场景列表获取第一个场景描述模块作为所述待渲染三维场景对应的目标场景描述模块。

再例如:场景声明及其声明的索引值为:"scene":2,则可以根据场景声明及其声明的索引值从所述场景描述文件的场景列表获取第三个场景描述模块作为所述待渲染三维场景对应的目标场景描述模块。

在一些实施例中,根据所述目标场景描述模块获取所述待渲染三维场景的描述信息,包括:根据所述目标场景描述模块的节点索引列表(nodes)声明的索引值确定所述待渲染三维场景中的节点对应的节点描述模块的索引值。

示例性的,所述目标场景描述模块如下所示:

则,根据所述目标场景描述模块的节点索引列表(nodes)声明的索引值可以确定所述待渲染三维场景中包括两个节点,一个节点对应的节点描述模块的索引值为0(节点列表中的第一个节点描述模块),另一个节点对应的节点描述模块的索引值为1(节点列表中的第二个节点描述模块)。

在一些实施例中,在根据所述目标场景描述模块的节点索引列表(nodes)声明的索引值确定所述待渲染三维场景中的节点对应的节点描述模块的索引值之后,上述实施例提供的场景描述文件的解析方法还包括:

根据所述待渲染三维场景中的节点对应的节点描述模块的索引值,从所述场景描述文件的节点列表(nodes)中获取所述待渲染三维场景中的节点对应的节点描述模块,以及根据所述待渲染三维场景中的节点对应的节点描述模块,获取所述待渲染三维场景中的节点的描述信息。

例如:当所述目标场景描述模块的节点索引列表声明的索引值仅包括0,则从所述场景描述文件的节点列表中获取第一个节点描述模块作为所述待渲染三维场景中的节点对应的节点描述模块。

再例如:当所述目标场景描述模块的节点索引列表声明的索引值包括0和1,则从所述场景描述文件的节点列表中获取第一个节点描述模块和第二个节点描述模块作为所述待渲染三维场景中的节点对应的节点描述模块。

在一些实施例中,根据所述待渲染三维场景中的节点对应的节点描述模块,获取所述待渲染三维场景中的节点的描述信息,包括如下步骤j1和步骤j2中的至少一项:

步骤j1、根据所述待渲染三维场景中的节点对应的节点描述模块中的节点名称语法元素(name)的值,获取所述待渲染三维场景中的节点的名称。

步骤j2、根据所述待渲染三维场景中的节点对应的节点描述模块中的网格索引列表声明的索引值,确定所述待渲染三维场景中的节点挂载的三维网格对应的网格描述模块的索引值。

示例性的,当某一节点对应的节点描述模块如下所示:

则,基于上述步骤j1可以确定该节点的名称为:G-PCCexample_node,基于上步骤j2可以确定该节点挂载的三维网格对应的网格描述模块的索引值分别为0和1。

在一些实施例中,在确定所述待渲染三维场景中的节点挂载的三维网格对应的网格描述模块的索引值之后,上述实施例提供的场景描述文件的解析方法还包括:根据所述待渲染三维场景中的节点挂载的三维网格对应的网格描述模块的索引值,从所述场景描述文件的网格列表(meshes)中获取所述待渲染三维场景中的节点挂载的三维网格对应的网格描述模块;以及根据所述待渲染三维场景中的节点挂载的三维网格对应的网格描述模块,获取所述待渲染三维场景中的节点挂载的三维网格的描述信息。

例如:某一节点描述模块的网格索引列表声明的索引值仅包括0,则从所述场景描述文件的网格列表中获取第一个网格描述模块作为该节点描述模块对应的节点上挂载的三维网格对应的网格描述模块。

再例如:某一节点描述模块的网格索引列表声明的索引值包括1和2,则从所述场景描述文件的网格列表中获取第二个网格描述模块和第三个网格描述模块作为该节点描述模块对应的节点上挂载的三维网格对应的网格描述模块。

在一些实施例中,上述实施例提供场景描述文件的解析方法还包括:从所述场景描述文件的缓存器列表中获取目标缓存器对应的目标缓存器描述模块,以及根据所述目标缓存器描述模块获取所述目标缓存器的描述信息。其中,所述目标缓存器为用于缓存所述扩展属性的属性数据的缓存器。

在一些实施例中,可以获取用于缓存所述目标媒体文件的解码数据的缓存器对应的缓存器描述模块,并根据用于缓存所述目标媒体文件的解码数据的缓存器对应的缓存器描述模块获取用于缓存所述目标媒体文件的解码数据的缓存器的描述信息,以所述目标缓存器的描述信息。

在一些实施例中,从所述场景描述文件的缓存器列表中获取用于缓存某一媒体文件的解码数据的缓存器对应的缓存器描述模块的实现方式可以包括:获取所述场景描述文件的缓存器列表(buffers)中的各个缓存器描述模块中的媒体索引语法元素(media)的值,将所述媒体索引语法元素的值与所述媒体文件对应的媒体描述模块的索引值相同的缓存器描述模块确定为用于缓存该媒体文件的解码数据的缓存器对应的目标缓存器描述模块。

示例性的,所述目标媒体文件对应的媒体描述模块的索引值为0,则将所述媒体索引语法元素的值为0的缓存器描述模块确定为用于缓存该媒体文件的解码数据的缓存器对应的缓存器描述模块。

需要说明的是,用于缓存一个媒体文件的解码数据的缓存器的数量可以为一个也可以为多个,本申请实施例对此不做限制。

在一些实施例中,根据所述目标缓存器描述模块获取所述目标缓存器的描述信息包括以下步骤k1~k4中的至少一项:

步骤k1、根据所述目标缓存器描述模块中的第一字节长度语法元素(byteLength)的值,获取所述目标缓存器的容量。

例如:所述目标缓存器描述模块中的第一字节长度语法元素及其值为"byteLength":15000,则可以确定所述目标缓存器的容量为15000字节。

步骤k2、根据所述目标缓存器描述模块中是否包含MPEG环形缓存器(MPEG_buffer_circular)确定所述目标缓存器是否为基于MPEG扩展改造的环形缓存器。

在一些实施例中,根据所述目标缓存器描述模块中是否包含MPEG环形缓存器确定所述目标缓存器是否为基于MPEG扩展改造的环形缓存器,包括:若所述目标缓存器描述模块中包含MPEG环形缓存器确定所述目标缓存器为基于MPEG扩展改造的环形缓存器,而若所述目标缓存器描述模块中不包含MPEG环形缓存器确定所述目标缓存器不为基于MPEG扩展改造的环形缓存器。

步骤k3、根据所述目标缓存器描述模块的MPEG环形缓存器中的环节数量语法元素(count)的值,获取所述MPEG环形缓存器的存储环节的数量。

例如:所述目标缓存器描述模块的MPEG环形缓存器中的环节数量语法元素及其值为:"count":5,则可以确定所述MPEG环形缓存器包括5个存储环节。

步骤k4、根据所述目标缓存器描述模块的MPEG环形缓存器中的第二轨道索引语法元素(tracks)的值,获取所述目标缓存器所缓存的数据的源数据的轨道索引值。

示例性的,所述目标缓存器对应的缓存器描述模块如下所示:

则,根据该缓存器对应的缓存器描述模块可以获取该缓存器的描述信息包括:该缓存器的容量为8000字节;该缓存器为基于MPEG扩展改造的环形缓存器,环形缓存器的存储环节数量为5,环形缓存器缓存的数据来自于MPEG媒体中声明的第二个媒体文件,环形缓存器所缓存的数据的源数据的轨道索引值为1。

在一些实施例中,上述实施例提供场景描述文件的解析方法还包括:从所述场景描述文件的缓存切片列表中获取目标缓存切片对应的目标缓存切片描述模块;根据所述目标缓存切片描述模块获取所述目标缓存切片的描述信息。其中,所述目标缓存切片为用于缓存所述扩展属性的属性数据的缓存切片。

在一些实施例中,可以获取所述场景描述文件的缓存切片列表中的各个缓存切片描述模块,并根据所述缓存切片描述模块获取各个缓存切片的描述信息,以获取所述目标缓存切片的描述信息。

需要说明的是,所述目标缓存器的缓存切片的数量可以为一个或多个,本申请实施例对此不做限定。

在一些实施例中,根据所述目标缓存切片描述模块,获取所述目标缓存切片的描述信息,包括以下步骤l1和步骤l2中的至少一项:

步骤l1、根据所述目标缓存切片描述模块中的第二字节长度语法元素(byteLength)的值,获取所述目标缓存切片的容量。

例如:所述目标缓存切片对应的缓存切片描述模块中的第二字节长度语法元素及其值为:"byteLength":12000,则可以确定所述目标缓存器的该缓存切片的容量为12000字节。

步骤l2、根据所述目标缓存切片描述模块中的偏移量语法元素(byteOffset)的值,获取所述目标缓存切片的偏移量。

本申请实施例中,所述目标缓存切片的偏移量也是目标缓存切片缓存的数据在所述目标媒体文件的解码数据中的偏移量。

例如:所述目标缓存切片对应的目标缓存切片描述模块中的偏移量语法元素及其值为:"byteOffset":0,则可以确定所述目标缓存切片的偏移量为0字节。

示例性的,所述目标缓存切片对应的目标缓存切片描述模块如下所示:

则,根据所述目标缓存切片描述模块可以获取所述目标缓存切片的描述信息包括:所述目标缓存切片为缓存器列表中的第二缓存器描述模块对应的缓存器(目标缓存器)的缓存切片,所述目标缓存切片的容量为8000字节;所述目标缓存切片的偏移量为0,即所述目标缓存切片缓存的数据范围为前8000个字节。

在一些实施例中,所述场景描述文件的解析方法还包括:根据所述场景描述文件中的数字资产描述模块(asset)中的版本语法元素(version)及其值,确定所述场景描述文件的版本号。

例如:场景描述文件的数字资产如下所示:

则,可以确定该场景描述文件是基于glTF2.0版本编写的,场景描述文件的版本是场景描述标准的参考版本。

在一些实施例中,所述场景描述文件的解析方法还包括:根据所述场景描述文件中扩展使用列表(extensionUsed)获取所述场景描述文件使用的扩展项。

例如:场景描述文件的扩展使用列表(extensionUsed)如下所示:

则,可以获取所述场景描述文件使用的扩展项包括:MPEG媒体(MPEG_media)、MPEG环形缓存器(MPEG_buffer_circular)、MPEG时变访问器(MPEG_accessor_timed)、反射率语法元素(_MPEG_ATTR_REFLECTANCE),材质类型语法元素(_MPEG_ATTR_MATERIAL_ID)以及透明度语法元素(_MPEG_ATTR_TRANSPARENCY)六个。

本申请一些实施例还提供一种三维场景的渲染方法,该三维场景的渲染方法的执行主体为沉浸式媒体描述框架中的显示引擎,参照图14所示,该三维场景的渲染方法包括如下步骤:

S141、获取待渲染三维场景的场景描述文件。

其中,所述待渲染三维场景中包括目标媒体文件,所述目标媒体文件的类型为G-PCC编码点云,且所述目标媒体文件中包括扩展属性的源数据,所述扩展属性包括:反射率、材质ID、透明度、不透明度、帧编号以及帧索引中的至少一个。

在一些实施例中,获取待渲染三维场景的场景描述文件的实现方式包括:向媒体资源服务器发送用于请求所述待渲染三维场景的场景描述文件的请求信息,以及接收所述媒体资源服务器发送的携带有所述待渲染三维场景的场景描述文件的请求响应。

在另一些实施例中,获取待渲染三维场景的场景描述文件的实现方式包括:从指定缓存空间中读取所述待渲染三维场景的场景描述文件。

S142、根据所述场景描述文件获取所述目标媒体文件的描述信息。

在一些实施例中,获取所述目标媒体文件的描述信息,包括:从所述场景描述文件的MPEG媒体(MPEG_media)的媒体列表(media)中获取所述目标媒体文件对应的目标媒体描述模块,根据所述目标媒体描述模块获取所述目标媒体文件的描述信息。

在一些实施例中,所述目标媒体文件的描述信息包括:所述目标媒体文件的名称、所述目标媒体文件是否需要自动播放、所述目标媒体文件是否需要循环播放、所述目标媒体文件的封装格式、所述目标媒体文件的码流的类型、所述目标媒体文件的编码参数等中的一项或多项。根据所述目标媒体描述模块获取所述目标媒体文件的描述信息的实现方式可以参照上述场景描述文件的解析方法中解析所述目标媒体文件的媒体描述模块的实现方式,为避免赘述,此处不再详细说明。

S143、向媒体接入函数发送所述目标媒体文件的描述信息。

显示引擎向媒体接入函数发送所述目标媒体文件的描述信息后,媒体接入函数可以根据所述目标媒体文件的描述信息获取所述目标媒体文件,对所述目标媒体文件进行处理获取所述目标媒体文件的解码数据(包括所述扩展属性的属性数据),以及将所述扩展属性的属性数据写入目标缓存器。

在一些实施例中,显示引擎向媒体接入函数发送所述目标媒体文件的描述信息,包括:显示引擎可以通过媒体接入函数API向媒体接入函数发送所述目标媒体文件的描述信息。

在一些实施例中,显示引擎向媒体接入函数发送所述目标媒体文件的描述信息,包括:显示引擎向媒体接入函数发送携带有所述目标媒体文件的描述信息的媒体文件处理指令。

S144、从所述目标缓存器中读取所述扩展属性的属性数据。

即,从目标缓存器中读取经过媒体接入函数完备处理的、可以直接用于进行待渲染三维场景渲染的所述扩展属性的属性数据。

在一些实施例中,上述步骤S144(从所述目标缓存器中读取所述扩展属性的属性数据)包括:从所述场景描述文件中获取目标访问器的描述信息;根据所述目标访问器的描述信息创建所述目标访问器;通过所述目标访问器从所述目标缓存器中读取所述扩展属性的属性数据。其中,所述目标访问器为用于访问所述扩展属性的属性数据的访问器。

在一些实施例中,所述访问器的描述信息可以包括以下至少一项:

存储所述目标访问器所访问的数据的缓存切片对应的缓存切片描述模块的索引值、所述目标访问器所访问的数据的数据类型、所述目标访问器的类型、所述目标访问器所访问的数据的数量、所述目标访问器是否为基于MPEG扩展改造的时变访问器、存储所述目标访问器的时变参数的缓存切片对应的缓存切片描述模块的索引值、所述目标访问器的参数是否随时间变化。

由于所述目标访问器所访问的数据为所述扩展属性的属性数据,而存储所述扩展属性的属性数据的缓存切片为目标缓存切片,因此存储所述目标访问器所访问的数据的缓存切片对应的缓存切片描述模块的索引值即为所述目标缓存切片对应的所述目标缓存切片模块的索引值。

由于所述目标访问器所访问的数据为所述扩展属性的属性数据,因此所述目标访问器所访问的数据的数据类型和数据量即为所述扩展属性的属性数据的数据类型和数据量。

在一些实施例中,从所述场景描述文件中获取目标访问器的描述信息,包括:从所述场景描述文件的网格列表(meshes)的目标网格描述模块中获取所述扩展属性对应的扩展属性语法元素声明的索引值,根据所述扩展属性语法元素声明的索引值从所述场景描述文件的访问器列表中获取所述目标访问器的对应的目标访问器描述模块;根据所述目标访问器描述模块获取所述目标访问器的描述信息。其中,所述目标网格描述模块为所述待渲染三维场景中的目标三维网格对应的网格描述模块,所述目标三维网格为网格数据包括所述扩展属性的属性数据的三维网格。

在一些实施例中,从所述场景描述文件的网格列表(meshes)的目标网格描述模块中获取所述扩展属性对应的扩展属性语法元素声明的索引值,包括:从所述目标网格描述模块的基元(primitives)的扩展列表(extensions)的扩展属性数组(MPEG_primitive_MEDIA_ATTR)中获取所述扩展属性对应的扩展语法元素声明的索引值。

在另一些实施例中,从所述场景描述文件的网格列表(meshes)的目标网格描述模块中获取所述扩展属性对应的扩展属性语法元素声明的索引值,包括:从所述目标网格描述模块的基元(primitives)的属性(attributes)中获取所述扩展属性对应的扩展语法元素声明的索引值。

S145、基于所述扩展属性的属性数据对所述待渲染三维场景进行渲染。

本申请实施例提供的三维场景的渲染方法在获取待渲染三维场景的场景描述文件后,首先根据所述场景描述文件获取所述目标媒体文件的描述信息,并将向媒体接入函数发送所述目标媒体文件的描述信息,以使媒体接入函数根据所述目标媒体文件的描述信息获取扩展属性的属性数据,以及将所述扩展属性的属性数据写入目标缓存器,再从所述目标缓存器中读取所述扩展属性的属性数据,以及基于所述扩展属性的属性数据对所述待渲染三维场景进行渲染。由于在待渲染三维场景包括类型为G-PCC编码点云且包括反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的源数据的目标媒体文件时,本申请实施例提供的三维场景的渲染方法可以使显示引擎获取所述目标媒体文件的描述信息,将向媒体接入函数发送目标媒体文件的描述信息,并读取反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据以及基于反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据对所述待渲染三维场景进行渲染,因此本申请实施例可以使沉浸式媒体的场景描述框中的显示引擎支持类型为G-PCC编码点云的媒体文件中的反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性。

本申请一些实施例还提供一种媒体文件的处理方法,该媒体文件的处理方法的执行主体为沉浸式媒体描述框架中的媒体接入函数,参照图15所示,该媒体文件的处理方法包括如下步骤:

S151、接收显示引擎发送的目标媒体文件的描述信息、目标缓存器的描述信息、目标缓存切片的描述信息以及目标访问器的描述信息。

其中,所述目标媒体文件的类型为G-PCC编码点云,且所述目标媒体文件包括扩展属性的源数据,所述扩展属性包括:反射率、材质ID、透明度、不透明度、帧编号以及帧索引中的至少一个;所述目标缓存器为用于缓存所述扩展属性的属性数据的缓存器;所述目标缓存切片为用于缓存所述扩展属性的属性数据的缓存切片,所述目标访问器为用于访问所述扩展属性的属性数据的访问器。

在一些实施例中,所述目标媒体文件的描述信息可以包括以下至少一项:

所述目标媒体文件的名称、所述目标媒体文件的UIR、所述目标媒体文件是否需要自动播放、所述目标媒体文件是否需要循环播放、所述目标媒体文件的封装格式、所述目标媒体文件的码流的类型、所述目标媒体文件的编码参数。

在一些实施例中,所述目标缓存器的描述信息可以包括以下至少一项:

所述目标缓存器的容量、是否为基于MPEG扩展改造的环形缓存器、环形缓存器的存储环节数量、所述目标缓存器所缓存的数据的源数据的所属的媒体文件对应的媒体描述模块的索引值、所述目标所缓存的数据的源数据的轨道索引值。

由于所述目标缓存器为用于存储所述扩展属性的属性数据的缓存器,而所述扩展属性的源数据属于所述目标媒体文件,因此所述目标缓存器所缓存的数据的源数据的所属的媒体文件对应的媒体描述模块的索引值即为所述目标媒体文件对应的目标媒体描述模块的索引值。

在一些实施例中,所述目标缓存切片的描述信息可以包括以下至少一项:

所述目标缓存切片所属的缓存器对应的缓存器描述模块的索引值、所述目标缓存切片的容量以及所述目标缓存切片的偏移量。

由于所述目标缓存切片为用于存储所述扩展属性的属性数据的缓存器,所述目标缓存器为用于存储所述扩展属性的属性数据的缓存器,因此所述目标缓存切片所属的缓存器为所述目标缓存器,所述目标缓存切片所属的缓存器对应的缓存器描述模块的索引值即为所述目标缓存器对应的目标缓存器描述模块的索引值。

在一些实施例中,所述目标访问器的描述信息可以包括以下至少一项:

存储所述目标访问器所访问的数据的缓存切片对应的缓存切片描述模块(目标缓存切片描述模块)的索引值、所述目标访问器所访问的数据(所述扩展属性的属性数据)的数据类型、所述目标访问器的类型、所述目标访问器所访问的数据(所述扩展属性的属性数据)的数量、所述目标访问器是否为基于MPEG扩展改造的时变访问器、存储所述目标访问器的时变参数的缓存切片对应的缓存切片描述模块的索引值、所述目标访问器的参数是否随时间变化。

在一些实施例中,接收显示引擎发送的目标媒体文件的描述信息、目标缓存器的描述信息、所述目标缓存切片的描述信息以及目标访问器的描述信息,包括:

通过媒体接入函数API接收显示引擎发送的所述目标媒体文件的描述信息、所述目标缓存器的描述信息、所述目标缓存切片的描述信息以及所述目标访问器的描述信息。

S152、根据所述目标媒体文件的描述信息获取并处理所述目标媒体文件,以获取所述扩展属性的属性数据。

在一些实施例中,根据所述目标媒体文件的描述信息获取并处理所述目标媒体文件,以获取所述扩展属性的属性数据,包括:

根据所述目标媒体文件的描述信息创建用于处理所述目标媒体文件的目标管线,以及通过所述目标管线获取所述目标媒体文件,并对所述目标媒体文件进行解封装和解码,以获取包括所述扩展属性的属性数据的所述目标媒体文件的解码数据。

在一些实施例中,所述通过所述目标管线获取所述目标媒体文件,并对所述目标媒体文件进行解封装和解码,以获取所述目标媒体文件的解码数据,包括:通过所述目标管线的输入模块获取所述目标媒体文件,并将所述目标媒体文件输入所述目标管线的解封装模块;通过所述解封装模块对所述目标媒体文件进行解封装,获取所述目标媒体文件的几何码流和属性码流;通过所述目标管线的几何解码器对所述几何码流进行解码,获取几何解码数据;通过所述目标管线的属性解码器对所述属性码流进行解码,获取包括所述扩展属性的属性数据的属性解码数据。

在一些实施例中,所述通过所述目标管线获取所述目标媒体文件,并对所述目标媒体文件进行解封装和解码,以获取所述目标媒体文件的解码数据,还包括:在获取所述目标媒体文件的几何解码数据之后,通过所述目标管线的第一后处理模块对所述几何解码数据进行处理,以及在获取所述目标媒体文件的属性解码数据之后,通过所述目标管线的第二后处理模块对所述属性解码数据进行处理。

示例性的,通过所述目标管线的第一后处理模块对所述几何解码数据进行处理可以包括:通过所述目标管线的第一后处理模块对所述几何解码数据进行格式转换,通过所述目标管线的第二后处理模块对所述属性解码数据进行处理可以包括:通过所述目标管线的第二后处理模块对所述属性解码数据进行格式转换。

S153、根据所述目标缓存器的描述信息、所述目标缓存切片的描述信息以及所述目标访问器的描述信息,将所述扩展属性的属性数据写入所述目标缓存器。

将所述扩展属性的属性数据写入所述目标缓存器后,显示引擎可以从所述目标缓存器中获取所述扩展属性的属性数据,以及根据所述扩展属性的属性数据进行三维场景的渲染。

本申请实施例提供的媒体文件的处理方法在接收到显示引擎发送的目标媒体文件的描述信息、目标缓存器的描述信息、目标缓存切片的描述信息以及目标访问器的描述信息后,根据所述目标媒体文件的描述信息获取扩展属性的属性数据,并将根据所述目标缓存器的描述信息、所述目标缓存切片的描述信息以及所述目标访问器的描述信息,将所述扩展属性的属性数据写入所述目标缓存器中,因此显示引擎可以从所述目标缓存器中读取所述扩展属性的属性数据,以及基于所述扩展属性的属性数据对包括待渲染三维场景进行渲染,因此本申请实施例可以使场景描述框中的媒体接入函数支持类型为G-PCC编码点云的媒体文件中的反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性。

本申请一些实施例还提供一种缓存管理方法,该缓存管理方法的执行主体为沉浸式媒体描述框架中的缓存管理模块,参照图16所示,该缓存管理方法包括如下步骤:

S161、接收目标缓存器的描述信息和目标缓存切片的描述信息。

其中,所述目标缓存器为用于缓存扩展属性的属性数据的缓存器,所述目标缓存切片为用于缓存所述扩展属性的属性数据的缓存切片,所述扩展属性的源数据属于类型为G-PCC编码点云的目标媒体文件,所述扩展属性包括:反射率、材质ID、透明度、不透明度、帧编号以及帧索引中的至少一个。

在一些实施例中,所述目标缓存器的描述信息可以包括以下至少一项:

所述目标缓存器的容量、所述目标缓存器是否为基于MPEG扩展改造的环形缓存器、所述环形缓存器的存储环节数量、所述目标缓存器所缓存的数据的源数据的所属的媒体文件对应的媒体描述模块(所述目标媒体描述模块)的索引值、所述目标缓存器所缓存的数据的源数据的轨道索引值。

在一些实施例中,所述目标缓存切片的描述信息可以包括以下至少一项:

所述目标缓存切片所属的缓存器(目标缓存器)对应的缓存器描述模块(目标缓存器描述模块)的索引值、所述目标缓存切片的容量以及所述目标缓存切片的偏移量。

S162、根据所述目标缓存器的描述信息和所述目标缓存切片的描述信息创建所述目标缓存器。

在缓存管理模块根据所述目标缓存器的描述信息和所述目标缓存切片的描述信息创建所述目标缓存器后,媒体接入函数可以将所述扩展属性的属性数据写入所述目标缓存器中,显示引擎可以从所述目标缓存器中读取所述扩展属性的属性数据,以及基于所述扩展属性的属性数据对包括所述目标媒体文件的待渲染三维场景进行渲染。

例如:目标缓存器的描述信息包括:目标缓存器的容量为8000字节;目标缓存器为基于MPEG扩展改造的环形缓存器,环形缓存器的存储环节数量为2,环形缓存器缓存的媒体文件为MPEG媒体中声明的第一个媒体文件,环形缓存器所缓存的数据的源数据的轨道索引值为1,且所述MPEG环形缓存器包括两个缓存切片,第一个缓存切片的描述信息包括:所述容量为6000字节,偏移量为0,第二个缓存切片的描述信息包括:所述容量为2000字节,偏移量为6000,则所述缓存管理模块创建一个容量为8000字节、包含2个存储环节的环形缓存器,并将所述目标缓存器划分为2个缓存切片,第一个缓存切片的容量为6000字节,用于缓存所述目标媒体文件的解码数据的前6000个字节的数据,第二个缓存切片的容量为2000字节,用于缓存所述目标媒体文件的解码数据的6001~8000个字节的数据。

本申请实施例提供的缓存管理方法在接收到目标缓存器的描述信息和所述目标缓存切片的描述信息后,可以根据所述目标缓存器的描述信息和所述目标缓存切片的描述信息创建所述目标缓存器,因此媒体接入函数可以扩展属性的属性数据写入所述目标缓存器中,显示引擎可以从所述目标缓存器中读取所述扩展属性的属性数据,以及基于所述扩展属性的属性数据写入对待渲染三维场景进行渲染,因此本申请实施例可以使场景描述框中的缓存管理模块支持类型为G-PCC编码点云的媒体文件中的反射率、材质ID、透明度、不透明度、帧编号以及帧索引等扩展属性。

本申请一些实施例还提供了一种三维场景的渲染方法,该三维场景的渲染方法包括:显示引擎所执行的场景描述文件的解析方法和三维场景的渲染方法、媒体接入函数所执行的媒体文件的处理方法以及缓存管理模块所执行的缓存管理方法。参照图17所示,该方法包括如下步骤:

S1701、显示引擎获取待渲染三维场景的场景描述文件。

其中,所述待渲染三维场景中包括目标媒体文件;所述目标媒体文件的类型为G-PCC编码点云,所述目标媒体文件包括扩展属性的源数据,所述扩展属性包括:反射率、材质ID、透明度、不透明度、帧编号以及帧索引中的至少一个。

在一些实施例中,显示引擎获取待渲染场景的场景描述文件,包括:显示引擎使用网络传输服务从服务器中下载所述场景描述文件。

在一些实施例中,显示引擎获取待渲染场景的场景描述文件,包括:从本地缓存空间中读取所述场景描述文件。

S1702、显示引擎从所述场景描述文件的MPEG媒体(MPEG_media)的媒体列表(media)中获取各个媒体文件对应的媒体描述模块(包括:从所述场景描述文件的MPEG媒体的媒体列表中获取目标媒体文件对应的目标媒体描述模块)。

S1703、显示引擎根据各个媒体文件对应的媒体描述模块获取各个媒体文件的描述信息(包括:根据所述目标媒体描述模块获取所述目标媒体文件的描述信息)。

在一些实施例中,媒体文件的描述信息包括以下至少一项:

媒体文件的名称、媒体文件的URI、媒体文件是否自动播放、媒体文件是否循环播放、媒体文件的封装格式、媒体文件的访问地址、媒体文件的封装文件的轨道信息、媒体文件的编解码参数。

显示引擎根据所述目标媒体描述模块获取所述目标媒体文件的描述信息的实现方式可以参照上述场景描述解析方法中解析所述目标媒体文件的媒体描述模块的实现方式,为避免赘述,此处不再详细说明。

S1704、显示引擎向媒体接入函数发送各个媒体文件的描述信息(包括:向媒体接入函数发送所述目标媒体文件的描述信息)。

相应的,媒体接入函数接收所述显示引擎发送的各个媒体文件的描述信息(包括:接收所述显示引擎发送的所述目标媒体文件的描述信息)。

在一些实施例中,显示引擎向媒体接入函数发送各个媒体文件的描述信息,包括:显示引擎通过媒体接入函数API向媒体接入函数发送各个媒体文件的描述信息。

在一些实施例中,媒体接入函数接收所述显示引擎发送的各个媒体文件的描述信息,包括:媒体接入函数通过媒体接入函数API接收所述显示引擎发送各个媒体文件的描述信息。

S1705、媒体接入函数根据各个媒体文件的描述信息创建用于处理各个媒体文件的管线(包括:根据所述目标媒体文件的描述信息创建用于处理所述目标媒体文件的目标管线)。

在一些实施例中,所述目标管线,包括:输入模块、解封装模块以及解码模块;所述输入模块用于获取所述目标媒体文件(封装文件),所述解封装模块用于对所述目标媒体文件进行解封装,获取所述目标媒体文件的码流(可能为单轨道封装的G-PCC码流,也可能为多轨道封装的G-PCC几何码流和G-PCC属性码流),所述解码模块包括几何解码器和属性解码器,当目标媒体文件的码流单轨道封装的G-PCC码流时,首先通过解封装模块对G-PCC码流进行解封装获取所述G-PCC几何码流和所述G-PCC属性码流,然后分别通过几何解码器和属性解码器对所述G-PCC几何码流和所述G-PCC属性码流进行解码;当目标媒体文件的码流为多轨道封装的G-PCC几何码流和G-PCC属性码流时,分别通过几何解码器和属性解码器对所述G-PCC几何码流和G-PCC属性码流进行解码,获取所述目标媒体文件的几何数据和属性数据,以获取所述目标媒体文件的解码数据。

在一些实施例中,所述目标管线还包括:第一后处理模块和第二后处理模块;所述第一后处理模块用于对解码G-PCC几何码流得到的几何数据进行格式转换等后处理,所述第二后处理模块用于对解码G-PCC属性码流得到的属性数据进行格式转换等后处理。

S1706、媒体接入函数通过各个媒体文件对应的管线处理获取各个媒体文件,并对各个媒体文件进行解封装和解码,以获取各个媒体文件的解码数据。(包括通过所述目标管线获取所述目标媒体文件,并对所述目标媒体文件进行解封装和解码,以获取所述目标媒体文件的解码数据)。

需要说明的是,由于所述目标媒体文件包括扩展属性的源数据,因此对所述目标媒体文件进行解封装和解码获取的所述目标媒体文件的解码数据中包括所述扩展属性的属性数据。

在一些实施例中,所述目标媒体文件的描述信息包括所述目标媒体文件的访问地址,媒体接入函数根据所述目标媒体文件的描述信息获取所述目标媒体文件的解码数据,包括:

媒体接入函数根据所述目标媒体文件的访问地址获取所述目标媒体文件。

在一些实施例中,所述媒体接入函数根据所述目标媒体文件的访问地址获取所述目标媒体文件,包括:媒体接入函数根据所述目标媒体文件的访问地址向媒体资源服务器发送媒体资源请求,并接收所述媒体服务器发送的携带有所述目标媒体文件的媒体资源响应。

在一些实施例中,所述媒体接入函数根据所述目标媒体文件的访问地址获取所述目标媒体文件,包括:媒体接入函数根据所述目标媒体文件的访问地址从预设缓存空间中读取所述目标媒体文件。

在一些实施例中,所述目标媒体文件的描述信息还包括所述目标媒体文件的各个码流轨道的索引值;媒体接入函数根据所述目标媒体文件的描述信息获取所述目标媒体文件的解码数据,包括:

媒体接入函数根据所述目标媒体文件封装格式对所述目标媒体文件进行解封装,获取所述目标媒体文件的各个码流轨道的码流。

在一些实施例中,所述目标媒体文件的描述信息还包括所述目标媒体文件的码流的类型和编解码参数;媒体接入函数根据所述目标媒体文件的描述信息获取所述目标媒体文件的解码数据,包括:

媒体接入函数根据所述目标媒体文件的码流的类型和编解码参数对所述目标媒体文件的各个码流轨道的码流进行解码,获取所述目标媒体文件的解码数据。

S1707、显示引擎获取所述场景描述文件的缓存器列表(buffers)中的各个缓存器描述模块(包括:从所述场景描述文件的缓存器列表中获取用于缓存所述扩展属性的属性数据的目标缓存器对应的缓存器描述模块)。

S1708、显示引擎根据各个缓存器对应的缓存器描述模块获取各个缓存器的描述信息(包括:根据所述目标缓存器对应的目标缓存器描述模块获取所述目标缓存器的描述信息)。

在一些实施例中,缓存器的描述信息可以包括以下至少一项:

缓存器的容量(字节长度)、缓存器所缓存的数据的访问地址、是否为MPEG环形缓存器、环形缓存器的存储环节数量、缓存器所缓存的媒体文件对应的媒体描述模块的索引值、缓存器所缓存的数据的源数据的轨道索引值。

S1709、显示引擎获取所述场景描述文件的缓存切片列表(bufferViews)中的各个缓存切片描述模块(包括:从所述场景描述文件的缓存切片列表中获取所述目标缓存切片描对应的缓存切片描述模块)。

S1710、显示引擎根据各个缓存器的缓存切片对应的缓存切片描述模块获取各个缓存器的缓存切片的描述信息(包括:根据所述目标缓存切片描述模块获取所述目标缓存切片的描述信息)。

在一些实施例中,缓存切片的描述信息可以包括以下至少一项:

缓存切片所属的缓存器对应的缓存器描述模块的索引值、缓存切片的容量以及缓存切片的偏移量。

S1711、显示引擎获取所述场景描述文件的访问器列表(accessors)中的各个访问器描述模块(包括:从所述场景描述文件的访问器列表中获取用于访问所述扩展属性的属性数据的目标访问器对应的目标访问器描述模块)。

由于所述目标媒体文件的解码数据包括反射率、材质ID、透明度、不透明度、帧编号、帧索引等扩展属性的属性数据,因此在显示引擎获取所述场景描述文件的访问器列表中的各个访问器描述模块过程中,用于访问所述扩展属性的属性数据的访问器对应的访问器描述模块会被作为用于访问所述目标媒体文件的解码数据的访问器对应的访问器描述模块中的一个或多个被获取。

S1712、显示引擎根据各个访问器对应的访问器描述模块获取各个访问器的描述信息(包括:根据目标访问器描述模块获取目标访问器的描述信息。

由于在显示引擎获取所述场景描述文件的访问器列表中的各个访问器描述模块过程中,用于访问所述扩展属性的属性数据的访问器对应的访问器描述模块会被作为用于访问所述目标媒体文件的解码数据的访问器对应的访问器描述模块中的一个或多个被获取,因此在显示引擎根据各个访问器对应的访问器描述模块获取各个访问器的描述信息包括:获取用于访问所述扩展属性的属性数据的访问器的描述信息。

在一些实施例中,访问器的描述信息可以包括以下至少一项:

访问器所访问的缓存切片、访问器所访问的数据的数据类型、访问器的类型、访问器所访问的数据的数量、是否为基于MPEG扩展改造的时变访问器、存储访问器所访问的数据的缓存切片对应的缓存切片描述模块的索引值、存储访问器的时变参数的缓存切片对应的缓存切片描述模块的索引值、访问器参数是否随时间变化。

在一些实施例中,在上步骤S1707~S1712之后,本申请实施例可以通过如下方案一将各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息发送至媒体接入函数和缓存管理模块。

方案一、

在一些实施例中,将各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息发送至媒体接入函数和缓存管理模块的实现方式包括如下步骤1和步骤2:

步骤1、显示引擎向媒体接入函数发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,媒体接入函数接收显示引擎发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

在一些实施例中,上述步骤1(显示引擎向媒体接入函数发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息)的实现方式可以为:显示引擎通过媒体接入函数API向媒体接入函数发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,媒体接入函数接收显示引擎发送的各个缓存器的描述信息的实现方式可以为:媒体接入函数通过媒体接入函数API接收显示引擎发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

步骤2、媒体接入函数向缓存管理模块发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,缓存管理模块接收媒体接入函数发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

在一些实施例中,上述步骤2(媒体接入函数向缓存管理模块发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息)的实现方式可以包括:媒体接入函数通过缓存API向缓存管理模块发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,缓存管理模块接收媒体接入函数发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息的实现方式可以包括:缓存管理模块通过缓存API接收媒体接入函数发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

在一些实施例中,将各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息发送至媒体接入函数和缓存管理模块的实现方式包括如下步骤3和步骤4:

步骤3、显示引擎向媒体接入函数发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,媒体接入函数接收显示引擎发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

步骤4、显示引擎向缓存管理模块发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,缓存管理模块接收显示引擎发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

在一些实施例中,上述步骤4(显示引擎向缓存管理模块发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息)的实现方式可以包括:显示引擎通过缓存API向缓存管理模块发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,缓存管理模块接收显示引擎发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息的实现方式可以包括:缓存管理模块通过缓存API接收显示引擎发送的各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

在一些实施例中,在上步骤S1707~S1712之后,本申请实施例也可以通过如下方案二将各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息发送至媒体接入函数,以及将各个缓存器的描述信息和各个缓存器的缓存切片的描述信息发送至缓存管理模块。

方案二、

在一些实施例中,将各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息发送至媒体接入函数,以及将各个缓存器的描述信息和各个缓存器的缓存切片的描述信息发送至缓存管理模块的实现方式包括如下步骤Ⅰ和步骤Ⅱ:

步骤Ⅰ、显示引擎向媒体接入函数发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,媒体接入函数接收显示引擎发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

步骤Ⅱ、显示引擎向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息(包括:显示引擎向媒体接入函数发送所述目标缓存器的描述信息和所述目标缓存切片的描述信息)。

相应的,缓存管理模块接收显示引擎发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

在一些实施例中,将各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息发送至媒体接入函数,以及将各个缓存器的描述信息和各个缓存器的缓存切片的描述信息发送至缓存管理模块的实现方式包括如下步骤Ⅲ和步骤Ⅳ:

步骤Ⅲ、显示引擎向媒体接入函数发送各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息。

相应的,媒体接入函数接收显示引擎发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

步骤Ⅳ、媒体接入函数向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

相应的,缓存管理模块接收媒体接入函数发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

在通过上述方案一或方案二将各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息发送至媒体接入函数,以及将各个缓存器的描述信息和各个缓存器的缓存切片的描述信息发送至缓存管理模块后,继续执行如下步骤:

S1713、缓存管理模块根据各个缓存器的描述信息和各个缓存器的缓存切片的描述信息创建各个缓存器(包括:根据所述目标缓存器的描述信息和所述目标缓存切片的描述信息创建所述目标缓存器)。

S1714、媒体接入函数根据各个缓存器的描述信息、各个缓存器的缓存切片的描述信息以及各个访问器的描述信息将各个媒体文件的解码数据写入缓存器中(包括:媒体接入函数根据所述目标缓存器的描述信息、目标缓存切片的描述信息以及目标访问器的描述信息,将所述扩展属性的属性数据写入所述目标缓存器中)。

由于所述目标媒体文件的解码数据包括所述扩展属性的属性数据,因此将将所述扩展属性的属性数据写入所述目标缓存器属于将所述目标媒体文件的解码数据写入缓存器的过程。

即,媒体接入函数根据缓存器的描述信息中的缓存容量、缓存器的缓存切片的描述信息中的缓存切片容量、访问器的描述信息中的访问器类型、访问器的描述信息中的数据类型等信息将媒体文件的解码数据以正确的排布方式写入缓存器。

S1715、显示引擎从所述场景描述文件的场景列表中获取所述待渲染三维场景对应的场景描述模块。

S1716、显示引擎根据所述待渲染三维场景对应的目标场景描述模块,获取所述待渲染三维场景的描述信息。

其中,所述待渲染三维场景的描述信息包括所述待渲染三维场景中的各个节点对应的节点描述模块的索引值。

S1717、显示引擎根据所述待渲染三维场景中的各个节点对应的节点描述模块的索引值,从所述场景描述文件的节点列表中获取所述待渲染三维场景中的各个节点对应的节点描述模块(包括从所述场景描述文件的节点列表中获取挂载所述目标三维网格的目标节点对应的目标节点描述模块)。

S1718、显示引擎根据所述待渲染三维场景中的各个节点对应的节点描述模块获取所述待渲染三维场景中的各个节点的描述信息。

其中,任一节点的描述信息包括该节点挂载的三维网格对应的网格描述模块的索引值。

在一些实施例中,所述节点的描述信息还包括该节点的名称。

S1719、显示引擎根据所述待渲染三维场景中的各个节点挂载的三维网格对应的网格描述模块的索引值,从所述场景描述文件的网格列表中获取所述待渲染三维场景中的三维网格对应的网格描述模块(包括获取所述目标三维网格对应的目标三维网格描述模块)。

S1720、显示引擎根据所述待渲染三维场景中的三维网格对应的网格描述模块,确定所述待渲染三维场景中的各个三维网格所包含的数据种类以及用于访问所述待渲染三维场景中的各个三维网格的各个种类的数据的访问器(包括:显示引擎根据目标三维网格对应的目标网格描述模块获取用于访问所述扩展属性的属性数据的访问器)。

其中,所述目标三维网格为网格数据包括所述扩展属性的属性数据的三维网格。

在一些实施例中,所述方法还包括:根据所述待渲染三维场景中的三维网格对应的网格描述模块,获取所述待渲染三维场景中的三维网格的名称以及拓扑结构类型。

S1721、显示引擎根据各个访问器的描述信息创建各个访问器(包括根据用于访问所述扩展属性的属性数据的目标访问器的描述信息创建所述目标访问器)。

S1722、显示引擎通过各个访问器从缓存器中读取各个媒体文件的解码数据(包括:通过所述目标访问器,从所述目标缓存器缓存中读取所述扩展属性的属性数据)。

S1723、显示引擎基于各个媒体文件的解码数据对所述待渲染三维场景进行渲染(包括根据所述扩展属性的属性数据对所述待渲染三维场景进行渲染)。

在一些实施例中,本申请一些实施例提供了一种缓存管理装置,该缓存管理装置,包括:

缓存器,被配置为缓存计算机程序;

处理器,被配置为用于在调用计算机程序时,使得所述缓存管理装置实现上述任一实施例所述的缓存管理方法。

在一些实施例中,本申请一些实施例提供了一种计算机可读缓存介质,所述计算机可读缓存介质上缓存有计算机程序,当所述计算机程序被计算设备执行时,使得所述计算设备实现上述任一实施例所述的缓存管理方法。

在一些实施例中,本申请一些实施例提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机实现上述任一实施例所述的缓存管理方法。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

为了方便解释,已经结合具体的实施方式进行了上述说明。但是,上述示例性的讨论不是意图穷尽或者将实施方式限定到上述公开的具体形式。根据上述的教导,可以得到多种修改和变形。上述实施方式的选择和描述是为了更好的解释原理以及实际的应用,从而使得本领域技术人员更好的使用所述实施方式以及适于具体使用考虑的各种不同的变形的实施方式。

相关技术
  • 一种磁盘缓存的管理方法、装置和计算机可读存储介质
  • 一种分布式缓存系统的数据管理方法和装置
  • 提升多通道DMA访问性能的动态缓存块管理方法和装置
  • 空调机管理装置、热源设备管理装置、空调机管理方法以及热源设备管理方法
  • 缓存管理方法、缓存管理装置和缓存管理设备
  • 缓存管理方法、缓存管理装置和缓存管理设备
技术分类

06120116679655