diff --git a/.trellis/spec/guides/artifact-parity-guide.md b/.trellis/spec/guides/artifact-parity-guide.md index 87c8528..e487c81 100644 --- a/.trellis/spec/guides/artifact-parity-guide.md +++ b/.trellis/spec/guides/artifact-parity-guide.md @@ -172,7 +172,6 @@ capturedAt / durationMs / label |---|---|---| | D1 | `export_cesium.py` 旧回退表 | `"Office White Metal Facade"` 四张表里都有,但 `catalog` 里已无此材质——只作为旧 `.blend` 回退兼容保留 | | D2 | `scene-layers.js` vs `catalog.py` | 同一批图层的颜色两侧各自手调,无一致性保证(**这是刻意的**,见[图层表](../pipeline/layer-registry.md#为什么颜色刻意不同步)) | -| D3 | `generate_scene.py` `tuft_density_wave` | 注释仍在跟已删除的 hedge banding 作对比 | **碰到它们不要顺手修**——修复会改变产物或扩大 diff,属于独立决定。 @@ -189,7 +188,7 @@ capturedAt / durationMs / label | 一次改十个地方再跑校验 | 差异定位不到具体改动 | | 改 stage 打印格式 | 静默破坏契约 | | 摘要里保留不稳定字段 | 检查变噪音,最终被忽略 | -| 顺手修 D1–D3 | 改变产物或扩大 diff | +| 顺手修 D1 / D2 | 改变产物或扩大 diff | --- diff --git a/.trellis/tasks/08-03-clean-tuft-density-comment/check.jsonl b/.trellis/tasks/08-03-clean-tuft-density-comment/check.jsonl new file mode 100644 index 0000000..12fc09a --- /dev/null +++ b/.trellis/tasks/08-03-clean-tuft-density-comment/check.jsonl @@ -0,0 +1,2 @@ +{"file": ".trellis/spec/blender/index.md", "reason": "Check the generate_scene.py edit remains within Blender layer constraints."} +{"file": ".trellis/spec/guides/artifact-parity-guide.md", "reason": "Verify D3 is removed only after the stale comment is corrected."} diff --git a/.trellis/tasks/08-03-clean-tuft-density-comment/implement.jsonl b/.trellis/tasks/08-03-clean-tuft-density-comment/implement.jsonl new file mode 100644 index 0000000..6c8b69a --- /dev/null +++ b/.trellis/tasks/08-03-clean-tuft-density-comment/implement.jsonl @@ -0,0 +1,2 @@ +{"file": ".trellis/spec/blender/index.md", "reason": "Blender layer constraints and validation expectations for generate_scene.py changes."} +{"file": ".trellis/spec/guides/artifact-parity-guide.md", "reason": "Contains the D3 known-defect entry and parity guidance for comment-only changes."} diff --git a/.trellis/tasks/08-03-clean-tuft-density-comment/prd.md b/.trellis/tasks/08-03-clean-tuft-density-comment/prd.md new file mode 100644 index 0000000..a262df5 --- /dev/null +++ b/.trellis/tasks/08-03-clean-tuft-density-comment/prd.md @@ -0,0 +1,51 @@ +# Clean stale tuft density comment + +## Goal + +Clean up the documented D3 comment debt around `tuft_density_wave()` so the +code and Trellis specs no longer reference a deleted hedge-banding comparison. + +This is a documentation/comment correction only. It should not change Blender +scene generation behavior or generated artifacts. + +## Background + +- `.trellis/spec/guides/artifact-parity-guide.md` records D3: + `generate_scene.py` `tuft_density_wave` has a stale comment comparing lawn + tuft density with deleted hedge banding. +- `blender/generate_scene.py:354` defines `tuft_density_wave(x, y)`. +- The current function body is still valid deterministic scatter logic; only + the explanatory comment is stale. + +## Requirements + +1. Update the comment above `tuft_density_wave()` to describe the current lawn + tuft spacing intent without referencing removed hedge banding behavior. +2. Remove or update the D3 entry in + `.trellis/spec/guides/artifact-parity-guide.md` so it no longer lists this + as an outstanding known defect after the code comment is corrected. +3. Do not change `tuft_density_wave()` math, tuft sampling thresholds, grass + material behavior, object names, counts, or scene output. +4. Do not change D1 or D2. +5. Do not change parity ignore lists. + +## Acceptance Criteria + +- [ ] `blender/generate_scene.py` no longer has a stale hedge-banding + comparison near `tuft_density_wave()`. +- [ ] `.trellis/spec/guides/artifact-parity-guide.md` no longer records D3 as + outstanding. +- [ ] `python3 -m py_compile blender/generate_scene.py` passes. +- [ ] `python3 -m unittest blender/tests/test_pure.py` passes. +- [ ] `git diff` shows no change to `tuft_density_wave()` executable code. + +## Out Of Scope + +- Any Blender/Cesium artifact-changing behavior. +- Full parity capture, because the task is comment/spec-only and acceptance + explicitly verifies no executable code changed. +- D1 / D2 cleanup. + +## Open Questions + +None. diff --git a/.trellis/tasks/08-03-clean-tuft-density-comment/task.json b/.trellis/tasks/08-03-clean-tuft-density-comment/task.json new file mode 100644 index 0000000..5f29654 --- /dev/null +++ b/.trellis/tasks/08-03-clean-tuft-density-comment/task.json @@ -0,0 +1,26 @@ +{ + "id": "clean-tuft-density-comment", + "name": "clean-tuft-density-comment", + "title": "Clean stale tuft density comment", + "description": "", + "status": "in_progress", + "dev_type": null, + "scope": null, + "package": null, + "priority": "P2", + "creator": "dingkang", + "assignee": "dingkang", + "createdAt": "2026-08-03", + "completedAt": null, + "branch": null, + "base_branch": "main", + "worktree_path": null, + "commit": null, + "pr_url": null, + "subtasks": [], + "children": [], + "parent": null, + "relatedFiles": [], + "notes": "", + "meta": {} +} \ No newline at end of file diff --git a/blender/generate_scene.py b/blender/generate_scene.py index 6411646..85b4350 100644 --- a/blender/generate_scene.py +++ b/blender/generate_scene.py @@ -352,9 +352,9 @@ def load_tuft_variants(): def tuft_density_wave(x, y): - # A lawn wants gentle clumping, not the hard banding a shrub bed needs: - # low amplitude keeps most of the polygon planted so the bare stretches - # read as mown patches rather than as dead ground. + # Low-amplitude deterministic waves leave occasional open patches while + # keeping most of the lawn planted, so the tufts read as uneven grass + # rather than a regular grid. return (math.sin(x * 0.21 + y * 0.17) + 0.55 * math.sin(x * 0.44 - y * 0.29 + 1.3)) diff --git a/docs/changelog.md b/docs/changelog.md index fb3d127..8178b52 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -33,6 +33,9 @@ collection 顺序、counts、focus、road counts、scene metadata 和 `SCENE_DONE` ownership。 Blender/Cesium parity before/after 在两个样本上均 identical;P2 registry 缺口收口为 当前保守契约,未做全量 ownership 反转。 +- 清理 D3 过期注释债:`tuft_density_wave()` 的说明不再引用已删除的 hedge banding + 对比,`.trellis/spec/guides/artifact-parity-guide.md` 也不再把 D3 列为待修缺陷; + 只改注释 / spec / changelog,未改 Blender 场景生成逻辑。D1 / D2 继续保留为已知约束。 ## 2026-07-31(三)远看发黑的真正原因:反照率没被提亮