Commit Graph

41 Commits

Author SHA1 Message Date
MDietermann
94930faccb feat(rendering): frustum-cull chunk draws and log render counts 2026-06-01 20:14:03 +02:00
MDietermann
43527e617b feat(streaming): load surface shell + player slab instead of vertical box 2026-06-01 18:51:38 +02:00
MDietermann
9daa9f8267 feat(rendering): distance fog and config-derived far plane 2026-06-01 18:46:02 +02:00
MDietermann
89ac70f1ab feat(world-gen): add MinCaveY ceiling to CaveCarver 2026-06-01 18:42:29 +02:00
MDietermann
262933238c feat(rendering): add Frustum with AABB intersection test 2026-06-01 18:40:16 +02:00
MDietermann
6c808b507b feat(config): add visibility + MinCaveY fields and cave-gen docs 2026-06-01 18:38:30 +02:00
9410fee78b feat(world-gen): integrate CaveCarver into WorldGenerator.Generate 2026-06-01 15:43:32 +02:00
15be8f6059 feat(world-gen): implement worm cave pass in CaveCarver 2026-06-01 15:36:34 +02:00
070bdfeac1 feat(world-gen): implement noise-threshold cave pass 2026-06-01 15:28:11 +02:00
093b3deabf feat(world-gen): add CaveCarver skeleton (no-op Carve) 2026-06-01 15:23:05 +02:00
013d524544 feat(world-gen): add WormHash deterministic mixing function 2026-06-01 15:20:09 +02:00
4587f81071 feat(blocks): add ore block scaffolding (Coal, Iron, Gold, Diamond) 2026-06-01 15:17:33 +02:00
8166c25ba6 feat(core): add cave-generation and fog tuning to Configuration 2026-06-01 15:14:22 +02:00
d1c8c22705 perf: skip renderer for chunks with empty mesh
Pure-air chunks (above terrain) and chunks where every face culls
produce a zero-length mesh from ChunkMesher.Build(). Previously
InstallResult still allocated a real ChunkRenderer (VBO + VAO) and
registered a zero-vertex draw call. With RenderDistanceVertical=2 and
a player at surface Y, the topmost vertical layer is typically all
pure air -- roughly H*H = ~289 wasted renderers per spawn.

The chunk still gets added to _ready so SpawnReady, dirty-marking and
unload bookkeeping continue to work; DrawAll's iteration over the
renderer dictionary naturally skips entries that don't exist.
2026-06-01 13:44:51 +02:00
2c95c7831a feat: weight vertical distance in chunk-load priority
Adds Configuration.VerticalPriorityWeight (default 4). The priority
formula in ChunkStreamer.RecomputeTargetSet now uses
dx^2 + dz^2 + dy^2 * VerticalPriorityWeight, so horizontal chunks at
the player's Y are dispatched before equally-distant chunks above or
below. Fixes janky loading where deep-underground chunks were
competing with surface chunks for early dispatch slots.
2026-06-01 13:41:55 +02:00
6b148362c0 test: end-to-end streaming + modification-store roundtrip 2026-06-01 13:24:20 +02:00
85a345d6e7 feat: ChunkStreamer tracks failed chunks to prevent retry storms 2026-06-01 12:04:50 +02:00
da051ed413 feat: ChunkStreamer dirty set with cardinal-neighbor remesh on load 2026-06-01 11:46:33 +02:00
7d06706400 feat: ChunkStreamer unload path and SpawnReady property 2026-06-01 11:35:35 +02:00
c1f0928344 feat: ChunkStreamer load path with target-set, dispatch, and diff application 2026-06-01 11:19:06 +02:00
2afeee50d5 feat: add Player class wrapping Camera with chunk-coordinate accessor 2026-06-01 10:45:09 +02:00
6a68953c9a feat: World.SetBlock writes through to IChunkModificationStore 2026-06-01 10:35:10 +02:00
7c310ebc6a feat: add IChunkModificationStore and in-memory implementation 2026-06-01 10:16:46 +02:00
1339bb45ec feat: add Configuration class with user-tunable defaults 2026-06-01 09:34:40 +02:00
MDietermann
03cf0ceb07 feat: add WorldGenerator filling vertical chunk stacks 2026-05-31 22:08:41 +02:00
MDietermann
6196b38cc8 feat: add TerrainSampler with dense box-blur border smoothing 2026-05-31 22:06:30 +02:00
MDietermann
9880e4379c feat: add BiomeMap with per-cell climate classification 2026-05-31 21:58:34 +02:00
MDietermann
589904beec feat: add Plains/Desert/Mountains/Forest biomes and registry 2026-05-31 21:56:55 +02:00
MDietermann
d0707fde9d feat: add deterministic VoronoiCells partition 2026-05-31 21:50:09 +02:00
MDietermann
44f53e8d50 feat: add seeded NoiseSource over FastNoiseLite 2026-05-31 21:46:53 +02:00
MDietermann
c81cd3c561 feat: derive atlas tile size from loaded texture dimensions 2026-05-31 21:43:53 +02:00
MDietermann
6eb17b6c5d feat: make Sand/Snow opaque and register Sand/Snow/Water blocks 2026-05-31 21:38:11 +02:00
MDietermann
4e14786668 New Atlas + Texture Pipeline 2026-05-31 20:32:46 +02:00
49d35cab5b feat: add multi-chunk world with cross-chunk face culling
Add a World that stores chunks in a Dictionary keyed by chunk
coordinate, with floor-division world<->chunk coordinate mapping
(correct for negative coords). The mesher takes an optional neighbor
sampler so faces at chunk borders are culled against adjacent chunks
instead of always meshing the shell. Render one ChunkRenderer per
chunk, placed via the model matrix. Reorganize the World layer into
Blocks/ and Chunk/ sub-namespaces.
2026-05-28 15:32:45 +02:00
8e3195ca37 test: pin chunk mesher vertex layout with exact float count 2026-05-28 12:28:49 +02:00
d7ecf019cb feat: add fly-camera with view/projection matrices 2026-05-28 12:04:30 +02:00
ecae0d4ce4 feat: add face-culled chunk mesher behind IChunkMesher 2026-05-28 12:00:26 +02:00
90be1035d4 feat: add Chunk as a dense 16-cubed id array 2026-05-28 11:56:49 +02:00
f4d3f9aab4 feat: add block model with IBlock flyweight and registry 2026-05-28 11:53:15 +02:00
17503820e6 fix: exclude nested test project from main project globs 2026-05-28 11:25:10 +02:00
d462f8b733 chore: pin OpenTK 4.9.4, add StbImageSharp, asset copy, and test project 2026-05-28 11:19:48 +02:00