5个版本
0.1.4 | 2024年7月22日 |
---|---|
0.1.3 | 2024年7月18日 |
0.1.2 | 2024年7月18日 |
0.1.1 | 2024年7月18日 |
0.1.0 | 2024年7月18日 |
#517 in 编码
每月 303 次下载
20KB
194 行
使用八面体编码压缩正常向量(或任何3D单位向量)。
这种有损压缩方案可以实现高达6:1的压缩比,平均误差率低于1度,具体取决于选择哪种表示方式。
示例
let normal = [-0.5082557, 0.54751796, 0.6647558];
let encoded = normal_pack::EncodedUnitVector3U8::encode(normal);
let decoded = encoded.decode();
assert_eq!(decoded, [-0.52032965, 0.5473598, 0.6554802]);
为什么压缩我的法线?
对于3D渲染器来说,内存带宽通常会成为瓶颈,例如当从VRAM中加载法线到高多边形网格的顶点着色器时。法线的较小内存占用对应于内存带宽节省和在这种场景下更高的FPS。
1度的误差有多糟糕?
teapot
示例生成一个参考视觉图像,并包含在着色器中解码向量的wgsl代码。
标准[f32; 3]表示
打包到[u8; 2]
作为视频
示例中使用的天空盒是Emil Persson(别名Humus)的作品。 http://www.humus.name
依赖项
~0–670KB
~13K SLoC