前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Explosion 开发笔记 (一)

Explosion 开发笔记 (一)

作者头像
Kindem
发布2022-08-12 14:12:30
4140
发布2022-08-12 14:12:30
举报
文章被收录于专栏:Kindem的博客Kindem的博客

Explosion 是我新开发的游戏引擎,GitHub 地址在这里: Explosion,预计是一个大大的工程,我也将持续开发与维护,欢迎志同道合的朋友加入与我一同创造新的游戏秩序。我会在博客中持续更新自己开发过程中的一些心得与思考,欢迎大家关注,Explosion 的故事将由此开始。

为什么要做 Explosion

其实早在上大学那会,我就对计算机图形学和游戏开发有着浓厚的兴趣,大一的时候使用过 Unity 和 Unreal 开发过游戏,在计算机图形学课程设计中,也使用过 OpenGL 2.0,当时大二大三那会接触到了 Web 开发,后来就一直沉迷于 Web 无法自拔了。

机缘巧合下,我的工作却恰好又是跟图形学相关,第一次接触可编程渲染管线(那会是使用 OpenGL)的时候,我仿佛打开了新世界的大门,复杂的游戏场景原来都是由这样的原语构成。

加上自己的兴趣爱好(当然是电子游戏!)使然,组织架构调整的时候我毅然加入了实验室的渲染引擎组,开始参与渲染引擎的开发。

再后来我接触到了 Vulkan、DX12、Metal 等更现代的 GraphicsAPI,同时也逐渐了解了硬件的工作原理,也逐渐理解了游戏底层神秘的引擎到底是怎么运作的,兴趣越来越浓。

俗话说的好,认识一门技术最好的方法就是造轮子,于是我义务反顾地投入了游戏引擎开发大军。

谈谈前辈们

我心目中的游戏引擎一哥当然是 Unreal,老二是 Unity,全封闭的引擎生态这里就不提了。

Unreal 的优点当然是不需要做很多的额外开发,就能获得相当不错的画质效果,相反,缺点则是如果你不是很懂一些渲染的原理,Unreal 对你将会很不友好,很多时候,读它给的文档不如直接读源码。另外如果要加一些自己的扩展特性的话,一旦涉及到渲染管线,大概率要改代码然后再源码编引擎,不过,Unreal 自己的意思也很明确了,老子开源,给你看你不会改,怪谁?

Unity 的话,对开发者的友好程度就要好很多了,文档、资料、教程相当多,C# 写起来也相对比较舒服。Unity 的画质不自己搞的话也就那样了,不过 Unity 也说了,我扩展性这么高,你自己不会写,怪谁?

另外,值得一提的是,针对新的游戏架构 ECS,Unity 在这方面应该算是先驱了,自己已经弄了一套 ECS 的 Preview 接口了,有空可以详细聊聊 Unity 的 ECS。

Unreal 和 Unity 的源码我都读过一部分,Unreal 和 Unity 只能说这种体量的东西是工程界的奇迹,只要架构没有腐坏到无可救药的程度,哪怕局部屎再多也能糊住,多数情况下,它们的代码看起来就是微观来看简直屎的不行,但从宏观架构来看还能过得去。

再下来我了解到的一些引擎有 CryEngine、Cocos、Godot、KlayGE 等。

CryEngine 的代码简直可以用灾难来形容,在其上搭建的 Amazon Lumberyard 也是一个灾难,相信我,只要你看一眼它的 CD3D9Renderer 你就知道我在说什么了。CryEngine 的文档也很差劲,不过好像它的忠实拥趸还挺多,但据我所知,买过它来做游戏的育碧和 EA 都跑路了,CryEngine,把你弄哭的引擎。

Cocos 的代码我没有读过,在国内流行度其实还算可以,早年只做 2D,近期开始投入 3D Creator 的开发,完成度还不够,不过 Cocos 的劣势在于其专攻在 Web 和移动端,使用的 GraphicsApi 是 WebGL。GL 系的 GraphicsApi 其实限制了引擎的发挥,而 WebKit 的设计上,GraphicsApi 目前来说又只有 WebGL 可以选用,因为可汗组织推出的 WebGPU 标准还未完全投入使用,可以期待 WebGPU 和 WebAssembly 的普及可以让 Cocos 这类的引擎用上 Vukan、DX12 和 Metal。

另外的引擎就算比较小型的了,Godot、KlayGE 一类的,东西越小越好维护,代码越简单。虽然引擎本身可能并不适合商用,但很适合开发者去学习原理。

我对 Explosion 的期待其实很简单,就是遵循前辈们开辟的道路一步步前进,取其精华去其糟粕,慢慢打造属于自己的引擎,不求以后能怎么样,但求能把功能做完整、做精致。

初步计划

先抛开 IDE 不看,目前来看近期要做的最基础的功能如下:

  • Render Hardware Interface (RHI)
  • Render Pipeline Interface (RPI)
  • ECS
  • Material System
  • Game Runtime
  • Game Script System

先看前三项,RHI 层的作用很简单,就是抽象不同的 GraphicsApi,对 RPI 层提供统一的接口,目前我打算封装的 GraphicsApi 只有 Vulkan、DX12、Metal,其他的老一点的 Api 就不打算封了,推动技术前进的最好方法就是不要去兼容腐坏的技术。

RPI 层封装渲染管线接口,在我的理解中,就是 Renderer 的核心逻辑的抽象。

ECS 是对外的逻辑接口总线,分为 Entity、Component、System 三块,我的目标是做成标准的 ECS,带内存管理的那种,高效利用 CPU Cache 的性能优势。目前准备直接集成 entt 开源库,日后可能自己再写一套。

Material System,其实这是一大难题,多数引擎的做法是提供预制材质和自定义材质,不过自定义材质的封装感觉都很别扭,看看日后自己能不能在这方面找到突破。

Game Runtime,游戏运行时,简单来说就是诸如 GC、反射一类的基础功能,对上会直接承接 Game Script System,对下承接 ECS。这块可以参考 Unreal 老大哥的做法,不过要写的更精简些。

Game Script System,脚本系统,需要选择一种语言集成,按我的喜好来看,JavaScript / TypeScript 当然是首选,不过有了反射系统的机制,无论哪一种语言其实都很容易集成进来。


最后,写给自己和 Explosion,加油。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要做 Explosion
  • 谈谈前辈们
  • 初步计划
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档