Skip to content

fix(hq): a light-emitting block in a clear daytime frame reads as its texture, not a glowing point - #46

Merged
stellarfeline merged 4 commits into
mainfrom
fix/daylight-emitters
Nov 13, 2026
Merged

stellarfeline merged 4 commits into
mainfrom
fix/daylight-emitters

Conversation

@stellarfeline

Copy link
Copy Markdown
Owner

What

In a clear daytime frame every light-emitting block was drawn as a bright point: the day look turned emitters on at intensity 13, about 8× a sunlit face of the same colour. Chunky's default scene, which the HQ path tracer is modelled on, has emitters off in daylight (Scene.java DEFAULT_EMITTERS_ENABLED = false); every other day-look default (sun 1.25, sky 1, exposure 1, gamma 2.2) already matched.

The fix is a preset change only: default_emitter_intensity returns 0 on the client's day plateau (ticks 730–11270) and the previous mix, bit for bit, everywhere else. An explicit --emitter-intensity is used as given.

Kept unchanged

  • Every low-light combination (clear at dusk, night, midnight and dawn; rain and thunder at all six times): 16 combinations on two scenes, 32 of 32 frames byte-identical before and after.
  • Rain and thunder at day and noon keep their emitters on (out of scope; recorded as a finding in the research record).

Declared loosening

The day/night continuity test now holds the sky's continuity with emitters fixed at 13; with default emitters the step at the plateau edge is printed (4.043/255), no longer bounded.

Checks

Full suite 158 passed, 0 failed; fmt, clippy -D warnings and cargo doc clean. New tests: a daylight emitter beside its sunlit neighbour (largest channel gap 70.14/255 before, 2.57/255 after; tolerance 3/255) and a night emitter lighting the floor, unchanged.

Research record: docs/research/daylight-emitters.md. The Treehouse Camp and Long Bridge day frames are redrawn under the new preset.

Fixes #45

🤖 Generated with Claude Code

https://claude.ai/code/session_019qiQFhKtTpTbYnn9NZBbSd

stellarfeline and others added 4 commits November 12, 2026 19:43
… emitter lighting the floor

A fixture yard of emitters beside sunlit blocks (`demo-world --daylight-emitters`): a lit
and an unlit furnace, whose tops are one texture, a lantern, glowstone beside sandstone and
a torch on smooth stone in the open.

- At noon under the default sky the lit furnace's top is drawn within 3/255 per channel of
  the unlit one's; the same frame at emitter intensity 13 must miss that by more than four
  times the tolerance, so the comparison tells the two apart.
- At midnight the default frame is the game look's emitter intensity's byte for byte, and
  the floor by the lit furnace is brighter than by the unlit one by more than 20/255.
- The default sky's continuity across the day plateau's edge is measured with the emitters
  held at 13, and the default frame at tick 11270 must be the frame with emitters off.
  This is a loosening of what the day-edge assertion covers: with default emitters the
  step at the day plateau's edge is printed, no longer bounded.

Red on this commit: the day plateau still takes intensity 13.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qiQFhKtTpTbYnn9NZBbSd
… emitters off

Chunky's default scene, a daylight scene (sun altitude pi/3), has its emitters off
(`Scene.DEFAULT_EMITTERS_ENABLED = false` at chunky-dev/chunky 156e2bb); Lumenwright's day
look drew them at Chunky's intensity 13, so in a clear daytime frame every lantern's
texels emitted 13 times their colour squared against a sun of irradiance 1.25^2.2 = 1.63
and showed as a bright point. The sun, sky, exposure and tone map of the day look already
were Chunky's defaults (1.25, 1, 1, gamma); the emitters were the one preset that was not.

`default_emitter_intensity`: 0 (`DAY_EMITTER_INTENSITY`) when the frame stands at a tick
on the client's day plateau (`visual/sky_light_factor` at its day value; a vanilla sky, or
a stated sky at a tick); elsewhere the mix it was, bit for bit. A stated sky at no tick
(Chunky's look, as a rain or thunder frame is stated) keeps 13. A stated
`--emitter-intensity` is used as given.

Measured (CPU, 64 spp, 192x108, the daylight-emitters fixture, `--time 6000`): the lit
furnace's top against the unlit one's, max channel gap of the 7x7 means, 70.14/255 at
3bc8923 (intensity 13), 2.57/255 here. Midnight unchanged: floor by the lit furnace
(237.7, 229.6, 215.3) against (89.1, 85.4, 101.0) by the unlit one on both revisions.
One tick across the day plateau's edge (11270 -> 11271) with default emitters moves the
showcase frame by 4.043/255 (sky alone, emitters held at 13: 0.057; one tick inside
Chunky's look 0.040).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qiQFhKtTpTbYnn9NZBbSd
…and the day preset

`docs/research/daylight-emitters.md` records Chunky's defaults for a new scene, read at
156e2bb (emitters off, intensity 13 only while on, sampling NONE, sun 1.25 at altitude
pi/3, sky 1, exposure 1, gamma 2.2), how the day look departed from them (emitters on at
13), the preset that settles it, what it gives up (an interior at noon is lit by the sky
alone; the default steps at the day plateau's edges), and the comparison frames at small
size in `docs/renders/`.

Eighteen stated skies (six ticks x clear, rain, thunder) through Delvewright's engine
frame path, Metal, Lumenwright 0.4.0 against this branch, SHA-256 of the RGBA bytes:
16 low-light skies byte-identical on the daylight-emitters yard (384x216, 256 spp) and on
the town from the sea (640x360, 256 spp), 32 of 32 frames; the clear skies at ticks 1000
and 6000 differ on both; a second run of 0.4.0 reproduced all 36 frames.

The benchmark's F-chunky command states `--emitter-intensity 13`, as its Chunky scene file
turns emitters on. The changelog's unreleased section, the testing page, the research
index, the Chunky parity row and the game-sky page say what changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qiQFhKtTpTbYnn9NZBbSd
The camp and Long Bridge day HQ frames are redrawn with the defaults this branch takes on
the day plateau (emitters off), on Metal (Apple M2 Pro), 4096 spp, 8 bounces: 449 s and
554 s end to end. The commands, the time table, the README captions and the text say so;
the dusk frames and every quick frame are unchanged. The save is the documented one: its
day quick frame re-rendered at this revision is byte-identical to the committed one.

The limitations page says that a room lit only by lanterns is dark at noon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qiQFhKtTpTbYnn9NZBbSd
@stellarfeline
stellarfeline merged commit da19a92 into main Nov 13, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Light-emitting blocks stand out as bright points in a daylight frame

1 participant