Hedra是我在高中时从零开始编写的3D开放世界游戏
项目Hedra是一个雄心勃勃的开放世界低多边形角色扮演游戏。选择你的职业,探索无尽的程序生成世界,解锁不同技能并完成程序生成的任务。更多截图在(截图) 时间线/背景 我在高中(大约15岁)时开始这个项目,以学习OpenGL的工作原理。项目范围迅速扩大,经过几年的发展,它变成了一款成熟的3D游戏和游戏引擎。代码库大约有10万行代码,游戏对Linux和Windows提供了一流支持。 特点 这百万行代码并不是徒劳的。游戏和引擎都充满了功能:) 游戏特点 美丽的程序生成世界 任务和首领 100多件带稀有度系统的物品 技能和技能树系统,拥有N+技能 4个不同职业,各有2个专精 动态生成的程序放置结构 钓鱼、制作等 交易和NPC 伙伴和宠物 美丽的原声带 导航、地图 不同维度 还有我记不起来的更多内容:) 引擎特点 全面渲染器,采用现代OpenGL 皮肤网格渲染 支持加载和播放通用动画 Collada(.dae)解析器 静态网格渲染 屏幕空间反射 屏幕空间环境光遮蔽 辉光、FXAA和MSAA 模组支持 持续集成,用于自动部署到Steam测试分支 本地化支持 使用OpenAL的音效支持 Python脚本支持 用于加载数据导向对象的模块系统 Steam整合 全面的用户界面和控制系统(下拉菜单、按钮等),从原始OpenGL编写 动态着色器系统,允许运行时重新加载 视锥剔除、遮挡剔除、运行时细节层次(LOD)的网格简化 天空盒支持 阴影 3D轨迹渲染支持 使用对象实例化的粒子系统 BulletPhysics整合 无限世界支持的区块系统 .ply解析支持 使用MarchingCubes的动态网格支持 自定义实现基本C#原始类型和分配器(如列表),以支持堆栈分配的列表并最小化自动运行时分配(从而减少垃圾回收) 1000+测试案例 用于模拟游戏组件并对游戏进行集成测试的框架 图像和资产压缩,以实现更快的加载和更小的体积 实体组件系统 还有更多我记不起来的内容:) 有趣的部分 WorldRenderer.cs。只需3个绘制调用(实际上取决于数据缓冲区的分区情况,但设计为3个),就可以渲染整个世界(水面、地形、实例化)使用glMultiDrawElements。 Block.cs。世界的核心组件。阅读更多内容请访问https://maxilevi.com/blog/procedural-meshing-hedra Fishing.py。使用IronPython编写的模组脚本,直接与C# API交互。 NativeArray.cs 自定义分配器实现的数组原始类型。该项目同时提供堆基和堆栈基分配器,使用stackalloc。其目的是在游戏帧中最小化自动堆分配(从而避免垃圾回收)。 有趣的事实 世界完全通过程序生成,没有世界存档文件。只有玩家的内容和世界种子被保存。其余内容在运行时生成。世界是基于体素的,但使用名为Marching Cubes的等值面提取算法,从离散体素中提取隐式连续表面。 名称“Hedra”来自四面体,这是我实现的原始等值面提取算法使用的形状Marching Tetrahedra。 游戏仅支持加载.PLY和.DAE模型,两者均为纯文本,因此模型没有纹理。因此,如果你从这个角度看,就意味着我写了一堆文本,这些文本读取文本并从中创建交互式图像。我觉得这真的很酷。 截图 TODO添加更多 代码结构 整体架构 游戏是对基础引擎的模组。这样架构的目的是强迫自己保持模组API的最新,从而鼓励人们制作模组。 Hedra 基本上是整个游戏。这包括AI逻辑、组件、世界生成、模块系统、对象放置和许多其他内容。 Hedra.Engine 引擎的核心部分,这定义了与世界的所有抽象。它处理渲染、音效、不同的基础系统,以及通用窗口、游戏循环和平台功能。这个分割不是在开始时完成的,所以一些内容可能仍在外部。 Framework 引擎中使用的核心原始类型。这包括堆和堆栈分配器、自定义实现的列表和数组,以及指向本机和其他一些有用原始类型的指针的包装器。 HedraTests 测试套件 资产构建器 命令行工具,将游戏资产压缩为方便的二进制文件。将图像、模型、音频文件、着色器合并为一个具有快速数据检索结构的单个二进制文件。 服务器 曾几何时,Hedra曾支持多玩家游戏。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡