素材库组成原理

2021-08-10 15:58:39 浏览数 (1)

素材数据库组成原理

组成原理

本素材库由类型系统和标签系统组成,依赖fileSystem和mongodb这2个存储介质,同时需要nodejs和web进运算行处理与展示集成。本素材库希望利用fileSystem存储所有素材,利用mongoDB存储素材的索引,从而实现Everything这样的搜索引擎。

类型:一对多的树形分类

标签:多对多的索引

FS:文件系统,用于存储素材

mongodb:蒙古数据库,用于存储索引

nodejs:后端

web:前端

类型系统

顶级分类

顶级分类指不同的数据表,每个数据表对应一个根文件夹,表名==文件夹名,比如可以分为下面几类:

图片:图片文件

特效:shader代码(glsl或hlsl)

模型:Draco压缩后的3d模型(gltf或fbx)

多级分类

多级分类对应数据表中的class字段,也对应文件夹的路径:

建筑/民房 交通工具/地面载具/货车

组合索引

文件

文件系统FS中的文件可以自定义许多属性,这里给他们分3类:

可靠属性:始终不变的字段

不可靠属性:跨FS拷贝时可被随意修改

派生属性:不占空间,根据其他属性临时计算得出

可靠属性

路径:尽量全用英文

文件名:大小写尽量统一

大小:文件真实体积

内容:文件的内容

不可靠属性

权限

增改查日期

标签、备注、作者、版本:这些我从没用过。。

打开方式

派生属性

大小:文件体积

种类:根据文件后缀名/魔数/释伴(shebang)判断得出

图标/预览:根据种类而定

隐藏:根据后缀名前是否有字符而定

媒体信息:如图像分辨率、音视频的时长等

因此素材库只能依赖FS的可靠属性,充其量再存储一下创建日期,其余的功能都放在mongodb数据库中实现

图像增强算法

根据经验,素材库中占大头的部分一定是图片文件,尤其是一张4K以上的高清图基本上是10m起步,这样存不了几张就占满了磁盘空间。为此可以使用图像增强算法,从缩略图重建高清图像,在用户点击下载原始图像的时候,临时伪造一个原图。毕竟素材讲究应景即可,不必非常真实。

对比度增强:调整过暗或者过亮图像的对比度,使图像更加鲜明

无损放大:将图像在长宽方向各放大两倍,保持图像质量无损

图像修复:支持去除图片中不需要的遮挡物,使用背景内容进行填充;修复图片缺损内容

清晰度增强:对压缩后的模糊图像实现智能快速去噪,优化图像纹理细节,使画面更加自然清晰

色彩增强:可智能调节图片的色彩饱和度、亮度、对比度,使得图片内容细节、色彩更加逼真

3D模型

为了存储巨量的模型,单个模型的体积要足够小,3D模型中的PBR材质里尽量不要存在贴图,同时利用Draco压缩几何信息。

标签系统

文件名

为了能够自动化导入标签,文件的命名规范应当是下划线分隔的标签列表,例如:

建筑_公寓_办公楼.glb 写字楼_建筑_摩天大厦.fbx

多键索引

索引是数据库最常见的优化方法,通常的索引都是单键索引,即键值对是一对多的关系,但mongodb推出了多键索引(multikey index),即键值对是多对多的关系,这非常适合列表类型的字段tags。tags列存储素材的标签,每个标签名尽量简短,数量可以尽可能的多,可以将原始名称存入tags。

数据表字段

类型

索引

_id

Integer

唯一

文件创建日期

tags

List

多键

素材的标签

class_N

String

组合

素材所在文件夹的绝对路径

size

Integer

单键

文件大小,单位字节

pre

String

单键

文件名前缀

suf

String

单键

文件名后缀

_id

_id是mongodb的默认主键,不可删除,所以让它存储素材的不可靠属性之创建日期。

tags

tags是最重要的字段,是搜索引擎的主要检索字段,标签与素材是多对多的关系,需要应用mongodb的多键索引,通过标签来寻找素材非常方便。

class_N

class_N指素材的类型,N从0开始递增,因此class_N代表多个字段,多个字段按顺序做组合索引。类型与素材是一对多的关系(文件夹与文件),但类型与类型之间还拥有层级关系,这种层级关系和文件夹路径完全同步。多级分类的设计要比标签更谨慎,因为分类不易修改。

size

素材的大小,通过体积范围来检索素材也很常用。

缩略图

图片素材,3D模型和特效材质都可以分配一个缩略图以供预览。缩略图和素材一一对应,但素材可以没有缩略图,缩略图的命名格式是在素材文件名前加点号,即“隐藏文件”。缩略图文件不参与mongodb的索引。

引用

Everything引擎:https://en.wikipedia.org/wiki/Everything_(software)

百度的图像增强算法:https://cloud.baidu.com/product/imageprocess/enhancement

Mongo多键索引:https://docs.mongodb.com/manual/core/index-multikey

Draco无损压缩:https://google.github.io/draco/

0 人点赞