summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Desktop/SceneDetail.fs
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-29 16:17:02 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-29 16:17:02 +0800
commit012c66f7eef55e7ef98a3c09bba419b1b17c05ca (patch)
treeeaa3a0230e848d40d66418b3cfb29e898f7784ba /src/LivingVillage.Desktop/SceneDetail.fs
parentc4917adfd5dec391196a399aa53d57c680e462f4 (diff)
downloadliving-village-012c66f7eef55e7ef98a3c09bba419b1b17c05ca.tar.gz
p79: 夜帧炊烟增强与光晕去叠
- 炊烟:夜帧烟柱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 不变
Diffstat (limited to 'src/LivingVillage.Desktop/SceneDetail.fs')
-rw-r--r--src/LivingVillage.Desktop/SceneDetail.fs29
1 files changed, 27 insertions, 2 deletions
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 四层),