# `Examples/c/3d/` 第三方 3D 资产 —— 出处与许可（CREDITS）

> ⚠ **这个目录里的文件会进 `vml_lib.zip`（= 进 APK / IPA）**（2026-10-08 起 `scripts/make-vml-lib.sh`
> 显式收本目录；同级的 `3d/*.glb` 也在收 —— 第 3 层）。
> ⇒ **往这里放任何资产之前，先查清许可、写进本文件**，否则就是"随包分发了一个来路不明的文件"。

本文件对应 `docs/VML3D对标浏览器.md` 的 **F7「许可与署名」** —— 它此前记的是
「🅿️ 未量（待查：仓内有没有随包分发的第三方资产许可清单）……夹具许可出自任务书，**本轮在仓内找不到出处**」。
2026-10-09 逐份**读了文件自身的 glTF `asset` 块**（`asset.copyright` / `asset.generator`），
并核了 Khronos glTF-Sample-Assets 每个模型 README 的许可，结论如下。

## 现在随包分发的（全部 CC0 或无第三方权利）

⚠ **2026-10-10 整批换过**：用户口径「**例子不需要大文件，打包太大**」——
删掉 5 个 >5 MB 的（AntiqueCamera 17.5 / BoomBox 10.6 / Lantern 9.5 / WaterBottle 8.9 /
Avocado 8.1 MB）外加两个**许可本来就不该随包**的（DamagedHelmet CC BY-**NC** 禁商用、
BoxTextured 要署名且带 Cesium 商标限制 —— 两者下面那张"已删"表里早就记过），
换成 Khronos 的 **CC0** 小样例。`models/` 目录 **~69 MB → ~450 KB**。

| 文件 | 大小 | 许可 | 证据 |
|---|---|---|---|
| `AnimatedColorsCube.glb` | 15 KB | **CC0 1.0** | Khronos README（`© 2017, Public`）＋**文件内自带**（`asset.copyright` = `CC0: This work has been marked as dedicated to the public domain. Model by Ed Mackey.`） |
| `TextureLinearInterpolationTest.glb` | 13 KB | **CC0 1.0** | Khronos README（CC0）；文件内**无** `copyright` 字段 |
| `InterpolationTest.glb` | 8 KB | **CC0 1.0** | Khronos README（`© 2017, Public`）；文件内无 `copyright` |
| `SimpleInstancing.glb` | 7 KB | **CC0 1.0** | Khronos README（`© 2023, Public`）；文件内无 `copyright` |
| `AnimatedMorphCube.glb` | 7 KB | **CC0 1.0** | Khronos README（`© 2017, Public`）；文件内无 `copyright` |
| `BoxVertexColors.glb` | 2 KB | **CC0 1.0** | Khronos README（`© 2023, Public`）；文件内无 `copyright` |
| `3d/rover_cutout.glb` | 163 KB | **本仓库自制** | 文件内 `asset.generator` = `make-rover-cutout-glb.py (WayCoder/Dolaima)`；该脚本从世界常量**程序化构造** glTF，不读任何外部素材 |

⚠ CC0 **不要求**署名 —— 上面这份名单是为了"每个随包资产都能追到一条许可"，不是履行署名义务。

### 两条**实测**筛子（许可之外）

① **读文件自己的 `asset.copyright`，不能只信 README** —— 2026-10-10 就是这么揪出两处冲突的：
   · `Duck.glb`：README 写 **SCEA Shared Source License**（`© 2006, Sony`），而本仓一直记成 CC0；
   · `TextureCoordinateTest.glb`：README 写 CC0，文件内却写 **CC-BY 4.0**。
   两处口径不一致 = **不知道到底适用哪一条** ⇒ 都出局（换成了上面这几份：README CC0
   **且**文件内要么无声明、要么明写 CC0）。

② **装得出来才算数**：`MetalRoughSpheresNoTextures.glb`（CC0、285 KB）**装不上** ——
   引擎上限 64 个网格、它有 102 个（`gltf 装载：解析失败 —— 网格数 102 超过引擎上限 64`）⇒ 没进包。
   **加完模型必须真跑一次**（`vmlcli … glb_view.c --arg <模型>`，看 `GLTF_LOAD=1`）。

✅ **`Duck.glb` 与 `TextureCoordinateTest.glb` 已于 2026-10-10 移出**（许可两处口径冲突，
见上面那条与下面的"已删"表）—— 现在随包这 7 份**每一份都能追到一条一致的 CC0 / 自制依据**。

## 2026-10-09 / 2026-10-10 删掉的（都不满足"无版权问题"，或纯因体积）

| 文件 | 许可 | 为什么删 |
|---|---|---|
| `Fox.glb` | **CC-BY 4.0**（PixelMannen / @tomkranis / @AsoboStudio with @scurest） | **要署名**，而仓里四处把它记成 CC0 ⇒ 一直**无署名**随包分发 |
| `DamagedHelmet.glb` | **CC BY-NC 4.0**（© 2016 theblueturtle_ 那一版；ctxwing 2018 的重建那层是 CC BY 4.0） | **NC = 禁商用** —— 本 App 是**收费**的（有内购），随包分发**违反 NC 条款** |
| `BoxTextured.glb` | **CC-BY 4.0**（© 2017 Cesium，另带商标限制） | 要署名（且带 `LicenseRef-LegalMark-Cesium`） |
| `AntiqueCamera.glb` | CC0 **但内嵌 UX3D logo**（须署名 + 商标限制，聚合 SPDX = `CC0-1.0 AND LicenseRef-LegalMark-UX3D`） | 保守起见不用；它同时是最大的一份（17.5 MB） |
| `BoomBox.glb` / `Lantern.glb` / `WaterBottle.glb` / `Avocado.glb` | 都是 **CC0**（许可没问题） | **纯体积**：各 8–10 MB，占 `vml_lib.zip` 的绝大部分（2026-10-10 换小模型时一并删） |
| `ToyCar.glb` | CC0 | 上面表里曾列过它，但**本机磁盘上从来没有这份**（Khronos 那份实测 5.4 MB，>5 MB 线）⇒ 本次不动；要它进包再说 |
| `Duck.glb` | 实为 **SCEA Shared Source License**（`© 2006, Sony`） | 2026-10-10：本仓四处把它记成 **CC0** —— **记错了**。许可两处口径不一致就不再随包分发（用户：「换掉那些版权可能有问题的文件」）。**别再把它当 CC0 用** |
| `TextureCoordinateTest.glb` | README 写 CC0、**文件内写 CC-BY 4.0** | 2026-10-10：同上 —— 口径冲突 ⇒ 出局 |

**判据（一手证据）**：`unzip -p vml_lib.zip … | python -c "读 GLB 的 JSON chunk.asset"`
（`Fox.glb` 的 `asset.copyright` 里逐字写着 `CC-BY 4.0`）。
`DamagedHelmet` / `BoxTextured` / `AntiqueCamera` 文件内**没有** `copyright` 字段 ⇒ 许可只能从
Khronos 各模型 README 核 —— 这四份都**不是** CC0，所以都出局。

⚠ **这些是"随包"的，不只是"在磁盘上"**：它们此前只存在于**打包那台机器的 `models/` 目录**里
（被本目录的 `.gitignore` 挡在仓库外），所以光看工作树**发现不了** —— 必须**解 `vml_lib.zip` 逐份查**。
本条就是这么发现的：工作树里只有 3 个模型，包里却有 9 个。

## 代价与恢复

- 删掉这四个后，`vml_lib.zip` 从 **65.6 MB → 62.4 MB**。
- 需要某个被删的模型做本地试验时：**只在本机放**，并**别提交、别让它进包**
  （`models/.gitignore` 是 `*` + 白名单，白名单里现在**只有 `CREDITS.md`**）。
  更好的一条：`adb push` 到设备的
  `/storage/emulated/0/waycoder/workspace/examples/c/3d/models/` —— **那条路不进包**。
- ⚠ 要加回 Fox（CC-BY 允许分发）也可以，**前提是先在本文件里写下完整署名**（作者 + 链接）。
