本期为GAMES104《现代游戏引擎:从入门到实践》视频公开课文字实录第7期。本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发。
课程共计22个课时,将介绍现代游戏引擎所涉及的系统架构,技术点,引擎系统相关的知识。为配合学习实践,课程组在 GitHub 上开源了小引擎Piccolo,上线1个月即获得了2900+star, 累计下载量已超过20000+。
以下内容为公开课视频转文字版本,为阅读通顺,有删减
01「平台层」
上节课简单介绍了游戏引擎的5+1个层次,以小明同学想做一个动起来的角色为挑战,介绍了资源层、核心层等具体内容。
这节课讲游戏引擎架构分层的最后一节 —— 平台层和工具层。
我们试想一下,小明同学已经把游戏从上到下全部写完了,他想去找小美同学得瑟一下,但发现小美用的是Mac,可用Windows开发的游戏怎么在Mac上跑起来呢?
我们发现在不同的平台上,甚至连文件路径的格式都不一样:一个是“/”,一个是“\”。这种情况下,我不可能把引擎的代码从头到尾重写一遍。所以平台层就会变得非常重要。
平台层的本质是在上面写核心代码/功能/逻辑,可以无视平台的差别。平台层也叫做平台无关,就是把平台的差异性全部掩盖掉,这一层是现代游戏引擎非常核心的东西。
刚才讲的文件路径其实是比较简单的,真正让大家头疼的是什么?举个例子:想做一款游戏,在PC上面对的可能是DirectX,DirectX有DirectX 11、DirectX 12;在Mac上面对的是Metal;在Android上面对的可能是OpenGL ES,那在Vulkan上写图形学feature的人碰到了是不是很崩溃?
在现代游戏引擎中,非常重要的一层叫做RHI——Render Hardware Interface。
它重新定义了一层Graphics API把这些硬件的SDK差别封装起来。
这是一小段RHI的代码,大家发现其实这些函数又被重新定义了一遍,而且全部是虚函数。虚函数是一个比较高能的概念,学过C++的同学都知道