diff --git a/CONTEXT.md b/CONTEXT.md new file mode 100644 index 000000000..506487300 --- /dev/null +++ b/CONTEXT.md @@ -0,0 +1,23 @@ +# Voxy – Project context + +**Purpose:** Minecraft mod for far-distance rendering using a Level-of-Detail (LOD) system. This file orients the codebase with a focus on LOD generation; section storage and serialization are documented for future LOD compression work. + +**LOD generation (high level):** +- **LOD levels:** `WorldEngine.MAX_LOD_LAYER = 4`; level 0 = full 32³ section, higher levels are coarser (see `src/main/java/me/cortex/voxy/common/world/WorldEngine.java#getLevel`). +- **Section ID encoding:** Level and position packed in a long; see `src/main/java/me/cortex/voxy/common/world/WorldEngine.java#getWorldSectionId` and `getLevel`/`getX`/`getY`/`getZ`. +- **Data → LODs:** Ingested chunks become `VoxelizedSection` (16³ + 8³ + 4³ + 2³ + 1); `WorldConversionFactory.mipSection` builds mip levels; `WorldUpdater.insertUpdate` writes into `WorldSection` at each level 0..MAX_LOD_LAYER and marks sections dirty (`src/main/java/me/cortex/voxy/common/world/WorldUpdater.java`). +- **Mesh generation:** Dirty sections are meshed by `RenderGenerationService` → `RenderDataFactory.generateMesh(WorldSection)` → `BuiltSection` (geometry buffer of quads). Geometry is uploaded via geometry managers (e.g. `BasicAsyncGeometryManager`) to GPU buffers; not persisted to disk. +- **Rendering:** Hierarchical traversal and section rendering use LOD level from section/section key; shaders decode level/position via `pos_util.glsl` (`getLoDLevel`/`getLoDPosition`). + +**Section storage (for LOD compression):** +- Sections are stored by `SectionStorage`; load/save use `SaveLoadSystem3.serialize` / `deserialize` on `WorldSection` (block data + metadata + LUT). See `src/main/java/me/cortex/voxy/common/config/section/SectionStorage.java`, `src/main/java/me/cortex/voxy/common/world/SaveLoadSystem3.java`. +- Optional compression: `CompressionStorageAdaptor` wraps a backend with `StorageCompressor` (ZSTD, LZ4, LZMA). Default config uses ZSTD (e.g. `StorageConfigUtil.createDefaultSerializer`). See `src/main/java/me/cortex/voxy/common/config/storage/other/CompressionStorageAdaptor.java`, `src/main/java/me/cortex/voxy/common/config/compressors/`. + +**Contents summary:** +- **Source:** `src/` – Java under `src/main/java/`, shaders and assets under `src/main/resources/`. +- **Build:** Gradle; Fabric mod entry in `src/main/resources/fabric.mod.json`. + +**Subdirectories:** +- `src/` – All application and mod source; LOD world, rendering, and storage live here. See `src/CONTEXT.md`. + +**Related:** None (root). diff --git a/build.gradle b/build.gradle index f3a1b6d6d..e1cd8f0e2 100644 --- a/build.gradle +++ b/build.gradle @@ -153,6 +153,7 @@ dependencies { modCompileOnly("maven.modrinth:vivecraft:1.21.9-1.3.2-fabric") modCompileOnly("maven.modrinth:flashback:rNCr1Rbs") + modLocalRuntime("maven.modrinth:voxy-worldgen:1.1.7") } diff --git a/gradle.properties b/gradle.properties index 6a661dc0b..155852fee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,11 +8,12 @@ org.gradle.daemon = false # Fabric Properties # check these on https://modmuss50.me/fabric.html minecraft_version=1.21.11 -loader_version=0.18.2 -loom_version=1.14-SNAPSHOT +yarn_mappings=1.21.11+build.4 +loader_version=0.18.4 +loom_version=1.15-SNAPSHOT # Fabric API -fabric_version=0.140.2+1.21.11 +fabric_version=0.141.3+1.21.11 # Mod Properties diff --git a/src/CONTEXT.md b/src/CONTEXT.md new file mode 100644 index 000000000..58cf6ba0c --- /dev/null +++ b/src/CONTEXT.md @@ -0,0 +1,20 @@ +# Source root + +**Purpose:** Contains all Voxy mod source: Java code and resources (shaders, assets, config). LOD generation spans world (common), mesh building (client), and section storage (common); LOD rendering uses shaders under `main/resources/assets/voxy/shaders/lod/`. + +**Contents summary:** +- **main/java** – Java package root; LOD world, voxelization, section storage, and client rendering. See `src/main/java/CONTEXT.md`. +- **main/resources** – Shaders (lod/, bakery/, post/), assets, fabric.mod.json, lang. LOD shaders: `pos_util.glsl`, `section.glsl`, `quad_format.glsl`, `quad_util.glsl`; hierarchical: `node.glsl`, `screenspace.glsl`, `traversal_dev.comp`; gl46: cmdgen/prep/cull/buildtranslucents, quads. See `src/main/resources/CONTEXT.md`. + +**LOD generation flow (references):** +- Voxel input and mip build: `src/main/java/me/cortex/voxy/common/voxelization/VoxelizedSection.java`, `src/main/java/me/cortex/voxy/common/voxelization/WorldConversionFactory.java#mipSection`. +- Insert into world and dirty propagation: `src/main/java/me/cortex/voxy/common/world/WorldUpdater.java#insertUpdate`. +- Section type and level: `src/main/java/me/cortex/voxy/common/world/WorldSection.java`, `src/main/java/me/cortex/voxy/common/world/WorldEngine.java`. +- Mesh from section: `src/main/java/me/cortex/voxy/client/core/rendering/building/RenderDataFactory.java#generateMesh`, `src/main/java/me/cortex/voxy/client/core/rendering/building/BuiltSection.java`. +- Build scheduling: `src/main/java/me/cortex/voxy/client/core/rendering/building/RenderGenerationService.java`. +- Section save/load (for compression): `src/main/java/me/cortex/voxy/common/world/SaveLoadSystem3.java`, `src/main/java/me/cortex/voxy/common/config/section/SectionSerializationStorage.java`, `src/main/java/me/cortex/voxy/common/config/storage/other/CompressionStorageAdaptor.java`. + +**Subdirectories:** +- `main/` – Standard Maven-style layout: `java/` (code), `resources/` (assets/shaders). + +**Related:** Project overview: `../CONTEXT.md`. diff --git a/src/main/java/CONTEXT.md b/src/main/java/CONTEXT.md new file mode 100644 index 000000000..0dff2dcb2 --- /dev/null +++ b/src/main/java/CONTEXT.md @@ -0,0 +1,17 @@ +# Java source + +**Purpose:** Voxy mod logic. LOD generation involves: common world and voxelization (section data, mip levels, storage); client rendering and mesh building (geometry from sections, upload, hierarchical traversal). + +**Contents summary:** +- **World and LOD levels:** `WorldEngine` defines `MAX_LOD_LAYER`, section ID encoding (`getWorldSectionId`, `getLevel`, `getX`/`getY`/`getZ`). `WorldSection` holds 32³ block data per level. `ActiveSectionTracker` loads/supplies sections. See `me/cortex/voxy/common/world/WorldEngine.java`, `me/cortex/voxy/common/world/WorldSection.java`, `me/cortex/voxy/common/world/ActiveSectionTracker.java`. +- **LOD data propagation:** `VoxelizedSection` carries level 0..4 voxel data; `WorldConversionFactory.convert` and `mipSection` produce mip levels; `WorldUpdater.insertUpdate` writes into `WorldSection` at each level and marks dirty. See `me/cortex/voxy/common/voxelization/VoxelizedSection.java`, `me/cortex/voxy/common/voxelization/WorldConversionFactory.java`, `me/cortex/voxy/common/world/WorldUpdater.java`. +- **Mesh generation (LOD → geometry):** `RenderGenerationService` queues build tasks by section position; `RenderDataFactory.generateMesh(WorldSection)` produces `BuiltSection` (geometry buffer, offsets, childExistence). Face generation uses `Mesher` and neighbor data. See `me/cortex/voxy/client/core/rendering/building/RenderGenerationService.java`, `me/cortex/voxy/client/core/rendering/building/RenderDataFactory.java#generateMesh`, `me/cortex/voxy/client/core/rendering/building/BuiltSection.java`. +- **Geometry upload and rendering:** `BasicAsyncGeometryManager` / `BasicSectionGeometryManager` upload `BuiltSection`; `NodeManager` / `AsyncNodeManager` drive hierarchical nodes and submit geometry. Section renderer (e.g. `MDICSectionRenderer`) uses LOD shaders. See `me/cortex/voxy/client/core/rendering/section/geometry/BasicAsyncGeometryManager.java`, `me/cortex/voxy/client/core/rendering/hierachical/AsyncNodeManager.java`, `me/cortex/voxy/client/core/rendering/hierachical/NodeManager.java`. +- **Section storage and compression:** `SectionStorage` abstract load/save; `SectionSerializationStorage` uses `SaveLoadSystem3.serialize`/`deserialize`. `CompressionStorageAdaptor` wraps a backend with `StorageCompressor` (ZSTD, LZ4, LZMA). Section data (block LUT + indices) is compressed; geometry is not persisted. See `me/cortex/voxy/common/config/section/SectionStorage.java`, `me/cortex/voxy/common/config/section/SectionSerializationStorage.java`, `me/cortex/voxy/common/world/SaveLoadSystem3.java`, `me/cortex/voxy/common/config/storage/other/CompressionStorageAdaptor.java`, `me/cortex/voxy/common/config/compressors/`. + +**Subdirectories:** +- `me/cortex/voxy/client/` – Client-only: config, mixins, render pipeline, rendering (building, hierarchical, section backend), model bakery. LOD mesh build and render entry points live here. +- `me/cortex/voxy/common/` – Shared: world engine, section storage config, compressors, serialization, voxelization, thread/utils. LOD level constants, section serialization, and compression adaptors live here. +- `me/cortex/voxy/commonImpl/` – Concrete implementations: `VoxyInstance`, importers (e.g. `WorldImporter`, `DHImporter` using `VoxelizedSection`). + +**Related:** Source layout and LOD flow: `../CONTEXT.md`. Shaders: `../resources/CONTEXT.md`. diff --git a/src/main/resources/CONTEXT.md b/src/main/resources/CONTEXT.md new file mode 100644 index 000000000..b911a89c8 --- /dev/null +++ b/src/main/resources/CONTEXT.md @@ -0,0 +1,15 @@ +# Resources + +**Purpose:** Fabric mod resources: shaders (LOD, bakery, post, hiz, util), assets, lang, and mod metadata. LOD rendering and traversal are implemented in `assets/voxy/shaders/lod/`. + +**Contents summary:** +- **LOD position/level encoding:** `pos_util.glsl` – `getLoDLevel(uvec2 packedPos)`, `getLoDPosition(uvec2 packedPos)`. Used by section and node types. See `assets/voxy/shaders/lod/pos_util.glsl`. +- **Section and quad types:** `section.glsl` (section LOD level/position helpers); `quad_format.glsl` (Quad layout: pos, size, face, stateId, biomeId, lightId); `quad_util.glsl` (lodScale, `makeRemainingAttributes` with lodLevel, face encoding). See `assets/voxy/shaders/lod/section.glsl`, `assets/voxy/shaders/lod/quad_format.glsl`, `assets/voxy/shaders/lod/quad_util.glsl`. +- **Hierarchical LOD:** `node.glsl` (node with `lodLevel`, `pos`, flags, meshPtr, childPtr); `screenspace.glsl` (frustum/screenspace from node); `traversal_dev.comp` (traversal, render counts per `node.lodLevel`); `queue.glsl`; cleaner (sort_visibility, result_transformer, batch_visibility_set); debug (node_outline, setup). See `assets/voxy/shaders/lod/hierarchical/node.glsl`, `assets/voxy/shaders/lod/hierarchical/screenspace.glsl`, `assets/voxy/shaders/lod/hierarchical/traversal_dev.comp`. +- **GL46 section rendering:** `bindings.glsl`; `cmdgen.comp`, `prep.comp` (section metadata); `cull/raster.vert`/`raster.frag`; `buildtranslucents.comp`; `quads3.vert`, `quads.frag` (quad rendering, textureLod). See `assets/voxy/shaders/lod/gl46/bindings.glsl`, `assets/voxy/shaders/lod/gl46/cmdgen.comp`, `assets/voxy/shaders/lod/gl46/quads3.vert`, `assets/voxy/shaders/lod/gl46/quads.frag`. +- **Other:** `lod/block_model.glsl`, `lod/frustum.glsl`; `bakery/`, `post/`, `hiz/`, `util/`; `fabric.mod.json`; `lang/en_us.json` (includes LOD-related tooltips). + +**Subdirectories:** +- `assets/voxy/shaders/lod/` – LOD shaders: shared (pos_util, section, quad_format, quad_util, block_model, frustum), hierarchical/, gl46/ (and gl46/cull/, gl46/test/), hierarchical/cleaner/, hierarchical/debug/. + +**Related:** Java LOD and rendering: `../java/CONTEXT.md`. Source overview: `../../CONTEXT.md`.