AR内容开发的四个关键字:建模、材质、空间、照明

作者:   来源: yivian    阅读:

  2018年05月16日,作为一名iOS开发者,苹果在去年夏天发布ARKit是我迷上AR的缘起,而我当时马上就开始学习有关这方面的一切知识。我的AR之旅使得我开始通过Blender学习3D艺术,利用Unity探索游戏开发。借助这些技能,我开始制作AR体验《Escape The Room — AR》,而这款作品即将要登陆iOS设备。我花费了一定的时间来摸索出我需要学习的知识,而我一直在想,如果当时有人给我指点一下方向那该有多好。所以,我希望通过这篇文章向大家介绍4个可以帮助你加速AR/VR开发的概念。

  1. 建模

  3D建模是你在3D中看到的对象的基础。海盗游戏中的宝箱?这是模拟物。射击游戏中的枪支?这是模拟物。游戏中的大多数物理对象都是3D模型。3D模型的结构由“网格”确定。你以前可能已经看过这样的照片:

  这就是3D“网格”。网格由顶点,边缘和面组成。通过操控这些元素,3D美工可以创建任何形状。皮克斯电影中的角色?它们都是由网格组成。

  对于AR开发,你可能不希望自行制作模型。事实上,你并不需要这样做。网上存在大量的免费3D模型,如TurboSquid,或者如果你是Unity用户,Asset Store将是一个合适的选择。

  1.1 建模的关键点

  你的用户在AR或VR中的大部分时间都是与模型交互。无论是按下按钮,浏览一个对象,或者是欣赏美丽的风景,它们都是模型。模型不仅只是由网格组成。模型通常是搭配以“材质”。我将在下一节介绍材质,但首先:

  1.2 如何制作自己的模型

  模型是通过3D建模软件制作而成,如Blender,Maya和Cinema4D都属于热门的工具。

  如果你希望原创的模型,而不说网上参差不齐的模型,你可能有意学习如何制作属于自己的模型。对此,我的个人建议是Blender。Blender是一款免费的开源3D软件包。它同时拥有一个优秀的社区和大量的教程。我个人认为,随着AR和VR开始蓬勃发展并达到大众市场的渗透率,Blender将继续成长并发展为3D开发的主要产品。其他3D创作平台非常昂贵,比如游戏行业标准之一的Maya每年需要支付数千美元的授权费用…所以我宁愿选择确实优秀,而且免费的Blender社区。

  现在我们已经有了网格,下一步是美化我们的对象,而这需要材质。

  2. 材质

  如何令它更好看呢?我们需要材质。材质允许对象搭配以我们所设想的照明,颜色和发射。如果你有一张椅子的网格,你可以通过相应的材质将其变成一种木制椅子,或者铁制椅子。材质可以为你的AR体验增添光彩。

  2.1 如何制作材质

  制作材质取决于你如何开发应用。Unity的材质系统不同于Unreal。Blender材质的开发方式不同于Unity。如果你是用Swift在Xcode中开发,材质将不同于上述工具。

  关于材质我可以说上一天,所以我会尽量精简内容。在本文中我将介绍PBR材质。PBR指基于物理的渲染,是将不同图像整合在一起的总和,它们将以我们想要的方式渲染对象。每个图像都有其要改变的一个特定方面。这些图像通常被称为“贴图”。这些贴图或图像通常是指纹理。本文由很多专业术语,但你会习惯的。

  材质的“Albedo”贴图改变对象的颜色。你希望它看起来像是木制对象吗?只需添加看起来像是木色的albedo,你的材质将变成如下所示:

  然后还有很多用于高光,反射,以及其他更为复杂元素的贴图。与寻找免费模型的地方一样,你可以在那里找到免费的材质。如果你希望自行制作材质,你只需要你为对象构思的形状的图像。你可以订阅为你提供大量超高质量PBR图像的服务,从而开始制作优秀的材质。我使用的而且非常喜欢的工具是Megascans。

  上图是文章开头那个空白网格的最终作品。我采用了normal贴图和roughness贴图来实现对象上的划痕。我利用albedo贴图改变了对象的颜色,然后在材质上使用发光属性来令外星文字发光。材质是一种艺术,而且非常有趣。你可以一直捣鼓,直到你创作出酷炫的对象。

  3. 3D空间

  本节很短,但很重要。在AR/VR中进行开发不同于网络开发或移动开发,因为用户可以在3D空间中与数字对象进行交互。在AR中,用户可以在3D空间移动,而3D空间的原点通常是用于确定用户开始会话的位置。

  对于2D移动应用,用户面对的只是一个平面,然后你为他们构建这个界面即可。对于AR,他们可以自由移动。引擎之间的坐标空间有所不同,有些引擎使用(X,Y,Z),有些则使用(X,Z,Y)。在本文中,我们将使用(X,Y,Z),X是向前,Y是向上,Z则是向右。如果用户从(0,0,0)坐标开始,他们有可能会立即转身,所以你设置在(5,0,0)位置的前方对象可能不是用户正在关注的内容。

  你需要掌握引擎的Camera属性。在Unity中,你可以轻易将Camera移动至用户的注视点方向,然后根据旋转和定制放置对象。对于AR,你需要灵活处理,在编写代码时需要考虑用户所处的多个潜在环境。这更多的是关于设计vs开发的讨论,但可以为你节省大量的时间。

  对于《Escape The Room》,我一开始的设想是让用户扫描他们的地板,然后对象将自动呈现在检测到的水平表面上。但我发现做起来比想象中要难很多。因为用户可以面向不同的方向,平面大小会改变,对象会过于靠近墙壁,从而变得无法触及。我最终是让用户将对象直接放置在周围的地板。

  VR则有点不同,因为对象已经放置在场景之中,但你仍然需要考用户在第一次是如何在3D空间中移动,以及他们将会体验到什么内容。

  记住,目前我们仍处于XR的早期,所以向用户清晰地讲解如何在3D空间中移动是关键。他们最终所做的事情往往会超出你的想象,所以设计体验时要有一定的灵活性。

  4. 照明

  照明就像是餐桌上的礼仪。如果一切顺利,你将不会注意到这一点,但如果出现不符合的行为,你马上就会皱起眉头。AR和VR在这方面存在一定的差异,因为VR中的照明由开发者掌握,但AR则取决于用户所在环境的照明情况。这对AR而言是一个重大的设计挑战,所以你需要解决这个问题才能实现优秀的体验。

  在设计AR体验时,第一件事情是告诉用户它们的照明环境非常糟糕。如果摄像头难以检测环境,你会从ARKit中获得提示,这时你的应该告诉用户这一点。如果你不告诉用户,他们不会知道哪里出了问题,如果你让用户提供额外的照明,或者更换一个更光亮的房间,你可以为他们带来整体更优秀的体验。

  照明是在AR中检测平面的关键,这可以帮助你设置体验。照明同时可以令体验感觉真实,我以往曾谈过这一点,在本文中我将简单地说明其中的关键要点。

  你可以为场景添加自己的照明,但需要小心。添加照明会影响设备的性能,尤其是对移动设备而言。Unity中的反射探针可以令金属对象看起来更真实。对于如何利用照明和反射来提高对象的真实感,我计划在未来进行详细的探讨。

  • 分享到:

  • 相关文章