在Unity盛行的今天,我们谈游戏引擎,可以将引擎分为两部分:Runtime和Editor。
Runtime主要涉及的是图形学了,当然也包括最基本、核心的通用编程技术。对于最尖端的Runtime来说,主要追求的是吃透硬件,毕竟真正画出图像的是显卡,Runtime更多的时候起到的是指挥硬件绘图的作用。Unity在这块不太行,我们谈Unity优化时主要谈减DrawCalls就是个佐证。Vulkan、D3D12这些追求命令派送效率的API的兴起,也显示了当前实时渲染这块在追什么热点。
Editor可能更复杂一些。大部分人能够写出Runtime足够完善的引擎,但是Editor这块却做得一塌糊涂。大部分In-House引擎在Editor这块做得都很差。对比Unity和UE4,Unity的Runtime完全不如UE4,但在Editor这块恐怕Unity更胜一筹。数不尽的Unity第三方插件很好的证明了这一点。
Editor也是需要很深的通用编程技术的。最基础的两点:GUI和对象反射(还要序列化等)。
GUI的实现有两种途径,一种借助于操作系统桌面的GUI技术,或者直接在一个Canvas或者叫Framebuffer的东西上一点一线的画(你自己的GUI技术)。一般推荐使用前者,后者工作量不小。一些比如像Qt的技术可以帮助你很方便的使用操作系统的桌面技术。
反射技术是一项非常好的技术。用过Unity之前的老式引擎的人一定知道它们的Editor多么难用,原因就是它们不像Unity这样用了很多反射。借用反射技术,可以更方便编辑游戏中的对象,实现游戏对象的可视化和所见即所得。在Unity中,反射主要由Mono提供。UE4中,Epic在C++编译器之前加了一个预编译器,使冗长的C++反射实现能够浓缩为比较简洁的代码。
总的来说,游戏引擎涉及的计算机编程技术非常多,开发游戏引擎也是一个十分漫长的过程。
如何建造一个游戏引擎?
0 条评论