地形交界处过渡不够自然丝滑
10 小时前综合
我:能否让交界处像沙滩与海浪一样,你中有我我中有你是不是就是类似于你说的噪声梯形,也就是边界更不规则自然
嗒:
渐变参数已调整为 v4 平衡值:
版本 depth alpha 效果
v1 0.45 0.85 (实心) 绿色条带明显
v2 0.30 0.70→0 条带仍可见
v3 0.15 0.35→0 过渡完全消失
v4 0.25 0.55→0 平衡点
v4 取 v2 和 v3 的中间值 — depth 从 0.15 调回 0.25(提供足够的过渡覆盖区域),alpha 从 0.35 调回 0.55(让渐变在边缘处有可辨识的过渡效果,但因为是渐变淡出到全透明,不会形成生硬的条带边界)。
请预览测试,重点关注 zoom 0.3~0.7 区间的地形交界处:过渡是否可见、是否有绿色条带。
。本次 v5 做了三项改进:
1. 噪声梯形替代矩形渐变(lodLevel=2,zoom < 0.7)
矩形 → 5 顶点梯形,沿边缘 3 点噪声采样调制深度(±45%)
边界参差不齐,模拟有机过渡而非几何条带
NVG 调用量几乎不变(nvgRect 内部也是 4 个顶点)
2. 恢复角落渐变(lodLevel=2)
之前完全跳过角落 → 现在用径向渐变圆(nvgRadialGradient)
补全 4 方向交叉点的过渡缺失
每角仅 ~5 NVG 调用
3. lodLevel=1 边缘段数 6→8
中等缩放 (zoom 0.7~1.0) 的噪声多边形更平滑
请预览测试 zoom 0.3~0.7 区间,看地形交界处是否更自然丝滑。
P4 v6 已就绪,等待测试:
v6 采用 5 点噪声梯形方案(zoom 0.3~0.7 区间):
深度: 0.32 × tileSize,噪声浮动 ±50%
透明度: 0.60→0 线性渐变
形状: 7 顶点不规则多边形(5 个噪声采样点在 0%/25%/50%/75%/100% 位置)
角落: 跳过(节省性能,边缘梯形已覆盖过渡区域)
相比 v5,移除了角落径向渐变(回收 ~5ms),并将节省的预算投入更多噪声采样点(3→5),使边界更不规则自然。请预览测试效果。
v7 的核心变化:
"海浪侵蚀沙滩"效果:
9 个噪声采样点(每 1/8 tileSize)→ 11 顶点多边形,边界曲线更细腻
深度 0.40×ts(v6 的 0.32→0.40),过渡带更宽,渗透更深
噪声变幅 ±65%(v6 的 ±50%→±65%),深度范围 0.14~0.66×ts —— 有的地方只浅浅一层,有的延伸到瓦片 2/3 处,形成"你中有我、我中有你"
起始透明度 0.50(v6 的 0.60→0.50),配合更宽渐变带,避免条带感
额外 4 个 nvgLineTo 调用开销极低(仅追加顶点到路径缓冲区),预计性能影响 <1ms。请预览测试效果。
从截图看得很清楚:
zoom 0.73(lodLevel=1,噪声多边形):过渡自然,红箭头指向的边界看起来有机
zoom 0.66(lodLevel=2,噪声梯形):红箭头指向的边界看起来生硬、几何感强
根本原因不是参数问题,而是 渲染方法 不同:lodLevel=1 用的是多段噪声多边形(每段独立深度+透明度),lodLevel=2 用的是单一线性渐变填充的梯形。无论怎么调噪声梯形参数,都无法达到噪声多边形的自然感。
解决方案:将 lodLevel=2→1 的阈值从 0.7 降到 0.5,让 zoom 0.5~0.7 也使用 lodLevel=1 的噪声多边形渲染。
Bot Avatar
先做个性能估算,验证可行性:
zoom 瓦片数 当前方案 改后方案 预估耗时
0.73 2070 lodLevel=1 不变 15.0ms (实测)
0.66 2500 lodLevel=2 → lodLevel=1 ~18ms
0.55 ~3000 lodLevel=2 → lodLevel=1 ~22ms
0.50 ~3500 lodLevel=2 → lodLevel=1 ~25ms
0.45 ~4500 lodLevel=2 不变 ~23ms (梯形)
0.31 8316 lodLevel=2 不变 ~23ms (梯形)
zoom 0.5~0.7 切到 lodLevel=1 后,预估 Overlays 不超过 25ms,可以接受。
构建成功。改动很简单 — 只改了一个数字:
MapCanvas.lua:1817:zoom < 0.7 → zoom < 0.5
新的 LOD 分级:
zoom 范围 lodLevel 渲染方式 视觉效果
< 0.3 skip 完全跳过 瓦片太小,不可见
0.3~0.5 2 噪声梯形 瓦片很小,渐变足够
0.5~1.0 1 噪声多边形 自然有机 (同原0.73效果)
>= 1.0 0 全质量 最高品质
核心逻辑:zoom 0.5~0.7 原来用的是"单一渐变填充梯形"(看起来生硬),现在切换为"多段噪声多边形"(和 zoom 0.73 完全相同的渲染方法),所以视觉效果应该一致。性能方面,zoom 0.5 时瓦片约 3500 个,按 zoom 0.73 的 15ms/2070 瓦片线性推算约 25ms,在可接受范围内。请预览测试。



