我的这个分支要实现的功能是实体方块的打散功能,即将chunk携带的实体的方块都打散到对应坐标的chunk中。
目前看这个实现似乎不完整,因为出现了非大型实体方块被chunk边界切割的问题。经过调研发现,worker 在生成 chunk 的时候,超过chunk边界的实体方块似乎被丢弃了,这是不对的。请你review一下超过chunk的方块到底是怎么被处理的。
我希望跨越chunk边界的实体方块能正确的渲染,并按照坐标归并到对应的chunk中被chunk管理。因此chunk管理的方块包括自身携带的实体没有跨越chunk边界的方块,也包括从别的chunk实体跨越到本chunk里的方块。
有两个逻辑需要重点考虑:
- A chunk 先渲染,A chunk 携带的溢出chunk之外的方块需要以某种方式记录,并在后渲染的 B chunk加载时从这个记录里能够取出并归并到B chunk 进行渲染。
- A chunk 后渲染,A chunk 携带的溢出chunk之外的方块,溢出到已经渲染完成的 C chunk范围内,也要能将这个溢出的方块归并到已经渲染完的 C chunk 中。
请你深度调研这两个逻辑是否在当前代码里已经实现,如果没有的话,代码里是怎么做的?如果代码没有实现跨chunk方块的渲染。
请你制定新的方案,实现跨chunk方块的正确按照坐标打散到对应的chunk中的功能。请你用 systemic-debugging 技能来调研。
https://github.com/jayli/mc-lite/commits/breakup-blocks-from-entities/
目前是打散的功能编码完成了,接下来:
1. 功能测试
2. 性能调优
完成后就可以进一步做全局 InstancedMesh 管理了。
当前的变更:
https://github.com/jayli/mc-lite/compare/355857bf37e76018761be54c48607873811cbafa...31567f06982af2c91a1aa07850bb1cacf92f18a3
---
## 性能优化分析
### 步骤 ⑤ 优化:跳过 consolidation 的 ownership 校验
**位置**: `WorldWorker.js:1679`
**改动**: `if (!isBlockOwnedByCurrentChunk(snapshotBlock))` 改为 `if (!isOptimization && !isBlockOwnedByCurrentChunk(snapshotBlock))`
**预期提升**: 单次 consolidation Worker 计算时间减少 ~25%(结构复杂时可达 30%)
**原理**: consolidation 场景(`isOptimization = true`)的 snapshot 数据来自已过滤的 `blockData`,不存在跨 chunk 方块,ownership 校验冗余。保留该校验仅用于兼容旧版存档(v1 schema)加载场景。
## TODO
- [ ] **步骤 ⑤ 优化 — 跳过 consolidation 的 ownership 校验**: `WorldWorker.js:1679` 增加 `if (!isOptimization)` 条件判断,consolidation 模式下直接写入 blockMap,跳过 `isBlockOwnedByCurrentChunk` 遍历
- [ ] 功能测试(打散功能验证)
- [ ] 性能调优(consolidation 请求量优化、增量计算)
- [ ] 全局 InstancedMesh 管理
我的这个分支要实现的功能是实体方块的打散功能,即将chunk携带的实体的方块都打散到对应坐标的chunk中。
目前看这个实现似乎不完整,因为出现了非大型实体方块被chunk边界切割的问题。经过调研发现,worker 在生成 chunk 的时候,超过chunk边界的实体方块似乎被丢弃了,这是不对的。请你review一下超过chunk的方块到底是怎么被处理的。
我希望跨越chunk边界的实体方块能正确的渲染,并按照坐标归并到对应的chunk中被chunk管理。因此chunk管理的方块包括自身携带的实体没有跨越chunk边界的方块,也包括从别的chunk实体跨越到本chunk里的方块。
有两个逻辑需要重点考虑:
请你深度调研这两个逻辑是否在当前代码里已经实现,如果没有的话,代码里是怎么做的?如果代码没有实现跨chunk方块的渲染。
请你制定新的方案,实现跨chunk方块的正确按照坐标打散到对应的chunk中的功能。请你用 systemic-debugging 技能来调研。