程序员奶爸为儿子自制视觉互动游戏,相关代码

一位名为 Agustinus Nalwan 的奶爸曾经从事游戏开发、计算机视觉、3D 动画等方面的工作,疫情期间,他为两岁半的儿子 Dexie 制作了一款名为 Griffin 的视觉互动游戏。
 
 
图丨 Dexie 的游戏体验
 
Griffin 本意为狮身鹰脸的神兽,在《哈利波特》中,格兰芬多学院(Gryffindor)即指金色的 Griffin。Nalwan 的儿子 Dexie 非常喜欢老鹰,所以 Nalwan 便以 Griffin 为原型制作了这样一款游戏。在 Medium 上,他发布了制作过程的细节并公布了游戏的开源代码。本文着重介绍其制作过程。
 
 
图丨传说中的 griffin
 
所需模块:3D 游戏引擎;身体姿势估计;动作映射和手势识别;通信系统。
 
所需硬件:NVIDIA Jetson AGX Xavier;显示器;Sony IMX327 摄像头;万能胶带。
 
 
图丨 NVIDIA Jetson AGX Xavier、Sony IMX327 摄像头和万能胶带
 
制作过程
 
一、构建 3D 游戏引擎
 
Griffin 系统用第三视角渲染 3D 世界,既可以看到雄鹰的翅膀随着玩家同步摆动,又可以更加逼真地模拟真实飞行。专业的 3D 游戏引擎有 Unity 和 Unreal,但都不能在 Ubuntu OS 或 ARM 上运行,因此 Nalwan 找到了一个可以在 OpenGL 上运行的 C++ 开源飞行模拟器,并对其作出了一些修改。
 
首先,他将基于按键的飞行控制系统改成了基于手势识别的飞控。
 
其次,他重构了静态 3D 模型,来符合鹰的身体结构。原始的飞行器模型与鹰不同的是,飞行器是一个保持不变的形体,以机身为轴线转动,而鹰则有一对不断运动的翅膀。因此,他使用 3D 作图工具 Blender,改变了原始机身的骨骼动画系统,把机翼作为两个单独的 3D 模型加到机身上,作为鹰的两翼。
 
 
图丨 Blender 中编辑的鹰的 3D 模型
 
接着,他设置了不同的游戏状态,使得可以通过玩家的动作直接重新开始游戏。游戏中的鹰有两种状态,或站立在树枝上,或飞翔在蓝天里。
 
最后,他使用 libSFML 添加了音效,当鹰一起飞,就会伴随着鹰的啸声和急促的风声。
 
二、构建身体姿势识别
 
这一模块是通过对身体各个部位的确认,来识别不同的身体姿势,以代表不同的游戏指令。通过检测手臂的姿态、脸部的位置等,系统就能确定玩家的特定姿势,触发动画中鹰的动作效果。
 
其中涉及到一个名为 OpenPose 的开源库,其包含各种手势识别、姿势识别、面部识别的 AI 模型,而 Nalwan 使用了名为 COCO 的身体姿势模型。该模型含有 18 个骨骼节点捕捉器,能实时识别人体的 18 个关节,Griffin 用到了其中 6 个关节。
TAG: