# 给另一个 Codex 的中文交接提示词

请继续使用本机已经准备好的 Benchmark100 多视角非正交 mesh 评估集。这个评估集用于比较不同方法在“输入 2/4/6/8 张非正交图片，生成 3D mesh，再用 20 个保留测试视角和 GT mesh 评估”的效果。

## 核心路径

主清单：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json
```

渲染好的输入视角和测试视角：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0
```

各方法生成的 mesh：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval
```

完整 2/4/6/8 视角评测聚合：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/benchmark100_full_matrix_aggregate.json
```

中文可视化网页：

```text
http://38.94.129.6:8768/report/benchmark100_case_browser_zh.html
```

中文交接说明网页：

```text
http://38.94.129.6:8768/report/codex_benchmark100_handoff_zh.html
```

## 数据结构

主清单字段是 `objects`，不是 `cases`：

```python
import json
from pathlib import Path

manifest_path = Path("/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json")
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
objects = manifest["objects"]
print(len(objects))  # 应该是 100
```

每个对象都有：

- `benchmark_id`：例如 `gso_000`、`toys4k_034`。
- `dataset`：`GSO` 或 `Toys4K`。
- `input_protocols`：2/4/6/8 输入视角配置。
- `eval_views`：20 个保留测试视角。
- `gt_mesh`：GT mesh 来源路径，有些 GSO 是 `zip://...!...` 格式。

## 图片路径

单个 case 的目录格式：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/<benchmark_id>
```

例如：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/gso_000
```

其中：

- `input_2/*.png`：2 张输入图。
- `input_4/*.png`：4 张输入图。
- `input_6/*.png`：6 张输入图。
- `input_8/*.png`：8 张输入图。
- `eval_20/*.png`：20 张测试视角 GT 渲染图。
- 每个目录下的 `transforms.json` 是相机参数。

## 方法输出 mesh 路径

路径模式：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/<method_dir>/<benchmark_id>_input<N>/mesh_raw.obj
```

例子：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/trellis2_protocol4_all100/gso_000_input4/mesh_raw.obj
```

常见方法目录：

- `trellis_protocol2_all100`
- `trellis_protocol4_all100`
- `trellis_protocol6_all100`
- `trellis_protocol8_all100`
- `trellis2_protocol2_all100`
- `trellis2_protocol4_all100`
- `trellis2_protocol6_all100`
- `trellis2_protocol8_all100`
- `reconviagen_protocol2_all100`
- `reconviagen_protocol4_all100`
- `reconviagen_protocol6_all100`
- `reconviagen_protocol8_all100`
- `tripo_direct_protocol2_all100`
- `tripo_direct_protocol4_all100`
- `tripo_direct_protocol6_all100`
- `tripo_direct_protocol8_all100`
- `tripo_gpt_ortho_protocol2_all100`
- `tripo_gpt_ortho_protocol4_all100`
- `tripo_gpt_ortho_protocol6_all100`
- `tripo_gpt_ortho_protocol8_all100`

## GT mesh 读取注意

不要把 `zip://...!...` 形式的 GT mesh 路径直接传给普通 OBJ loader。更稳的做法是读取：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/render_summary.json
```

里面记录了当前评测实际使用过的 `mesh_path`。如果是 GSO，解压后的 mesh 通常在：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/_extracted_gso/<object_id>/meshes/model.obj
```

## 最小自检

```bash
test -f /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json
test -d /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/gso_000/input_2
test -d /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/gso_000/eval_20
test -f /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/trellis2_protocol4_all100/gso_000_input4/mesh_raw.obj
```

网页服务自检：

```bash
python3 - <<'PY'
import urllib.request
url = "http://38.94.129.6:8768/report/benchmark100_case_browser_zh.html"
with urllib.request.urlopen(url, timeout=5) as resp:
    print(resp.status, resp.getheader("content-type"))
PY
```

OBJ URL 自检：

```bash
python3 - <<'PY'
import urllib.request
url = "http://38.94.129.6:8768/data_survey/method_eval/trellis2_protocol4_all100/gso_000_input4/mesh_raw.obj"
with urllib.request.urlopen(url, timeout=10) as resp:
    print(resp.status, resp.getheader("content-type"), resp.read(16))
PY
```

如果网页能打开但 OBJ 加载不了，优先检查服务根目录是否是：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs
```

因为网页里的 mesh URL 是按这个根目录生成的。

