Files
osmWorkflow/assets/models/SOURCES.md
que01 2139990818 feat: 树渲染改用 apple/fattree 模型,修复 Cesium alpha 抠图丢失
tree_style 新增 apple(SpeedTree Red Delicious,4475 tris,alpha 抠图叶片
+ 法线贴图)和 fattree(低面数卡通树,2238 tris,实体几何)。

高度改为按模型自身包围盒归一化到目标高度,树根落在 z=0,不再用魔数;
每棵树按序号做确定性抖动(缩放 ±14%、黄金角偏航、±3° 倾斜),
tree_row 采样高度全部相同,不抖动就是同一棵树盖章 156 次。

移除 polyhaven 样式和 island_tree_01 资产(76MB)+ ingest_tree.py:
该样式 append 的 *_LOD1 并不是完整的树,枝干只有 0.41 单位高,叶片是
挂在原点下方的平面簇,本是给源文件几何节点散布用的碎片。

Cesium 侧修三处:

- make_export_material 把 Alpha 恒定写死为 1.0,叶片卡片整块导出,而
  SpeedTree 图集抠掉的区域是纯黑,在 Cesium 里就是黑色色块。
- Blender 4.2 起 glTF 导出不再读 blend_method(仍可写但已失效,写 CLIP
  读回来是 HASHED),改为从节点树推断 alpha 模式,alpha 直连 BSDF 会落到
  BLEND。新增 materials.link_alpha_clip() 构造导出器识别的
  1 - (alpha < cutoff) 结构,得到 alphaMode=MASK。
- 新增 alpha_dilated_image():把不透明像素颜色向抠图区域外扩 8 圈,
  避免 mipmap 把黑色平均进叶缘。叶缘相邻的纯黑像素 10.3% → 0.6%。

另修两个既有 bug:

- 材质槽在 mesh 上,181 棵树共享一个 datablock,第一棵替换后其余会把结果
  再包一层,产生 Cesium Cesium Cesium... 的材质名;烘焙图缓存按材质名索引,
  每轮再嵌一份同样的贴图。GLB 22.46MB → 20.76MB,materials 270 → 23。
- shrub_02 从 glTF 带进来一个 Math 节点接在 Alpha 上,但其 JPEG 贴图 alpha
  全是 1.0,只判断「连了 Alpha」会误判为抠图材质。

模型资产为第三方素材,已 gitignore,缺失时回落到 natural;
来源见 assets/models/SOURCES.md。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 11:30:16 +08:00

48 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 树模型资产来源
`assets/models/` 下的树模型是第三方素材,**已 gitignore**,不随仓库分发。
干净 checkout 缺这些文件时 `tree.assemble()` 返回 0`generate_scene.py`
自动回落到 `natural` 样式,构建不会失败。
放置路径见 `blender/osmassets/tree.py` 顶部的常量。
## apple`--tree-style apple`
- 名称RedDeliciousAppleSpeedTree 工具导出)
- 路径:`assets/models/speedtree/apple_low/`
- `RedDeliciousApple.obj` — 4475 tris单网格
- `RedDeliciousApple.mtl` — 已重写,见文件内注释
- `textures/apple_color_2k.png` — 由原始 4096² PNG 降采样,**必须保留 alpha 通道**
57% 的像素是抠掉的叶片卡片
- `textures/apple_normal_2k.png` — 同上降采样
原始素材另有 `.fbx` / `.cgf` / `.st` / `.tif` 以及 `_SS` / `_Subsurface` 贴图,
管线不用,未收录。
降采样命令(原始 4k 贴图 16MB + 20MB降到 2k 后 4.3MB + 4.7MB
```bash
sips -Z 2048 -s format png <原始>_Color.png --out textures/apple_color_2k.png
sips -Z 2048 -s format png <原始>_Normal.png --out textures/apple_normal_2k.png
```
## fattree`--tree-style fattree`
- 名称fat tree作者署名 Lyrog付费素材
- 路径:`assets/models/lyrog/fattree/`
- `fattree.blend` — 取其中名为 `fattree` 的对象2238 tris
- `textures/fat_tree.png` — 原文件名带空格(`fat tree.png`),已改为下划线
源 .blend 里的贴图路径是 `//fat tree.png`,只在原始目录下能解析;
运行时不依赖它,`tree.py` 会丢掉源材质并按上面的路径重建一个 Principled 材质。
该 .blend 里另有两个 `plant` 对象(灌木),管线未使用。
## 已移除
`polyhaven/island_tree_01`76MB已于 2026-07-31 删除,连同 `--tree-style polyhaven`
`blender/tools/ingest_tree.py`。原因见 `docs/changelog.md`:该文件的 `*_LOD1`
对象不是完整的树,而是给几何节点散布用的枝叶碎片。
若要重新取用Poly Haven 上是 CC0https://polyhaven.com/a/island_tree_01
`polyhaven/shrub_02` 仍在使用(草丛散布),不受影响。