(本视频转载自YouTube:视频原址)
关于为太空提供光照的问题
《Grimmstar》包含多个完整的类太阳系,玩家可以在其中自由穿梭。我们必须制作出一些颇为庞大的关卡,其中要有与玩家飞船的大小呈真实比例的巨大行星、卫星、恒星和其他天体。这个要求带来了多个问题。首先,为每个关卡构建光照信息实在太费事(即使用了Lightmass重要体积也是如此)。一个子关卡就有7GB的光照贴图信息。这样肯定行不通,所以我们只能选择禁止执行预计算光照。其次,绝大多数Object是在太空中的,因此它们是动态运动的。空间站环、小行星、飞船、行星和卫星都会移动,因为太空中没有阻力。最后,各个Object之间的距离非常大,而关卡中不同资源的大小又是天差地远,因此在使用级联阴影贴图时会产生一些不够理想的结果。它们不算差,但是没有达到我们决心达到的质量。
实时光线追踪如何解决这些问题
既然我们不使用任何预计算的光照(没有光源构建信息),就可以通过RTX实现令人难以置信的实时光影效果,不论玩家处于什么位置,也不论网格体是被设置为静态还是动态。这就增加了身处太空的真实感。左:使用级联阴影贴图时所有阴影的柔和程度是一致的。反光中看不到任何东西;
右:阴影随着距离的增加从锐利过渡到柔和。采矿护卫舰的窗户上有反光,光线追踪的反射帮助提高了金属表面的真实感。
右:阴影随着距离的增加从锐利过渡到柔和。采矿护卫舰的窗户上有反光,光线追踪的反射帮助提高了金属表面的真实感。
解决了阴影信息之后,我们又再进一步,添加了光线追踪的反射。这使得某些资源的保真度达到了全新的水平。一些小细节(比如驾驶员的面罩反射出飞船座舱里的多功能显示屏)增强了保真度,也使过场动画能够实现更多功能。 一些以前很平淡、阴影信息缺少深度的资源如今显得和带有光亮漆面的金属结构一样突出。我们通过在全局后期处理体积中微调最大粗糙度数值来控制计算反光表面上RTX反射的时机,得到了既令人惊叹、又保持良好性能的结果。
左:对《Grimmstar》中的一个空间站资源使用标准光照模型;右:启用RTX阴影和反射使空间站的真实感提高了一个层次。
性能改进
实时光线追踪是一种非常消耗资源的光照方法。好在虚幻引擎出色地混合了多种光照技巧,因此你可以将RTX技术与比较传统的光照方法混用,得到两全其美的结果。例如,我们使用一个叫RayTracingQualitySwitch的材质节点禁用大部分光线追踪反射中的一切法线信息。大量使用法线会导致光照信息朝许多不同方向反射,这样就需要收集更多信息才能得到正确的结果。通过禁用光线反射的法线信息,我们禁止了这些额外的计算。(本视频转载自YouTube:视频原址)
不仅如此,当演示视频中的固定关卡启动时,我们设置了一些控制台变量,从而确保在一开始就为玩家优化某些设置。在虚幻引擎的控制台中输入“r.RayTracing”就能找到许多这样的变量。你可以在那里看到各种供你调用的变量。例如,我们对变量的使用包括将r.RayTracing.Reflections.HeightFog设置为0,将r.RayTracing.Reflections.ScreenPercentage设置为50。通过降低反射屏幕百分比,我们大大减少了光线追踪反射需要的计算量。结果仍然非常出色,在大多数情况下很难注意到差异。如果我们需要改进反射,那么总是可以另外设置一个体积来覆盖该设置。《Grimmstar》这种规模的游戏是实时光线追踪光照的完美应用对象。它不仅为我们解决了一些技术问题,而且带来了优于经典光照技巧的结果。虽然这种技术尚待成熟,但我们看到有关的性能和方法正在不断改进,使我们能够以很高的灵活度提供令人难以置信的逼真光照结果。