From 012c66f7eef55e7ef98a3c09bba419b1b17c05ca Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Tue, 29 Sep 2026 16:17:02 +0800 Subject: p79: 夜帧炊烟增强与光晕去叠 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 炊烟:夜帧烟柱4段向上堆叠(整格32px, alpha 180+75)+暖色外发光(r30)+中性柔光团(r12); 烟柱强光像素(夜-昼贡献>=80) 181->1171 (x6.5),峰值112->173;白天帧逐像素不变。 - 光晕去叠:VillageArt.haloRingLayers 每光源<=2层(内芯+空心外环),芯环间确定暗隙,半径4->3 tile, 峰值150->118;光晕重叠面积(夜-昼贡献>=60)中央区 15184->9633 (-36.6%),全屏 15477->9926 (-35.9%)。 - 回归 P79NightPolishTests(3);analyze-p78.py 复跑仍 PASS;正午帧与 P78 完全一致=白天零回归。 - Desktop 367/367, Kernel 120/120, digest 953775FA...F7F6C 不变 --- src/LivingVillage.Desktop/SceneDetail.fs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/LivingVillage.Desktop/SceneDetail.fs') diff --git a/src/LivingVillage.Desktop/SceneDetail.fs b/src/LivingVillage.Desktop/SceneDetail.fs index 54665ac..0e61726 100644 --- a/src/LivingVillage.Desktop/SceneDetail.fs +++ b/src/LivingVillage.Desktop/SceneDetail.fs @@ -198,10 +198,10 @@ module SceneDetail = let night = max 0.0f (min 1.0f nightStrength) int (78.0f + 104.0f * night) - /// 炊烟绘制边长:夜帧略放大,增强存在感。 + /// 炊烟绘制边长:夜帧放大到整格,增强存在感。 let smokeCellSize (nightStrength: float32) : int = let night = max 0.0f (min 1.0f nightStrength) - int (20.0f + 8.0f * night) + int (20.0f + 12.0f * night) // ---------------- P78 桥头灯柱近圈光晕 ---------------- @@ -212,6 +212,31 @@ module SceneDetail = /// 窄光晕半径(tile):固定 1,只围灯柱一圈,不铺满整条河。 let bridgeHaloRadiusTiles = 1 + // ---------------- P79 夜帧炊烟增强(烟柱 + 外发光) ---------------- + + /// 夜帧烟柱分段数:向上堆叠成可辨烟柱。 + let nightSmokeSegments = 4 + /// 每段抬升像素。 + let nightSmokeSegmentLift = 10 + /// 夜帧烟柱 alpha:显著高于白天 underlay,裸眼可从屋顶看到每一缕。 + let nightSmokeAlphaAt (nightStrength: float32) : int = + int (180.0f + 75.0f * max 0.0f (min 1.0f nightStrength)) + /// 夜帧外发光峰值 alpha:提亮烟柱周边形成外发光。 + let nightSmokeGlowPeakAt (nightStrength: float32) : int = + int (90.0f + 110.0f * max 0.0f (min 1.0f nightStrength)) + /// 夜帧外发光半径(像素)。 + let nightSmokeGlowRadius = 30 + + // ---------------- P79 夜景光晕去叠 ---------------- + + /// 收紧后的单个光源光晕半径(tile):4 → 3。 + let nightHaloRadiusTiles = 3 + /// 每个光源最多可见层数(内芯 + 外环),层间留暗隙。 + let nightHaloVisualLayers = 2 + /// 收紧半径后的峰值 alpha(略降,避免叠加成一整团)。 + let nightHaloPeakAlphaAt (nightStrength: float32) : int = + int (118.0f * max 0.0f (min 1.0f nightStrength)) + /// ---------------- 近景楼层层错落(屏幕空间前景层) ---------------- /// 前景层屋顶分段:等宽 tile 分段、高度按确定性函数错落(0/8/16/24 px 四层), -- cgit v1.2.3