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

一种缓存管理方法及装置

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


一种缓存管理方法及装置

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

技术领域

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

背景技术

随着三维媒体内容的逐渐丰富,用户对虚拟场景的真实感与丰富度也有了更高的要求。触觉作为感官的一部分,成为在沉浸式媒体中需要考虑和添加的对象体验。例如,用户可以在虚拟场景中感受一场爆炸效果,这不仅需要视觉、听觉的参与,也需要触觉作为一种感官体验参与其中,以提高此虚拟爆炸效果带给人的真实感和临场感。

相关技术标准中,每个触觉材质属性使用一个纹理数组来表示,不同属性的纹理数组结合起来组成一种特定触觉感知。每个数组元素都包含一个触觉纹理和一个表示为枚举的触觉材质属性类型,且触觉材质属性类型包括:高分辨率(High_resolution)、低分辨率(Low_resolution)、参考(Reference)以及其他(Other)。在触觉材质属性类型为高分辨率或低分辨率的情况下,纹理索引的纹理贴图或触觉纹理材质数据包中存储的不是颜色值,而是的触觉值。这些触觉值能够直接被显示引擎获取并进行触觉渲染。而当触觉材质属性类型为参考的时,纹理贴图或触觉纹理材质数据包中的每一个像素并不直接存储的触觉值,而是存储着待渲染的触觉媒体文件的索引值。如前所述,当触觉材质属性类型为参考时,从纹理贴图或触觉纹理材质数据包获取到的数据为触觉媒体的索引值,且根据该索引值仅能只能获取到编码并封装后的触觉媒体文件,无法获取解码后的可用于渲染的触觉值,进而导致显示引擎无法正常进行渲染。

发明内容

本申请示例性的实施方式提供一种缓存管理方法及装置,用于解决现有技术在触觉材质属性类型为参考时无法获取解码后的可用于渲染的触觉值,进而导致显示引擎无法正常进行渲染的问题。

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

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

接收触觉媒体缓存器的描述信息和所述触觉媒体缓存器的缓存切片的描述信息;所述触觉媒体缓存器为用于缓存目标触觉媒体文件的缓存器,所述目标触觉媒体文件包括类型为参考的第一触觉材质属性;

根据所述触觉媒体缓存器的描述信息创建所述触觉媒体缓存器;

根据所述触觉媒体缓存器的缓存切片的描述信息对所述触觉媒体缓存器进行缓存切片的划分,以使媒体接入函数将所述目标触觉媒体文件的解析数据写入所述触觉媒体缓存器的缓存切片中,以及显示引擎根据目标纹理描述模块的动态图像专家组MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器,以及通过所述触觉媒体访问器访问所述触觉媒体缓存器的缓存切片中的数据获取所述第一触觉材质属性的触觉值;

其中,所述目标纹理描述模块为所述第一触觉材质属性对应的纹理描述模块。

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

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

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

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

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

由以上技术方案可知,本申请实施例提供的缓存管理方法在接收到触觉媒体缓存器的描述信息和所述触觉媒体缓存器的缓存切片的描述信息后,可以根据所述触觉媒体缓存器的描述信息创建所述触觉媒体缓存器,并根据所述触觉媒体缓存器的缓存切片的描述信息对所述触觉媒体缓存器进行缓存切片的划分,因此媒体接入函数可以将包括类型为参考的第一触觉材质属性的触觉值的触觉媒体文件的解码数据写入所述触觉媒体缓存器的缓存切片中,显示引擎可以根据所述第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器,及通过所述触觉媒体访问器访问所述触觉媒体缓存器的缓存切片中的数据获取所述第一触觉材质属性的触觉值。因此本申请实施例可以支持获取参考类型的触觉材质属性的触觉值,解决相关技术中无法获取参考类型的触觉材质属性的触觉值的问题。

附图说明

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

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

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

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

图4示出了本申请另一些实施例中的触觉数据的数据模型示意图;

图5示出了本申请另一些实施例中的人体分层结构的示意图;

图6示出了本申请另一些实施例中的触觉信号编码器的结构示意图;

图7示出了本申请另一些实施例中的触觉信号解码器的结构示意图;

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

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

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

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

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

图13示出了本申请一些实施例中的触觉媒体文件处理方法的步骤流程图;

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

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

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

具体实施方式

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

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

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

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

本申请一些实施例涉及沉浸式媒体的场景描述。参照图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-1(动态图像专家组-浸入式)和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/IEC 12113)中的场景描述文件的结构示意图。如图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所描述的三维场景中所包含的物体。每一个三维场景中都可能存在许多具体物体,比如虚拟数字人、近处的三维物体、远处的背景图片等,场景描述文件会通过节点描述模块201对这些具体物体进行描述。每个节点描述模块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(与蒙皮描述模块210相关的属性),和weights_n(与蒙皮描述模块210相关的属性)等。由于网格描述模块203中包含的顶点数量非常大,每个顶点又包含了多种属性信息,因此不便将媒体文件中包含的大量媒体数据直接存储在场景描述文件的网格描述模块203中,而是在场景描述文件中指出了媒体文件的访问地址(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的访问器描述模块,并最终指向的缓存器中存储的顶点坐标数据;"color_0"的值为2,指向了索引为2的访问器描述模块,并最终指向的缓存器中存储的颜色数据。

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

表1

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

表2

网格描述模块203的基元的属性(mash.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中的PbrMetarialRoughness(material.PbrMetarialRoughness)中的语法元素的定义如下表5所示:

表5

材质描述模块209的PbrMetarialRoughness中的每个属性的值可以使用因子和/或纹理(例如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指定了采样器描述模块212和纹理贴图描述模块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的下一层级描述模块,用于描述为网格描述模块203所添加的骨骼与表物体表面信息的网格之间的运动协作关系。当节点描述模块202指向的网格描述模块203代表了人、动物、机械等运动自由度较大的物体时,为了优化这些物体的运动表现效果,可以向物体的内部填充骨骼,代表物体表面信息的网格描述模块203此时在概念上就成为了蒙皮。蒙皮描述模块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 Picture ExpertsGroup,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所示,相比于glTF2.0场景描述标准中的场景描述文件,MPEG场景描述标准中的场景描述文件的扩展可以分为两组:

第一组扩展包括:MPEG媒体(MPEG_media)301、MPEG时变访问器(MPEG_accessor_timed)302以及MPEG环形缓存器(MPEG_buffer_circular)303。其中,MPEG媒体301为独立扩展,用于引用外部媒体源;MPEG时变访问器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所示:

表10

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

表11

此外,基于ISOBMFF(ISO/IEC 14496-12),ISO/IEC 23090-14还定义了与场景描述文件的交付以及与glTF 2.0扩展相关的数据交付的传输格式。为了便于将场景描述文件交付给客户端,ISO/IEC 23090-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定义了一个新的URL方案。该方案要求在查询部分中存在一个流标识符,但没有指定特定类型的标识符,允许使用媒体流标识方案(Media Stream Identification scheme,RFC5888)、标记方案(labeling scheme,RFC4575)或基于0的索引方案。

触觉为用户提供了额外的娱乐和感官沉浸感,通过在音频/视频内容中正确地添加触觉,可以显着增强媒体内容带给用户的体验和享受。触觉数据表示如果具有标准统一的数据模型,且数据模型包括指定合成器呈现触觉效果所需的全部信息,则能够实现触觉数据的标准译码。

参照图4所示,图4为触觉数据模型的结构示意图。如图4所示,触觉数据模型包括:描述部分41和编码部分42,且采用分层结构逐层描述触觉数据。其中,描述部分41以感知和触觉通道信息作为数据结构中主要的描述内容,编码部分42以触觉频段、触觉效果和关键帧作为数据结构中主要的描述内容。描述部分41的最高层包含了对整个数据结构中所含内容的整体描述,通常用来描述文件或媒体流中定义的整个触觉体验。触觉体验包含一些高级元数据,同时提供了预先定义好的化身列表(即身体部分的表示),便于后续指定触觉刺激在身体上的实现位置。触觉数据通过感知列表(感知1~感知a)进行描述。触觉感知列表中的各个触觉感知分别对应于与特定感知模态(例如振动、力、位置、速度、温度等)相关的触觉信号。感知列表中的各个感知分别包含一些有关触觉实现设备的特征以及与该感知相关的化身等元数据信息。除元数据外,感知信号本身是由多个触觉通道(触觉通道1~触觉通道b)混合而成。每条触觉通道不仅包括通道配置(如混合增益等)方面的元数据,也包含数据按频带分解的触觉频段列表(触觉频段1~触觉频段c),每个触觉频段的频段数据给定频率范围内的部分信号。触觉频段使用频段数据和触觉效果列表(触觉效果1~触觉效果d)进行描述,触觉效果列表中的每个触觉效果都包含一个关键帧列表(关键帧1~关键帧e)。不同频段包含不同信号,通过组合不同频段的数据就能重建通道中的触觉信号。

参照图5所示,在一些实施例中,化身列表也可以采用分层结构逐层描述人体的部位。第一层级51首先将人体分为头、颈部、躯干、下肢。第二层级52进一步将头分为面部和颈部;将躯干分为上肢、胸部、腹部、背部,将下肢分为大腿、膝盖、小腿、脚踝、脚。第三层级53进一步将上肢分为肩膀、大臂、肘、小臂、手腕、手;将背部分为脊椎和下背部。第四层级54进一步将手分为手掌、大拇指、食指、中指、无名指、小拇指。

触觉数据模型中触觉感知的全部感知模态如下表12所示:

表12

数字编码对于允许数字触觉设备运行至关重要,作为一种类似于音频和视频的一阶媒体类型,触觉媒体文件也是以数字格式存储触觉数据。当前触觉媒体文件缺乏统一的编码格式,各种技术制造商开发和使用的编码格式不统一,导致了触觉媒体文件在解码器端格式的不兼容问题,阻碍了触觉在市场上的广泛采用。因此,ISO/IEC运动图像专家组(MPEG)中的第七工作组制定ISO/IEC 23090-31触觉标准化工作突出了标准化触觉编码表示的必要性。标准的触觉编码格式(以及相关的标准化解码器)将有助于将触觉纳入ISOBMFF,MPEG-DASH和MPEG-I标准,使内容创建者以及媒体/流媒体内容提供商更容易以标准化方式整合触觉并改善整体用户体验。

ISO/IEC运动图像专家组(MPEG)中的第七工作组在制定ISO/IEC 23090-31触觉编译码标准中所提出的编解码器架构,既可以为脉冲编码调制(Pulse Code Modulation,PCM)文件(WAR文件/.war文件),也可以处理描述性触觉文件(AHAP文件/.ahap文件或OVS文件/.ivs文件或HJIF文件/.hjif文件)。元数据信息以OHM文件的格式提供给编解码器。触觉编码表示允许以人类可读的JSON格式对描述性和量化数据进行编码,编码流程如图6所示。

参照图6所示,图6为对触觉信号进行编码的编码流程示意图。如图6所示,触觉信号编码器600以不同的方式处理PCM触觉文件和描述性触觉文件。针对描述性触觉文件,触觉信号编码器600首先识别触觉文件的文件格式。如果侍编码触觉文件是.hjif文件,则无需转码,可以直接压缩为二进制格式并最终打包成MIHS流。如果待编码触觉文件是.ahap文件或.ivs文件,则需要转码。触觉信号编码器600首先在语义上分析待编码触觉文件,并将其转码以格式化为图4所示的数据模型。转码后,数据可以导出为以JSON可读形式编码的交换文件格式(.hjif)、编码为压缩二进制文件的分发格式(.hmpg)或定义数据包化比特流的流格式(MIHS)。针对PCM文件,触觉信号编码器600的信号分析过程分为两个子过程。其一为:对原始信号执行频带分解后,基于关键帧提取对频带分解得到的低频信号进行编码。其二为:重建低频信号,并计算重建的低频信号与原始低频信号之间的残差,获取残差信号,然后将该残差信号添加到原始高频信号后使用小波变换进行编码,输出.hjif或.hmpg或MIHS中的至少一种格式的编码结果

参照图7所示,图7为对触觉信号进行解码的解码流程示意图。如图7所示,触觉信号解码器700既可以将打包成数据包的流格式输入(MIHS文件),拆包之后进行解压缩得到.hjif文件,也可以选择将.hmpg文件作为输入,解压缩后输出.hjif文件。然后.hjif文件中包含的触觉数据可以直接在触觉设备上呈现,或使用生成PCM数据的中间合成器,输出.wav文件在触觉设备上渲染。其中.hjif格式是基于JSON的人类可读格式,未针对内存使用进行优化。它可以轻松解析和手动编辑,方便内容的设计与创建,这使其成为理想的交换格式。出于分发目的,可以将.hjif数据压缩为内存效率更高的二进制.hmpg比特流。这种压缩是有损的,不同的参数会影响构成比特流的振幅和频率的编码深度。出于流式传输目的,可以将数据压缩并打包成MPEG-I触觉流(MIHS)。这种方法可以满足相关技术对触觉媒体文件的描述性和量化格式兼容性的期望,以及触觉终端设备之间的互操作性,以实现3D沉浸式体验和分发目的。MIHS触觉流也是将触觉媒体文件封装成ISOBMFF的基础。

在一些实施例中,参照图8所示,为了将触觉媒体文件与场景中的对象相关联,将触觉作为沉浸式媒体体验的一部分,在MPEG#140次会议中,通过了在MPEG场景描述文件中添加MPEG触觉(MPEG_haptic)801和MPEG触觉材质(MPEG_material_haptic)802的提案。基于该glTF的触觉扩展的新版本,可在场景描述中启用触觉支持。其中,MPEG触觉801通过索引MPEG媒体(MPEG_media)的媒体列表中的媒体描述模块得到触觉媒体文件的访问地址。需要说明的是,从MPEG媒体(MPEG_media)中索引到的是完成触觉编码且封装完毕的触觉媒体。MPEG触觉材质作为对原有虚拟对象的材质属性的补充说明,存储触觉材质触觉值的同时也支持对触觉媒体文件的直接索引。

MPEG触觉(MPEG_haptic)801为节点描述模块的下一层级描述模块,用于支持索引MPEG_media中与触觉相关的媒体文件以添加触觉信息。MPEG触觉801中的语法元素的定义如下表13所示:

表13

MPEG触觉材质(MPEG_material_haptic)402为网格描述模块的下一层级描述模块,用于支持用户在虚拟场景中通过主动和/或被动交互得到相应触觉反馈。

纹理映射是指在不需要高分辨率网格的情况下,高效、逼真地显示三维模型细节的技术。这种方法最初是在计算机图形学中开发的,如今已被广泛地应用于触觉渲染。纹理映射的存在,能够使虚拟对象增强其表面分布的附加触觉材质属性,增强虚拟对象的真实性。在纹理映射的基础上,相关技术进一步提出了触觉材质的概念。在计算机图形学中,材质是一个易于使用的数据包,包含了虚拟对象的可视化渲染所需的所有数据。类比而言,触觉材质应该为触觉渲染提供所有必要的元素,且不同的触觉材质蕴含不同的触觉特征,这些不同的触觉材质属性存储在不同的触觉材质包中,方便了触觉设计和实现的相关任务。触觉材质属性的定义如下表14所示:

表14

上表14中的每个触觉材质属性使用纹理数组表示,不同属性的纹理数组结合起来组成一种特定触觉感知。触觉材质属性既可以作为传统的二维纹理提供相关触觉纹理值,也可以作为触觉元素贴图。触觉元素贴图中每个像素点包含多个触觉单位元素,关联到对应于MPEG触觉(MPEG_haptic)的媒体参考列表(Media_reference)中的一个索引。渲染引擎可以选择最合适的纹理数组进行渲染。这样,每个数组元素都包含一个触觉纹理和一个表示为枚举的纹理类型。枚举的触觉材质纹理类型包括:

高分辨率(High_resolution):触觉纹理是直接存储触觉值的高分辨率二维纹理。

低分辨率(Low_resolution):触觉纹理是直接存储触觉值的低分辨率二维纹理。

参考(Reference):触觉纹理是包含触觉信号参考的二维触觉元素图。触觉纹理的每个像素对应于MPEG触觉(MPEG_haptic)的媒体参考列表(Media_reference)中的一个索引。

其他(Other):未知的专有纹理格式。

为了解释二维纹理中包含的数据,需要指定这些纹理的位深和范围,下表15、16分别示出了低分辨率触觉纹理和高分辨率触觉纹理的每个触觉材质属性的位深和范围:

表15

表16

如上表16所示,高分辨率振动纹理中的每个纹理映射像素的值一分为二:第一个字节用于描述幅度值,第二个字节用于描述频率值。

MPEG触觉材质(MPEG_material_haptic)402中的语法元素的定义如下表17所示:

表17

上表17为MPEG触觉材质(MPEG_material_haptic)402中包括的语法元素的语义,表17中的枚举值就是表14中所包括的触觉材质属性。MPEG场景描述文件中的MPEG触觉材质(MPEG_material_haptic)402,能够将场景中的对象与触觉材质相关联,在用户与对象进行交互时,就能得到相应的触觉感知。

每个触觉材质属性包含不同的触觉特征,但内部存储方式都是一致的,下表18以触觉材质属性中的刚度(stiffness)作为示例,对MPEG触觉材质中枚举的刚度(MPEG_material_haptic.stiffness)进行进一步说明。

表18

二、显示引擎

参照图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即可。

如图8所述,目前MPEG#140次会议确认通过添加MPEG触觉(MPEG_haptic)801和MPEG触觉材质(MPEG_material_haptic)802的提案,且允许MPEG触觉801索引到MPEG媒体(MPEG_media)中的触觉媒体文件,多是描述与事件或环境相关的整体触觉体验,索引到的触觉媒体文件视为触觉信号,本质上能够直接驱动触觉设备来对人体产生相应的触觉反馈。

如上所述,相关技术中,每个数组元素都包含一个触觉纹理和一个表示为枚举的触觉材质属性类型,且触觉材质属性类型包括:高分辨率(High_resolution)、低分辨率(Low_resolution)、参考(Reference)以及其他(Other)。在触觉材质属性类型为高分辨率或低分辨率的情况下,纹理索引的纹理贴图或触觉纹理材质数据包中存储的不是颜色值,而是触觉值。触觉值仅代表特定属性的大小,(如摩擦系数的大小,刚度系数的大小),并能够直接被显示引擎获取并进行触觉渲染。但当触觉材质属性类型为参考的时,纹理贴图或触觉纹理材质数据包中的每一个像素并不直接存储触觉值,而是存储着待渲染的触觉媒体文件的索引值,因此当触觉材质属性类型为参考时,根据该索引值仅能只能获取到编码并封装后的触觉媒体文件,无法获取解码后的可用于渲染的触觉值,进而导致显示引擎无法正常进行渲染。即,相关技术无法获取参考(Reference)类型的触觉材质属性的触觉值。

本申请一些实施例提供了一种支持获取参考类型的触觉材质属性的触觉值的场景描述框架,具体内容包括:场景描述文件对获取参考类型的触觉材质属性的触觉值的支持、媒体接入函数API对获取参考类型的触觉材质属性的触觉值的支持、媒体接入函数对获取参考类型的触觉材质属性的触觉值的支持、缓存API对获取参考类型的触觉材质属性的触觉值的支持、缓存管理对获取参考类型的触觉材质属性的触觉值的支持等内容。

基于场景描述框架索引三维场景中的触觉媒体文件并渲染和显示的过程包括:首先,显示引擎通过网络协议下载或者本地存储读取等方式从三维场景提供方获取场景描述文件。其中,显示引擎获取的场景描述文件包括了对整个三维场景以及场景中触觉媒体文件的描述信息,对所述触觉媒体文件的描述信息包括了所述触觉媒体文件的访问地址、所述触觉媒体文件的访问的属性信息(媒体类型,使用的编解码参数等)等。同时还包括了对所述触觉媒体文件解码处理所得到的数据的格式要求,对所述触觉媒体解码处理后所得数据的格式要求又包括了所述触觉媒体文件处理后所得到的触觉数据的描述部分和编码部分(即图4中的描述部分41和编码部分42,后文中统称为触觉媒体文件)等信息数据的格式要求(数据类型、数据长度及数据访问方式等)以及对其他媒体数据的格式要求及地址,其中就包括后续需要使用的纹理贴图、触觉材质属性的描述信息等数据。显示引擎完成场景描述文件的解析后,调用媒体接入函数API将触觉媒体文件的访问地址、触觉媒体文件的属性信息(媒体类型,使用的编解码器等)等信息传递给媒体接入函数。同时,显示引擎将解析得到的场景描述文件中指定的解码后的触觉媒体数据的格式要求及其他媒体数据的格式要求也通过调用媒体接入函数API传递给媒体接入函数。然后,媒体接入函数根据显示引擎传递的触觉媒体文件的访问地址,向服务器请求下载指定的触觉媒体文件或者从本地获取指定的触觉媒体文件,之后媒体接入函数根据媒体类型和编解码参数等信息为该媒体文件建立相应的管线将获取到的媒体数据从封装格式转换为场景描述文件中要求的格式,即对于触觉媒体文件应在管线中转换为场景描述文件中规定的格式(数据类型、数据长度和访问方式等)。在管线中可以对该媒体文件进行解封装、解密、解码以及后处理等操作。随后管线将处理为场景描述文件规定格式的解码后的触觉媒体的信息数据以及其他媒体数据存放到指定的缓存中。该缓存可以由显示引擎通过缓存API调用缓存管理模块创建,如果显示引擎没有创建相应缓存,则可以由媒体接入函数通过缓存API调用缓存管理模块创建相应缓存。目的都是实现缓存的创建、更新、释放等。最后,显示引擎在指定的缓存中以场景描述文件规定的格式读取触觉媒体文件完成对三维场景中的触觉部分的渲染。

以下分别对支持获取参考类型的触觉材质属性的触觉值的场景描述文件、媒体接入函数API、媒体接入函数、缓存API、缓存管理进行说明。

1、支持获取参考类型的触觉材质属性的触觉值的场景描述文件

参照图9所示,图9为本申请实施例提供的支持获取参考类型的触觉材质属性的触觉值的场景描述文件的结构示意图9。如图9所示,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中包括但不限于以下模块:MPEG媒体(MPEG_media)2501,场景描述模块(scene)2502、节点描述模块(node)2503、网格描述模块(mesh)2504、访问器描述模块(accessor)2505、缓存切片描述模块(bufferView)2506、缓存器描述模块(buffer)2507、材质描述模块2508、MPEG触觉材质(MPEG_material_haptic)2509、纹理描述模块(texture)2510、MPEG触觉纹理(MPEG_texture_haptic)2511、相机描述模块(camera)2512、蒙皮描述模块(skin)2513以及动画描述模块(animation)2514。以下分别对图9所示场景描述文件的各个描述模块进行说明。

为了使场景描述文件能够正确的描述触觉媒体文件本申请一些实施例对场景描述文件的MPEG媒体(MPEG_media)2501内的语法元素的取值进行了扩展,具体扩展包括以下至少一项:

扩展1、对场景描述文件的MPEG媒体的媒体列表的可选项(MPEG_media.media.alternatives)中用于说明媒体的媒体资源类型的媒体类型语法元素(MPEG_media.media.alternatives.mimeType)的值进行扩展。对媒体类型语法元素(mimeType)的扩展包括:为媒体类型语法元素(mimeType)添加与触觉媒体文件相关联的值。例如:当媒体资源为包括:音频、视频和触觉的媒体资源时,"mimeType"的值为"video/mp4";当媒体资源为仅包括:音频和触觉的媒体资源时,"mimeType"的值为"video/mp4";当媒体资源为仅包括:触觉的媒体资源时,"mimeType"的值为"haptics/mp4"。

扩展2、对场景描述文件的MPEG媒体的媒体列表的可选项的轨道数组(MPEG_media.media.alternatives.tracks)中用于声明媒体文件的轨道信息的轨道语法元素(MPEG_media.media.alternatives.tracks.track)的值进行扩展。对轨道语法元素(track)的扩展包括:当编码后的触觉媒体文件作为MPEG媒体的媒体列表的可选的轨道(MPEG_media.media.alternatives.tracks)中的一项被场景描述文件引用,应该遵循ISO/IEC 23090-32标准中对参考track的选取方法。例如:当触觉媒体被ISOBMFF封装成一条MIHS轨道时,应该在MPEG媒体中引用这条MIHS轨道;当触觉媒体被ISOBMFF封装成多条MIHS轨道时,需参考ISO/IEC 23090-32的后续补充内容。

扩展3、对场景描述文件的MPEG媒体的媒体列表的可选项的轨道数组(MPEG_media.media.alternatives.tracks)中用于说明码流轨道中包含的媒体数据的编解码器类型的编解码参数语法元素(MPEG_media.media.alternatives.tracks.codecs)的值进行扩展。由于IETFRFC 6381中定义包含在码流轨道中的媒体文件的编解码参数。当码流轨道包含不同类型的编解码器(例如AdaptationSet包含具有不同编解码器的表示)时,编解码参数语法元素(codecs)可以用逗号分隔的编解码器值列表来表示,因此对编解码参数语法元素(codecs)的值的扩展包括:当媒体数据为触觉数据,且封装规则遵循23090-32标准时,编解码参数语法元素(codecs)的值应遵循ISO/IEC 23090-32触觉数据传输(Carriage ofhaptics data)标准中的规定进行设置。例如:在触觉数据采用ISMBOFF封装时,编解码参数语法元素(codecs)的第一组元素为表示ISO/IEC 23090-31中编解码器的代码,编解码参数语法元素(codecs)参数的形式如下:"codecs":"mih1.oo",其中"mih1"是触觉数据封装在ISOBMFF中的一类数据格式说明,该值并不唯一,允许其他符合ISOBMFF封装的样本格式名称进行替换。其中"oo"是MP4注册机构网站"对象类型"页面上定义的对象类型指示值。

即,为了使场景描述文件能够正确地描述触觉媒体文件,本申请一些实施例对场景描述文件中的MPEG媒体内的语法元素的值进行了扩展,具体扩展包括扩展如下表19所示中的一项或等多项:

表19

对场景描述文件中MPEG_media内语法元素取值执行上述扩展1~扩展3中的至少一项,即可使场景描述文件中的MPEG媒体实现对触觉媒体文件的描述。

需要说明的是,触觉媒体文件的封装基于图4所示的数据结构,触觉媒体文件不仅存在信息部分,也存在元数据配置部分,本申请实施例不限定触觉媒体文件的封装方式,以可以根据MPEG媒体中的触觉媒体文件的访问地址获取已编码完且封装好的触觉媒体文件为准。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中的场景描述模块(scene)2502与节点描述模块(node)2503的描述方法,包括:当三维场景中包含触觉媒体文件时,使用scene和node的描述方法对三维场景的总体结构以及触觉媒体文件在三维场景所处的结构层次和位置进行描述。当三维场景中有需要索引触觉媒体文件的节点描述模块(node),则启用MPEG触觉(MPEG_haptic),并在MPEG触觉描述模块中索引所需触觉媒体文件。

此外,每一个三维场景均使用一个独立的场景描述模块进行描述。在三维场景中,可能存在许多具体物体,比如虚拟数字人、近处的三维物体、远处的背景图片、代表用户的视点与视角的虚拟相机等,场景描述文件会将这些具体物体作为三维场景中的节点,每个节点可以代表一个物体或者是数个物体组成的一组物体集合,节点之间的关系反映了三维场景中各个组成部分的关系。每个场景描述文件可以描述一个或多个三维场景,三维场景之间只能为并列关系,不能为层级关系,即场景之间是不具有包含与被包含的关系的。节点之间可以是并列关系或是层级关系,即节点之间存在包含与被包含的关系,这使得多个具体物体可以集合在一起进行表示。如果一节点被另一个节点包含,则被包含的节点称为子节点,对于子节点使用"children"替换"node"进行表示。灵活使用节点与子节点进行组合,就可以构成层级化的节点结构。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中的网格描述模块(mesh)2504的描述方法,包括:对于表示三维物体的节点,场景描述文件将会使用三维网格的数据格式进行描述,即使用网格描述模块(mesh)2504进行描述。网格描述模块中具有多种具体信息,比如三维坐标、颜色等信息,这些信息都隶属于网格描述模块2504的基元中的属性(mesh.primitives.attribute)中的语法元素。最基本的网格描述模块包含了顶点的三维坐标、顶点间的连接关系、顶点的颜色信息以及需要纹理值的三维坐标等。在网格描述模块层面需要启用所需纹理值的三维坐标集合纹理坐标(Texcoord),以便后续从纹理处获得的触觉值附在三维物体相应的三维坐标中。纹理坐标(Texcoord)与颜色数据等信息都隶网格描述模块的基元中的属性(mesh.primitives.attribute)。而触觉媒体暂时不需要在网格描述模块层面引用颜色数等属性(attribute)进行定义,只需要启用MPEG触觉材质(MPEG_material_haptic)2509,作为与材质描述模块(material)2504平行的内容补充,以支持对触觉材质的进一步定义。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中的材质描述模块(material)2508和纹理描述模块(texture)2510的描述方法,包括:通过材质描述模块(material)2508和纹理描述模块(texture)2510描述三维物体的表面的附加信息。在描述常规的三维物体时,仅借助网格描述模块描述三维物体的几何信息,或单调地定义三维网格中顶点的颜色,对提升虚拟物体的真实度来说远远不够,这就需要在三维物体的表面附加更多的信息。对于常规的三维模型技术,这一过程也可以简称为贴图或赋加纹理等。即,支持获取参考类型的触觉材质属性的触觉值的场景描述文件以glTF2.0为基础,也沿用了材质描述模块(material)2508和纹理描述模块(texture)2510,且材质描述模块(material)2508与纹理描述模块(texture)2510的协作关系包括:材质描述模块(material)2508与纹理描述模块(texture)2510共同定义了物体表面的颜色和物理信息。纹理描述模块(texture)2510下指定了采样器描述模块(sampler)和纹理贴图描述模块(image),采样器描述模块(sampler)定义了如何将纹理贴图映射到物体表面,实现了纹理的具体调整和包装。纹理贴图描述模块(image)则使用ULR对纹理贴图进行标识和索引。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中的MPEG触觉材质(MPEG_material_haptic)2509的描述方法,包括:通过MPEG触觉材质(MPEG_material_haptic)2509对触觉材质属性进行进一步描述。当三维场景中包含触觉媒体文件时,需要考虑材质特性中的触觉材质属性。MPEG触觉材质(MPEG_material_haptic)2509中包括各个触觉材质属性(刚度、摩擦力、触觉纹理、温度、振动以及自定义)对应的触觉材质属性描述模块,触觉材质属性描述模块中包括属性类型语法元素,属性类型语法元素的值可以为:高分辨率(High_resolution)、低分辨率(Low_resolution)、参考(Reference)。三维场景中一个包含触觉反馈的物体,可能包括不同类型的触觉材质属性。同一物体上的不同触觉材质属性,可以通过不同方式得到触觉值或被用户感受到该触觉值的触觉媒体,以此来实现场景描述文件中关联触觉媒体以得到触觉反馈。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中的MPEG触觉纹理(MPEG_texture_haptic)2511的描述方法,包括:通过MPEG触觉纹理(MPEG_texture_haptic)2511实现纹理坐标点能够索引到触觉媒体文件中的一组触觉信号。

由表17可知,MPEG触觉材质(MPEG_material_haptic)2509包含许各个触觉材质属性(刚度、摩擦力、触觉纹理、温度、振动以及自定义)对应的触觉材质属性描述模块,每个触觉材质属性的对应的触觉材质属性描述模块包含了该触觉材质属性的类型,具体包括:低分辨率(Low_resolution)、高分辨率(High_resolution)、参考(Reference)、其它(Other)。若某一触觉材质属性的触觉材质纹理类别为低分辨率或高分辨率,则说明此时纹理坐标点上的触觉值可以从纹理贴图或其他触觉纹理材质数据包中获得,该纹理贴图或触觉纹理材质数据包上每个像素点包含的值就代表触觉值,且如表15和表16所示,不同触觉材质纹理类型的触觉值的位深不同,如高分辨率高分辨率(High_resolution)的触觉材质属性的触觉值的位深是16bit,而低分辨率(Low_resolution)的触觉材质属性的属性的位深则是8bit。

若触觉材质属性的类别为参考(Reference),则要求该纹理坐标点或一组纹理坐标点的触觉值能够索引到一组时间上或空间上的触觉值,此时就需要启用MPEG触觉纹理(MPEG_texture_haptic)2511进行相关补充说明。MPEG触觉材质(MPEG_materia_haptic)2509内部包含每种触觉材质属性的类型。当某种触觉材质属性的类型是参考(Reference)时,在不改变纹理描述模块(texture)2510原有语法语义的情况下,需要在纹理描述模块(texture)2510里添加MPEG触觉纹理(MPEG_texture_haptic)2511,目的是实现纹理坐标点能够索引到一组触觉值。在MPEG触觉纹理(MPEG_haptic_texture)2511内部具有一个名为访问器索引(accessor)的语法元素,明确了纹理坐标点能够实际访问到需要索引到的触觉媒体文件的访问器对应的访问器描述模块。该功能与场景描述文件中对缓存器描述模块(buffer)、缓存切片描述模块(bufferview)的描述相对应,共同实现纹理坐标点对触觉媒体文件的直接索引。MPEG触觉纹理(MPEG_haptic_texture)2511中的语法元素的定义如下表20所示:

表20

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中的访问器描述模块(accessor)2505、缓存切片描述模块(bufferView)2506、缓存器描述模块(buffer)2507的描述方法,包括:通过缓存器描述模块的MPEG环形缓存器的媒体索引语法元素(buffer.MPEG_buffer_circular.media)的值指向MPEG媒体(MPEG_media)中触觉媒体文件对应的媒体描述模块的索引。即,触觉媒体文件需要在缓存器描述模块(buffer)内指定,但并非在缓存器描述模块(buffer)中直接添加触觉媒体文件的统一资源定位符(Uniform Resource Locator,URL),而是通过缓存器描述模块(buffer)的MPEG环形缓存器的媒体索引语法元素(MPEG_buffer_circular.media)声明MPEG媒体(MPEG_media)中相应触觉媒体文件对应的媒体描述模块的索引值。

示例性的,MPEG媒体(MPEG_media)中触觉媒体文件对应的媒体描述模块为MPEG媒体(MPEG_media)的媒体列表中的第三个媒体描述模块,则可以设置缓存器描述模块的MPEG环形缓存器中的媒体索引语法元素(buffer.MPEG_buffer_circular.media)的值为"2",从而在缓存器描述模块的MPEG环形缓存器中索引MPEG媒体中的第三个媒体描述模块中的访问地址,以通过缓存器描述模块的MPEG环形缓存器中的(MPEG_buffer_circular)媒体索引语法元素索引触觉媒体文件。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件中的访问器描述模块(accessor)2505、缓存切片描述模块(bufferView)2506、缓存器描述模块(buffer)2507的描述方法,包括:通过缓存器描述模块的MPEG环形缓存器的轨道数组的轨道(buffer.MPEG_buffer_circular.tracks.track)指示访问触觉媒体文件的封装文件时的轨道信息。具体包括:当缓存器描述模块的MPEG环形缓存器的轨道数组(buffer.MPEG_buffer_circular.tracks)中包含多个轨道(track)时,管线应该对所有引用的track进行必要的处理,以生成缓存器描述模块请求的数据格式。如果缓存器描述模块的MPEG环形缓存器的轨道数组的轨道(buffer.MPEG_buffer_circular.tracks)中引用的媒体文件具有多个可选项(alternatives),那么每个可选项(alternatives)都应该记录有轨道的选用情况。当缓存器描述模块的MPEG环形缓存器的轨道数组(buffer.MPEG_buffer_circular.tracks)未被定义时,管线应该对MPEG媒体(MPEG_media)中的所有轨道进行必要的处理,进而生成缓存器描述模块(buffer)请求的数据格式,即指导缓存器描述模块(buffer)如何正确存储MPEG媒体(MPEG_media)中的数据。

MPEG环形缓存器(MPEG_buffer_circular)中包含的语法元素如表21所示:

表2l

即,基于表21中的媒体索引语法元素(media)的值的设置规则,使表21中的媒体索引语法元素(media)取值为MPEG媒体(MPEG_media)中相应触觉媒体文件对应的媒体描述模块的索引值,从而在缓存器描述模块内对触觉媒体文件进行索引。基于表21中的语法元素"tracks"的值的设置规则,使表21中的语法元素"tracks"取值为MPEG媒体中包含触觉媒体文件的轨道索引,从而在缓存器描述模块内对触觉媒体文件的轨道进行索引。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件的相机描述模块(camera)2512的描述方法,包括:通过相机描述模块(camera)2512定义节点描述模块(node)的视点、视角等与观看相关的视觉信息。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件的动画描述模块(animation)2513的描述方法,包括:通过动画描述模块(animation)2513定义为节点描述模块(node)添加的动画。

在一些实施例中动画描述模块(animation)可以通过位置移动、角度旋转、大小缩放中的一种或多种对为节点描述模块(node)添加的动画进行描述。

在一些实施例中,动画描述模块(animation)还可以指示为节点描述模块(node)添加的动画的开始时间、结束时间以及动画的实现方式中的至少一项。

即,在支持获取参考类型的触觉材质属性的触觉值的场景描述文件中,同样可以为代表三维物体中的物体的节点描述模块(node)增添动画。动画描述模块(animation)则通过位置移动、角度旋转、大小缩放三种方式为节点增添的动画进行描述,同时也可以规定动画的开始、结束时间以及动画的实现方式。

在一些实施例中,支持获取参考类型的触觉材质属性的触觉值的场景描述文件的蒙皮描述模块(skin)2514的描述方法,包括:通过蒙皮描述模块(skin)2514定义节点描述模块(node)中的网格(mesh)与对应的骨骼之间的运动和形变关系。

基于上述实施例对场景描述文件中的动态图像专家组媒体(MPEG_media),场景(scene)、节点(node)、网格(mesh)、访问器(accessor)、缓存切片(bufferView)、缓存器(buffer)、蒙皮(skin)、动画(animation)、相机(camera)、材质(material)、纹理(texture)、采样器(sampler)以及纹理贴图(image)的改进和扩展,场景描述文件已能够正确地描述触觉媒体文件。

示例性的,以下结合一个包括有刚度、温度以及振动的触觉纹理,单轨道封装的触觉媒体的场景描述文件示例对图9所示的场景描述文件进行说明。

上述示例中的第1行与第203行的一对大括号内包含了图9所示场景描述文件的主要内容,支持获取参考类型的触觉材质属性的触觉值的场景描述文件包括:数字资产描述模块(asset)、使用扩展描述模块(extensionUsed)、MPEG媒体(MPEG_media)、场景声明(scene)、场景列表(scenes)、节点列表(nodes)、网格列表(meshes)、触觉材质数组列表(MPEG_material_Haptic)、纹理列表(textures)、纹理贴图列表(images)、访问器列表(accessors)、缓存切片列表(bufferView)、缓存器列表(buffers)。以下分别对各个描述模块的内容以及在解析角度各个描述模块所包含的信息进行说明。

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

2、使用扩展描述模块(extensionUsed):使用扩展描述模块为第6~13行。由于使用扩展描述模块包括:MPEG媒体(MPEG_media)、MPEG环形缓存器(MPEG_buffer_circular)、MPEG时变访问器(MPEG_accessor_timed)、MPEG触觉(MPEG_Haptic)、MPEG触觉材质(MPEG_material_Haptic)、MPEG触觉纹理(MPEG_texture_Haptic)六个扩展,因此可以确定该场景描述文件中使用了MPEG媒体、MPEG环形缓存器、MPEG时变访问器、MPEG触觉、MPEG触觉材质、MPEG触觉纹理六种MPEG扩展。从解析角度看,显示引擎可以根据使用扩展描述模块(extensionUsed)的内容提前获知了后续解析所涉及的扩展项目包括:MPEG媒体、MPEG环形缓存器、MPEG时变访问器、MPEG触觉、MPEG触觉材质、MPEG触觉纹理。

3、MPEG媒体(MPEG_media):MPEG媒体为第15~37行。MPEG媒体实现了对三维场景中包含的媒体文件的声明,并通过第24行的"mimeType":"haptic/mp4"指出了媒体文件对应的封装文件的文件类型,通过第25行的"uri":"http://www.example.com/Hapticexample.mp4"指出了对应媒体文件的访问地址,通过第28行的"track":"trackIndex=1"指出了触觉媒体文件的轨道信息,通过第29行的"codecs":""mih1.oo"指出了触觉媒体文件的解码信息,通过第19行的"name":"Hapticexample"指出了触觉媒体文件的名称,通过第20行的"autoplay":true指出了触觉媒体文件应该自动播放,通过第21行的"loop":true指出了触觉媒体文件应该循环播放。从解析角度看,显示引擎通过解析MPEG媒体可以确定待渲染三维场景中存在一个触觉媒体文件,并且获知了访问及解析该触觉媒体文件的方法。

4、场景声明(scene):场景声明为第39行。因为在理论上可一个场景描述文件以包括多个三维场景,所以上述场景描述文件首先通过第39行的"scene":0,指出了场景描述文件描述的场景为场景列表中的第一个场景描述模块对应的三维场景,即第41~46行的大括号所囊括的场景描述文件所描述的场景。

5、场景列表(scenes):场景列表为第41~47行。其次,场景列表中仅包含了一个大括号,说明该场景描述文件中仅包含了一个场景描述模块,该场景描述文件中仅包含了一个三维场景,在该大括号内(场景描述模块)通过第43~45行的"nodes"[0]指出了三维场景中仅包括一个索引为0的节点。从解析角度看,该场景列表明确了整个场景描述框架应该选取场景列表中的第一个三维场景进行后续处理和渲染,且明确了三维场景的总体结构,并且指向了更详细的下一层节点描述模块(node)。

6、节点列表(nodes):节点列表为第49~60行。节点列表中仅包含了一个大括号,说明该场景描述文件中仅包括一个节点描述模块,该三维场景中只具有一个节点,且该节点与场景描述模块中的节点中包含的索引值为0的节点是同一个节点,两者通过索引的方式实现关联。在表示该节点的大括号(节点描述模块)中,通过第51行的"name":"Hapticexample_node"指出了节点的名称为"Hapticexample_node",通过第52行的"mesh":0指出了节点上所挂载的内容为网格列表中的第一个三维网格,这与下一层的网格描述模块是对应的。同时在该节点描述模块的中第53~56行还包括了MPEG触觉(MPEG_Haptic),MPEG触觉中存储着能够从MPEG媒体(MPEG_media)中索引到的触觉媒体文件的索引号(第55行的"Media_reference":0。从解析角度看,该节点列表中的节点描述模块指出了节点上所挂载的内容是一个三维网格,以及该三维网格的网格描述模块的索引为0,同时还指出了能够从MPEG媒体中索引到的触觉媒体文件为MPEG媒体中的第一媒体文件。

7、网格列表(meshes):网格列表为第62~79行,网格列表中仅包含了一个大括号,说明该场景描述文件中仅包括一个网格描述模块(mesh),该三维场景中只具有一个三维网格,且该三维网格与节点描述模块中的索引值为0的三维网格是同一网格。在表示该网格的大括号(网格描述模块)中,通过第64行的"name":"Hapticexample_mesh"指出了该三维网格的名称为"Hapticexample_mesh",该名称仅用作辨识标记,通过第65行的"primitives"指出了该三维网格具有基元,即primitives。分别通过第67行的"attributes"、第70行的"mode"以及第71行的"MPEG_material_Haptic",指出了基元中存在存在属性(attribute)、模式(mode)以及MPEG材质触觉(MPEG_material_Haptic)三类信息。通过第68行的"TEXCOORD_0":0,指示纹理坐标对应的访问器描述模块为访问器列表中的第一个访问器描述模块。通过语法元素"mode":0指示该三维网格的拓扑为散点结构。通过72~74行的"MPEG_material_Haptic":{"index":0}指示网格描述模块对应的网格上承载具有MPEG触觉材质属性,且指向了更详细的下一层触觉材质数组列表(MPEG_material_Haptic)。从解析角度看,该网格列表明确了三维网格具有的实际数据种类和三维网格的拓扑类型。

8、触觉材质数组列表(MPEG_material_Haptic):触觉材质数组列表为第82~111行。触觉材质数组列表(MPEG_material_Haptic)中仅包括一个大括号,说明该场景描述文件中仅包括一个触觉材质数组(第84~109行的大括号所囊括的内容)。该触觉材质数组中分别通过第85~91行、第93~100行、第102~108行定义了三种触觉材质属性,分别为刚度(stiffness)、温度(temperature)、振动(vibration)。每种触觉材质属性包括纹理数组(texture)和触觉材质类型(type)两类信息。刚度(stiffness)对应的描述模块为第85~91行,通过第87行的"index":0定义了刚度(stiffness)指向纹理列表中的第一个纹理描述模块(texture),通过第90行的"type":Low_resolution定义了刚度(stiffness)的类型是低分辨率(Low_resolution),后续得到的刚度触觉值的长度均为8bit长度;温度(temperature)对应的描述模块为第93~100行,通过第96行的"index":1定义了温度(temperature)指向纹理描述列表中的第二个纹理描述模块(texture),通过第99行的"type":High_resolution定义了温度(temperature)的类型是高分辨率(High_resolution),后续得到的温度触觉值的长度均为16bit长度;振动(vibration)对应的描述模块为第102~108行,通过第104行的"index":2定义了振动(vibration)指向纹理描述列表中的第三个纹理描述模块(texture),通过第107行的"type":Reference定义了振动(vibration)的类型是参考(Reference)。从解析角度看,根据触觉材质数组列表(MPEG_material_Haptic)可以确定物体所包含的触觉材质属性的纹理种类及来源,并且指向了更详细的下一层描述模块纹理描述模块。

9、纹理列表(textures):纹理列表为第113~131行。纹理列表中包含三个大括号,说明该场景描述文件中包括三个纹理描述模块,且三个纹理描述模块分别用于描述刚度(stiffness)、温度(temperature)和振动(vibration)的纹理信息。刚度(stiffness)、温度(temperature)以及振动(vibration)的纹理描述模块中均包括采样器语法元素(sampler)和纹理贴图语法元素(source),根据采样器语法元素(sampler)和纹理贴图语法元素(source)的值可以确定刚度(stiffness)、温度(temperature)以及振动(vibration)的采样器描述模块和纹理贴图的访问地址。纹理贴图的来源与下一层级的纹理贴图列表(images)以及采样器列表(samplers)呼应。振动(vibration)的纹理描述模块还包括MPEG触觉纹理(MPEG_texture_Haptic),通过MPEG触觉纹理(MPEG_texture_Haptic)可以确定与先前定义的参考(Reference)类型的触觉材质属性关联的访问器的访问器描述模块的索引值为1。

10、纹理贴图列表(images):纹理贴图列表为第134~144行。纹理贴图列表中包含三个大括号,分别对应刚度(stiffness)、温度(temperature)以及振动(vibration)的纹理描述模块中所引用的纹理贴图的访问地址。分别根据第136、139以及142行的"uri":"stiffnessTexture.png"、"uri":"temperatureTexture.png"以及"uri":"vibrationTexture.png"可以确定刚度(stiffness)、温度(temperature)以及振动(vibration)的纹理贴图的访问地址分别为"stiffnessTexture.png"、"temperatureTexture.png"以及"vibrationTexture.png"。需要说明的是,由于刚度(stiffness)和温度(temperature)的类型分别为高分辨率和底分辨率,因此刚度(stiffness)和温度(temperature)的纹理贴图中存储的是刚度(stiffness)和温度(temperature)的触觉值,而振动(vibration)的类型分别为参考,因此振动(vibration)的纹理贴图中存储的振动(vibration)所属触觉媒体文件对应的媒体描述模块的索引值。

11、采样器列表(samplers):采样器列表为第145~151行。采样器列表中包含了一个大括号,说明了该场景描述文件包括一个采样器描述模块,该三维场景的显示仅需要使用一个采样器,且可以通过147~150行的"magFilter":9729、"minFilter":9987、"wrapS":33648、"wrapT":33648确定对应的采样器的描述信息。

12、缓存器列表(buffers):缓存器列表为第186~203行。缓存器列表中包含了两个大括号,说明了该场景描述文件包括两个缓存器描述模块,该三维场景的显示仅需要使用两个缓存器,该三维场景的显示仅需要访问两个媒体文件。根据第187~190行的第一个大括号中(第一个缓存器描述模块)的内容可以确定第一个缓存器的大小为1000,需要存储的媒体文件的地址为"AnimatedBody.bin",媒体文件包括需要对特定三维坐标添加纹理信息的坐标内容。根据第192~201行第二大括号中(第二个缓存器描述模块)中的MPEG环形缓存器(MPEG_buffer_circular),可以确定第二个缓存器是一个使用MPEG扩展进行改造的环形缓存器。"media:0说明了该环形缓存器中的数据来源是前文中MPEG媒体(MPEG_media)内声明的第一个媒体文件,"tracks":"#trackIndex=1"说明了访问触觉媒体封装文件时应该参考索引为1的轨道,在这里不对索引为1的轨道做限定,它可以是单轨道封装的触觉文件的唯一轨道,也可以是多轨道封装的触觉文件的参考轨道。此外,根据MPEG环形缓存器(MPEG_buffer_circular)中的语法元素"count":5,还可以确定MPEG环形缓存器具有五个存储环节,根据MPEG环形缓存器(MPEG_buffer_circular)中的语法元素"byteLength":4000,还可以确定MPEG环形缓存器的字节长度(容量)为4000字节。从解析角度看,缓存器列表实现了将MPEG媒体(MPEG_media)中声明的触觉媒体文件对应到缓存器,或者说实现了缓存器对此前仅声明但未使用的触觉媒体文件进行了引用。需要说明的是,在该处引用的触觉媒体文件是未经处理的触觉媒体文件的封装文件,触觉媒体文件的封装文件需要经过媒体访问函数的处理,才能够提取出可直接用于渲染的信息。

13、缓存切片列表(bufferViews):缓存切片列表为第173~184行。缓存切片列表中包含了两个并列的大括号,说明该场景描述文件中包括两个缓存切片描述模块(bufferView),由第174~178行的第一个大括号(第一个缓存切片描述模块)内对缓存器描述模块(burrer)的索引和第179~183行第二个大括号(第二个缓存切片描述模块)内对缓存器描述模块的索引,可以确定第一个大括号(第一个缓存切片描述模块)属于第187~190行的大括号内的内容所描述的缓存器,第二个大括号(第二个缓存切片描述模块)属于第192~201行的大括号内的内容所描述的缓存器。第一个缓存切片描述模块通过字节长度(byteLength)和字节偏移(byteOffset)两个参数限定了该缓存切片的数据切片范围为第一个缓存器的前1000个字节;第二个缓存切片描述模块通过字节长度(byteLength)和字节偏移(byteOffset)两个参数限定了该缓存切片的数据切片范围为第二个缓存器的前4000个字节。从解析角度看,缓存切片列表将触觉媒体文件的数据进行了分组,有利于后续访问器描述模块的细化定义。

14、访问器列表(accessors):访问器列表为第153~171行。访问器列表与缓存切片列表的结构类似,都包含了两个并列的大括号,说明该三维场景描述文件中包括两个访问器描述模块(accessor),三维场景的显示需要通过两个访问器进行媒体数据的访问。此外,第二大括号(第二个访问器描述模块)中具有MPEG时变访问器部分,说明这对应的访问器指向的是MPEG定义的时变媒体。通过第154~159行的第一个大括号(第一个访问器描述模块)中第155行的"bufferView":0可以确定对应访问器指向了缓存切片列表中索引值为0的缓存切片,还通过"componentType":5121和"type":"VEC2"确定该访问器中存储的数据格式是8位无符号数构成的二维向量,"count":500说明了这样需要通过该访问器访问的数据有500个,每个8位无符号数占用1个字节,因此该accessor包含了1000字节的数据,这与索引值为0的bufferView中的规定是相同的。通过第161~170行的第二个大括号(第二个访问器描述模块)中的内容"bufferView":1可以确定"MPEG_accessor_timed"中的内容指向了索引值为1的缓存切片描述模块,且说明了该访问器内的语法元素取值随时间变化。在第二个大括号中,还通过"componentType":5123和"type":"SCALAR"。两者说明了,该访问器中存储的数据格式是16位无符号数构成的字符串,"count":2000说明了这样需要通过该访问器访问的数据有2000个,每个16位有符号数占用2个字节,因此该访问器包含了4000字节的数据,这与索引值为1的bufferView中的规定是相同的。第一个访问器代表是需要赋予纹理值的三维坐标集合;第二个访问器代表是参考(Reference)类型下,触觉纹理能够获取到相关触觉媒体的访问器。从解析角度看,该访问器列表完善了对渲染所需数据的完全定义,比如在缓存切片描述模块和缓存器描述模块中缺少的数据类型就在对应的访问器描述模块中进行了定义。

2、支持获取参考类型的触觉材质属性的触觉值的显示引擎

在沉浸式媒体的场景描述框架的工作流程中,显示引擎的主要功能包括:解析场景描述文件获取渲染三维场景的方法;通过媒体接入函数API向媒体接入函数发送媒体访问指令或媒体数据处理指令;通过缓存API向缓存管理模块发送缓存管理指令;从缓存中取用经过处理的数据,并根据读取的数据完成三维场景及三维场景中物体的渲染与展示,因此支持包括触觉媒体的显示引擎的功能包括:1、能够解析包含触觉媒体场景描述文件,获取相应的三维场景渲染方法;2、能够通过媒体接入函数API与媒体接入函数传递媒体访问指令或媒体数据处理指令;其中,媒体访问指令或媒体数据处理指令来自于对包含触觉媒体的场景描述文件的解析结果;3、能够通过缓存管理API向缓存管理模块发送缓存管理指令;4、能够从缓存中取用经过处理的触觉媒体文件的解码数据,并根据取用的解码数据完成三维场景及三维场景中包含的触觉媒体文件的渲染与展示。

3、支持获取参考类型的触觉材质属性的触觉值的媒体接入函数API

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

在一些实施例中,显示引擎可以通过媒体接入函数API向媒体接入函数发送媒体访问指令或媒体数据处理指令。其中,显示引擎下达的指令来自于对含有触觉媒体的属性信息的场景描述文件的解析结果,这些指令可能包含了该媒体文件的地址、媒体文件的属性信息(媒体类型,使用的编解码器等)、对经过处理的触觉媒体数据及其他媒体数据的格式要求等。

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

4、支持获取参考类型的触觉材质属性的触觉值的媒体接入函数

在沉浸式媒体的场景描述框架的工作流程中,媒体接入函数接收到显示引擎通过媒体接入函数API下发的媒体访问指令或媒体数据处理指令后,会执行显示引擎通过媒体接入函数API下发的媒体访问指令或媒体数据处理指令。例如:获取触觉媒体文件、为触觉媒体文件建立合适的管线以将触觉媒体文件的数据转化为指令中规定的格式、同时为处理为场景描述文件中规定格式的触觉媒体数据和其他媒体数据分配合适的缓存等。

在一些实施例中,媒体接入函数获取触觉媒体文件,包括:使用网络传输服务从服务器中下载触觉媒体文件。

在一些实施例中,媒体接入函数获取触觉媒体文件,包括:从本地存储空间中读取触觉媒体文件。

媒体接入函数获取触觉媒体文件后,需要对触觉媒体文件进行处理。不同类型的媒体文件的处理过程存在较大差异,为了实现广泛的媒体类型支持,也考虑到媒体接入函数的工作效率,于是在媒体接入函数中设计了多种管线,在处理媒体文件的过程中只启用匹配于媒体类型的管线即可。

5、支持获取参考类型的触觉材质属性的触觉值的缓存API

媒体接入函数通过触觉媒体文件的数据的处理后,媒体接入函数还需要将经过处理的数据需要以规范的排列结构交付给显示引擎,这需要将经过处理的数据正确地存储在缓存中,该工作由缓存管理模块完成,但是缓存管理模块需要通过缓存API从媒体接入函数或显示引擎获取缓存管理指令。

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

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

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

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

6、支持获取参考类型的触觉材质属性的触觉值的缓存管理模块

在沉浸式媒体的场景描述框架的工作流程中,媒体接入函数通过管线完成了触觉媒体文件的数据的处理后,经过处理的数据需要以规范的排列结构交付给显示引擎,这需要将经过处理的数据正确地存储在缓存器中,该工作由缓存管理模块负责。

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

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

S101、在待渲染三维场景中包括触觉媒体文件时,确定所述触觉媒体文件的各个触觉材质属性的类型。

本申请实施例中的触觉材质属性可以包括:刚度(stiffness)、摩擦力(Friction)、触觉纹理(Vibrotactile texture)、温度(Temperature)、振动(Vibration)以及自定义属性中的一种或多种。触觉材质属性的类型包括:高分辨率(High_resolution)、低分辨率(Low_resolution)以及参考(Reference)。

需要说明的是,所述触觉媒体文件中的不同触觉材质属性的类型可以不同,因此触觉媒体文件中可以包括多种不同类型的触觉材质属性,且在确定所述触觉媒体文件的各个触觉材质属性的类型时,需要逐一确定每一个触觉材质属性的类型。

在上述步骤S101中,若所述触觉媒体文件的第一触觉材质属性的类型为参考(Reference),则执行如下步骤S102~S104:

S102、在所述待渲染三维场景的场景描述文件的目标纹理描述模块中添加MPEG触觉纹理(MPEG_texture_Haptic)。

其中,所述目标纹理描述模块为所述场景描述文件的纹理列表(textures)中所述第一触觉材质属性对应的纹理描述模块。

示例性的,当所述目标纹理描述模块中的采样器语法元素的值为0,所述目标纹理描述模块中的采纹理贴图语法元素的值为2,则在所述目标纹理描述模块中添加MPEG触觉纹理后,所述目标纹理描述模块可以如下所示:

其中,n+4~n+6行的内容为在目标节点描述模块中添加的MPEG触觉纹理(MPEG_texture_Haptic)。

S103、在所述MPEG触觉纹理中添加访问器索引语法元素(accessor)。

承上实施例所述,在所述MPEG触觉纹理中添加访问器索引语法元素之后,所述目标纹理描述模块可以如下所示:

其中,第n+6行的内容为在所述MPEG触觉纹理中添加的访问器索引语法元素。

S104、将所述访问器索引语法元素的值设置为触觉媒体访问器对应的访问器描述模块的索引值。

其中,所述触觉媒体访问器为用于访问所述触觉媒体文件的解码数据的访问器。

承上实施例所述,若用于访问所述触觉媒体文件的解码数据触觉媒体访问器对应的访问器描述模块的索引值为2时,则在所述MPEG触觉纹理中添加访问器索引语法元素(accessor),以及将所述访问器索引语法元素的值设置为所述触觉媒访问器对应的访问器描述模块的索引值之后,所述目标纹理描述模块可以如下所示:

其中,第n+6行的"accessor":2为在所述MPEG触觉纹理中添加的访问器索引语法元素以及所述访问器索引语法元素的值。“2”同时为用于访问所述触觉媒体文件的解码数据的触觉媒体访问器对应的访问器描述模块的索引值。

本申请实施例提供的场景描述文件的生成方法在待渲染三维场景中包括触觉媒体文件,且所述触觉媒体文件的第一触觉材质属性的类型为参考时,首先在所述第一触觉材质属性对应的目标纹理描述模块中添加MPEG触觉纹理,然后再在所述MPEG触觉纹理中添加访问器索引语法元素,以及将所述访问器索引语法元素的值设置为用于访问所述触觉媒体文件的解码数据访问器对应的访问器描述模块的索引值。由于本申请实施例提供的场景描述文件的生成方法在待渲染三维场景中包括触觉媒体文件,且所述触觉媒体文件的第一触觉材质属性的类型为参考时,在所述MPEG触觉纹理中添加了访问器索引语法元素,以及将所述访问器索引语法元素的值设置为了用于访问所述触觉媒体文件的解码数据访问器对应的访问器描述模块的索引值,因此在根据场景描述文件进行待渲染三维场景时,可以根据所述访问器索引语法元素及其值确定用于访问所述触觉媒体文件的解码数据访问器,进而根据用于访问所述触觉媒体文件的解码数据访问器从所述媒体文件中读取所述第一触觉材质属性的触觉值,因此本申请实施例可以支持获取参考类型的触觉材质属性的触觉值,解决相关技术中无法获取参考类型的触觉材质属性的触觉值的问题。

在一些实施例中,在上步骤S104(将所述访问器索引语法元素的值设置为触觉媒体访问器对应的访问器描述模块的索引值)之前,本申请实施例提供的方法还包括如下步骤a~步骤c:

步骤a、在所述场景描述文件的缓存器列表(buffers)中添加触觉媒体缓存器对应的缓存器描述模块。

其中,所述触觉媒体缓存器为用于缓存所述触觉媒体文件的解码数据的缓存器。

在一些实施例中,上述步骤a(在所述场景描述文件的缓存器列表中添加触觉媒体缓存器对应的缓存器描述模块)包括如下步骤a1~a5中的至少一项:

步骤a1、在所述触觉媒体缓存器对应的缓存器描述模块中添加字节长度语法元素(byteLength),并将所述字节长度语法元素的值设置为所述触觉媒体文件的解码数据的字节长度。

步骤a2、在所述触觉媒体缓存器对应的缓存器描述模块中添加MPEG环形缓存器。

步骤a3、在所述MPEG环形缓存器中添加数量语法元素(count),以及根据预配置的所述MPEG环形缓存器的存储环节数量设置所述数量语法元素的值。

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

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

示例性的,若在所述场景描述文件的缓存器列表中添加触觉媒体缓存器对应的缓存器描述模块包括上步骤a1~a5中的每一项,且触觉媒体文件的解码数据的字节长度为5000,所述预配置的所述MPEG环形缓存器的存储环节数量为6,所述触觉媒体文件对应的媒体描述模块的索引值为1,所述MPEG环形缓存器存储的数据的轨道索引值为0,则在所述场景描述文件的缓存器列表中添加的触觉媒体缓存器对应的缓存器描述模块可以如下所示:

步骤b、在所述场景描述文件的缓存切片列表(bufferViews)中添加所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块。

在一些实施例中,上述步骤b(在所述场景描述文件的缓存切片列表中添加所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块)包括如下步骤b1~b3中的至少一项:

步骤b1、在所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块中添加缓存器索引语法元素(buffer),并根据所述触觉媒体缓存器对应的缓存器描述模块的索引值设置所述缓存器索引语法元素的值。

步骤b2、在所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块中添加字节长度语法元素(byteLength),并根据对应缓存切片的容量设置所述字节长度语法元素的值。

步骤b3、在所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块中添加偏移量语法元素,并根据对应缓存切片的存储数据的偏移量设置所述偏移量语法元素的值。

示例性的,若在所述场景描述文件的缓存切片列表(bufferViews)中添加所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块包括上步骤b1~b3中的每一项,触觉媒体缓存器对应的缓存器描述模块的索引值为1,触觉媒体缓存器的容量为8000,且触觉媒体缓存器仅包括一个缓存切片,则在所述场景描述文件的缓存切片列表中添加所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块可以如下所示:

步骤c、在所述场景描述文件的访问器列表(accessors)中添加用于访问所述触觉媒体缓存器的缓存切片中的数据的所述触觉媒体访问器对应的访问器描述模块。

由于所述触觉媒体缓存器的缓存切片中的数据为所述触觉媒体文件的解码数据,因此用于访问所述触觉媒体缓存器的缓存切片中的数据的访问器即为用于访问所述触觉媒体文件的解码数据的访问器。

在一些实施例中,上述步骤c(在所述场景描述文件的访问器列表(accessors)中添加用于访问所述触觉媒体缓存器的缓存切片中的数据的所述触觉媒体访问器对应的访问器描述模块)包括如下步骤c1~c6中的至少一项:

步骤c1、在所述访问器描述模块中添加数据类型语法元素(componentType),并根据所述第一触觉材质属性的触觉值的数据类型设置所述数据类型语法元素的值。

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

步骤c3、在所述访问器描述模块中添加数量语法元素(count),并根据第一触觉材质属性的触觉值的数量设置所述数量语法元素的值。

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

步骤c5、在所述MPEG时变访问器中添加缓存切片索引语法元素(bufferView),并根据所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块的索引值设置所述缓存切片索引语法元素的值。

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

示例性的,若在所述场景描述文件的访问器列表中添加用于从所述触觉媒体缓存器的缓存切片中访问所述第一触觉材质属性的触觉值的访问器对应的访问器描述模块包括上步骤c1~c6中的每一项,所述第一触觉材质属性的触觉值的数据类型为5123,所述预配置的访问器类型为SCALAR,所述第一触觉材质属性的触觉值的数量为3000,所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块的索引值为1,且对应的访问器内的语法元素的取值随时间变化,则在所述场景描述文件的访问器列表中添加用于从所述触觉媒体缓存器的缓存切片中访问所述第一触觉材质属性的触觉值的访问器对应的访问器描述模块可以如下所示:

在一些实施例,所述场景描述文件生成方法还包括如下步骤1和步骤2:

步骤1、在目标节点描述模块的MPEG触觉(MPEG_haptic)中添加媒体参考列表(Media_reference)。

其中,所述目标节点描述模块为包括目标三维网格的节点对应的节点描述模块,所述目标三维网格为承载有所述第一触觉材质属性的三维网格。

示例性的,当所述目标三维网格对应的网格描述模块的索引值为0,所述目标节点描述模块对应的节点的名称为:Hapticexample_node,则在目标节点描述模块的MPEG触觉(MPEG_haptic)中添加媒体参考列表(Media_reference)后,目标节点描述模块可以如下所示:

其中,n+4~n+7行的内容为目标节点描述模块的MPEG触觉,n+6行的内容为在所述MPEG触觉中添加的媒体参考列表(Media_reference)。

步骤2、在所述媒体参考列表中添加目标媒体描述模块的索引值。

其中,所述目标媒体描述模块为所述触觉媒体文件对应的媒体描述模块。

需要说明的是,待渲染三维场景中可能会包括多个触觉媒体文件,且目标节点描述模块对应的节点可能包括承载有多个触觉媒体文件的参考类型的触觉材质属性的三维网格,当目标节点描述模块对应的节点包括承载有多个触觉媒体文件的参考类型的触觉材质属性的三维网格时,需要在所述MPEG触觉的媒体参考列表中添加每一个触觉媒体文件的对应的媒体媒体描述模块的索引值。

承上实施例所述,目标节点描述模块对应的节点包括承载有触觉媒体文件A的参考类型的触觉材质属性的三维网格,以及承载有触觉媒体文件B的参考类型的触觉材质属性的三维网格,且触觉媒体文件A对应的媒体描述模块的索引值为0,触觉媒体文件B对应的媒体描述模块的索引值为1,则目标节点描述模块可以如下所示:

其中,第n+6行的"Media_reference":0,1中的0和1分别为触觉媒体文件A对应的媒体描述模块的索引值和触觉媒体文件B对应的媒体描述模块的索引值。

在一些实施例中,在上步骤2(在所述媒体参考列表中添加目标媒体描述模块的索引值)之前,本申请实施例提供的方法还包括如下步骤3:

步骤3、在所述场景描述文件的MPEG媒体(MPEG_media)的媒体列表(media)中添加所述触觉媒体文件对应的目标媒体描述模块。

在一些实施例中,上述步骤3(在所述场景描述文件的缓存切片列表中添加所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块)包括如下步骤11~19中的至少一项:

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

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

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

步骤14、在所述目标媒体描述模块中添加可选项(alternatives)。

步骤15、在所述可选项中添加媒体类型语法元素(mimeType),并根据所述触觉媒体文件包含的数据设置所述媒体类型语法元素的值。

在一些实施例中,根据所述触觉媒体文件包含的数据设置所述媒体类型语法元素的值包括:

当所述触觉媒体文件包括音频和/或视频数据时,将所述目标媒体描述模块的可选项中的媒体类型语法元素的值设置为第一预设值;

当所述触觉媒体文件不包括音频和/或视频数据时,将所述目标媒体描述模块的可选项中的媒体类型语法元素的值设置为第二预设值。

示例性的,所述第一预设值可以为video/mp4,所述第一预设值可以为haptics/mp4。即,当所述触觉媒体文件仅包括触觉数据时,将媒体类型语法元素的值设置为haptics/mp4,当所述触觉媒体文件包括不但触觉数据,而且还包括音频和/或视频数据时将媒体类型语法元素的值设置为video/mp4。

当所述触觉媒体文件包括不但触觉数据,而且还包括音频和/或视频数据时,将媒体类型语法元素的值设置为video/mp4可以与现有的.mp4媒体文件向后兼容。

步骤16、在所述可选项中添加访问地址语法元素(uri),并将所述访问地址语法元素的值设置为所述触觉媒体文件的访问地址。

步骤17、在所述可选项中添加轨道数组(tracks)。

步骤18、在所述轨道数组中添加轨道索引语法元素(track),并将所述目标媒体描述模块的可选项的轨道数组中的轨道索引语法元素的值设置为所述触觉媒体文件的各个码流轨道的索引值。

即,当编码后的触觉媒体作为MPEG_media.alternative.tracks中的一项被场景描述文件引用,并且被引用的项符合ISO/IEC 23090-32标准里关于ISOBMFF中track的规定时:对于单轨道封装的触觉媒体文件,在MPEG_media中引用的轨道就是触觉封装的单轨道。例如,触觉媒体被ISOBMFF封装成一条MIHS轨道,则在MPEG_media中引用的轨道就是这条MIHS轨道。对于多轨道封装的触觉媒体文件,在MPEG_media中引用的参考轨道的选取应该遵ISO/IEC 23090-32标准的相关规定。例如,提前在封装文件的配置信息alternate_group的TrackHeaderBox中定义非零值,说明此时触觉媒体被封装成多条MIHS轨道,这些轨道也是MPEG_media索引到的轨道。

步骤19、在所述轨道数组中添加编解码参数语法元素(codec),并根据所述触觉媒体文件的各个码流轨道中的数据的编码参数和ISO/IEC 23090-32触觉数据传输标准的规定,设置所述编解码参数语法元素的值。

在IETF RFC 6381中定义的,包含在轨道数组(tracks)中的媒体的编解码器参数。当轨道数组包含不同类型的编解码器(例如AdaptationSet包含具有不同编解码器的表示)时,编解码参数语法元素可以用逗号分隔的编解码器值列表来表示。

当媒体数据为触觉数据时,应遵循ISO/IEC 23090-32触觉数据传输标准(Carriage of haptics data)里的相关详细规定。例如在触觉数据采用ISMBOFF封装时,该编解码参数语法元素第一组元素是表示ISO/IEC 23090-31中编解码器的代码,编解码参数语法元素的值的形式如下:‘codec=mih1.oo’其中“mih1”是触觉数据封装在ISOBMFF中的一类数据格式说明,该值并不唯一,允许其他符合ISOBMFF封装的样本格式名称进行替换。其中“oo”是MP4注册机构网站“对象类型”页面上定义的对象类型指示值。

示例性的,若在所述场景描述文件的MPEG媒体的媒体列表中添加所述触觉媒体文件对应的目标媒体描述模块包括上步骤11~19中的每一项,所述触觉媒体文件的名称为Hapticexample,所述触觉媒体文件需要自动播放和循环播放,所述触觉媒体文件不包括音频数据和/或视频数据,所述触觉媒体文件的访问地址为www.example.com/Hapticexample1.mp4,所述触觉媒体文件为单轨道封装文件,且码流轨道的索引值为1,则所述目标媒体描述模块可以如下所示:

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

在所述场景描述文件的场景列表(scenes)中添加所述待渲染三维场景对应的目标场景描述模块,以及在所述目标场景描述模块的节点索引列表(nodes)中添加所述待渲染场景中的各个节点对应的节点描述模块的索引值。

示例性的,若所述待渲染场景包括两个节点,且该两个节点对应的节点描述模块的索引值分别为0和1,则所述目标场景描述模块可以如下所示:

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

在所述场景描述文件的节点列表(nodes)中添加所述待渲染场景中的各个节点对应的节点描述模块;以及在各个节点描述模块的网格索引列表(mesh)中添加各个节点中的各个三维网格对应的网格描述模块的索引值。

需要说明的是,在所述场景描述文件的节点列表中添加所述待渲染场景中的各个节点对应的节点描述模块时,需要根据是否包括承载有的触觉材质属性的三维网格以及承载的触觉材质属性的类型将所述待渲染场景中的节点分为三类,对于不包括承载有的触觉材质属性的三维网格的节点,对应的节点节点描述模块仅需要在各个节点描述模块的网格索引列表中添加各个节点中的三维网格对应的网格描述模块的索引值即可。对于包括承载有参考类型的触觉材质属性的三维网格且承载的触觉材质属性的类型为不为参考(高分辨率或低分辨率)的节点,则需要进一步在对应的节点描述模块中添加MPEG触觉(MPEG_haptic)。对于包括承载有参考类型的触觉材质属性的三维网格且承载的触觉材质属性的类型为为参考的节点,对应的节点描述模块生成方式与上述实施例中的目标节点描述模块的生成方式与上述实施例类似,在此不再赘述。

示例性的:某一节点不包括承载有所述触觉媒体文件中的触觉材质属性的三维网格,该节点的名称为Hapticexample_node1,且该节点仅包括一个对应的网格描述模块的索引值为2的三维网格,则则该节点对应的节点描述模块可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:在所述场景描述文件的网格列表中添加所述目标三维网格对应的网格描述模块。

在所述场景描述文件的场景列表中添加所述待渲染场景的各个节点挂载的三维网格对应的网格描述模块时,需要根据是否承载有触觉材质属性将所述待渲染场景中的三维网格分为两类,分别为未承载触觉材质属性的三维网格和承载了触觉材质属性的三维网格。

对于未承载触觉材质属性的三维网格,在所述场景描述文件的网格列表中添加对应的网格描述模块,包括如下步骤d1~d5中的至少一项:

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

步骤d2、在该三维网格对应的网格描述模块中添加属性(primitives)。

步骤d3、在所述属性中添加基元(attributes)。

步骤d4、在所述基元中添加纹理坐标语法元素(TEXCOORD_n),并将所述纹理坐标语法元素的值设置为纹理坐标访问器对应的访问器描述模块的索引值。

其中,所述纹理坐标访问器为用于访问该三维网格的纹理坐标的访问器。

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

示例性的,若在所述场景描述文件的网格列表中添加所述目标三维网格对应的网格描述模块包括上述步骤d1~d5中的每一项,某一三维网格未承载触觉材质属性,该三维网格的名称为Example_mesh,且该三维网格的拓扑结构为散点,则在所述场景描述文件的网格列表中添加的该三维网格对应的网格描述模块可以如下所示:

对于承载了触觉材质属性的三维网格(包括承载所述第一触觉材质属性的目标三维网格),在所述场景描述文件的网格列表中添加对应的网格描述模块,包括如下步骤d1~d5中的至少一项的同时,还包括如下步骤d6和d7:

步骤d6、在该三维网格对应的网格描述模块中添加MPEG触觉材质(MPEG_material_Haptic)。

步骤d7、在所述MPEG触觉材质中添加数组索引语法元素(index),并将所述数组索引语法元素的值设置为该三维网格的触觉材质属性数组的索引值。

示例性的,若在所述场景描述文件的网格列表中添加所述目标三维网格对应的网格描述模块包括上述步骤d1~d7中的每一项,某一三维网格承载了触觉材质属性,该三维网格的名称为Hapticexample_mesh,该三维网格的拓扑结构为散点,且该三维网格的触觉材质属性数组的索引值为2,则在所述场景描述文件的网格列表中添加的该三维网格对应的网格描述模块可以如下所示:

在一些实施例中,在将所述纹理坐标语法元素(TEXCOORD_n)的值设置为纹理坐标访问器对应的访问器描述模块的索引值之前,本申请实施例提供的方法还包括如下步骤e~步骤g:

步骤e、在所述场景描述文件的缓存器列表(buffers)中添加纹理坐标缓存器对应的缓存器描述模块。

其中,所述纹理坐标缓存器为用于缓存所述目标三维网格的纹理坐标的缓存器。

在一些实施例中,上述步骤e(在所述场景描述文件的缓存器列表中添加纹理坐标缓存器对应的缓存器描述模块)包括如下步骤e1和e2中的至少一项:

步骤e1、在所述纹理坐标缓存器对应的缓存器描述模块中添加字节长度语法元素(byteLength),并将所述字节长度语法元素的值设置为所述目标三维网格的纹理坐标的字节长度。

步骤e2、在所述纹理坐标缓存器对应的缓存器描述模块中添加纹理坐标访问地址语法元素(uri),并将所述纹理坐标访问地址语法元素的值设置为所述目标三维网格的纹理坐标的访问地址。

示例性的,若在所述场景描述文件的缓存器列表(buffers)中添加纹理坐标缓存器对应的缓存器描述模块包括上步骤e1和e2,且所述目标三维网格的纹理坐标的字节长度为1000,所述目标三维网格的纹理坐标的访问地址为AnimatedBody.bin,则在所述场景描述文件的缓存器列表中添加的纹理坐标缓存器对应的缓存器描述模块可以如下所示:

如上所示,纹理坐标缓存器对应的缓存器描述模块与触觉媒体缓存器对应的缓存器描述模块的最大不同之处在于,纹理坐标缓存器对应的缓存器描述模块中年再索引MPEG媒体中声明的媒体文件,而是直接添加纹理坐标的访问地址,通过纹理坐标的访问地址进行纹理坐标的访问。

步骤f、在所述场景描述文件的缓存切片列表(bufferViews)中添加所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块。

在一些实施例中,上述步骤f(在所述场景描述文件的缓存切片列表中添加所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块)包括如下步骤f1~f3中的至少一项:

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

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

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

示例性的,若在所述场景描述文件的缓存切片列表(bufferViews)中添加所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块包括上步骤f1~f3中的每一项,纹理坐标缓存器对应的缓存器描述模块的索引值为0,纹理坐标缓存器的容量为4000,且纹理坐标缓存器仅包括一个缓存切片,则在所述场景描述文件的缓存切片列表中添加所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块可以如下所示:

步骤g、在所述场景描述文件的访问器列表(accessors)中添加用于从所述纹理坐标缓存器的缓存切片中访问所述第一触觉材质属性的触觉值的访问器对应的访问器描述模块。

在一些实施例中,上述步骤g(在所述场景描述文件的访问器列表(accessors)中添加用于访问所述纹理坐标缓存器的缓存切片中的数据的访问器对应的访问器描述模块)包括如下步骤g1~g4中的至少一项:

步骤g1、在所述访问器描述模块中添加缓存切片索引语法元素(bufferView),并根据所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块的索引值设置所述缓存切片索引语法元素的值。

步骤g2、在所述访问器描述模块中添加数据类型语法元素(componentType),并根据所述第一触觉材质属性的触觉值的数据类型设置所述数据类型语法元素的值。

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

步骤g4、在所述访问器描述模块中添加数量语法元素(count),并根据第一触觉材质属性的触觉值的数量设置所述数量语法元素的值。

示例性的,若在所述场景描述文件的访问器列表中添加用于从所述纹理坐标缓存器的缓存切片中访问所述第一触觉材质属性的触觉值的访问器对应的访问器描述模块包括上步骤g1~g4中的每一项,所述目标三维网格的文理坐标的数据类型为5121,所述预配置的访问器类型为VEC2,所述目标三维网格的文理坐标的数量为800,所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块的索引值为0,则在所述场景描述文件的访问器列表中添加的用于从所述纹理坐标缓存器的缓存切片中访问所述第一触觉材质属性的触觉值的访问器对应的访问器描述模块可以如下所示:

在一些实施例中,在将所述数组索引语法元素的值设置为所述目标三维网格的触觉材质属性数组的索引值之前,本申请实施例提供的方法还包括如下步骤h~步骤k:

步骤h、在所述场景描述文件中添加触觉材质数组列表(MPEG_material_Haptic)。

步骤j、在所述触觉材质数组列表中添加各个承载了触觉材质属性的三维网格(包括承载所述第一触觉材质属性的目标三维网格)的触觉材质属性数组。

其中,各个三维网格的触觉材质属性数组包括各个三维网格所承载的各个触觉材质属性对应的触觉材质属性描述模块,任一触觉材质属性对应的触觉材质属性描述模块包括:纹理数组(texture)和属性类型语法元素(type);所述纹理数组包括:纹理索引语法元素(index)和纹理坐标索引语法元素(texCoord)。

由于各个三维网格的触觉材质属性数组包括各个三维网格所承载的各个触觉材质属性对应的触觉材质属性描述模块,任一触觉材质属性对应的触觉材质属性描述模块包括:纹理数组和属性类型语法元素;所述纹理数组包括:纹理索引语法元素和纹理坐标索引语法元素,因此上述步骤j(在所述触觉材质数组列表中添加各个承载了触觉材质属性的三维网格的触觉材质属性数组),包括如下步骤j1~j3以生成所述场景描述文件的触觉材质属性数组列表(MPEG_material_Haptic):

步骤j1、在各个三维网格的触觉材质属性数组中添加各个各个三维网格所承载的各个触觉材质属性对应的触觉材质属性描述模块。

步骤j2、在各个触觉材质属性描述模块中添加纹理数组(texture)和属性类型语法元素(type)。

步骤j3、在各个纹理数组中添加纹理索引语法元素和纹理坐标索引语法元素(texCoord)。

步骤i、将各个触觉材质属性对应的触觉材质属性描述模块的纹理数组中的纹理索引语法元素(index)的值设置为各个触觉材质属性对应的纹理描述模块的索引值。

步骤j、将各个触觉材质属性对应的触觉材质属性描述模块的纹理数组中的纹理坐标索引语法元素(texCoord)的值设置为对应的三维网格的纹理坐标语法元素的索引值。

步骤k、将各个触觉材质属性对应的触觉材质属性描述模块中的属性类型语法元素的值设置为各个触觉材质属性的类型。

示例性的,若某一三维网格承载的触觉材质属性包括刚度和温度,所述刚度的类型的低分辨率、所述温度的类型为高分辨率,则该三维网格的触觉材质属性数组可以如下所示:

示例性的,若所述待渲染场景中的两个三维网格承载有触觉材质属性,一个三维网格承载的触觉材质属性为刚度,类型为低分辨率,另一个网格描述模块承载的触觉材质属性为温度,类型为参考,则在所述场景描述文件中添加的触觉材质数组列表可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:在将各个触觉材质属性对应的触觉材质属性描述模块的纹理数组中的纹理索引语法元素的值设置为各个触觉材质属性对应的纹理描述模块的索引值之前,所述方法还包括执行如下步骤l~n以生成所述场景描述文件的纹理列表(textures):

步骤l、在所述场景描述文件的纹理列表中添加各个触觉材质属性对应的纹理描述模块。

其中,任一触觉材质属性对应的纹理描述模块包括:纹理贴图语法元素(source)和采样器语法元素(sampler)。

步骤m、将各个触觉材质属性对应的纹理描述模块中的纹理贴图语法元素的值设置为各个触觉材质属性的纹理贴图的访问地址的索引值。

步骤n、将各个触觉材质属性对应的纹理描述模块中的采样器语法元素的值设置为各个触觉材质属性的采样器对应的采样器描述模块的索引值。

需要说明的是,对于高分辨率或低分辨率类型的触觉材质属性,执行上述步骤l~n即可在纹理列表中生成对应的纹理描述模块,而对于参考类型的触觉材质属性,则需要进一步执行图10所示步骤,以在纹理列表中生成对应的纹理描述模块。

示例性的,若某一低分辨率类型的触觉材质属性对应的纹理贴图的访问地址的索引值为2,且该触觉材质属性采样器对应的采样器描述模块的索引值为3,则在所述场景描述文件的纹理列表中添加的该触觉材质属性对应的纹理描述模块可以如下所示:

示例性的,若所述场景描述文件中包括三个触觉材质属性对应的纹理描述模块,且三个触觉材质属性的类型依次为高分辨率、低分辨率以及参考,则所述场景描述文件的纹理列表可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:在将各个触觉材质属性对应的纹理描述模块中的纹理贴图语法元素的值设置为各个触觉材质属性的纹理贴图的访问地址的索引值之前,在所述场景描述文件的纹理贴图列表(images)中添加所述触觉媒体文件的各个触觉材质属性的纹理贴图的访问地址。

需要说明的是,若某一触觉材质属性的类型为高分辨率或低分辨率,则该触觉材质属性的纹理贴图中存储的是该触觉材质属性的触觉值,而若某一触觉材质属性的类型为参考,则该触觉材质属性的纹理贴图中存储的是该触觉材质属性对应触觉媒体文件的索引值。

示例性的,若某一触觉材质属性的纹理贴图的访问地址为temperatureTexture.png,则在所述场景描述文件的纹理列表中添加的该触觉材质属性的纹理贴图的访问地址可以如下所示:

示例性的,若所述场景描述文件中包括三个触觉材质属性的纹理贴图的访问地址,则所述场景描述文件的纹理贴图列表可以如下所示:

在一些实施例中,所述场景描述文件的生成方法还包括:在将各个触觉材质属性对应的纹理描述模块中的采样器语法元素的值设置为各个触觉材质属性的采样器对应的采样器描述模块的索引值之前,在所述场景描述文件的采样器列表(samplers)中添加所述触觉媒体文件的各个触觉材质属性的采样器对应的采样器描述模块。

示例性的,若某一触觉材质属性的采样器的Mag滤波器参数为:9729、Min滤波器参数为:9987、水平包裹参数为:33648:数值包裹参数为:33648,则该触觉材质属性的采样器的描述模块可以如下所示:

示例性的,场景描述文件中仅包括一个采样器描述模块,则场景描述文件中的采样器列表可以如下所示:

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

在所述场景描述文件中添加数字资产描述模块(asset),在所述数字资产描述模块中添加版本语法元素(version)以及在所述场景描述文件为基于glTF2.0版本编写场景描述文时,将所述版本语法元素的值设置为2.0。

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

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

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

示例性的,场景描述文件中使用的MPEG扩展包括:MPEG媒体(MPEG_media)、MPEG环形缓存器(MPEG_buffer_circular)、MPEG时变访问器(MPEG_accessor_timed)、MPEG触觉(MPEG_Haptic)、MPEG触觉材质(MPEG_material_Haptic)以及MPEG触觉纹理(MPEG textureHaptic),则在所述场景描述文件中添加的扩展使用描述模块可以如下所示:

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

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

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

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

S111、根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属性的类型。

本申请实施例中的触觉材质属性可以包括:刚度(stiffness)、摩擦力(Friction)、触觉纹理(Vibrotactile texture)、温度(Temperature)、振动(Vibration)以及自定义类型中的一种或多种。触觉材质属性的类型包括:高分辨率(High_resolution)、低分辨率(Low_resolution)以及参考(Reference)。

需要说明的是,一个三维网格可以承载多个不同类型的触觉材质属性,因此根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属性的类型时,需要逐一确定每一个三维网格承载的每一个触觉材质属性的类型。

在上步骤S111中,若所述待渲染三维场景中的目标三维网格承载的第一触觉材质属性的类型为参考(Reference),则执行如下步骤S112和S113:

S112、获取目标纹理描述模块的MPEG触觉纹理(MPEG_texture_Haptic)的中的访问器索引语法元素(accessor)声明的索引值。

其中,所述目标纹理描述模块为所述第一触觉材质属性对应的纹理描述模块。

示例性的,当第一触觉材质属性对应的目标纹理描述模块如下所示:

则,可以获取所述第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理(MPEG_texture_Haptic)的中的访问器索引语法元素(accessor)声明的索引值为0。

S113、根据所述访问器索引语法元素声明的索引值获取用于访问目标触觉媒体文件的解码数据的触觉媒体访问器的描述信息。

其中,所述目标触觉媒体文件为所述第一触觉材质属性所属的触觉媒体文件。

承上实施例,所述目标纹理描述模块的MPEG触觉纹理(MPEG_texture_Haptic)的中的访问器索引语法元素(accessor)声明的索引值为0,因此根据访问器列表中的第一个访问器描述模块获取所述触觉媒体访问器的描述信息。

本申请实施例提供的场景描述文件解析方法在获取场景描述文件后,首先根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属性的类型,并在待渲染三维场景中的目标三维网格承载的第一触觉材质属性的类型为参考时,获取第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值,以及根据所述访问器索引语法元素声明的索引值获取用于访问所述第一触觉材质属性所属的目标触觉媒体文件的解码数据的触觉媒体访问器的描述信息。由于本申请实施例可以在目标三维网格承载的第一触觉材质属性的类型为参考时,获取第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值,以及根据所述访问器索引语法元素声明的索引值获取用于访问所述目标触觉媒体文件的解码数据的触觉媒体访问器的描述信息,因此本申请实施例可以根据所述触觉媒体访问器的描述信息构建所述触觉媒体访问器,进而通过所述触觉媒体访问器访问所述目标触觉媒体文件的解码数据,获取所述第一触觉材质属性的触觉值,因此本申请实施例可以支持获取参考类型的触觉材质属性的触觉值,解决相关技术中无法获取参考类型的触觉材质属性的触觉值的问题。

作为上述场景描述文件的解析方法的扩展和细化,本申请提供了另一种场景描述文件的解析方法,参照图12所示,该场景描述文件的解析方法包括:

S1201、从场景描述文件的场景列表(scenes)中获取所述待渲染三维场景对应的目标场景描述模块。

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

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

S1202、获取所述目标场景描述模块的节点索引列表(nodes)声明的索引值。

示例性的,当所述目标场景描述模块的节点索引列表如下所示:

则,可以获取的所述目标场景描述模块的节点索引列表声明的索引值为0。

S1203、根据所述目标场景描述模块的节点索引列表声明的索引值,从所述场景描述文件的节点列表中获取所述待渲染三维场景中的各个节点对应的节点描述模块。

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

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

S1204、获取所述待渲染三维场景中各个节点对应的节点描述模块的网格索引列表(mesh)。

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

则,获取的该节点对应的节点描述模块的网格索引列表为"mesh":0,1。

S1205、根据所述待渲染三维场景中各个节点对应的节点描述模块的网格索引列表,从所述场景描述文件的网格列表(meshes)中获取所述待渲染三维场景中的各个三维网格对应的网格描述模块。

示例性的,当所述待渲染三维场景中包括节点1和节点2,节点1对应的节点描述模块的网格索引列表声明索引值包括:0和1,节点2对应的节点描述模块的网格索引列表声明索引值包括:1、2、3,则可以从从所述场景描述文件的网格列表中获取第一个网格描述模块、第二个网格描述模块、第三个网格描述模块以及第四个网格描述模块。

示例性的,所述待渲染三维场景中的网格描述模块可以如下所示:

示例性的,所述待渲染三维场景中的网格描述模块也可以如下所示:

S1206、获取各个三维网格对应的网格描述模块的MPEG触觉材质(MPEG_material_Haptic)中的数组索引语法元素(index)声明的索引值。

需要说明的是,在场景描述文件的网格列表中,一些网格描述模块中包括MPEG触觉材质,一些网格描述模块中不MPEG触觉材质,因此上步骤S1206仅针对包括MPEG触觉材质的网格描述模块执行即可。

S1207、根据各个三维网格对应的网格描述模块的MPEG触觉材质中的数组索引语法元素声明的索引值,从所述场景描述文件的触觉材质数组列表中获取各个三维网格的触觉材质属性数组。

示例性的,某一三维网格对应的网格描述模块的MPEG触觉材质中的数组索引语法元素声明的索引值为1,所述场景描述文件的触觉材质数组列表如下所示:

由于该三维网格对应的网格描述模块的MPEG触觉材质中的数组索引语法元素声明的索引值为1,因此可以根据三维网格对应的网格描述模块的MPEG触觉材质中的数组索引语法元素声明的索引值,从所述场景描述文件的触觉材质数组列表中获取第二个触觉材质数组,因此从所述场景描述文件的触觉材质数组列表中获取的该三维网格的触觉材质属性数组如下所示:

S1208、根据各个三维网格对应的触觉材质属性数组确定各个三维网格承载的各个触觉材质属性的类型。

在一些实施例中,上步骤S1208(根据各个三维网格对应的触觉材质属性数组确定各个三维网格承载的各个触觉材质属性的类型)的实现方式可以包括如下步骤12081~12083:

步骤12081、从各个三维网格对应的触觉材质属性数组中获取各个三维网格承载的各个触觉材质属性对应的触觉材质属性描述模块。

承上实施例所示,三维网格的触觉材质属性数组如下所示:

因此可以确定该三维网格仅承载有温度,且温度对应的触觉材质属性描述模块如下所示:

步骤12082、获取各个触觉材质属性对应的触觉材质属性描述模块中的属性类型语法元素(type)的值。

承上实施例所述,可以根据第n+18行的"type":Reference确定温度对应的触觉材质属性描述模块中的属性类型语法元素的值为Reference。

步骤12083、根据各个触觉材质属性对应的触觉材质属性描述模块中的属性类型语法元素的值,确定各个三维网格承载的各个触觉材质属性的类型。

承上实施例所述,温度对应的触觉材质属性描述模块中的属性类型语法元素的值为Reference,因此可以根据各个触觉材质属性对应的触觉材质属性描述模块中的属性类型语法元素的值,确定该三维网格承载的温度的类型为参考。

在上步骤S1208中,若所述待渲染三维场景中的目标三维网格承载的第一触觉材质属性的类型为参考,则执行如下步骤:

S1209、获取所述第一触觉材质属性对应的触觉材质属性描述模块的纹理数组(texture)中的纹理索引语法元素(index)声明的索引值。

示例性的,当第一触觉材质属性对应的触觉材质属性描述模块如下所示:

则,可以确定第一触觉材质属性对应的触觉材质属性描述模块的纹理数组(texture)中的纹理索引语法元素(index)声明的索引值索引值为2。

S1210、根据所述第一触觉材质属性对应的触觉材质属性描述模块的纹理数组中的纹理索引语法元素声明的索引值,从所述场景描述文件的纹理列表(textures)中获取所述第一触觉材质属性对应的目标纹理描述模块。

承上实施例所述,第一触觉材质属性描述模块的纹理数组(texture)中的纹理索引语法元素(index)声明的索引值索引值为2,则从场景描述文件的纹理列表(textures)中获取第三个纹理描述模块作为该触觉材质属性对应的纹理描述模块。

S1211、获取目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值。

其中,所述目标纹理描述模块为所述第一触觉材质属性对应的纹理描述模块。

S1212、根据所述访问器索引语法元素声明的索引值从所述场景描述文件的访问器列表(accessors)中获取所述触觉媒体访问器对应的访问器描述模块。

示例性的,所述访问器索引语法元素声明的索引值为1,则从所述场景描述文件的访问器列表中的第二个访问器描述模块作为所述触觉媒体访问器对应的访问器描述模块。

示例性的,所述访问器索引语法元素声明的索引值为3,则从所述场景描述文件的访问器列表中的第四个访问器描述模块作为所述触觉媒体访问器对应的访问器描述模块。

S1213、解析所述触觉媒体访问器对应的访问器描述模块获取所述触觉媒体访问器的描述信息。

示例性的,所述触觉媒体访问器对应的访问器描述模块如下所示:

则,解析所述触觉媒体访问器对应的访问器描述模块可以获取的信息包括:数据类型为5123;访问器类型为标量;数据数量为1000;访问器基于MPEG扩展的改造时变访问器;访问器访问对象为缓存切片列表中的第二个缓存切片描述模块对应的缓存切片;访问器的参数会随时间变化。

至此,通过解析场景描述文件可以获取能够访问第一触觉材质属性的触觉值的触觉媒体访问器的描述信息,进而通过所述触觉媒体访问器的描述信息构建所述触觉媒体访问器,以读取所述第一触觉材质属性的触觉值。

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

根据所述第一触觉材质属性对应的纹理描述模块中的采样器语法元素(sampler)声明的索引值,从所述场景描述文件的采样器列表(samplers)中获取各个触觉材质属性的采样器对应的采样器描述模块,以及根据所述第一触觉材质属性的采样器对应的采样器描述模块,获取所述第一触觉材质属性的采样器的描述信息。

例如:第一触觉材质属性对应的纹理描述模块中的采样器语法元素(sampler)声明的索引值为0,则从场景描述文件的采样器列表获取第一个采样器描述模块,并根据第一个采样器描述模块获取所述第一触觉材质属性的采样器的描述信息。

在一些实施例中,本申请实施例提供的场景描述文件解析方法还包括如下步骤Ⅰ~步骤Ⅲ:

步骤Ⅰ、根据所述第一触觉材质属性对应的触觉材质属性描述模块的纹理数组(texture)中的纹理坐标索引语法元素(texCoord)声明的索引值,从所述目标三维网格对应的网格描述模块的基元(primitives)的属性(attributes)中获取所述第一触觉材质属性对应的纹理坐标语法元素(TEXCOORD_n)。

例如:所述第一触觉材质属性对应的触觉材质属性描述模块的纹理数组(texture)中的纹理坐标索引语法元素(texCoord)及其值为:"texCoord":0,则从所述目标三维网格对应的网格描述模块的基元(primitives)的属性(attributes)中获取第一个纹理坐标语法元素(TEXCOORD_0)作为所述第一触觉材质属性对应的纹理坐标语法元素。

步骤Ⅱ、根据所述第一触觉材质属性对应的纹理坐标语法元素声明的索引值,获取所述第一触觉材质属性的纹理坐标访问器对应的访问器描述模块。

例如:所述第一触觉材质属性对应的纹理坐标语法元素及其值为:"TEXCOORD_0":0,则从所述场景描述文件的访问器列表(accessors)中获取第一访问器描述模块作为所述第一触觉材质属性的纹理坐标访问器对应的访问器描述模块。

步骤Ⅲ、根据所述第一触觉材质属性的纹理坐标访问器对应的访问器描述模块,获取所述第一触觉材质属性的纹理坐标访问器的描述信息。

示例性的,所述第一触觉材质属性的纹理坐标访问器对应的访问器描述模块如下所示:

则,解析所述第一触觉材质属性的纹理坐标访问器对应的访问器描述模块可以获取的信息包括:访问器访问对象为缓存切片列表中的第一个缓存切片描述模块对应的缓存切片,数据类型为5121;访问器类型为二维向量;数据数量为500。

至此,通过解析场景描述文件可以获取能够访问第一触觉材质属性对应的纹理坐标的纹理坐标访问器的描述信息,进而通过所述纹理坐标访问器的描述信息构建所述纹理坐标访问器,以读取所述第一触觉材质属性对应的纹理坐标。

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

当第二触觉材质属性的类型为高分辨率或低分辨率时,获取所述第二触觉材质属性对应的触觉材质属性描述模块的纹理数组(texture)中的纹理索引语法元素(index)声明的索引值;根据所述第二触觉材质属性对应的触觉材质属性描述模块的纹理数组中的纹理索引语法元素声明的索引值,从所述场景描述文件的纹理列表(textures)中获取所述第二触觉材质属性对应的纹理描述模块;获取所述第二触觉材质属性对应的纹理描述模块中的纹理贴图语法元素(source)声明的索引值和采样器语法元素(sampler)声明的索引值;根据所述第二触觉材质属性对应的纹理描述模块中的纹理贴图语法元素(source)声明的索引值,从所述场景描述文件的纹理贴图列表(images)中获取所述第二触觉材质属性的纹理贴图的访问地址,以及根据所述第二触觉材质属性对应的纹理描述模块中的采样器语法元素(sampler)声明的索引值,从所述场景描述文件的采样器列表(samplers)中获取第二触觉触觉材质属性的采样器的描述信息。

在一些实施例中,在从所述场景描述文件的纹理贴图列表中获取所述第二触觉材质属性的纹理贴图的访问地址之后,所述场景描述文件解析方法还包括:

根据所述第二触觉材质属性的纹理贴图的访问地址,获取所述第二触觉材质属性的纹理贴图;

根据所述第二触觉材质属性的纹理贴图获取所述第二触觉材质属性的触觉值。

由于当触觉材质属性的类型为高分辨率或低分辨率时,触觉材质属性的纹理贴图中存储的数据为触觉材质属性的触觉值,因此当触觉材质属性的类型为高分辨率或低分辨率时,可以通过上述实施例直接从触觉材质属性的纹理贴图中获取触觉材质属性的纹理贴图的访问地址,进而获取触觉材质属性的纹理贴图,获取触觉材质属性的触觉值。

需要说明的是,在一些实施例中,所述场景描述文件解析方法还可以包括:获取所述目标纹理描述模块中的纹理贴图语法元素(source)声明的索引值;根据所述目标纹理描述模块中的纹理贴图语法元素(source)声明的索引值,从所述场景描述文件的纹理贴图列表(images)中获取所述第一触觉材质属性的纹理贴图的访问地址。

在一些实施例中,在从所述场景描述文件的纹理贴图列表(images)中获取各个触觉材质属性的纹理贴图的访问地址之后,所述场景描述文件解析方法还包括:根据所述第一触觉材质属性的纹理贴图的访问地址,获取所述第一触觉材质属性的纹理贴图;根据所述第一触觉材质属性的纹理贴图获取所述第一触觉材质属性所属的触觉媒体文件的索引值。

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

从所述场景描述文件的缓存器列表中获取所述待渲染三维场景的各个缓存器对应的缓存器描述模块;根据各个缓存器对应的缓存器描述模块获取所述待渲染三维场景的各个缓存器的描述信息。

其中,缓存器的描述信息包括以下至少一项:

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

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

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

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

则,根据该缓存器对应的缓存器描述模块可以获取该缓存器的描述信息包括:该缓存器的容量为1000字节;该缓存器所缓存的数据的访问地址为AnimatedBody.bin。

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

从所述场景描述文件的缓存切片列表中获取所述待渲染三维场景的各个缓存器缓存器的各个缓存切片对应的缓存切片描述模块;根据各个缓存切片对应的缓存切片描述模块获取各个缓存切片的描述信息;

其中,缓存切片的描述信息包括以下至少一项:

缓存切片所属的缓存器、缓存切片的容量、缓存切片的偏移量。

例如:某一缓存切片对应的缓存切片描述模块如下所示:

则,根据该缓存切片对应的缓存切片描述模块可以获取该缓存切片的描述信息包括:该缓存切片为缓存器列表中的第三个缓存器描述模块对应的缓存器的缓存切片,该缓存切片的容量为4000字节,该缓存切片的偏移量为0。

在一些实施例中,所述场景描述文件解析方法还包括:从所述场景描述文件的访问器列表中获取所述待渲染三维场景的各个访问器对应的访问器描述模块;根据各个访问器对应的访问器描述模块获取各个访问器的描述信息;

其中,访问器的描述信息包括以下至少一项:

访问器所访问的缓存切片、访问器所访问的数据的数据类型、访问器的类型、访问器的数量、是否为MPEG变访问器、时变访问器所访问的缓存切片、访问器参数是否随时间变化。

例如:某一缓存切片对应的缓存切片描述模块如下所示:

则,解析该访问器对应的访问器描述模块获取的访问器的描述信息包括:该访问器所访问的数据的数据类型为5123,该访问器的类型为标量;该访问器的数量为1000,该访问器为基于MPEG扩展改造的时变访问器;该访问器所访问的缓存切片为索引值为1的缓存切片描述模块对应的缓存切片;该访问器的参数会随时间变化。

再例如:某一缓存切片对应的缓存切片描述模块如下所示:

则,解析该访问器对应的访问器描述模块获取的访问器的描述信息包括:该访问器所访问的缓存切片为索引值为0的缓存切片描述模块对应的缓存切片;该访问器所访问的数据的数据类型为5121;该访问器的类型为二维向量;该访问器的数量为500。

在一些实施例中,所述场景描述文件解析方法还包括:从所述场景描述文件的MPEG媒体扩展的媒体列表中获取所述待渲染三维场景中的各个媒体文件对应的媒体描述模块;根据各个媒体文件对应的媒体描述模块获取各个媒体文件的描述信息。

其中,媒体文件的描述信息包括以下至少一项:

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

示例性的,某一媒体文件对应的媒体描述模块入下所示:

则,根据该个媒体文件对应的媒体描述模块获取的媒体文件的描述信息包括:该媒体文件的名称为Hapticexample;该媒体文件自动播放;该媒体文件循环播放、该媒体文件的类型为仅包括触觉数据的触觉媒体文件;该媒体文件的访问地址为http://www.example.com/Hapticexample1.mp4、该媒体文件的封装文件的码流轨道的索引值为1、媒体文件的编解码参数为mih1.oo。

在一些实施例中,所述场景描述文件解析方法还包括:从所述场景描述文件获取场景声明(scene),根据所述场景声明所声明的索引值从所述场景描述文件的场景列表(scenes)中获取所述待渲染三维场景对应的目标场景描述模块。

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

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

例如:使用扩展描述模块如下所示:

则,根据所述使用扩展描述模块可以获取场景描述文件中使用的MPEG扩展包括:MPEG媒体(MPEG_media)、MPEG环形缓存器(MPEG_buffer_circular)、MPEG时变访问器(MPEG_accessor_timed)、MPEG触觉(MPEG_Haptic)以及MPEG触觉材质(MPEG_material_Haptic);共5个MPEG扩展。

在一些实施例中,所述场景描述文件解析方法还包括:获取所述场景描述文件中的数字资产描述模块(version),并根据所述数字资产描述模块确定所述场景描述文件的版本信息。

通过数字资产描述模块确定所述场景描述文件的版本信息后,基于场景描述文件的版本信息选用相应的场景描述文件解析器进行场景描述文件的解析,进而保证正确对场景描述文件进行解析。

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

S1301、根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属性的类型。

本申请实施例中的触觉材质属性可以包括:刚度(stiffness)、摩擦力(Friction)、触觉纹理(Vibrotactile texture)、温度(Temperature)、振动(Vibration)以及自定义中的一种或多种。触觉材质属性的类型包括:高分辨率(High_resolution)、低分辨率(Low_resolution)以及参考(Reference)。

需要说明的是,一个三维网格可以承载多个不同类型的触觉材质属性,因此根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属性的类型时,需要逐一确定每一个网格承载的每一个触觉材质属性的类型。

在上步骤S1301(根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属)中,若确定所述待渲染三维场景中的目标三维网格承载的第一触觉材质属性的类型为参考(Reference),则执行如下步骤S1302~S1304:

S1302、根据目标纹理描述模块的MPEG触觉纹理(MPEG_texture_Haptic)的中的访问器索引语法元素(accessor)声明的索引值创建触觉媒体访问器。

其中,所述目标纹理描述模块为所述第一触觉材质属性对应的纹理描述模块。

上述步骤S1302中获取显示引擎确定根据目标纹理描述模块的MPEG触觉纹理(MPEG_texture_Haptic)的中的访问器索引语法元素(accessor)声明的索引值的实现方式可以参照图12所示实施例,在此不再赘述。

S1303、通过所述触觉媒体访问器访问触觉媒体缓存器的缓存切片中的数据,以获取所述第一触觉材质属性的触觉值。

其中,所述触觉媒体缓存器为用于缓存所述目标触觉媒体文件的缓存器。

由于所述触觉媒体缓存器中保存的数据为对媒体接入函数对所述目标触觉媒体文件进行处理得到的解码数据,因此通过通过所述触觉媒体访问器访问触觉媒体缓存器的缓存切片中的数据,可以直接获取所述第一触觉材质属性的触觉值。

S1304、根据所述第一触觉材质属性的触觉值对所述待渲染三维场景进行渲染。

本申请实施例提供的三维场景的渲染方法在获取场景描述文件后,首先根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属性的类型,并在待渲染三维场景中的目标三维网格承载的第一触觉材质属性的类型为参考时,根据目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器,再通过所述触觉媒体访问器访问用于缓存所述目标触觉媒体文件的解码数据的触觉媒体缓存器的缓存切片中的数据,以获取所述第一触觉材质属性的触觉值,最后根据所述第一触觉材质属性的触觉值对所述待渲染三维场景进行渲染。由于本申请实施例可以在目标三维网格承载的第一触觉材质属性的类型为参考时,获取第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值,根据所述访问器索引语法元素声明的索引值创建触觉媒体访问器,以及通过触觉媒体访问器获取第一触觉材质属性的触觉值,并根据所述第一触觉材质属性的触觉值对所述待渲染三维场景进行渲染,本申请实施例可以支持获取参考类型的触觉材质属性的触觉值,解决相关技术中无法获取参考类型的触觉材质属性的触觉值的问题。

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

S1401、接收显示引擎发送的触觉媒体文件的描述信息、触觉媒体缓存器的描述信息以及所述触觉媒体缓存器的缓存切片的描述信息。

其中,所述触觉媒体文件中包括类型为参考的第一触觉材质属性的触觉值。

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

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

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

缓存器的容量、是否为MPEG的环形缓存器、环形缓存器的存储环节数量、环形缓存器所缓存的媒体文件对应的媒体描述模块的索引值、环形缓存器所缓存的媒体文件的数据的轨道索引值。

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

缓存切片所属的缓存器、缓存切片的容量、缓存切片的偏移量。

S1402、根据所述触觉媒体文件的描述信息获取所述触觉媒体文件的解码数据。

在一些实施例中,媒体接入函数根据所述触觉媒体文件的描述信息获取所述触觉媒体文件的解码数据,包括:

根据所述触觉媒体文件的描述信息创建用于处理所述触觉媒体文件的触觉媒体管线,通过所述触觉媒体管线获取所述触觉媒体文件,并对所述触觉媒体文件进行解封装和解码,以获取所述触觉媒体文件的解码数据。

S1403、根据所述触觉媒体缓存器的描述信息和所述触觉媒体缓存器的缓存切片的描述信息,将所述解码数据写入所述触觉媒体缓存器的缓存切片中。

将所述解码数据写入所述触觉媒体缓存器的缓存切片中后,显示引擎可以根据目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器,以及通过所述触觉媒体访问器访问所述触觉媒体缓存器的缓存切片中的数据获取所述第一触觉材质属性的触觉值。

其中,所述目标纹理描述模块为所述第一触觉材质属性对应的纹理描述模块。

本申请实施例提供的触觉媒体文件的处理方法在接收显示引擎发送的触觉媒体文件的描述信息、触觉媒体缓存器的描述信息以及所述触觉媒体缓存器的缓存切片的描述信息后,根据所述触觉媒体文件的描述信息获取所述触觉媒体文件的解码数据,并将根据所述触觉媒体缓存器的描述信息和所述触觉媒体缓存器的缓存切片的描述信息,将所述解码数据写入所述触觉媒体缓存器的缓存切片中,因此显示引擎可以根据第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器,以及通过所述触觉媒体访问器访问所述触觉媒体缓存器的缓存切片中的数据获取所述第一触觉材质属性的触觉值,因此本申请实施例可以支持获取参考类型的触觉材质属性的触觉值,解决相关技术中无法获取参考类型的触觉材质属性的触觉值的问题。

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

S1501、接收触觉媒体缓存器的描述信息和所述触觉媒体缓存器的缓存切片的描述信息。

其中,所述触觉媒体缓存器为用于缓存目标触觉媒体文件的缓存器,所述目标触觉媒体文件包括类型为参考的第一触觉材质属性。

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

缓存器的容量、是否为MPEG的环形缓存器、环形缓存器的存储环节数量、环形缓存器所缓存的媒体文件对应的媒体描述模块的索引值、环形缓存器所缓存的媒体文件的数据的轨道索引值。

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

缓存切片所属的缓存器、缓存切片的容量、缓存切片的偏移量。

S1502、根据所述触觉媒体缓存器的描述信息创建所述触觉媒体缓存器。

例如:触觉媒体缓存器的描述信息包括:触觉媒体缓存器的容量为2000字节;触觉媒体缓存器为基于MPEG扩展改造的环形缓存器,环形缓存器的存储环节数量为3,环形缓存器存储的媒体文件为MPEG媒体中声明的第一个媒体文件,环形缓存器所缓存的媒体文件的数据的轨道索引值为1,则所述缓存管理模块创建一个容量为2000字节、包含3个存储环节的环形缓存器作为所述触觉媒体缓存器。

S1503、根据所述触觉媒体缓存器的缓存切片的描述信息对所述触觉媒体缓存器进行缓存切片的划分。

承上实施例所述,环形缓存器所缓存的媒体文件的数据的轨道索引值为1,则所述缓存管理模块创建一个容量为2000字节、包含3个存储环节的环形缓存器作为所述触觉媒体缓存器后,若所述触觉媒体缓存器的缓存切片的描述信息包括:所述容量为2000字节,偏移量为0,则将所述触觉媒体缓存器划分为1个缓存器切片。

在缓存管理模块根据所述触觉媒体缓存器的缓存切片的描述信息对所述触觉媒体缓存器进行缓存切片的划分后,媒体接入函数可以将所述目标触觉媒体文件的解码数据写入所述触觉媒体缓存器的缓存切片中,显示引擎可以根据所述第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器,以及通过所述触觉媒体访问器访问所述触觉媒体缓存器的缓存切片中的数据获取所述第一触觉材质属性的触觉值。其中,所述目标节点描述模块为包括承载所述第一触觉材质属性的目标三维网格的节点对应的节点描述模块,所述目标媒体参考列表为所述目标触觉媒体文件对应的媒体参考列表。

本申请实施例提供的缓存管理方法在接收到触觉媒体缓存器的描述信息和所述触觉媒体缓存器的缓存切片的描述信息后,可以根据所述触觉媒体缓存器的描述信息创建所述触觉媒体缓存器,并根据所述触觉媒体缓存器的缓存切片的描述信息对所述触觉媒体缓存器进行缓存切片的划分,因此媒体接入函数可以将包括类型为参考的第一触觉材质属性的触觉值的触觉媒体文件的解码数据写入所述触觉媒体缓存器的缓存切片中,显示引擎可以根据所述第一触觉材质属性对应的目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器,及通过所述触觉媒体访问器访问所述触觉媒体缓存器的缓存切片中的数据获取所述第一触觉材质属性的触觉值。因此本申请实施例可以支持获取参考类型的触觉材质属性的触觉值,解决相关技术中无法获取参考类型的触觉材质属性的触觉值的问题。

本申请一些实施例还提供一种三维场景的渲染方法,该三维场景渲染方法包括:显示引擎所执行的场景描述文件解析方法和三维场景的渲染方法、媒体接入函数所执行的触觉媒体文件的处理方法以及缓存管理模块所执行的缓存管理方法。以下以所述待渲染场景中包括目标触觉媒体文件,所述目标触觉媒体文件的第一触觉材质属性的类型为参考,用于缓存所述目标触觉媒体文件的缓存器为触觉媒体缓存器,用于访问所述目标触觉媒体文件的缓存器为触觉媒体访问器,承载所述第一触觉材质属性的网格为目标三维网格,用于缓存所述目标三维网格的纹理坐标的缓存器为纹理坐标缓存器,用于访问所述目标三维网格的纹理坐标的访问器为纹理坐标访问器为例对本申请实施例提供的方案进行说明。参照图16所示,该方法包括如下步骤:

S1601、显示引擎获取场景描述文件。

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

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

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

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

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

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

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

相应的,媒体接入函数接收所述显示引擎发送的各个媒体文件的描述信息。

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

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

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

在一些实施例中,所述触觉媒体管线,包括:输入模块、解封装模块、解码模块以及后处理模块;所述输入模块用于获取所述目标触觉媒体文件(封装文件),所述解封装模块用于对所述目标触觉媒体文件进行解封装,所述解码模块用于对解封装得到的码流进行解码,所述后处理模块用于对解码得到的数据进行格式转换等后处理,以获取所述目标触觉媒体文件的解码数据。

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

在一些实施例中,所述目标触觉媒体文件的描述信息包括所述目标触觉媒体文件的访问地址,上述步骤S1606(媒体接入函数通过各个媒体文件对应的管线获取各个媒体文件)包括:

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

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

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

在一些实施例中,所述目标触觉媒体文件的描述信息还包括所述目标触觉媒体文件的各个码流轨道的索引值,上述步骤S1606(媒体接入函数通过各个媒体文件对应的管线对各个媒体文件进行解封装和解码,以获取各个媒体文件的解码数据)包括:

媒体接入函数根据所述目标触觉媒体文件的各个码流轨道的索引值对所述目标触觉媒体文件进行解封装,以获取所述目标触觉媒体文件的各个码流轨道的码流。

在一些实施例中,所述目标触觉媒体文件的描述信息还包括所述目标触觉媒体文件的各个码流轨道的编解码参数;上述步骤S1606(媒体接入函数通过各个媒体文件对应的管线获取各个媒体文件,并对各个媒体文件进行解封装和解码,以获取各个媒体文件的解码数据)包括:

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

S1607、显示引擎从所述场景描述文件的缓存器列表(buffers)中获取各个缓存器对应的缓存器描述模块(包括:从所述场景描述文件的缓存器列表中获取用于缓存所述目标触觉媒体文件的触觉媒体缓存器对应的缓存器描述模块,以及用于缓存承载所述第一触觉材质属性的三维网格的纹理坐标的纹理坐标缓存器对应的缓存器描述模块)。

S1608、显示引擎根据各个缓存器对应的缓存器描述模块获取各个缓存器的描述信息(包括:根据所述触觉媒体缓存器对应的缓存器描述模块获取所述触觉媒体缓存器的描述信息,以及根据所述纹理坐标缓存器对应的缓存器描述模块获取所述纹理坐标缓存器的描述信息)。

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

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

S1609、显示引擎从所述场景描述文件的缓存切片列表(bufferViews)中获取各个缓存器的缓存切片对应的缓存切片描述模块(包括:从所述场景描述文件的缓存器列表中获取所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块,以及所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块)。

S1610、显示引擎根据各个缓存器的缓存切片对应的缓存切片描述模块获取各个缓存器的缓存切片的描述信息(包括:根据所述触觉媒体缓存器的缓存切片对应的缓存切片描述模块获取所述触觉媒体缓存器的缓存切片的描述信息,以及根据所述纹理坐标缓存器的缓存切片对应的缓存切片描述模块获取所述纹理坐标缓存器的缓存切片的描述信息)。

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

缓存切片所属的缓存器、缓存切片的容量、缓存切片的偏移量。

在上步骤S1608和S1610之后,本申请实施例可以选择执行如下方案一或方案二,将各个缓存器的描述信息以及各个缓存器的缓存切片的描述信息发送至媒体接入函数和缓存管理模块。

方案一包括如下步骤S1611和S1612:

S1611、显示引擎向媒体接入函数发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息(包括:显示引擎向媒体接入函数发送所述触觉媒体缓存器的描述信息、所述触觉媒体缓存器的缓存切片的描述信息、所述纹理坐标缓存器的描述信息以及所述纹理坐标缓存器的缓存切片的描述信息)。

相应的,媒体接入函数接收显示引擎发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息(包括:媒体接入函数接收显示引擎发送的所述触觉媒体缓存器的描述信息、所述触觉媒体缓存器的缓存切片的描述信息、所述纹理坐标缓存器的描述信息以及所述纹理坐标缓存器的缓存切片的描述信息)。

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

S1612、媒体接入函数向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息(包括:媒体接入函数向缓存管理模块发送所述触觉媒体缓存器的描述信息、所述触觉媒体缓存器的缓存切片的描述信息、所述纹理坐标缓存器的描述信息以及所述纹理坐标缓存器的缓存切片的描述信息)。

相应的,缓存管理模块接收媒体接入函数发送的各个缓存器的描述信息(包括:缓存管理模块接收媒体接入函数发送的所述触觉媒体缓存器的描述信息、所述触觉媒体缓存器的缓存切片的描述信息、所述纹理坐标缓存器的描述信息以及所述纹理坐标缓存器的缓存切片的描述信息)。

在一些实施例中,上步骤S1611(媒体接入函数向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息)的实现方式可以为:媒体接入函数通过缓存API向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。相应的,缓存管理模块接收媒体接入函数发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息的实现方式可以为:缓存管理模块通过缓存API接收媒体接入函数发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

方案二包括如下步骤S1613和S1614:

S1613、显示引擎向媒体接入函数发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

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

S1614、显示引擎向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

在一些实施例中,上步骤S1614(显示引擎向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息和所述触觉媒体缓存器的缓存切片的描述信息)的实现方式可以为:显示引擎通过缓存API向缓存管理模块发送各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。相应的,缓存管理模块接收显示引擎发送的各个缓存器的描述信息的实现方式可以为:缓存管理模块通过缓存API接收显示引擎发送的各个缓存器的描述信息和各个缓存器的缓存切片的描述信息。

在执行上述方案一或方案二后,继续执行如下步骤:

S1615、缓存管理模块根据各个缓存器的描述信息构建各个缓存器(包括根据所述触觉媒体缓存器的描述信息构建所述触觉媒体缓存器,以及根据所述纹理坐标缓存器的描述信息构建所述纹理坐标缓存器)。

S1616、缓存管理模块根据各个缓存器的缓存切片的描述信息对各个缓存器进行缓存切片的划分(包括根据所述触觉媒体缓存器的缓存切片的描述信息,对所述触觉媒体缓存器进行缓存切片的划分,以及根据所述纹理坐标缓存器的缓存切片的描述信息,对所述纹理坐标缓存器进行缓存切片的划分)。

S1617、媒体接入函数根据各个缓存器的描述信息和各个缓存器的缓存切片的描述信息,将各个媒体文件的解码数据写入各个媒体文件对应的缓存器的缓存切片中(包括:将所述目标触觉媒体文件的解码数据写入所述触觉媒体缓存器的缓存切片中)。

S1618、媒体接入函数根据所述目标三维网格的纹理坐标的访问地址获取所述目标三维网格的纹理坐标。

S1619、媒体接入函数根据所述纹理坐标缓存器的描述信息和所述纹理坐标缓存器的缓存切片的描述信息将所述目标三维网格的纹理坐标写入所述纹理坐标缓存器的缓存器切片中。

S1620、显示引擎从所述场景描述文件的访问器列表(accessors)中获取各个访问器对应的访问器描述模块(包括:从所述场景描述文件的访问器列表中获取用于访问所述目标触觉媒体文件的触觉媒体访问器对应的访问器描述模块,以及获取用于访问所述纹理坐标的纹理坐标访问器对应的访问器描述模块)。

S1621、显示引擎根据各个访问器对应的访问器描述模块获取各个访问器的描述信息(包括:显示引擎根据所述触觉媒体访问器对应的访问器描述模块获取所述触觉媒体访问器的描述信息,以及根据所述纹理坐标访问器对应的访问器描述模块获取所述纹理坐标访问器的描述信息)。

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

访问器所访问的缓存切片、访问器所访问的数据的数据类型、访问器的类型、访问器的数量、是否为MPEG变访问器、时变访问器所访问的缓存切片、访问器参数是否随时间变化。

S1622、显示引擎根据各个访问器的描述信息创建各个访问器(包括:显示引擎根据所述触觉媒体访问器的描述信息创建所述触觉媒体访问器,以及根据所述纹理坐标访问器的描述信息创建所述纹理坐标访问器)。

S1623、显示引擎根据场景描述文件确定待渲染三维场景中的各个三维网格承载的各个触觉材质属性的类型。

在上述步骤S1623中,若显示引擎确定待渲染三维场景中的目标三维网格承载的第一触觉材质属性的类型为参考,则执行如下步骤:

S1624、显示引擎根据目标纹理描述模块的MPEG触觉纹理的中的访问器索引语法元素声明的索引值确定触觉媒体访问器。

根据目标纹理描述模块的动态图像专家组MPEG触觉纹理的中的访问器索引语法元素声明的索引值创建触觉媒体访问器。

S1625、显示引擎通过所述触觉媒体访问器访问所述触觉媒体缓存器的缓存切片中的数据,以获取所述第一触觉材质属性的触觉值。

S1626、显示引擎从所述场景描述文件的采样器列表(samplers)中获取各个触觉材质属性的采样器的描述模块(包括:显示引擎从所述场景描述文件的采样器列表中获取所述第一触觉材质属性的采样器的描述模块)。

S1627、显示引擎根据各个触觉材质属性的采样器的描述模块获取各个触觉材质属性的采样器的描述信息(包括:显示引擎根据所述第一触觉材质属性的采样器的描述模块获取所述第一触觉材质属性的采样器的描述信息)。

S1628、显示引擎根据各个触觉材质属性的采样器的描述信息构建各个触觉材质属性的采样器(包括:显示引擎根据所述第一触觉材质属性的采样器的描述信息构建所述第一触觉材质属性的采样器)。

S1629、根据各个触觉材质属性的触觉值、所述第一触觉材质属性对应的纹理坐标以及所述第一触觉材质属性的采样器对所述待渲染三维场景进行渲染。

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

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

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

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

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

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

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

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

06120116679654