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

从零开始手敲次世代游戏引擎(三十四)。我们开始导入材质。最终效果如下:
(本文所使用3D模型及贴图来自于ermmus制作的小萝莉(AILI)。许可证类型:CC-BY。感谢无私的分享精神)
 
 
视频封面

上传视频封面

 
 
首先作为第一步,我们导入材质的基本参数。我们需要进一步完善我们在从零开始手敲次世代游戏引擎(二十九)所写的SceneNode,SceneObject的结构,导入包括材质的基本颜色(diffuseColor),高光颜色(SpecularColor)和高光系数(SpecularPower)等颜色/参数。然后我们需要修改我们的GraphicsManager(在这里我们暂时只实现了OpenGLGraphicsManager),让它能够将这些材质参数传递给我们的Fragment Shader。最后是修改我们的Shader,将我们之前写死在Shader里面的材质参数,替换成uniform类型的变量。
下面是所有这些变更的代码:
变更之后的效果如下:
 
视频封面

上传视频封面

 
 
可以看到一部分材质已经应用上去了。最为明显的就是面部、手、脚这些裸露的部分。
至于衣裙以及?,这些是使用的基于贴图的材质。主要是这两种:
AILI: Textured by ermmus Creative Commons Attribution 3.0 CC-B
AILI: Textured by ermmus Creative Commons Attribution 3.0 CC-B
可能是因为我所使用的OGEX导出脚本与Blender的版本不匹配的问题,导出的aili.ogex文件当中并没有到贴图的链接。不过OGEX文件是文本文件,很容易编辑。我们可以手动加上去:
 
 
同时检查模型的UV坐标(也就是贴图坐标)已经正确的导出了:
然后我们结合我们在从零开始手敲次世代游戏引擎(JPEG特别篇)-3开发的成果,将贴图也加载进来。相关的代码在
接下来我们需要将贴图通过图形API接口从CPU传递到GPU,并且修改我们的Shader以及初始化Shader的代码,将UV坐标正确地传递给GPU。相关的代码在:
这样我们就完成了一个基本的贴图导出和加载的过程。最后的效果在本文开篇已经展示了。

接下来讲一些工程方面的事情。
我们现在代码已经有了一定的规模,而且支持多个平台,不同的RHI(图形渲染API)。在这样的情况下,每次对代码进行了变更,是应该在各个平台进行测试的。
这个过程十分重要,但是如果手动操作会十分的耗费时间,并且单调乏味。
事实上,行业当中一般采用“连续集成”(CI = Continues Integration)来对应这个需求。大一点的软件公司都会有专门的人/部门负责这部分工作。
所谓CI,就是指使用一套自动化流水线工具,当代码发生更新的时候,自动的按照既定的步骤对代码进行编译、测试、分发的过程。
我们的代码托管在GitHub上面,GitHub提供了CircleCI的集成,并为开源项目提供了免费的配额。开通了CircleCI的集成之后,通过十分简单的配置,CircleCI就会对我们每一个提交进行自动化编译与测试,并将结果显示在GitHub当中,如下图这样:
画面当中绿色的勾就是CircleCI添加上去的测试结果。上面是按照branch进行显示的,我们还可以按照commit进行显示:
CircleCI不仅支持Linux版本的CI,也支持macOS版本的CI。不过macOS版本的服务缺省是不免费提供的。目前我正在和CircleCI协商是否可以获得相关免费资源。
设置CircleCI的方法很简单。点击下面这个链接,然后按照页面提示进行就可以了。
对于诸如Android/iPhone等标准开发流程(就是使用IDE进行开发的项目),CircleCI可以自动检测出项目编译和测试的方法。对于像我们这样的深度自定义产品,需要在项目文件夹里面新建一个目录和文件,描述我们项目的编译和测试方法:
.circleci/config.yml
 
参考引用

发表评论

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

WordPress.com 徽标

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

Google photo

您正在使用您的 Google 账号评论。 登出 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 登出 /  更改 )

Facebook photo

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

Connecting to %s

%d 博主赞过: