Skip to content

从零构建的高性能 Java 体素游戏引擎,Minecraft Clone。基于 LWJGL 3 和 OpenGL 开发,特性包含异步区块网格生成、可扩展的 3D 地形管道以及双通道透明渲染系统。

Notifications You must be signed in to change notification settings

KspTooi/OurCraft

Repository files navigation

OurCraft Prototype - Java体素游戏原型

📖 项目简介

MyCraft 是一个使用 Java 21LWJGL 3 开发的高性能、可扩展的 3D 体素沙盒游戏原型机
与最初的版本相比,当前的 V1.2 版本已经脱离了简单的图形演示,进化为一个拥有完整 C/S(客户端/服务端)架构面向服务(SOA)设计以及工业级存储方案的技术演示原型。

🚀 核心特性 (V1.2 最新进展)

🏗️ 系统架构

  • SWEU (Server World Execution Unit):世界执行单元。每个游戏世界都运行在独立的 SWEU 线程中,拥有独立的时间累加器和 Tick 循环。这使得主世界、下界等不同维度可以并行运算,互不阻塞,充分利用多核 CPU 性能。
  • 真正的 C/S 架构:彻底分离了渲染层(Client)与逻辑层(Server)。服务端负责权威物理模拟,客户端负责预测与插值渲染。
  • JDK 21 + 虚拟线程 (Virtual Threads):利用 Project Loom 实现高并发网络 I/O,抛弃了复杂的异步回调,实现了同步思维下的高性能网络处理。
  • Kryo 二进制网络协议:基于 UDP/TCP 的高效二进制数据包传输,拒绝 JSON 带来的带宽浪费。
  • 服务化架构 (SOA):引入 SequenceUpdate 接口,将物理、时间、事件总线拆解为独立的服务 (ServerWorldPhysicsService, ServerWorldTimeService),由 Action Pipeline 统一驱动。

🌏 世界与物理

  • 无限世界与 3D 地形:基于 3D 密度场的地形生成管道 (TerrainPipeline),支持悬崖、空岛和自定义生物群系(如出生平台世界)。
  • 双精度物理 (Double Precision):底层坐标系全面升级为 double,彻底解决了远距离坐标抖动问题,支持真正的无限世界。
  • 高精度时间系统:逻辑更新 (TPS) 与 渲染帧率 (FPS) 彻底解耦,支持插值渲染,即使在 20 TPS 下也能获得 144 FPS 的丝滑视觉体验。
  • 统一坐标系:引入 Pos, ChunkPos, LocalPos, ScaPos 标准组件,彻底解决了坐标转换中的负数边界 Bug。

💾 存储系统 (Archive Architecture)

  • 混合存储架构 (SCA + DB)
    • 地形数据:使用 SCA (Super Chunk Archive) 格式,基于区域文件的高压缩二进制流,这通常会将40X40个区块打包压缩到一个SCA文件中。
    • 实体与元数据:使用嵌入式 H2 Database,提供事务安全和高效的索引查询。
  • 局部调色板与位存储:区块数据采用 BitStorage 和局部调色板技术,将内存占用降低了 87.5%。
  • 租约系统 (Lease System):引入 FlexChunkLease,基于“租约”而非简单的引用计数来管理区块生命周期,精确控制内存加载与卸载。

🎨 渲染表现

  • 智能纹理管理:支持任意尺寸纹理的智能打包器,完美支持高清纹理包和 GPU 动画。
  • 双通道渲染管线:完美处理透明物体(水体),消除深度排序错误。
  • GPU 水体动画:基于着色器的时间驱动动画,零 CPU 开销。

🔮 未来展望:向多线程高并发演进

目前的 V1.2 版本已经奠定了坚实的基础,但我们的目标是将其打造为一个能够承载海量玩家和复杂世界的工业级引擎。未来的优化方向将聚焦于极致的并发性能

  • SWEU 深度优化:进一步细化 SWEU 的职责,探索将实体更新、物理模拟等子任务分发到更细粒度的线程池中执行的可能性,实现世界内部的并行化。
  • 全异步 I/O 流水线
    • 异步区块加载/卸载:完善 FlexChunkService,确保区块的磁盘读取、反序列化、地形生成、结构生成全流程在后台线程池中异步完成,彻底消除主线程卡顿。
    • 非阻塞存盘:利用写时复制 (COW) 技术,实现区块和实体的无锁快照保存。
  • 独立网络线程模型
    • 利用 JDK 21 虚拟线程的优势,为每个网络连接分配独立的轻量级线程,处理数据包的编解码和压缩。
    • 实现网络 I/O 与游戏逻辑线程的完全解耦,确保高负载下的网络吞吐量。
  • 实体组件系统 (ECS) 并行化:随着 ECS 架构的成熟,我们将探索 System 级的并行执行,让不同类型的组件(如移动、AI、状态)能够同时更新。

🛠️ 技术栈

  • 语言: Java 21 (LTS)
  • 图形库: LWJGL 3 (OpenGL 4.x)
  • 数学库: JOML (Java OpenGL Math Library)
  • 网络序列化: Kryo 5.x
  • 数据库: H2 Database
  • 工具: Lombok, SLF4J + Logback, Gradle/Maven

📂 项目结构概览

src/main/java/com/ksptool/ourcraft/
├── client/ # [客户端] 渲染、输入、UI、预测逻辑
├── server/ # [服务端] 权威逻辑、物理模拟、AI、存档管理
├── sharedcore/ # [共享层] 网络包定义、基础数据结构 (Block, Item, Pos)
└── Launcher.java # 程序入口 (负责启动 C/S 线程)

⚡ 快速开始

前置要求

  • JDK 21 或更高版本
  • 支持 OpenGL 4.5 的显卡

运行

# 编译
mvn clean package

# 启动 (默认进入单人游戏,内部自动启动集成服务端)
java -jar target/MyCraft-1.0-SNAPSHOT.jar

📅 研发里程碑 (Roadmap)

✅ Version 1.0: 起源

  • 基础体素渲染与网格生成
  • 简单的物理碰撞
  • 昼夜循环与光照基础

✅ Version 1.1: 分裂

  • C/S 架构重构:Server/Client 代码物理隔离。
  • 网络层实装:实现基于 Kryo 的网络协议栈。
  • 多世界支持:引入 WorldTemplate 和维度概念。

🚧 Version 1.2: 进化 (当前阶段)

  • ECS 架构重构:实体组件系统初步实装,摒弃继承地狱。
  • SWEU:世界驱动单元实装 不同世界由不同的线程驱动。
  • 混合存档系统:实装 H2 数据库与 SCA 文件系统的混合存储。
  • 物理精度升级:Float -> Double 全面升级。
  • 资源租约系统:实现区块的精确生命周期管理。
  • FlexChunk 实装:(进行中) 下一代高性能区块容器全面接管旧系统。
  • 容器与背包:(计划中) 实现物品交互与容器 UI。

🤝 贡献与致谢

特别感谢开源社区提供的灵感,特别是 Minecraft 的设计哲学对本项目有着深远的影响。

About

从零构建的高性能 Java 体素游戏引擎,Minecraft Clone。基于 LWJGL 3 和 OpenGL 开发,特性包含异步区块网格生成、可扩展的 3D 地形管道以及双通道透明渲染系统。

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published