赞助商
立即赞助

腾讯硬核干货!如何在页面极速渲染3D模型?

设计神器3年前 (2021)发布 流光
2.6K 0 0

友们,还记得 QQ 20 周年 H5 中可可爱爱的太空鹅吗?

腾讯硬核干货!如何在页面极速渲染3D模型?

为了实现旋转和换肤功,在 H5 中我们随机展示了5种类的 3D 太空鹅模,如图示:

腾讯硬核干货!如何在页面极速渲染3D模型?

但是在 H5 中引入 3D 模往往存在资源太大、性损耗严重、还原真实的问题,这许多 3D 创意止步于开发阶。

何更地在 H5 中还原模型呢?文将从模型网和贴图文件两方面分析,介绍几种通技术角度优化加载速度和提高渲染能的途径,在证 3D 模型不减面,贴图不缩小的情况下,将模型精致地还原在 H5 或其他应用程序中。

模型网格压缩

首先是分析模型网,对大型 3D 资源,我们一般通在模型设计时进行「减面」来减少模型几何的大小,但也带来模型精致度的缺失。下图所示:

腾讯硬核干货!如何在页面极速渲染3D模型?

而通 glTF 合 Draco 压缩的方式,以在视效果近乎一致的情况下,让3D模型件成倍缩小。面具体介绍 glTF 格式及 Draco 压缩工具

1. 将模型导出为 glTF 格式

glTF 介绍

glTF 称为「 3D 界 JPEG」,使用了更优数据结构,为应用程序实时渲染而生。glTF 有以下几大特:

  • 由现有 OpenGL 的维护组织 Khronos 推出,目的就是为了统一用于应用程序渲染的 3D 格式,更适用于基于 OpenGL 的引擎;
  • 减少了 3D 格除了与渲染关冗余信息,最小化 3D 文件资;
  • 优化了应用程序读取效率减少渲染模型的运行时间;
  • 支持 3D 模几何体、材质、画及场景、摄影机等信息。

glTF 导出格式两种后缀格式可供选择:.gltf  .glb:

  •  .gltf 文件导出时般会输出两文件类型,是 .bin 文件,以进制流存储顶坐标、顶法线坐标和贴图纹理坐标、贴图信息等模型基本数据信息;是 .gltf 文件,本质是 json 文件,记录bin文件模型顶基本数据索引、材质索引等信息,便编辑,可读性较好;
  •  .glb 文件格式只导出一 .glb 文件,将所数据都输出二制流,通常会小一点,若不关模型内的具体数据可直接选择此类型。

glTF 转换

目前有些建模工还不备导出 glTF 格式功能,可以输出 FBX / Collada 格式后通过以下工进行转换:

FBX 转 glTF

  •  Facebook 推出的 FBX2glTF 命令行工,可直从 github 官网下载 release 版本;
  •  过 Paint 3D、Substance Painter 等可视化编辑工具进转换。

Collada 转 glTF

COLLADA2GLTF 命令工具,可转换 .dae 格文件,从 GitHub 官网接下载 release 版本,解压后在命令进入目录即可调用。

glTF 查看

转换后可过以下查看工具查看 glTF 资:

  • Windows 10 及以上带的 3D Paints;
  • glTF 在线查看:https://gltf-viewer.donmccurdy.com;
  • 对于发者,可直接使用 VSCode 插件—— glTF Tools。
2. 通过 Draco 进行压缩

Draco 及 gltf-pipeline 介绍

Draco 是 Google 推出的一个用 3D 模型压缩和压缩的工具库,上述介绍的 FBX2glTF 及 COLLADA2GLTF 工具也嵌 Draco 压缩功能,除此之外,glTF 资源通基 Draco 开的命令行工具 gltf-pipeline 进行编码压缩,gltf-pipeline 通 npm 的方式安装使用。使用方法下:

#全局安装

npm install -g gltf-pipeline

#压缩glb文件 -b表示输出glb格式,-d表示压缩

gltf-pipeline -i model.glb -b -d

#压缩glb文件并将纹理图片离出来

gltf-pipeline -i model.glb -b -d -t

#更多参数查阅

gltf-pipeline -h

Draco 压缩析

通过 Draco 进行压缩基本上是有损的,有点表现:

  • Draco 通 Edge breaker 3D 压缩法改变模型的网数据的索引方法,缺少原来的网顺序;
  • Draco 通过减少顶点坐标、顶点纹理坐标等息的位数,以减少数据的存储量。

但在 gltf-pipeline 或其他压缩工具中,压缩程度通设置参数进行整,下所示:

腾讯硬核干货!如何在页面极速渲染3D模型?

当 –draco.compressionLevel 为0时,将留原来的网顺序,网数据索引的压缩力度最小,–draco.quantizeXXXBits 控坐标等基数据值的位数,位数越少压缩力度越大。由一个三角形网对应个顶点坐标、顶点法坐标、颜坐标等数据,一般来说 –draco.quantizeXXXBits 对文件的大小影响更大。

若不置参数,gltf-pipeline 会直以默认值压缩。

虽说 Draco 是有损,相于接为模型减来说,采用 Draco 压缩法视觉偏会小很多。

压缩后的 glTF 模型需通过应用中嵌入 Draco 解码具包,主对 edge breaker 算法部分行解码,解码时间一般比编码时间少,但必须考模型与具包的小对比。例如 ThreeJS 提供了 draco_decoder 模块行解码,draco_decoder 约600KB,若模型资源文件比具包还小,就必再引入 Draco 压缩了。

3. 效果测试

我们以太空鹅模型例,只加载模型几何体,不入质属性,通过ThreeJS 分别加载 FBX / glTF / 压缩后的glTF 的格式,第三种格式以默认参数压缩。测试效果对比如下:

腾讯硬核干货!如何在页面极速渲染3D模型?

腾讯硬核干货!如何在页面极速渲染3D模型?

从图可以看出,文件从 FBX 转换为 glTF 后大小异不大,是渲染速度有了明显提升。

另外过压缩的 glTF 文件仅常 FBX  glTF 文件的1/10左右,视觉三者几何体结构明显的差异,压缩后的 glTF 启了 worker 线程 Draco 解码,多了一小部分模型解码时间。

模型贴图优化

述描述的模型压缩只针对模型网格数据,不会对 glTF 文件里的贴图行处理。然很多时候贴图文件往往于模型。此时则需将模型贴图分行处理(建模时分输出一打好 UVtag 纹理坐标的「白模」需用到的纹理贴图)。下面介绍如何优化用于应用程序渲染的贴图文件。

1. 贴图加载过程分析

以一基于理引擎渲染的电视机 Demo 模型例,一般会输出几种尺寸较的贴图文件:颜色贴图,法线贴图,金属粗糙贴图,如下图例子所示:

腾讯硬核干货!如何在页面极速渲染3D模型?

输出贴图一般 png 格式,许多同学会通过压缩 png 或者将 png 转 jpg 格式减少纹理小,其实这种处理方式只优化了图片加载速度,加载完毕后,png/jpg 仍需全部转码纹理(texture)能始渲染,具相同尺寸的贴图纹理 GPU 占用内存小相同,故压缩后的 png/jpg 对于渲染过程并优化。

庆幸的是许多设备都有可直接于渲染的 GPU 压缩纹(compress texture)格式,压缩纹可由 png 直接转换的纹减5倍或上的大小。如果直接供压缩纹格式,则需要进行 png 的转码过程且可大大减纹存。如图方案2示:

腾讯硬核干货!如何在页面极速渲染3D模型?

但由于 GPU 芯片供商太多,设备的压缩纹格式多种多样(例如卓设备格式是 ETC1/ETC2,苹果设备是 PVRTC…),手输多种格式代大,导致方案2较难落地。

2. Basis Universal 压缩

转折点在于今年五月份,Binomial 公司推了 Basis Universal 压缩 GPU 纹技术,Basis Universal 支持多种的压缩纹格式,将 png 转换为 basis 件后,大小与 jpg 格式差多,但在 GPU 上 png/jpg 小6-8倍。

应用程序加载 basis 文件,通 basis 转码器快速转换成适用设备的压缩纹理式。下图(图来自Google Blog)所示:

腾讯硬核干货!如何在页面极速渲染3D模型?

Basis 用法也比简单,通 basisu 命令行工具压缩 png,直接从 github 官网下载Release版或者通 CMake 编译源码,以 Mac 系统为例(Windows 系统将命令改为 basis.exe),列举几种常用用法:

# 进入执行目录

cd bin-osx

# 将.png格式转为 .basis

./basisu xxx.png

# 针对法线/金属/粗糙贴图等linear颜色空间的贴图 需加上-linear

./basisu xxx.png -linear

# 最大限度保证图片质量的转换

./basisu xxx.png -comp_level 5 -max_endpoints 16128 -max_selectors 16128 -no_selector_rdo

# 最大限度压缩linear颜色空间的贴图

./basisu xxx.png -linear -global_sel_pal -no_hybrid_sel_cb

生成 .basis 文件需要在程序过转码转成设备压缩纹理格,例如在ThreeJS 可过 basisTextureLoader 转换,具体用法可查阅 ThreeJS 官网 。

3. 效果测试

为了数据更加明显,我们在Mac Chrome 浏览performance模下,针个电视模型利用 ThreeJS 各自加载了 4096 x 4096 大小颜色贴图、法线贴图、属与粗糙贴图,比如下:

腾讯硬核干货!如何在页面极速渲染3D模型?

腾讯硬核干货!如何在页面极速渲染3D模型?

由上图使用 basis 贴图资源文件大比 png 减少了11倍以上,同主线程的脚本间和绘制间花销也于 png/jpg 贴图。

需要注意是,样由于不压缩纹理格不,在 basis 文件致情况下,不设备渲染表现可能会出现不致,需要进多端测试,目前部分格不支持 alpha ,带半透明颜色贴图若不生效可考虑单独拆出 alpha 贴图。

展望

除了基于 webGL  H5,glTF 与 Basis 亦可用于其它基于 OpenGL 渲染应用程序。值期待是,目前 Google 与 Binomial 公司正在进 Basis Universal 与 glTF 3D 传输标准合作,或许在不久将来可以迎来结合了 basis 贴图 glTF 格,不需要做另处理可以接导入模型到应用程序。

参考资料

  • https://spin.atomicobject.com/2018/09/30/compress-3d-files-draco/
  • https://neil3d.github.io/3dengine/gltf-mesh.html
  • https://github.com/google/draco
  • https://www.ece.uvic.ca/~frodo/publications/yuetang_meng_project_slides.pdf
  • https://developers.facebook.com/docs/sharing/3d-posts/glb-tutorials
  • https://github.com/AnalyticalGraphicsInc/gltf-pipeline
  • https://www.khronos.org/gltf/
  • https://news.ycombinator.com/item?id=19986749
  • https://github.com/BinomialLLC/basis_universal
  • https://www.khronos.org/blog/google-and-binomial-contribute-basis-universal-texture-format-to-khronos-gltf-3d-transmission-open-standard

欢迎关注「腾讯ISUX」的公众:

腾讯硬核干货!如何在页面极速渲染3D模型?

© 版权声明
您必须登录才能参与评论!
立即登录
暂无评论...

相关文章

大家好,我是彩云。最近有不少设计师朋友在我的设计交流群里问作品集压缩相关的问题,就干脆再写一篇文章详细介绍作品集压缩...
作品集
本文要介绍的「Resizing.app」是一个调整图片尺寸的线上工具,整合常用的三大功能:转档、压缩和调整大小。只要将图片拖曳到...
压缩工具
如果要设计产品或开发界面,我们通常会需要风格相同的图标,若无法自行绘制或不希望付费购买也有很多替代方案,本文要推荐的...
图标素材
网络上的免费资源相当多,不过都是散落在各处,除非通过搜索引擎或网站介绍,加上教学步骤或分类索引让使用者更容易找到,举...
免费图标
对于设计配色而言,系统的理论学习固然重要,但是对于初学者或者对色彩理论提不起兴趣学习的人来说,难道就没有可以快速完成...
Adobe color
本文要介绍的「FreeSFX」是一个提供免费音效素材的英国网站,本身也有一些音乐可供下载,收录超过 50 万音乐音效 Mp3 格式可...
免费素材
快到年底最忙的时候了,一波接着一波的项目需求就要向你砸来,大量的图片素材抠起来实在是耽误时间 ​今天我给大家带来了感动...
免费抠图
图库是刚需。尤其是在进行 APP 、网页乃至于日常运营当中,都需要高素质且灵活的插画与图片来作为填充。对于这类图片和插画素...
图库