今年3月,Unity宣布提供针对NVIDIA RTX实时光线追踪技术的支持,实时光线追踪技术为Unity的高清晰渲染管线HDRP加入了逼真的光照质量,给Unity的视觉功能赋予新的潜力。

Unity中NVIDIA RTX技术的预览版支持计划在Unity 2019.3版本推出。

为了展示这项全新光照技术,我们发起了一项使用Unity渲染的宝马CG汽车和现实车库里拍摄的真实宝马8系列Coupe车型相同效果的挑战。

最终项目结合了实时交互式演示和预渲染的4K视频,把真实汽车和CG汽车的画面混剪在一起。我们在演示时还让观众们尝试分辨了真实汽车和CG汽车,最终视频共包含11个CG宝马汽车的画面。

广告和汽车行业都在快速的转变中发展壮大的,我们制作宝马汽车广告的目的是为了证明:广告创作阶段所做的决策可以从实时引擎的多功能性受益。

我们在GDC 2019和NVIDIA的GPU技术大会GTC上发布了演示视频。本文将介绍Unity实时光线追踪演示项目的创作过程。

预制作过程

视觉预览过程对于准备拍摄以及制作精美的专业广告至关重要。我们和摄影导演Christoph Iwanow进行合作,直接在Unity中制作影片的完整CG版本。

在这个初步阶段中,我们使用了简单的光照和着色器,主要工作是确定影片节奏、摄像机位置、摄影取景、景深和焦点区域。

unity的像素动画用什么生成 unity怎么做摄像机动画_unity vr是加一个摄像机就行吗

通过使用Unity的Physical Cameras功能,我们可以还原出真实的物理外景摄像机,使用逼真的镜头得到精确的细节:传感器尺寸、ISO、快门速度、镜头畸变等。这让我们能够获得真实摄像机的外观和感觉,从而在所有层级上实现1:1的还原效果。

Cinemachine让我们能够轻松创建逼真的摄像机移动效果,同时保持快速的迭代速度。

视觉预览阶段也是我们尝试光照功能的部分,我们计划使用的现实光照设备也在Unity中有各个细节的对应模拟效果:光源的形状及大小、温度和光强。

我们可以立即看到天花板上灯管的效果,调整它们的位置、强度和颜色,我们也可以在汽车上生成完美的反射效果。否则,这个过程会耗费长达数小时的珍贵外景时间。

通过使用数字方法模仿出现实的光照和摄像机设置,Christoph Iwanow可以尝试更多的组合效果,在拍摄前寻找到他想要的外观,因此我们可以更高效的利用拍摄时间。

unity的像素动画用什么生成 unity怎么做摄像机动画_光线追踪_02

后期制作过程

拍摄后的第二天,我们立刻开始加工拍摄画面。由于视觉预览在Unity中完成,我们不需要转移资源。

我们使用了外景的光照参考,也参考了真实汽车,确保我们的资源在外观开发中有逼真的反应。该技术允许我们在区域光使用图像纹理,因此我们可以使用实际光源的照片作为纹理,从而得到更逼真的光照和反射效果。

unity的像素动画用什么生成 unity怎么做摄像机动画_unity的像素动画用什么生成_03

凭借Unity的强大功能,我们在第一天就渲染出4K的超高分辨率,这是Unity明显优于离线渲染的地方,大多数情况下制作阶段的离线渲染作品会渲染为较低分辨率,以节省成本和时间。

通过在初次迭代提供4K分辨率画面,我们可以调整外观开发和光照效果的小细节,在短时间内进行更多渲染迭代,这样能够获得优质的视觉效果,也意味着我们可以预测最终渲染的结果。

unity的像素动画用什么生成 unity怎么做摄像机动画_迭代_04

关于使用底片集成的画面,它们的素材在Unity外拍摄,然后摄像机和拍摄的数据会以FBX格式文件的形式导入Unity。

对于在Unity直接创建的其它摄像机, Cinemachine的二个功能非常重要,它们实现了逼真可信的摄像机移动过程:

  • Cinemachine Storyboard扩展:在Cinemachine的许多功能中,Storyboard扩展允许创作者对齐摄像机角度。它是一个必不可少的工具,可以轻松实现特定摄像机移动过程,在CG中完全重现真实镜头画面。
    我们使用外景摄像机素材的画面作为叠加层,用来指导CG摄像机的对齐,该过程用来处理一些画面的第一帧,中间帧和最后一帧。
  • Cinemachine Noise噪声:将程序化噪声应用到摄像机移动中,通过为摄像机的移动加入逼真的微动,让我们轻松摆脱CG摄像机不自然的完美。我们可以确保移动过程的生动效果,同时避免明显的反复性。

在我们的原始概念设计中,CG宝马汽车的车漆颜色和真实宝马汽车的不同。随着项目的开发,我们觉得让二者拥有相同颜色的话会更有说服力,我们可以无缝地把它们的画面混剪到一起。

改变汽车颜色是一个后期阶段的决定,它可以在Unity中灵活地实现,因为光照和外观开发艺术家可以同时处理更新。

离线渲染器的类似项目会有这样的纪录:把轮子向右旋转20度,把主灯光放到停车位置。我们不必为小型技术调整而花一整天的时间处理,我们可以交互式处理这些改动,把精力投入到到创意决策部分。

unity的像素动画用什么生成 unity怎么做摄像机动画_迭代_05

对于使用底片集成的二个画面,我们使用Shader Graph着色器视图来创建屏幕空间投影材质和HD分辨率的原始素材。

我们在汽车周围的地面和墙上使用了着色器,把底片的逼真反射效果实现到汽车上。我们使用额外的光照进行补充,使用Unity渲染画面,然后使用外部的合成软件合并最终地面效果和完整分辨率的底片。

unity的像素动画用什么生成 unity怎么做摄像机动画_离线_06

实时光线追踪技术

游戏制作过程中,模拟反射效果的常见方法是在多个位置设置一组反射探针,并且结合屏幕空间光线追踪,这通常会造成各种漏光现象和表面特性的粗糙效果。

通过使用实时光线追踪技术,我们可以正确地反射屏幕外的光线,不必让艺术家做额外处理。然而,这样的反射效果需要对渲染引擎进行一些设置。

unity的像素动画用什么生成 unity怎么做摄像机动画_离线_07

在传统游戏制作过程中,所有不在摄像机视椎体内的内容都会被禁用,但现在我们可以反射出受到屏幕中不可见光源照亮和投影的对象。

为了准确模拟金属物体,有效的光线追踪要求实现光的多重反弹效果,这在我们的性能限制内无法实现。因此我们选择仅处理一次反弹,其它反弹的结果通过近似效果实现,方法是将金属颜色乘以当前的间接漫反射光照。

unity的像素动画用什么生成 unity怎么做摄像机动画_unity vr是加一个摄像机就行吗_08

传统的离线渲染器擅长管理大型纹理区域光的渲染过程,但使用离线渲染器的成本较大,而且会产生大量噪声。使用的光线越多,噪声越小,但是这会提高每帧画面的渲染成本。

为了取得实时帧率并维持质量,Unity Labs团队的研究人员与Lucasfilm和NVIDIA合作开发了一种算法进行处理。通过使用该方法,区域阴影的可见度可以和直接光照估算分离,同时视觉结果仍保持不变。

通过结合对二个组成部分单独应用的降噪技术,我们可以为大型纹理区域光产生少量光线,并且实现30 fps目标,我们的实时演示项目中只有4个光线。

unity的像素动画用什么生成 unity怎么做摄像机动画_迭代_09

间接漫反射或漫反射光线通过使对象接触地面,并对改变光照条件做出反应来增强场景的光照效果。游戏制作的相关工作流程非常费力,依赖于在场景设置光照探针或使用光照贴图来实现。

对于电影,我们使用了简单的单次反弹间接漫反射的方法,该方法生成了多个光线,让我们取得理想的光线混合效果。这种方法会给艺术家巨大的自由度,使他们不必设置任何内容,但它的成本较大。

unity的像素动画用什么生成 unity怎么做摄像机动画_unity的像素动画用什么生成_10

对于实时版本,我们选择了一种成本较低的方法:通过光线追踪,我们可以在每一帧动态地重新烘焙一组光照探针。而在过去,我们会使用一组预烘焙的光照探针来烘焙光照贴图。

unity的像素动画用什么生成 unity怎么做摄像机动画_迭代_11

正如光线追踪的反射效果可以替代屏幕空间的方法一样,实时光线追踪可以生成环境遮蔽效果,该效果和常用的屏幕空间方法得到的结果差不多。

前面提到的间接漫反射方法使用的性能资源不多,它可以通过光线追踪环境遮蔽得到加强,从而更好地处理该方法产生的漏光情况。由于考虑到性能因素,我们没有让该方法支持透明对象,因为这需要处理穿过透明对象的透光性。

实时光线追踪是能够在实时环境渲染逼真车头灯的唯一工具,车头灯形状,多重透镜和反射光会产生复杂的光线交互效果,这让模拟具有挑战性。

unity的像素动画用什么生成 unity怎么做摄像机动画_unity的像素动画用什么生成_12

我们添加了多个连续且平滑的反射光和透射光线,这让光束产生现实中的偏移效果,可以使用将影响光线方向的纹理细节来控制精细细节。

unity的像素动画用什么生成 unity怎么做摄像机动画_unity的像素动画用什么生成_13

未来展望

Unity实时光线追踪功能实现了全新的仿真效果,我们不是试图从头开始重构传统的制作管线,而是要去除这类项目常见的一些痛点。通过该功能,我们可以交互地改变画面并得到即时反馈,这种功能对于创意总监和摄影导演来说非常重要。

由于在Unity中创作这部影片,我们可以轻松地把这项工作迁移到其它项目,在多种媒体上实现多样而一致的广告活动。实时光线追踪功能使我们能够以更具创意,方便协作和成本适中的方法,改善传统的汽车广告制作流程。