从零开始手敲次世代游戏引擎(三十六)

从零开始手敲次世代游戏引擎(三十五),首先导入合并从零开始手敲次世代游戏引擎(PNG特别篇)当中所写的PNG文件解析器,然后手工编辑aili.ogex,向👀材质添加eye.png贴图。执行程序,可以看到👀已经有了。(不过我们可以发现眼睛其实只是浮在脸前方的一个片面。。。这个是建模的锅,不怪我。。。)

另外仔细观察可以发现右侧的头发(side hair)没有正确的着色。这是因为右边的头发是通过对左侧的头发进行镜像得到的。虽然在Blender里面看起来没有什么问题,但是这种镜像会导致两个问题:

  1. 导出的三角形顶点的旋转方向从逆时针变为顺时针,从而导致被GPU裁剪(Culling)掉;
  2. 导出的模型变换矩阵是下面这个样子:(以X轴镜像为例)

可以看到包括一个对X坐标去反的计算。而我们的shder里面有对于法线的这么一个计算:

其中的modelMatrix就是上面这个矩阵。这就导致法向量也被镜像,也就是出现反转。所以我们看到的就是上面屏幕录制里面那样黑漆漆的。

这个问题我们可以通过修改OGEX导出脚本来修正,或者在今后我们编写了我们的游戏引擎的Editor之后,在Editor里面修正。所以我们这里就暂时不作进一步的展开了。

好了,到这里我们对于图形渲染基本管线的搭建就暂时告一个段落。当然图形渲染是一个很深的坑,我们还有很多很多没有实现的东西,比如随便列举一些:

  1. 点光源之外的光源类型
  2. 多光源
  3. 阴影生成
  4. diffuse贴图之外的贴图,如法线贴图,位移贴图,等等
  5. VS和PS之外的Shader,如Geometry Shader, Compute Shader等等
  6. 图像后处理

在场景组织和管理方面,我们也有很多可以进一步完善的东西,如:

  1. 场景物体的层次结构,分组和定义在组级别的坐标变换
  2. 场景的异步加载

等等。但是在继续深入介绍这些东西之前,作为一个游戏引擎的运行时,我决定先进行其它几个重要模块的基本构建,比如输入模块,驱动模块,策略模块,调试辅助模块等等。


接下来说一下工程方面的进展。感谢CircleCI,在之前免费的Linux环境的基础上,为我免费提供了基于macOS的连续集成环境。现在每一个push到github上的commit,都会自动进行Linux和macOS两个版本的编译和测试用例的执行确认,如下图:

实现起来也很简单,如下面这样修改我们的circleCI的脚本即可:

确实非常方便,欢迎大家在自己的项目当中也多多尝试。再次感谢CircleCI对于OpenSource项目的大力支持!

(最近一直在生病😷,文章更新的比较慢了,请多多包涵)

最后顺便说一句,第一届中国大学生AR/VR竞赛昨天拉下帷幕。虽然大赛自身的组织有很多的仓促,但是同学们的作品真的都很棒。期待大家加入游戏开发的大家庭。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s

%d 博主赞过: