summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/evidence/p79-analysis.txt14
-rw-r--r--docs/evidence/p79-day-noon.pngbin0 -> 116943 bytes
-rw-r--r--docs/evidence/p79-log.txt51
-rw-r--r--docs/evidence/p79-metrics.txt21
-rw-r--r--docs/evidence/p79-night.pngbin0 -> 146098 bytes
-rw-r--r--docs/维护说明.md17
6 files changed, 102 insertions, 1 deletions
diff --git a/docs/evidence/p79-analysis.txt b/docs/evidence/p79-analysis.txt
new file mode 100644
index 0000000..17bd159
--- /dev/null
+++ b/docs/evidence/p79-analysis.txt
@@ -0,0 +1,14 @@
+P78(夜晚氛围与场景细节)证据分析 — 真实 Desktop xvfb 1280x720,同日同机位 正午 vs 22 时
+近黑阈值 24;实心块 = 24x24 全近黑。
+
+day lantern=0.00(须 0.00)
+night glint stripe=141.2 ctl_mean=77.6 ctl_std=4.4 delta=63.5
+water bbox std: day=24.0 night=32.3
+night near-black frac=0.007 max24blk=184
+smoke region mean: day=100.6 night=146.8 delta=46.2 smoke_alpha=182
+bridge ring diff: day=-5.7 night=24.5
+day vs night differing_pixels=921599
+
+verdict=PASS
+ 夜帧光斑对比/非光斑平整、水面层次不低于白天、无铁板一块;
+ 炊烟夜帧更醒目、桥头窄光晕仅夜帧出现;白天 lantern=0 且两帧有差异。
diff --git a/docs/evidence/p79-day-noon.png b/docs/evidence/p79-day-noon.png
new file mode 100644
index 0000000..f0f9126
--- /dev/null
+++ b/docs/evidence/p79-day-noon.png
Binary files differ
diff --git a/docs/evidence/p79-log.txt b/docs/evidence/p79-log.txt
new file mode 100644
index 0000000..9a91c46
--- /dev/null
+++ b/docs/evidence/p79-log.txt
@@ -0,0 +1,51 @@
+world-mode=riverscape bounds=256x192
+mode=keyboard seed=42
+controls=WASD move E interact 1-6 choose Q observe Tab needs C chronicle L relations P pause F1/F2/F3 speed F6 save F7 load Esc close/exit
+fps=61.0 tick=0 pos=(4112,3088)
+fps=60.0 tick=0 pos=(4112,3088)
+splash=done frame=150
+menu=occupation-select
+new-game=ok seed=42 npcs=30 occupation=农夫 tick=0
+p78-shot=day hour=12.0 tick=2592000 lantern=0.00 water=-16,280,1312,96 glints=252 smoke=4 bridge_halo=16
+p78-regions day glint_src=-1,-1 glint_ctl=-1,-1 bridge_src=-1,-1
+p78-shot=day hour=12.0 tick=2592000 lantern=0.00 water=-16,280,1312,96 glints=252 smoke=4 bridge_halo=16
+p78-regions day glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=day hour=12.0 tick=2592000 lantern=0.00 water=-16,280,1312,96 glints=252 smoke=4 bridge_halo=16
+p78-regions day glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=day hour=12.0 tick=2592000 lantern=0.00 water=-16,280,1312,96 glints=252 smoke=4 bridge_halo=16
+p78-regions day glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-frame=p78-day tick=2592000 camera=(6352,4328)
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-shot=night hour=22.0 tick=4752000 lantern=1.00 water=-16,280,1312,96 smoke_src=656,344 smoke_alpha=182 smoke_cell=32 glint_alpha=124
+p78-regions night glint_src=176,280 glint_ctl=208,280 bridge_src=592,280
+p78-frame=p78-night tick=4752000 camera=(6352,4328)
+p78-shot=done
diff --git a/docs/evidence/p79-metrics.txt b/docs/evidence/p79-metrics.txt
new file mode 100644
index 0000000..5d059ba
--- /dev/null
+++ b/docs/evidence/p79-metrics.txt
@@ -0,0 +1,21 @@
+P79 夜帧整改量化对比(真实 Desktop xvfb 1280x720,同机位正午 vs 22 时)
+
+对照基准:P78 帧(docs/evidence/p78-*.png)与 P78 分析(docs/evidence/p78-analysis.txt)。
+白天帧一致性:p79 正午帧与 p78 正午帧逐像素完全相同(day frames identical=True)→ 白天零回归。
+
+1) 夜帧炊烟可见度(烟囱烟柱区 x648..696, y300..380 的「夜-昼」亮度贡献;对照列 x848..896 不变)
+ - 强光像素数(贡献 ≥ 80):181(P78)→ 1171(P79),约 ×6.5
+ - 峰值贡献:112(P78)→ 173(P79)
+ - 烟柱区净贡献均值(plume-ctrl):76.0(P78)→ 86.5(P79)
+ - analyze-p78.py「炊烟区均值 夜-昼」:43.2(P78)→ 46.2(P79)
+ 做法:夜帧烟柱 4 段向上堆叠(每段抬升 10px、整格 32px、alpha 180+75)+ 中性柔光团外发光
+ (半径 12)+ 暖色外发光(半径 30);全部只在夜帧叠加层,白天不改。
+
+2) 光晕重叠面积(「夜-昼」亮度贡献 ≥ 60 的像素数,近似多光源叠在一起的一团面积)
+ - 全屏:15477(P78)→ 9926(P79),−35.9%
+ - 中央区(x320..960, y200..520):15184(P78)→ 9633(P79),−36.6%
+ 做法:每光源光晕改为最多 2 层视觉层(内芯 2 圈 + 空心外环),芯/环之间留一圈确定暗隙
+ (同排 dy=0 不被任何图元覆盖),半径 4→3 tile,峰值 150→118;旧的多圈填充叠一团已移除。
+
+3) analyze-p78.py 复跑:verdict=PASS(光斑对比 63.5、非光斑水面 std 4.4、水面 bbox std 夜 32.3 ≥ 昼 24.0、
+ 近黑 0.007 无实心 24×24 块、桥头环带差 夜 24.5 / 昼 -5.7、day lantern=0.00)。
diff --git a/docs/evidence/p79-night.png b/docs/evidence/p79-night.png
new file mode 100644
index 0000000..d4dac39
--- /dev/null
+++ b/docs/evidence/p79-night.png
Binary files differ
diff --git a/docs/维护说明.md b/docs/维护说明.md
index aa544af..3467b7c 100644
--- a/docs/维护说明.md
+++ b/docs/维护说明.md
@@ -295,8 +295,23 @@ dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll
炊烟区夜-昼 +43.2(alpha 182);桥头环带差 夜 +13.5 / 昼 −5.7;白天 lantern=0.00,
落 `docs/evidence/p78-*`。
-## P17 批验:场景细节 / 人物动效 / 昼夜光照精修
+## P79 夜帧整改(炊烟可见度 + 光晕去叠)
+
+- 夜帧炊烟增强(`SceneDetail.nightSmoke*` + `SceneDetailRender.drawNightSmoke`,只在夜帧叠加层):
+ 烟柱 `nightSmokeSegments=4` 段向上堆叠(`nightSmokeSegmentLift=10`、夜帧整格 32px、
+ alpha `180+75*night`),每段叠暖色外发光(半径 30)与中性柔光团(半径 12),弥补烟精灵本身 alpha
+ 很低的问题;白天帧完全不叠加、逐像素与 P78 相同。
+- 夜帧光晕去叠(`VillageArt.haloRingLayers` + `SceneDetailRender.drawNightHalos`):每个光源最多 2 层
+ 视觉层(内芯 2 圈递减填充 + 空心外环),芯/环之间留一圈确定暗隙(同排 dy=0 不被任何图元覆盖),
+ 半径 4→3 tile(`nightHaloRadiusTiles=3`)、峰值 150→118(`nightHaloPeakAlphaAt`);生成器世界的
+ 旧多圈叠加光晕(`VillageArt.drawNightGlows`)不再在实时路径调用(该函数仍供整图取证函数使用)。
+- **回归**:`P79NightPolishTests`(光晕内芯亮/芯环暗隙/外环亮且不越半径无方角、半径收紧到 3 且白天为 0;
+ 夜帧烟柱分段/抬升/alpha 高于白天/外发光更强)。
+- **证据**:重跑 `LV_P78_SHOT=1` 同机位正午/22 时两帧 → `scripts/analyze-p78.py` 仍 verdict=PASS;
+ 量化对比见 `docs/evidence/p79-metrics.txt`:烟柱强光像素(夜-昼贡献≥80)181→1171(×6.5)、
+ 光晕重叠面积(贡献≥60)中央区 15184→9633(−36.6%);正午帧与 P78 逐像素一致(白天零回归)。
+## P17 批验:场景细节 / 人物动效 / 昼夜光照精修
- ①街边中式细节物:`scripts/make-jiangnan-art.py` 世界图集由 25 格扩到 28 格(新增 slot 25 石灯笼 /
26 水缸 / 27 摊贩摊位,全部烘焙进 `Assets/jiangnan-world.png`,尺寸 800x32→896x32),游戏侧只做
`tileSourceRectangle` 贴片、无程序几何。`VillageArt` 新增 `RenderPropKind.StoneLantern/WaterVat/