Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 23:48
· 46 commits to main since this release

Added

  • 新增 --greedy-mesh:在页内合并同法线、同平面、同材质、同光照且 AO 均匀的
    共面单位面,减少平坦结构的 quad 数和 mesh 内存。默认关闭,因为随机调色板场景
    收益很低而合并本身有成本;大平面、墙体和重复结构的收益明显。

Changed

  • render、bench、serve 和库调用现在拒绝单边超过 4096 像素的输出请求,与协议
    文档一致;总像素预算不变。此前只检查总像素数,极端长宽比可能绕过协议约定。
  • 网格构建按 16x16x16 页缓存方块及其边界,并把每个 region 的 palette 预解析为
    不可变材质表,剔除和环境光遮蔽改为数组索引;缓存每个格子的遮挡位并用扁平索引
    偏移访问邻居,完整不透明方块在六个邻居都遮挡时直接跳过模型。测试夹具
    (1024x1024、超采样 2、12 线程、色块材质)的 mesh 耗时:000001 exact
    17.3-20.4 s → 5.7-5.9 s,000002 exact 11.7 s → 0.24-0.25 s。网格统计和
    PNG SHA-256 保持不变。
  • 网格页索引只包含实际含非空气方块的 page。稀疏结构不再扫描空 page,也不会因为
    包围盒跨越过多 page 而误报 PAGE_LIMIT_EXCEEDED;无空气场景仍走包围盒快速路径。
    blocksVisited 现在只统计被索引 page 中扫描过的方块,全空气网格为 0。
  • render --stream-mesh 按 32 页一块构建网格并立即渲染,不再保留完整 Mesh。
    1024x1024、超采样 2、12 线程、色块材质下,000001 exact 峰值从 7.16 GB 降到
    425 MB,000002 exact 从 497 MB 降到 182 MB,PNG SHA-256 不变。该模式不能与
    --lod auto 同用;多视角会为每个视角重新构建网格。
  • 纹理采样按面提前解析纹理并内联采样器,UV 在 0..1 内走无回绕路径;合成的
    16x16 采样微基准中 nearest/bilinear 吞吐提升 1.7-2.7 倍。
  • 有完整 mesh 时多视角并行渲染,按 --threads 预算拆分线程;CLI 和 serve
    都保留请求顺序,但每个并发视角各自持有 tile buffer。
  • serve 在请求带 input.hash 且缓存命中时跳过文件读取和重新哈希;
    supervise 会把路由用的 hash 注入请求,因此重复输入的缓存命中不再读文件。
  • serve / supervise 的缓存增加估算字节预算 --cache-bytes,默认使用可用
    内存的一半;超出时按最旧优先淘汰,单个超大条目仍允许单独保留,避免多个超大
    mesh 同时常驻。
  • 渲染瓦片按内部图约 1024 块自适应:1024x1024 内部图使用 32px,2048x2048
    保持 64px,避免 12 线程在 16-64 个 tile 上串行收尾。000001(77.6M
    quads,12 线程)的 256x256/超采样 1 渲染从 5.7-6.4 s 降到 3.1-3.2 s,
    512x512/超采样 1 从 4.5-4.6 s 降到 3.1-3.2 s,512x512/超采样 2 从 3.8 s
    降到 3.2 s,1024x1024/超采样 1 从 3.7 s 降到 3.2 s;RGBA 不变,tiles
    不随线程数变化。
  • 光栅化器按有无纹理分别单态化三角形循环,无纹理路径去掉每像素纹理采样
    分支和 UV 插值;000001(0 个纹理三角形)的 1024x1024/超采样 2 渲染从
    4.1 s 降到 3.9 s,输出不变。
  • 网格页容量改为按最近几页的 quad/非空气方块中位数估算并留 15% 余量,扩容时
    只增加 25%(不再按 Vec 倍增),明显低于估算的页在收尾时收缩。000001 的
    mesh 从 4.0-4.3 s 降到 3.1-3.2 s,常驻 mesh 从 10.7 GB 降到 7.9 GB;
    000002 从 310 MB 降到 261 MB,mesh 约 0.22 s。
  • release 构建启用 thin LTO 和单 codegen unit。测试机上 000001 的 mesh 与
    render 约快 4-5%,000002 的 parse 约快 20%;release 构建时间相应增加。
  • --lod auto 在构建前先抽样 128 个 page 估算 quad 数,只有估算明显超过预算时
    才用计数模式精确确认;计数复用页缓存和剔除逻辑,但不分配顶点、AO 和四边形。
    这样不会再为注定失败的 exact 网格付完整构建成本:000001 的 auto mesh 从
    5.0-5.2 s 降到 3.6-3.7 s,最终 factor 和输出不变;000002 这类可精确放下的
    场景多付约 30 ms 采样。