查看: 1212|回复: 1

如何利用Poly API为移动VR/AR项目寻找免费3D资源

[复制链接]

39

主题

47

帖子

162

积分

注册会员

Rank: 2

积分
162
发表于 2018-11-22 09:54:43 | 显示全部楼层 |阅读模式
你对VR和AR移动应用是否构思出什么好点子,但又不知道应该如何实现它们呢?
除非你是安卓开发者,同时又是一位经验丰富的3D美术,否则创建实现沉浸式360度体验所需的所有asset可能是一次艰辛的过程。

即便你没有创建3D模型所需的时间,资源或经验,这并不意味着你无法开发出优秀的VR或AR移动应用程序。网络免费了提供大量3D资源,以及存在渲染这些asset所需的众多API,框架和内容库。
在本文中,映维网将与大家深入Poly。这个在线资源库和API为你提供了成千上万的3D asset。在本文结束时,你将能够创建一款在运行时检索3D Poly asset,然后通过Processing for Android库进行渲染的应用程序。
1. 使用Poly显示3D资源
如果你曾经涉足Unity开发,Poly存储库就是类似于Unity Asset Store的存在,但不同点在于Poly的所有内容都是免费。
Poly的众多3D模型都是在创意公用授权条款下授权发布,因此只要给予创作者适当的引用注释,你就可以自由使用,修改和重新混合这些asset。
Poly所有的3D模型都兼容谷歌的VR和AR平台,例如Daydream和ARCore,但你仍然可以随时随地使用它们,甚至可以用于苹果的ARKit。
在检索和显示Poly asset时,你有两种选择。首先,你可以将资源下载到计算机,然后将它们导入Android Studio;或者你可以使用Poly API在运行时检索这些asset。
跨平台,基于REST的Poly API提供对Poly大量3D模型的程序化,只读访问。这比将asset与APK打包在一起更复杂,但在运行时检索Poly asset存在几个好处,最明显的是它有助于控制APK大小,而这可能会影响下载应用程序的人数。
你同时可以利用Poly API为用户提供更多选择。例如,如果你正在开发一款移动游戏,这时你可以允许用户从一系列的角色模型中进行选择。
由于你可以自由修改Poly模型,你甚至可以支持用户调整他们选择的角色,例如改变头发或眼睛颜色,或者将其与其他Poly asset相结合,比如说不同的武器和盔甲。通过这种方式,Poly API可以帮助你提供令人印象深刻的3D asset种类,而且所有这些都只需相对较少的工作量。你的用户将确信你花费了大量时间来精心制作所有这些3D模型。
2. 创建一个3D建模项目
我们将创建一个应用程序,然后在首次启动时检索特定的Poly asset,并根据用户请求以全屏模式显示这个asset。
为了帮助我们检索这个asset,我将使用Fuel,一个用于Kotlin和Android的HTTP网络库。首先使用你选择的设置来创建一个新项目,但在提示时选择“Include Kotlin support(包含Kotlin支持)”。
你对Poly API所做的所有调用都必须包含API密钥,后者是用于标识应用程序并强制执行使用约束。在开发和测试期间,你通常会使用不受限制的API密钥,但如果你有计划发布这款应用程序,则必须使用受Android约束的API密钥。
要创建受约束的密钥,你需要知道项目的SHA-1签名证书,现在我们来获取这一信息:
  • 选择Android Studio的“Gradle”选项卡(见下图中的光标位置)。这将打开“Gradle projects”面板。

  • 在“Gradle projects”面板中,双击以展开项目的“根”,然后依次选择“Tasks(任务)> Android(安卓)>Signing Report(签名报告)”。这将在Android Studio窗口底部打开一个新面板。
  • 选择“Toggle tasks executions(切换执行任务)/text mode(文本模式)”按钮(见下图的光标位置)。


“Run(运行)”面板现在将进行更新,以显示有关项目的大量信息,包括其SHA-1指纹。
3. 创建一个谷歌云平台账号
要获取必要的API密钥,你需要一个谷歌云平台(Google Cloud Platform,GPC)帐户。
如果尚未获取帐户,你可以通过“Try Cloud Platform”这个页面,并按照说明注册12个月的免费试用版。请注意,你需要信用卡或借记卡,但根据“常见问题解答”页面,这仅用于验证身份,并且“在免费试用期间不向你收取费用。”
4. 获取你的Poly API密匙
注册完成后,你可以启用Poly API并创建密钥:
  • 转到GCP Console。
  • 选择左上角的图标,然后依次选择“API&Services(API与服务)> Dashboard(仪表盘)”。
  • 选择“Enable APIs and services(启用API与服务)”。
  • 在左侧菜单中,选择“Other(其他)”。
  • 选择“Poly API”。
  • 单击“Enable(启用)”按钮。
  • 稍等一会后将出现一个新的屏幕;打开侧边菜单,然后选择“API&Services(API与服务)> Credentials(信用证书)”。

  • 在随后弹出的窗口中,选择“Restrict key”。
  • 给你的密匙命名。
  • 在“Application restrictions”下选择“Android apps”。
  • 选择“Add package name and fingerprint”。
  • 将项目的SHA-1指纹复制/粘贴到“Signing-certificate fingerprint”字段中。
  • 输入项目的包名称(在你的Manifest和每个类文件顶部)。
  • 点击“Save”。
现在你将进入项目的“Credentials”屏幕,其中包含所有API密钥的列表,如你刚刚创建的支持Poly的API密钥。

39

主题

47

帖子

162

积分

注册会员

Rank: 2

积分
162
 楼主| 发表于 2018-11-22 09:55:02 | 显示全部楼层
5. 项目依赖项:Fuel, P3D和Kotlin扩展
为了检索和显示Poly asset,我们需要其他内容库的帮助:
Fuel:Poly目前没有官方Android工具包,因此你需要使用其REST接口​​。为了简化这个过程,我使用的是Fuel HTTP网络库。
Processing for Android。我将使用这个库的P3D渲染器来显示Poly asset。
打开项目的build.gradle文件,并将这两个库添加为项目依赖项:

为了令代码更简洁,我同时使用了Kotlin Android扩展,所以我们添加这个插件,并打开build.gradle文件:

最后,由于我们是从Internet检索asset,我们的应用程序需要Internet权限。打开你的Manifest并添加以下内容:

6. 添加API密钥
每当我们的应用程序从Poly请求asset时,它都需要包含有效的API密钥。我正在使用占位符文本,但如果应用程序需要能够正常工作,其必须使用自己的API密钥来替换这个占位符。
我同时添加了一个检查,如果你忘记更换“INSERT-YOUR-API-KEY”文本,应用程序将显示警告:


7. 检索asset
你可以在谷歌Poly官网选择任何asset,但我将使用这个地球模型。

你可以使用它的ID来检索asset(详见上图,地址栏的末尾)。我们将这个asset ID与Poly API主机(“https://poly.googleapis.com/v1”)结合使用。

接下来,我们需要使用httpGet()函数来向asset URL发出GET请求。我同时指定响应类型必须是JSON:

asset可能有多种格式,如OBJ,GLTF和FBX。我们需要确定asset属于OBJ格式。
在这一步中,我同时要检索需要下载的所有文件名称和URL,
包括asset的主文件(“root”),以及任何相关的材质和纹理文件(“resources”)。
如果应用程序无法正确检索asset,它将显示一个Toast以告知用户。
“点击查看相应代码”
这时,如果你在安卓智能手机或平板电脑,又或者是在Android Virtual Device (AVD)上安装项目,则asset将成功下载,但应用程序实际上不会显示它。我们现在来解决这个问题。
8. 创建第二个屏幕:添加导航
我们将以全屏模式显示asset,所以我们来更新main_activity.xml文件,纳入一个按钮。当点击按钮时,系统将启动全屏Activity。

现在我们将onClickListener添加到MainActivity.kt文件的末尾:
“点击查看相应代码”
9. 构建3D画布
现在,我们创建一个将以全屏模式显示asset的Activity:
按住Control键并单击项目的MainActivity.kt文件,然后选择“New> Kotlin File/Class”。
打开“Kind”下拉菜单,然后选择“Class”。
将其命名为“SecondActivity”,然后单击“OK”。
为了绘制3D对象,我们需要3D画布。我将使用Processing for Android的库的P3D渲染器,这意味着扩展PApplet类,重写settings()函数,然后将P3D作为参数传递给fullScreen()函数。 我们同时需要创建一个将Poly asset表示为PShape对象的属性。

接下来,我们需要初始化PShape对象,重写setup()函数,调用loadShape()函数,然后传递.obj文件的绝对路径:

10. 在P3D的画布上绘制
要在这个3D画布上绘制,我们需要重写draw()函数:

默认情况下,从Poly API检索的大多数asset都在较小的一侧,因此如果你现在运行这个代码,你甚至可能看不到asset,具体取决于你的屏幕配置。在创建3D场景时,你通常会创建一个自定义camera,以便用户探索场景并360度全方位地浏览3D资源。但这超出了本文的范围,所以我将手动更改asset的大小和位置,以确保它适配屏幕。
你可以通过将负值传递给scale()函数来增加asset的大小:

你可以使用translate()函数和以下坐标调整asset在虚拟3D空间中的位置:
X.沿水平轴定位asset。
Y.沿垂直轴定位asset。
Z.这是“深度/高度”轴,它将2D对象转换为3D对象。正值会产生物体朝向你本人的印象,负值会产生物体远离你本人的印象。
我的操作如下:

下面是完整的代码:

接下来,我们需要创建相应的布局文件,其中我们将3D画布添加为FrameLayout微件:
按住Control键并单击项目的“res> layout”文件夹。
选择“Layout resource file”。
将文件命名为“activity_second”,然后单击“OK”。

现在我们拥有了“asset_view”FrameLayout,接下来我们需要令SecondActivity了解它。回到SecondActivity.kt文件,创建一个新的PFragment实例,并将其指向我们的“asset_view”微件:
“点击查看相应代码”
最后一步是将SecondActivity添加到你的Manifest:

11. 测试你的项目
我们现在可以测试这个项目。将其安装在安卓设备或AVD上,并确保你具有活跃的互联网连接。在应用程序启动后,它就会下载asset,然后你可以通过点击“Display Asset”按钮进行查看。
你可以通过GitHub下载这个完整的项目。
12. 总结
在本文中,我们探究了如何利用Poly API在运行时检索3D asset,以及如何使用Processing for Android库显示这个asset。你是否认为Poly API可以令支持更多人开始VR和AR开发呢?请在下面的评论栏告诉我们。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


快速回复 返回顶部 返回列表