小小的 AR 投篮机背后包含着哪些技术?我们和腾讯微视技术团队聊了聊。
腾讯微视最近又出黑科技,这款新上线的游戏「AR 投篮机」能让你的手机秒变投篮机。
操作方法如下:进入腾讯微视 APP,搜索「AR 投篮」。点击 AR 投篮机,就能进入游戏界面。找到一个背景平面,将篮筐调制最佳投篮位置,对准篮筐,向上滑动篮球,投中篮筐即可得分。该游戏对场地适应性很强,即便在暗光环境下,对单一纹理的地板也能定位。虽然是虚拟投篮,但腾讯微视这款游戏的重力和碰撞都是模拟真实世界的物理特性来设计的。在滑动屏幕投球的过程中,用户滑动的速度、距离、角度共同决定了篮球投掷的落地点,最大程度模拟真实世界投掷物体的力度、方向和重力。用户只要投中几次,掌握投球的力度和技巧,后面可凭借肌肉记忆,持续多次命中,分数的加成也会越来越高,投中的视觉,听觉特效反馈也会越加炫酷和强烈。不仅如此,根据篮板的远近,游戏分为普通模式和挑战模式,模拟现实中的两分球和三分球。连续进球分数达到 20 分以后,筐会开始左右移动,最大程度的还原了投篮机的真实游戏体验。游戏虽小,但背后的技术并不简单,腾讯微视有一支专门负责 AR 技术研发的「微视光流实验室」AR 团队,这款 AR 投篮机耗时四个月,可以说是腾讯微视 AR 技术的集大成者。除 AR 投篮机外,腾讯微视也有很多其他炫酷的 AR 应用,比如「纸片人」、3D 人民币等。AR 是近两年才出现在大众面前的「黑科技」,公众对其认知度并不高。并且在不少人的印象中,这还是一项设备门槛很高的技术,但腾讯微视却能让 AR 覆盖到普通消费者,做到了在 90% 的安卓手机上运行。这些炫酷的 AR 应用背后基于哪些技术原理?AR 技术又如何「走向寻常百姓家」?我们和腾讯微视技术团队聊了聊。水平面 AR 算法:覆盖 90% 的安卓机,爆款「AR 投篮机」炼成背后在 AR 投篮游戏中,虚拟的 3D 篮板看起来就像依附在现实的地板上一样。如何做到这一点?本质上说就是要在三维场景中找到一个有一定特征点的依附平面(比如有花纹的地板),确定其坐标位置,然后将依附平面映射到二维屏幕上,再在平面上绘制想要展示的图形或者 3D 模型。确定依附平面方面腾讯微视采用的是「水平面 AR 算法」,通常的做法是使用 SLAM 算法一边对三维场景进行扫描建图,一边定位水平面位置。定位完成后在水平面上放上 AR 模型。接下来做的事情实际上就是要得到一个变换,让模型坐标系与屏幕坐标系建立映射关系,根据这个变换在屏幕上画出的图形就可以达到该图形依附在 AR 模型上的效果。具体步骤为,从模型坐标系变换到真实的屏幕坐标系需要先旋转平移到相机坐标系,然后再从相机坐标系映射到屏幕坐标系。但是,在手机 AR 的玩法中,如果直接使用 SLAM 来定位的话,在用户体验上会存在一些痛点,导致游戏很难成爆款。对此腾讯微视团队对技术做了很多优化。「不同的玩法,要搭配不同的算法。不能一成不变地使用 SLAM 算法,否则就会造成杀鸡用牛刀。」比如,绝大多数手机都只有一个摄像头,所以只能使用单目 SLAM 算法,必须要用户平移手机,直到有足够的视差后才能初始化。这个平移的操作,非常影响用户的体验。另外,单目 SLAM 算法无法计算出真实的尺度,会出现「大人国小人国」的问题。腾讯微视的做法是,充分利用手机上的多个传感器的信息和用户的交互信息,可以实现第一帧就初始化,并且能确定尺度。再利用自研的特征点跟踪算法,在弱纹理的区域,也能实现准确鲁棒的跟踪。在使用过程中,也不会出现卡顿,定位丢失等情况。另外,用户可以用手拖放 AR 模型,可以用手拿上模型和放下,用户交互起来会很有意思。作为对比,ARkit 和 ARcore 都没有这样的功能,ARkit 和 ARcore 都只是单纯的放置 AR 模型,没有用手交互。水平面 AR 算法可以让篮板依附在现实的地板上,但做出栩栩如生的篮球、篮板的 3D 模型还要靠渲染技术。在这方面,腾讯微视采用的是 PBR 渲染,PBR 全称(Physicallly-Based Rendering)。这是一种基于物理规律模拟的渲染技术,最早用于电影的照片级真实的渲染,近几年由于硬件性能的不断提高,已经大量运用于 PC 游戏与主机游戏的实时渲染。腾讯微视光流实验室自研的移动端高性能 3D 引擎,采用了业界领先的 PBR 算法,可以媲美游戏级渲染的效果,在移动端处于领先水平。与主流的游戏引擎相比,包体只有约 1.3MB。除了出色的 PBR 渲染效果外,引擎架构上保持了良好的扩展性,支持高性能的毛发效果渲染。同时,腾讯微视的 3D 引擎支持对每个 3D 节点配置独立的 shader,扩展性更强,给创新应用提供了技术基础。此外,算法还集成了动态骨骼插件 DynamicBone,可以高性能的模拟各种软硬程度的甩动效果,如头发、衣服等。且有高性能 GPU 3D 粒子系统,可以同时支持上万的粒子。对于设计师来说,腾讯微视 3D 引擎可支持 Android,Windows,Linux 和 macOS 等跨平台应用,还提供了一整套完善的工具链和配套的 3D 编辑器,能帮助设计师灵活高效的组装出各种 3D 玩法。和一般 AR 应用的不一样的是,AR 篮球还要能实时模拟真实世界物体运动与碰撞的反馈,根据用户滑动篮球的速度、距离、角度共同决定篮球投掷的落地点。这背后的技术是「AR 物理引擎」。物理引擎支持长方体、球体、胶囊体、圆柱体以及自定义曲面的刚体模拟与碰撞,支持任意形状的软体仿真,能够自定义配置物体的各种碰撞参数(诸如质量、摩擦系数、弹性系数以及碰撞形状)。还能模拟物体受力之后的运动状态,包括加速、减速、静止、碰撞等。在软体模拟功能中,能够很好地支持诸如软球以及布料的模拟,以及真实软体的碰撞效果。腾讯微视「AR 投篮机」采用 BVH、CCD 等技术来加速碰撞检测过程,同时保证碰撞检测精度,在复杂场景下,能够同时支持数百个刚体的连续碰撞。可以在 Android、iOS 端以及桌面端进行物理实时模拟,针对不同的设备还能进行调参,参数调节鲁棒性高,不易出现模拟失控的情况。目前,腾讯微视已将 3D 渲染软件 LightStudio 深入整合到物理引擎。通过 LightStudio 上简单的界面操作,可以低成本地配置出相当真实酷炫的物理模拟效果。为了最大程度的模拟真实投篮体验,腾讯微视在用户体验上也做了很多优化设置。在进行碰撞体生成的时候,腾讯微视一开始使用简单碰撞体来代表整个篮架,导致篮球与篮架的碰撞不精确,球体的碰撞反馈效果违和。后来改用精度超高的模型来进行碰撞体的创建,但又会出现卡顿的问题。对此,腾讯微视专门对篮架构建了一个用于碰撞的网格模型,这个模型的点数与面数减少约 90%,同时此模型可以包裹住篮架,实现好的碰撞反馈效果。篮架碰撞体的点数变少后,检测的精度实际会降低,此外篮球高速运动时可能会直接穿过篮筐的情况,对此腾讯微视使用了连续碰撞检测等方案解决。优化后在碰撞反馈效果与模拟效率之间实现了平衡。除了最新上线的 AR 篮球,腾讯微视还有很多新奇的 AR 应用,比如「AR 纸片人」挂件。可将画中的静态形象变成 3D 模型,模型还能抖动跳跃。纸板人算法负责对图画进行边缘检测,提取轮廓,将其变成 3D 物体,然后分析图案提出骨骼点(手肘、膝盖等),将图案的各部分绑定到对应骨骼点。在提取算法上,腾讯应用研究中心和腾讯微视共同研发的通用物体分割网络能实时提取复杂背景,结合传统提取方式,能在适应各种场景的同时具备实时性,在中低端机型上达到 30~40FPS。骨骼绑定时,腾讯微视算法会根据模型图案自动提取骨骼点并将图案的各部分绑定到对应的骨骼点,单张图案的骨骼提取和绑定在移动端只需几十 ms 就可以完成。骨骼动画负责给绑定之后的模型赋予各种各样的动作,比如起身、跳跃、摆手。这里腾讯微视也给算法做了简化,只解算骨骼最末的子节点来驱动骨骼的变化,减少了资源占用率,甚至还可以应用于美颜等特效中。「3D 人民币」挂件也是一个典型的 AR 玩法。用户只要用手机扫描人民币背面,纸币上的景点图案就像被激活了一样,直接呈现到屏幕上,妙趣横生,给不少用户提供了新的旅行打卡思路。这背后涉及到的技术就是 Marker AR 算法。扫描人民币时,Marker AR 算法可以利用图像检索算法把人民币背后的 Maker 图案识别出来,通过特征匹配算法准确估计 Marker 的位置和姿态。之后在识别的 Maker 图案上摆放预先设置的 3D 模型,当用户移动人民币时,摆放的 3D 模型也会跟着人民币进行相应的移动。在实际操作中,用户可能会摆放多个人民币。为保证多 Marker 检测实时性,腾讯微视团队在检测到 Marker 后基于连续图像帧进行 Marker 跟踪,在移动端支持实时跟踪最多 10 + 个 Marker。这么多的 AR 特效,动画设计师要如何应用?在这方面,腾讯微视也做了很多工作:将现有的 AR 算法都集成进一个 SDK。在玩法设计上,腾讯微视将底层的能力统一封装打包制作成针对设计师的可图形化操作工具,设计师不需要理解复杂的算法,只需要准备好素材和创意,几分钟就可快速生产出原本需要算法和工程同学投入几个星期才能完成的玩法,极大的提高了生产效率。AR 技术究竟会给短视频带来怎样的影响?腾讯微视认为,目前 AR 技术还相对前沿,用户认知度不高,整个行业软硬件成熟度不高。但 AR 这种基于三维空间的信息展现及交互的形式是未来的趋势,是与 5G、AI 等技术的发展相互促进的。而腾讯微视正在给 AR 带给更多的用户,并培育用户习惯。「购买昂贵的 AR 设备显然不会是大多数人的选择,我们以一种更接地气的方式,打破虚拟与真实的界线,是一种全新的玩法体验,也在这个过程中建立用户心智」。