islaApocalypse/Client
beezm 7f0f43b5fb baseline: working salvaged prototype on Godot 4.7.1 (pre-F1)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 01:45:41 -04:00
..
Scripts baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
README.md baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00

Client Module - IslaApocalypse

Phase 2 Status: Active (Mesh Rendering & Vertex Painting Online)

Overview

The Client directory handles the visual representation of the 3D Voxel Engine. It is strictly responsible for receiving pre-calculated mathematical data from the Server and Core modules and translating it into Godot-native visual nodes (MeshInstance3D). It does not calculate collisions, densities, or terrain generation.

Key Architecture & Components

1. The Visualizer (ChunkRenderer.cs)

A script attached to a MeshInstance3D node that physically draws a single 32x32 chunk of the world.

  • Mesh Generation: Calls MarchingCubes.GenerateMesh() from the Core module, passing in the Densities and BlockIDs scalar fields.
  • Vertex Painting: Dynamically creates a StandardMaterial3D and enables VertexColorUseAsAlbedo = true. This tells Godot to ignore standard texture maps and instead color the mesh using the exact RGB values we assigned to the vertices based on their BlockID (e.g., Green for Grass, Brown for Wasteland).
  • World Positioning: Multiplies the ChunkPosition (e.g., [1, 0]) by Constants.CHUNK_SIZE and Constants.VOXEL_SCALE (1.0f) to perfectly align the chunk in the global 3D space.
  • Backface Rendering: CullMode is explicitly disabled to ensure players don't see through the bottom of the map if they clip inside a mountain.

Next Immediate Steps (Phase 2, Step 4)

  • Currently, the renderer draws the exact topography. Once the Server implements Road Carving, the Client will automatically inherit those flattened vertices and paint them with the ASPHALT vertex color without needing any code changes here.
  • Future implementations will include reading BlockIDs to paint different UV maps/textures instead of just raw RGB vertex colors.