网站公告 | 全新unity3d 完整学习路线,最强课程配套、服务!详情点击
查看: 27066|回复: 1
收起左侧

[已翻译] 运用英特尔 RealSense 在游戏中获取你的头像

[复制链接]

[已翻译] 运用英特尔 RealSense 在游戏中获取你的头像[复制链接]

咔咖 发表于 2018-4-13 10:47:51 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式 回复:  1 浏览:  27066
翻译:林泰旭(OAOAAce)  审校:顾亮(brownfish)
自 1999 年以来,我开始在我的公司工作,TheGameCreators,让游戏制作变得更简单,使得每个人都可以来做游戏。去年,我开始使用 Intel RealSense SDK 和 摄像机进行开发,让你随时都可以拍摄3D照片。(事实上,我的虚拟3D视频制作者赢了来自英特尔的RealSense App 的挑战!)这没有任何感到吃惊的地方,我一直在考虑如何使用 RealSense 用于游戏开发,在这个教程里我将会分享一个实例:如何把你的(或者玩家的)头像放到你的游戏中。
为什么使用RealSense?
许多3D游戏角色会包括一个2D纹理图像,被用作一个“皮肤”的3D模型,像Kila,下文:
DSC0000.jpeg
左边:Kila 的纹理。右边:2D纹理应用于3D模型。来自于游戏人物创作系列:Kila
你可以在纹理中看到的不同脸。如果你想改变这个角色的脸来匹配你自己的脸,尝试将平面二维照片粘贴到纹理上是很有诱惑力的。然而,这样做往往不会给出很好的结果,如下图所示:
DSC0001.jpeg
将一张平面头像照片粘贴到现有的三维模型纹理上的结果。
这相当令人震惊。问题是,人脸的纹理没有映射到模型的基本“骨结构”的模型上。            
RealSense设备包括红外线投影仪和摄像机,所以无论他们怎么设置指向,他们都可以捕捉到一个三维投影图,以及一个二维照片。这意味着您可以调整2D纹理和角色的3D模型以适应新面孔。
游戏角色创造者工作流
让我们假设我们想要让我们玩家使用 RealSense 摄像机拍摄几个照片,然后使用它们,为它们创建一个 3D 的头像。
而不是试图扫描在他们的整个身体,然后创建一个三维模型,纹理。我们最好是从a site like 3DOcean购买一个完整的3D人体模型来设置一套动画。
DSC0002.jpeg
然后裁剪出图片的头像:
DSC0003.jpeg
这使得它更容易开发和测试游戏; 这之间唯一的变化就是玩家的头像。
获取玩家的肖像
获取玩家的肖像,在游戏中创建角色必须对他们的头部进行多次扫描,经过精确的控制之后,软件可以将扫描后的结果再次重组。(英特尔的RealSense SDK提供的一个示例就是这样处理的;它可以从预编译的二进制文件夹中立即运行。)
当然,你会想创建自己的3D扫描仪,以满足你的项目,所以接下来的问题,仅仅是发现这项技术如何为你工作而已。
方法1
你可以单独采取网格拍摄,然后在一个临时的艺术工具或小程序中尝试手动连接它们。然而,3D扫描的根本问题在于站在它的另一端的人,这就意味着他们会坐立不安,在他们的座位上移动,向后倾斜,并以细微的动作向前移动,这不算是细微的间距了,这使得头部出现了偏移和滚动。在扫描过程中给出头部位置调整的方向和到摄像头的距离,当你尝试去重组镜头时,将会导致失败。
方法2
如果你扫描时准确的,如果在空间模型数据中存在顶点的话,那你可以将网格与第一个网格混合,然后再进行调整,若先前不存在顶点的话,可以在空间模型中创建一个新的定点。这将会使得你的头部的网格得到更多的细化,可以给玩家提供样品。这一个技术的缺点是,在扫描过程中你玩家的头部必须要保持在中心位置,并将3D的数据转化为世界坐标,带来了一些挑战。
方法3
完美的技术实现是检测在扫描网格内的可辨别标记,为了获取一个“顶点修复”。把这看作是通过看星星,在海洋上描绘出你的位置;通过使用星座,你可以找出你的相对方向和位置。当你生成第二个网格时,这个方法特别有用:你可以采用相同的标记检测算法,找到相同的模式,并返回相对方向的位置和比例。一旦你有了这个偏移,将二网格添加到第一个网格中是一个简单的转换计算,然后再将额外的顶点数据添加到原始网格中。重复这个过程,直到没有可以提交的网格,然后进入到最后一步。
关键点
·    直到在你掌握实际的3D几何编程之前,我都不会推荐实现的技术,由于操纵面向顶点变量的数据可能会非常棘手。
·    如果你选择的技术涉及到将分层顶点数据放到一个单一的对象中,你可能会有大量的剩余和重叠的顶点。这些顶点需要删除,使用新的三角形列表生成封装的对象。
·    将面部扫描的颜色数据存储到顶点数据组成的各个部分是一种避免使用纹理的易于使用的方法。当它涉及到优化的最后的网格时,还提供了其他优势。
·    不要忘记处理的原始深度数据,以消除干扰,如对象深度值与周围的深度像素数据是不一致的。如果不这样做,那么所有你的创造的3D头部网格都将是徒劳的。
这绝对是最困难的部分,但也不是不可能完成的任务;记住,在SDK文件中这是一个可以运行的demo,可以作为一个基本用在你的游戏引擎中。
在游戏中使用肖像
让我们假设你已经有了玩家的面部的3D模型(以及相应的纹理)
DSC0004.png
一张面部照片。
现在我们可以把这个贴在人物的身体模型上:
DSC0005.png
DSC0006.png
结果仍然是相当可怕的,但我们还没有完成。我们可以从游戏开发“圣经”中得到的解决方案,大家可以说服自己这个是一个相当不错的功能,而不是把你的斧子砍在了盾牌上。
我们所做的就是用一顶假发和一顶帽子来掩盖空白:
DSC0007.png
好的,我们可以只把3D面部贴在之前已经建好三维模型的头部上,但这更有趣。以 Team Fortress 2 为依据,玩家会喜欢用不同的配饰来自定义他们的头和面部;一石二鸟的做法!
如果你真的想避免使用添加帽子和假发的游戏角色,你需要让玩家配合,在使用扫描前绑好头发,或者用发胶固定头发。将会有很好的扫描效果。松散的头发会干扰摄像机,会生成很分散的扫描效果。
在开发时这样做更容易
虽然获取到一个玩家的头像在游戏中运行起来是可以实现的,但它也是一个艰难的开始。若是你之前没有尝试过的话,我建议先尝试一些简单的技术:获取你自己的头像(或一个演员的)放到游戏中去。
这是更容易的三个原因:
1.有更多的余地和空间校正错误;如果你自己操控整个过程,手动调整任意颜色或网格,出来的效果确是不正确的,但你可以调整最终的结果,直到满意为止。对于不同的脸,可能代码有时就会失败, 尤其在识别的时候。
2.你可以使用现有的软件(比如 Blender),不必将整个实现过程都融入到你的游戏界面和代码中。
3.由于这是你的游戏,你可能比你的玩家们更有耐心,所以你可以拍摄更多的照片和愿意花更长的时间去等待结果。
基于最后的这一点,你可以花时间去扫描你的整个头部,不只是你的脸。实际上,我们已经完成了以前的一个教程。让我们知道如何在Unity5中获取这个模型。
在Unity中获取你的头像
继续以前的教程,你应该有你的头像的FBX模型和相应的UV纹理面孔。
打开Unity,然后创建一个新的项目和场景。
DSC0008.png
点击Assets > Import new asset.选择FBX模式,从Blender那导出的。
当在Unity中导入这个对象时,它很可能不可以导入纹理,在这种情况下,你将会看到你的网格变成一个灰白色的版本:
DSC0009.png
没关系-下一步我们将会添加一个纹理映射。
选择Materials文件夹,然后鼠标右键点击并选择导入Asset.选择保存在Blender中的PNG文件,然后再导入它。
现在你可以看到纹理映射旁边有一个灰白色的材质,与你的网格是相同的名字。鼠标右键单击中这个灰白色的材质(形状像一个球体),并删除他。
DSC00010.png
回到你的Assets文件夹,右键单击导入网格。选择Reimport:
DSC00011.png
Reimports之后,将会在你的网格中创建材质和纹理:
DSC00012.png
如果模型在对象预览中看起来偏红色的话,只需选择另一个对象(如摄像机),然后在重新选择一次你的网格,让它刷新一次即可。
DSC00013.png
现在你已经准备好让你的头像运行在游戏中了。拖动你的对象到场景中。(你可以把它放大,摆弄摄像机的视角,然后在视图中得到它 )
当你点击播放按钮时,你应该就可以看到你对象正确渲染了:
DSC00014.png
如果你想调整纹理,使其光泽或金属效果更多或更少,先去材质文件夹选择纹理圆形的版本。在Inspector面板,你可以通过滑动滑块来调整金属的光泽。
DSC00015.png
结论
看起来大量的工作,只是为了把得到前面部分的实现的头像放入到虚拟场景中,但你在这篇文章中学到的技术可以用于扫描和拼接任何你想要实现的功能。
这可以把你扫描到计算机中,你的虚拟景象之后,从你扫描了一个面部数据之后开始了。随着游戏中的主角开始像真实的人, 你可能会在生活中遇到,如何将游戏和态度做转变呢?当你把制作的一张脸,让他们变真实,这很有趣,看着游戏和玩家改变的过程和结果。
作者
在不写文章的时候,Lee Bamber 是The Game Creators的CEO,是一家专门开发和发行游戏制作工具的英国公司。成立于1999,该公司及周边社区的游戏厂商负责许多受欢迎的品牌,包括Dark Basic, The 3D Game Maker, FPS Creator, App Game Kit (AGK) 以及 Game Guru。
原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权

+1
27061°C
1
  • kuromen
过: 他们
因分享而快乐,学习以自强!
kuromen 发表于 2018-4-14 07:21:33 显示全部楼层
游戏角色,你需要让玩家配合,
因分享而快乐,学习以自强!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

VR/AR版块|Unity3d|Unreal4|新手报道|小黑屋|站点地图|沪ICP备14023207号-9|【泰斗社区】-专注互联网游戏和应用的开发者平台 ( 浙ICP 备 13006852号-15 )|网站地图

© 2001-2013 Comsenz Inc.  Powered by Discuz! X3.4

1
QQ