THREE 下另类的 HDR 压缩方法

1,884 阅读1分钟

HDRPrefilterTexture

介绍

在 THREE 中使用 HDR 需要经过 PMREMGenerator 处理才能使用,并且在小程序 WebGL 环境下有部分机型在前后切换页面会偶现生成出错误的纹理(见小程序 WebGL 奇妙的 Bug 之旅 ),该项目的功能是导出PMREMGenerator生成产物到 PNG,再利用 PNG 无损压缩实现体积减少

输入大小为 5.3MB 的http://www.yanhuangxueyuan.com/threejs/examples/textures/equirectangular/venice_sunset_2k.hdr

环境REGBLoader 耗时PMREMGenerator 耗时总耗时
模拟器144ms17ms161ms
小米 8509ms55ms564ms

注:RGBELoader 主要是加载网络耗时

// HDR原本加载路径
RGBELoader -> PMREMGenerator -> 设置scene.environment

// 优化后的路径
TextureLoader -> 设置texture属性 -> 设置scene.environment

PMREMGenerator产物导出后的PNG只有1046.863kb,体积减少了4415.182kb

所以就有了这个HDRPrefilterTexture的项目,同时解决小程序下某些机型 bug,同时也优化加载时间,但是仅仅适用于 HDR 需要PMREMGenerator处理的场景。

其实也是一个优化的思路,其他纹理需要经过特定处理才能直接使用的,均可以把产生物导出。

Demo

TODO

  1. 支持批量导出 done
  2. 生成导出大小对比表格 done

仓库地址

github.com/deepkolos/h…

github.com/deepkolos/t…

LiveDemo

deepkolos.github.io/hdr-prefilt…