Skip to content

Define region projection manifests and image products #21

Description

@zoeyrose

Important

This preserved world-imagery design now belongs to the fresh MIT shared renderer. Authored geography, labels, and content decisions remain in atrinik/content; rendering/projection code is shared by client, editor, and offscreen products.

Replacement implementation contract

Own renderer-facing projection/profile/product contracts here: authored region metadata is supplied by content, complete scenes by Go/offline sources, and atrinik-render produces deterministic images/manifests. Preserve every projection, label, crop, product, compatibility, and migration decision.

Use explicit versioned scene/resource/projection inputs, deterministic clocks/profiles, bounded concurrency and memory, atomic outputs, manifests/digests, semantic-mask validation, and renderer metrics. No source-tree/runtime discovery or separate imagery renderer is permitted.

Verified original past work by an approved MIT provenance grantor may be copied, migrated, translated, or relicensed only through the merged complete-provenance grant directive.

Paired atlas lighting products

Publish each region/world atlas revision with orthogonal product_profile=region and lighting_profile=fully-lit|intended-darkness identities:

  • fully-lit uses authoritative maximum neutral illumination through the same shared light/material path as every other scene. It is not a bypass shader or post-render brightening step.
  • intended-darkness uses authored indoor/per-surface ambient and canonical static emitters; outdoor surfaces use the exact pinned darkest supported environmental phase supplied by the scene source.

The compiler/server scene source—not the source-neutral renderer or browser—resolves indoor/outdoor overrides and immutable scalar/RGB light inputs. Player/private/transient/weather lights remain absent from the public product unless a future versioned profile explicitly permits them. Lighting environment is independent of the fixed animation clock.

Upstream source ownership remains atrinik/protocol#5 for bounded scene/light metadata and atrinik/server#38 for deterministic authorized scene export; #12 consumes that complete source-neutral scene, while #14 owns the shared renderer lighting/material path.

One immutable atlas manifest binds both complete pyramids to the same source scene revision, resources, public-disclosure envelope, projection identity, dimensions, chunk grid, coordinate mapping, zoom levels, and tile coverage. It records the default mode (fully-lit), lighting profile schema/version/digest, resolved environment and light-field digests, and per-mode tile indices/media/encoded hashes/canonical pixel hashes. A missing, stale, or mismatched counterpart fails publication atomically.

The shared projection lets the website request the same z/x/y in either mode without moving the view. Cache/product keys include the lighting profile and complete light inputs. Publication reports per-mode and aggregate object count, bytes, render/encoding time, and reuse. The frontend control and R2 delivery contract live in atrinik/website#34; content publication lives in atrinik/content#4.

Acceptance requires deterministic per-mode hashes and indoor, outdoor, mixed-boundary, static positive/negative/colored-light, and fully-lit fixtures. Both profiles must preserve exact source authorization, topology, projection, depth, coordinates, and coverage while allowing declared lighting-dependent pixels/visibility to differ.

Preserved product/design specification and historical implementation notes

Parent and roadmap

Outcome

Replace the rectangular scalar-coordinate region-map contract with projection metadata and ship raw, region, minimap, and diagnostic products from one render.

Scope

  • Move region fog, player markers, coordinate inspection, labels, tooltips, pan/zoom, and hit testing to projected tile anchors/polygons.
  • Add raw RGBA, region atlas/pyramid, minimap, documentation, and player-view profiles plus bounded auxiliary semantic masks where needed.
  • Stream chunks/zoom pyramids through the authenticated asset-source layer and keep fog as semantic tile state.
  • Remove the libgd averaged-color PNG path and dependency after every current consumer moves.

Superseded path / cleanup target

Delete the old .def/single-PNG scalar pixel_size contract and libgd worldmaker rendering; do not retain both coordinate models for hypothetical clients.

Acceptance criteria

  • Fog, markers, labels, tooltips, coordinate hit testing, and navigation remain correct on isometric outputs.
  • All products derive from the same ordered render commands/raw image without reinterpreting map objects.
  • Large regions load bounded chunks while small regions use the same manifest contract.
  • No current package or client consumer depends on averaged-color worldmaker output.

Validation baseline

Before: region UI assumes rectangular per-map placement and one simplified PNG.

After: projection metadata drives exact isometric navigation products from the real renderer.

Run UI coordinate/fog fixtures, raw-to-derived product hashes, authenticated asset streaming tests, package checks, and visual comparisons.

This issue is a bounded child of #13. The parent remains open until every sibling child is complete.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Effort

    None yet

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions