[Parity][map/render][S2] LevelView enrichDraws 对 blockCount === 0 的纯碰撞/空图形 DT1 图块(如世界之石要塞二层 baallair\\floor.dt1 tileIndex=109)误报 [D2MissingArt] #739
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题描述
进入世界之石要塞二层(
The WorldStone Keep Level 2,areaId = 129)等包含 0 像素块(blockCount === 0)DT1 图块的区域时,控制台报错:1.13c Ground Truth 根因分析
blockCount === 0(nBlocks == 0)的纯碰撞/标记型图块(例如data\global\tiles\expansion\baallair\floor.dt1的tileIndex=109,style=3, sequence=55, type=0, blockCount=0, subTileFlags=[1,1,...,1];以及act2\tomb\talrasha.dt1、expansion\wildtemple\entrance.dt1等)。subTileFlags写入子瓦片碰撞网格(buildIsoMapScene已完整写入),但在渲染阶段因为nBlocks == 0不产生任何像素绘制。TileAtlas.fromDt1Map对t.blocks.length === 0的图块合法地设置placement: null且记录blockCount: 0。src/client/map/level-view.ts的enrichDraws仅判断if (tileAtlas && (!atlasEntry || !atlasEntry.placement)),未区分atlasEntry.blockCount === 0的合法无图形图块,导致误触发reportMissingArt;同时src/client/scene/world-renderer.ts在遍历墙体图块时也未排除blockCount === 0的图块。修复范围
src/client/map/level-view.ts:enrichDraws识别blockCount === 0的合法无像素块 DT1 图块,不再误报reportMissingArt,并在LevelDrawItem上保留blockCount元数据。src/client/view/scene-source.ts&src/client/scene/world-renderer.ts:对!placement && blockCount === 0的非屋顶层图块跳过生成无效渲染四元组,保留屋顶层(type=15)用于playerUnderRoof遮挡判定,且墙体渲染不再对blockCount === 0误报reportMissingArt。areaId = 129(baallair\floor.dt1tileIndex=109)及全 136 张地图LevelView构建零[D2MissingArt]误报的回归测试。