Skip to content

Latest commit

 

History

61 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mineworld

Mineworld 是一个使用 C++20 开发的多人在线体素游戏实验项目

已实现功能

  • 支持本地游戏、远程游戏、无窗口客户端和专用服务器
  • 基于 16×16×16 区块的体素世界、基础地形生成和多人同步
  • 基于 EnTT 的玩家、机器人和物理实体
  • 基于 bgfx、GLFW 和 ImGui 的渲染及界面
  • 基于 Asio、UDP 和 KCP 的可靠网络通信
  • 使用 FlatBuffers 序列化握手、输入、命令、聊天、实体和区块数据
  • 游戏内聊天与调试命令、统一输入历史,以及专用服务器和无窗口客户端的命令行入口
  • 集成 Tracy 性能分析

构建

项目使用 C++20、CMake、Ninja 和 vcpkg,并已在 MSVC 下测试通过

已加入 Windows / Linux 分支,Linux 分支尚未构建或运行验证

cmake --build build --config Debug

可执行文件和运行配置生成到 bin/

修改头文件或类布局后,如果编译链接成功,但出现崩溃/输入无反应等疑难问题,尝试编译时增加参数 --clean-first

测试

测试统一由 mineworld_tests 目标构建,并使用 GoogleTest 注册独立用例,CTest 可以单独筛选用例并报告具体断言位置

cmake -S . -B build -DMINEWORLD_BUILD_TESTS=ON
cmake --build build --config Debug
ctest --test-dir build --output-on-failure

运行

启动客户端:

bin/mineworld.exe [client]

启动专用服务器:

bin/mineworld.exe server
bin/mineworld.exe server --port 40001

启动无窗口客户端,默认直接连接服务器,也可以使用内置服务器:

bin/mineworld.exe headless-client
bin/mineworld.exe headless-client --address 127.0.0.1 --port 40000
bin/mineworld.exe headless-client --integrated-server
bin/mineworld.exe headless-client --integrated-server --port 40001

计划

当前

  • 无

架构

  • 事件系统
  • 输入系统
  • Lua,Sol2,协程
  • Handle资源管理系统热加载(音乐,音效,材质,贴图集,着色器,脚本)
  • actor增量同步
  • 区域Region概念
    • 实体查询
    • 批量存取
    • 视锥测试
    • 玩法分区
  • 服务器区块
    • 区块生成批量set接口
    • 永久区块
    • 增量修改
    • 热区块和冷区块,冷区块使用RLE+区间树/线段树或者LZ4
    • leveldb,使用LZ4
    • 固定大小的工作线程池
      • 主线程负责计算需求、更新状态机、投递任务和提交完成结果
      • 工作线程只读取 chunkPos、generationId 和不可变世界生成参数,生成 ChunkData 并写入线程安全完成队列
      • 提交前校验区块状态、requesterCount 和 generationId,过期结果直接丢弃
      • 服务器关闭时停止接收任务,清空未开始任务,等待工作线程退出并丢弃无效结果
  • 客户端区块
    • 批量buildAirRows
    • 热缓存和冷缓存
    • 多线程网格构建
    • 区块边界用颜色表示不同加载状态
    • 贪婪网格,影响纹理/平滑光照/AO/透明
    • 新区块平滑显示
    • 远距离区块景深
    • 区块LOD,优化draw call

玩法

  • 24旋转态
  • RayCast选择方块
  • 破坏和放置方块
  • 方块定义数据化
  • 地形生成:Perlin Noise,Simplex Noise,3D Noise,Wave Function Collapse
  • 世界生成:温度场/湿度场/大陆性/侵蚀度/山脉强度,河流,建筑
  • 寻路算法:NavMesh,Jump Point Search
  • 类似红石的门电路
  • NPC实体
  • 删除spawn配置,改成自动寻找最高点
  • 传送
    • 重发coreChunks
    • 客户端视野,避免cull grid过大
    • lastChunkPos写成哨兵
  • 多世界
  • 昼夜系统

网络

  • 控制、实体、必需区块和普通区块使用独立队列,按顺序发送,存在队头阻塞后再考虑 KCP 多通道
  • 字节令牌桶限制区块进入 KCP 的速率,超过 KCP 高水位时暂停普通区块
  • Snapshot 和输入都可能停止发送时,增加 KeepAlive
  • 考虑公网:三次握手,NAT
  • 增加服务器错误,当前handleHandshake和onClientHello等地方出错会等待超时

渲染

  • 线框模式
  • 贴图集,材质
  • 阴影映射
  • 环境光遮蔽
  • 方块光照传播算法
  • LOD
  • 光线追踪
  • ImGui动态纹理
    • 删除GetGlyphRangesChineseFull

工具

  • 多机器人压力测试
  • 游戏内更改设置,客户端设置/世界设置

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages