// W2 —— tile.raw -> 每图层 258×258 alpha(splat 权重)。 // 逐字节照 GameLib/AreaTerrain.cpp CTerrain::RAW_GenerateSplat: // texel 值 = TextureSet 运行时图层索引; // layer i 的 alpha = 0xFF 当 tile==i;当 tile>i 且 3×3 邻域有 ==i 时也 0xFF(1px 羽化);否则 0。 // SHINSOO §9-W2。无 godot 依赖。 #pragma once #include #include #include "terrain_files.h" namespace fmt { constexpr int SPLAT_RAW_XY = TILEMAP_RAW_XY; // 258 struct SplatLayer { int layer = 0; // TextureSet 运行时索引(1..N) std::vector alpha; // 258*258,行主序 int coverage = 0; // alpha==0xFF 的 texel 数(调试 / 决定是否提交) }; struct SplatSet { std::vector layers; // 只含在本区块出现过的图层,按索引升序 std::vector tile_histogram; // [runtime_layer_index] -> texel 数(长度 = max+1) }; // tile 来自 load_tile_map。runtime_layer_count = TextureSet.runtime_count()(含 index 0 空层)。 void build_splat(const TileMap& tile, int runtime_layer_count, SplatSet& out); } // namespace fmt