• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

英特尔实感让您在游戏中脱颖而出

自 1999 年以来,我通过我的公司 TheGameCreators工作,以使每个人都能更轻松地制作游戏。去年,我开始使用英特尔实感 SDK 和摄像头进行开发,它可以让您实时捕捉 3D 图像。(实际上  , 我的 Virtual 3D Video Maker赢得了英特尔的 realsense 应用挑战赛!)我一直在研究如何将 RealSense 用于游戏开发,这不足为奇,在本教程中,我将分享一个示例:如何将您(或您的玩家)的头部扫描到您的游戏中。 

为什么使用实感?

许多 3D 游戏角色将包含一个 2D 纹理图像,该图像用作 3D 模型的“皮肤”,与Kila一样,如下所示:

英特尔实感让您在游戏中脱颖而出  第1张左:Kila 的纹理。右图:应用于 3D 模型的 2D 纹理。来自 游戏角色创作系列:Kila

您可以在纹理中看到一张独特的脸。如果您想更改角色的脸以匹配您自己的脸,尝试将平面 2D 照片粘贴到纹理上是很有诱惑力的。但是,这往往不会产生很好的结果,如下所示:

英特尔实感让您在游戏中脱颖而出  第2张将面部的平面照片粘贴到现有 3D 模型的纹理上的结果。

这是相当可怕的。问题是,面部纹理没有映射到模型的底层“骨骼结构”上。

RealSense 设备包括红外投影仪和摄像头,因此它们可以捕捉 3D 投影图以及它们所指向的任何物体的 2D 照片。这意味着您可以调整角色的 2D 纹理 3D 模型以适应新面孔。

游戏内角色创作者工作流程

假设我们想让我们的玩家使用实感摄像头自拍几张,然后使用它们为他们创建一个 3D 头像。

与其尝试扫描他们的整个身体,然后从中创建 3D 模型、纹理和一组动画,不如从 3DOcean 之类的网站购买 3D 全身模型……

英特尔实感让您在游戏中脱颖而出  第3张

...然后切断头部:

英特尔实感让您在游戏中脱颖而出  第4张

这使得开发和测试游戏变得更加容易;玩家头像之间唯一会有所不同的是头部。

捕捉玩家的肖像

为了捕捉玩家的肖像,游戏中的角色创建者必须对他们的头部进行多次扫描,所有这些都经过精确控制,以便软件可以将它们重新缝合在一起。英特尔实感 SDK提供了一个示例,它可以立即从预编译的二进制文件夹中运行。)

当然,您会想要创建自己的 3D 扫描仪以适合您的项目,因此以下只是该技术如何为您工作的细分。

方法一

您可以单独拍摄网格照片,然后尝试在临时艺术工具或小程序中手动连接它们。然而,实时 3D 扫描的问题在于它的另一端有一个人,这意味着他们坐立不安,在座位上移动,向后倾斜,并以微妙的方式向前移动——而这并没有考虑到微妙的音调,偏航和头部本身的滚动。鉴于在扫描过程中头部会移动位置和距离相机的这种趋势,这只会在尝试重新组合镜头时导致挫败感。

方法二

如果您的扫描准确,您可以将网格与您扫描的第一个网格混合,并在世界空间模型数据中存在顶点时进行调整,或者如果以前不存在顶点,则创建一个新的世界空间顶点。这将使您的头部网格随着播放器提供的更多样本而变得更加精细。这种技术的缺点是在扫描过程中让玩家的头部保持在中心位置,并将 3D 数据转换为世界坐标,会带来一些挑战。

方法三

完美的技术是检测扫描网格中的签名标记,以获得“顶点修复”。把它想象成通过观察星星来绘制你在海洋上的位置;通过使用星座,您可以计算出您的相对方位和位置。这在您生成第二个网格时特别有用:您可以应用相同的标记检测算法,找到相同的模式并返回第一个网格的相对方向、位置和比例偏移。一旦你有了这个偏移量,将第二个网格添加到第一个网格是一个简单的世界变换计算,然后将额外的顶点数据添加到原始网格。重复此过程,直到没有更多您希望提交的网格,然后您继续进行最后一步。

关键点

  • 在您对 3D 几何编码有很好的实际掌握之前,我不建议在这里实施这些技术,因为操作面向变量的顶点数据可能会很棘手。

  • 如果您选择的技术涉及将顶点数据分层到单个对象上,您可能会有很多多余的和重叠的顶点。这些需要被移除并产生一个新的三角形列表来密封对象。

  • 将面部扫描的颜色数据存储在顶点数据的漫反射分量中是一种避免纹理需求的便捷方法,并且在优化最终网格时提供其他优势

  • 不要忘记对原始深度数据进行处理,以去除与周围深度像素数据不一致的杂散深度值等干扰。如果不这样做,您创建良好 3D 头部网格的所有工作都将是徒劳的。

这绝对是困难的部分,但并非不可能;请记住,SDK 文件中有一个工作演示,您可以将其用作在游戏引擎中运行的基础。

在游戏中使用相似度

假设您有一个不错的玩家面部 3D 模型(和相应的纹理):

英特尔实感让您在游戏中脱颖而出  第5张英特尔实感让您在游戏中脱颖而出  第6张未来派的大头照。

我们现在可以将其粘贴到角色的身体模型上:

英特尔实感让您在游戏中脱颖而出  第7张

诚然,结果仍然相当可怕——但我们还没有完成。我们可以从游戏开发者圣经的众多页面之一中找到解决方案,我们可以说服自己这是一个相当不错的功能,而不是一个相当险恶的 hack。

我们所做的只是用假发和帽子来掩盖缝隙:

英特尔实感让您在游戏中脱颖而出  第8张

好的,当然,我们可以将 3D 面部贴在已经建模的 3D 头部的前面,但这更有趣。如果《军团要塞 2》有什么用,玩家将喜欢选择使用各种配件自定义头像的头部和面部;我们用一块石头杀死两只鸟!

如果您真的想避免为游戏角色添加帽子和假发,则需要让玩家在进行扫描之前将头发系好或用胶水固定好。他们的头发越平整,扫描效果就越好。松散的头发会干扰深度相机,并产生无法很好扫描的散射反射。

在开发时更容易做到这一点

虽然在运行时让玩家的肖像进入游戏是可能的,但这是一个很难开始的地方。如果您以前没有尝试过,我建议您先尝试一些技术上更简单的方法:将您自己的肖像(或演员的肖像)加入游戏。

由于三个原因,这更容易:

  1. 有更多的错误余地和修正空间;如果您自己控制整个过程,请手动调整任何不正确的颜色或网格,并调整最终结果,直到它恰到好处。你并不依赖于你的代码第一次就完美地运行在每一张面孔上。

  2. 您可以使用现有软件(如 blender),而不必将整个过程整合到游戏的 UI 和代码中。

  3. 由于这是您的游戏,您可能比您的玩家更有耐心,因此您可以拍摄(和重新拍摄)更多照片并等待比要求玩家更长时间的结果。

基于后一点,您可以花时间扫描您的整个头部,而不仅仅是您的脸部。事实上,我们已经在之前的教程中做到了这一点。让我们从中断的地方开始,并逐步了解如何将此模型导入Unity 5

让你的头脑团结起来

完成 上一个教程后,您应该有一个头部的 FBX 模型和相应的 uv 纹理贴图。

打开 Unity,然后创建一个新项目和场景。

英特尔实感让您在游戏中脱颖而出  第9张

单击 资产 > 导入新资产选择您从 Blender 导出的 FBX 模型。

当 Unity 导入对象时,它可能(甚至很可能)不会导入其纹理,在这种情况下,您将看到网格的灰白色版本:

英特尔实感让您在游戏中脱颖而出  第10张

没关系——接下来我们将添加纹理贴图。

选择 Materials 文件夹,然后右键单击并选择 Import Asset选择您在 Blender 中保存的 PNG 文件,然后将其导入。

您现在将看到与网格同名的灰白色材质旁边的纹理贴图。右键单击灰白色材料(形状像一个球)并将其删除。

英特尔实感让您在游戏中脱颖而出  第11张

返回到您的 资产 文件夹并右键单击您导入的网格。选择 重新导入: 

英特尔实感让您在游戏中脱颖而出  第12张

重新导入后,它将正确创建材质并纹理您的网格:

英特尔实感让您在游戏中脱颖而出  第13张

如果模型在对象预览中看起来是粉红色的,只需选择另一个对象(如相机),然后再次选择您的网格以使其刷新。

英特尔实感让您在游戏中脱颖而出  第14张

现在您已准备好投入游戏。将您的对象拖到场景中。(您可以将其放大并使用相机透视图将其显示在视野中。)

当您点击 Play时,您应该会看到您的对象正确渲染:

英特尔实感让您在游戏中脱颖而出  第15张

如果要调整纹理以使其或多或少有光泽或金属质感,请首先转到“ 材料” 文件夹并选择纹理的圆形版本。在 Inspector 面板中,您可以调整 Metallic 和 Smoothness 滑块以获得正确的外观:

英特尔实感让您在游戏中脱颖而出  第16张

结论

将头部的前部放入虚拟场景中似乎需要做大量的工作,但您在本文中学到的技术可以应用于扫描和缝合任何您想要的东西。 

将您的本质扫描到计算机中并在虚拟景观中继续您的旅程的能力从扫描一张脸开始。随着游戏中的主角开始像你可能在自己生活中遇到的真人,游戏和态度将如何变化?当你给某人一张脸时,他们就会变得真实,看看游戏和玩家如何因此而发生变化会很有趣。


文章目录
  • 为什么使用实感?
  • 游戏内角色创作者工作流程
    • 捕捉玩家的肖像
      • 方法一
      • 方法二
      • 方法三
      • 关键点
    • 在游戏中使用相似度
  • 在开发时更容易做到这一点
    • 让你的头脑团结起来
  • 结论