在 2015 年,雷克萨斯实现了世人在 回到未来 中的梦想,制作了现实世界中的悬浮滑板,并在后来通过一段视频分享了一些体验,视频中职业滑板玩家 Ross McGouran 在一个订制的滑板公园中测试了雷克萨斯滑板。接下来准备在 The Mill 的团队的帮助以及 Epic Games 的虚幻引擎 4 的支持下将这种体验带给更多人。
无论是在开发 Mill Stitch,首个 VR-review 的制作工具,还是为实时的在一个房间大小内使用 Vivi 创建原型,我们一直都在实践技术带来的变革并探寻新的方式来描绘故事。
在面临重建 2015 年洛杉矶汽车展上的雷克萨斯滑板的使用体验时,我们用来雷克萨斯“用滑板前行”作为回复,可以在一个房间内前行,采用实时的游戏体验,以及一个和 Spinifex Group U.S 合作开发的压力感应控制器。
体验
这是一个被显示屏环绕的该海滨滑板公园模拟,将用户放置于视觉和听觉都是动态的环境中,从一个四分之一的管道开始,在雷克萨斯滑板公园中滑行。这个公园复制了早先时候雷克萨斯在巴塞罗那建造的那个真实的滑板公园的样子。
用户起始时占在一个压力感应控制器上,该控制器会监测用户的体重分布。用户可以通过前倾,后倾以及向两侧倾向来改变速度和方向。
这个超级真实的滑板公园和周边环境由 Epic Games 的虚幻引擎 4 制作,并订制了软件来同步模拟环境的 18 个高清屏幕的显示,以及有 Apollo 工作室实现的基于事件的具有空间信息的音效也整合在虚幻引擎中。
分布式渲染
为了将虚幻 4 渲染在 18 个屏幕上显示,我们必须要在短时间内解决一些技术问题,其中包括周边硬件以及虚拟摄像机的配置,网络的配合以及各帧的状态同步。虽然这具有挑战性,但这类问题正是我们喜欢解决的问题。
硬件
解决分布式渲染的第一步总是先看能否被整体避免。在这个案例中,我们需要大量的像素(9270x3840)并且没用 SLI 的支持,因此显然我们无法在一台机器上完成,因此我们选用了一套系统,包括一个服务器以及六个客户渲染端,并在一个封闭网络内工作。
虚拟摄像机
每台机器将渲染一面墙的上半部或者下半部的一部分(有 NVIDIA 驱动的 3 个并排的竖直显示器)。为了无缝的在各个显示屏上显示画面,需要根据显示器的布局放置一个虚拟摄像机在玩家角色的位置。为了做到这一点,我们直接在虚幻引擎 4 的摄像机组件类中实现了一套非对称视锥(透镜偏移)。每个客户端渲染实例只需直接加载一套对应该视口的 json 的设置并应用于它的摄像机配置。
更重要的是,需要保证稳定的 60 帧的画面,低于 60 帧的感受将会非常不舒适,尤其是考虑到摄像机动态下的情形。在 NVIDIA 的 GTX 980ti 的加持下,大约 80% 的分辨率以及一些画质设置的调整下,我们做到了稳定的帧数渲染效果。我们却是不得不最小化屏幕空间的后处理特效,因为这部分会导致不同渲染端的显示差异。
网络
我们决定对于系统间共享的状态要尽可能的少,因此我们以来 UDP 协议以及交换机的性能考保持“同步”。当用户在滑板公园中移动时,我们将用户的视点位置和方向在网络中做简单的广播,以及一些额外的时间信息,来保持各个渲染端的 Matinee 过程同步。
走这条路是为了避免 TCP 的过度开销导致的锁帧问题,毕竟要对虚幻引擎中 GPU/CPU 的同步点做进一步改进很有可能会超出这个项目的范围。我们是通过一些列的 UDP 延迟和锁帧的测试才做了这个决定。其中我们做的一个测试是在网络上进行 ping pong 检测来测试 UDP 的可靠性和速度,其结果是我们能做到在几个小时的耐力测试下,ping pong 的一次来回只需要半毫秒,UDP 的丢包数量为 0。对这个结果我们也很满意,因此就决定采用这个方式做下去。
作为聪明的实现方式,我们对虚幻引擎做了 Asio C++ 库,以及新的 Cinder OSC 封装的整合。我们实现了一个 FRunnable 对象,该对象由 asio::io_service 运行,并且可以选择预设置的配置来作为服务端运行还是作为渲染客户端。Asio 最终也需要处理其他安装交互层。比如我们要和 Cinder 的应用程序交互,该程序从 Wii 的平衡板中获取用户的输入控制数据,并将这些信息发送给虚幻引擎来控制速度和移动的体验。该程序也同时监听虚幻引擎反馈的信息,并将这部分信息用于控制一个 DMX 风扇作为 AR 的元素来增加用户体验。
创建素材
这次为雷卡萨斯滑板制作素材和我们通常的 VFX 制作流程稍有不同。为了在虚幻引擎的 Lightmass 的光照烘培下完美工作,创建素材时有一些小地方需要注意。每个素材需要一组 UV 展开用于标准的 Diffuse,Normal 和 Specular 贴图,除此以外还需要另一组 UV 展开用于优化并改善光照贴图的质量。
实时的社交分享
该项目还需要一个能够获取用户体验的视频并完成社交分享功能的需求,为了这个体验我们设置了一套多摄像机系统,能够保存一段 15 秒的视频并在社交媒体上分享雷克萨斯“用滑板前行”的体验。
该虚幻应用和一个 TouchDesigner 应用连接,用于创建自定义视频捕获,能同时和虚幻以及 iOS 设备交互来作用用户队列和体验的开始,同时还能处理实施的色彩修正和编辑。
最终效果
Mill 团队最终提供了解决方案,跨 18 台显示器完成了虚幻引擎 4 的渲染显示,得到了无缝的使用体验,并达到沉浸式体验的高质量需要。在 12 天的时间内,通过过“用滑板前行”项目,4,000 个滑板玩家体验了雷克萨斯的滑板公园。
我们会继续拓展关于帧同步方面的更好的方法,包括直接在虚幻引擎内部的同步点上优化工作,机器的时钟同步以及使用 libpcap 读取网络包的精确时间标记。同时我们也在寻找虚幻引擎的技术美术来加入我们团队!