反射

UE4中包含的反射示例概述。

Windows
MacOS
Linux

ReflectionHeader.png

本示例展示了虚幻引擎4的实时反射功能。场景展示了一个废弃的地铁终点站,其中有许多漏水、污秽的瓷砖、破烂的管道和其他废墟环境细节。在此文档中,我们将概要介绍该场景中运用的技术以及实现效果所用的功能。

下图显示了此场景中开启和关闭混合时的反射,以展示其效果。

反射环境

反射环境的工作原理是采集多个点处的静态关卡,并将其重新投射到反射中的简单形状上(如球形)。美术师放置 ReflectionCapture Actor即可选择采集点。反射在编辑中实时更新,以协助放置,但在运行时为静态。 将采集的关卡投射到简单形状上可构成反射的近似视差。每个像素在多个立方体贴图之间混合,以获得最终结果。较小的ReflectionCapture Actor将覆盖较大的Actor,因此可根据需要提升区域中的反射视差准确度。举例而言,可将一个采集放置在房间中央,然后在房间角落放置较小的采集来提升反射效果。

reflection_environment.png

有关反射环境和反射捕捉的更多信息,请参见反射环境

反射捕捉Actor

CaptureIcon.gif

反射捕捉Actor是精心放置在关卡各处的Object,它将反向数据馈送到反射环境中。

当前有两个反射采集形状:球体和盒体。形状十分重要,因为它 控制着场景的哪个部分将被采集到立方体贴图中、反射中关卡被重新投射到什么形状上, 以及关卡的哪个部分可以接收来自该立方体贴图的反射(影响区域)。

有关反射环境和反射捕捉的更多信息,请参见反射环境

屏幕空间反射

屏幕空间反射是一种引擎功能,可帮助将Object置于地面之类的平坦表面上。它们在默认情况下是激活的,与反射环境的结果相混合,提供更全面的反射感。

ScreenSpaceReflections.gif

默认情况下屏幕空间反射在虚幻引擎4中处于活动状态,但可以根据设置使用控制台命令_r.SSR.Quality 3_或_r.SSR.Quality 0_切换。 下面是反射示例场景使用了屏幕空间反射(r.SSR设置为1)和未使用屏幕空间反射(r.SSR设置为0)的结果。

反射注意事项

在创建为了利用反射而构建的场景时,美工要牢记几个注意事项:

对比

在有强烈的整体明亮感和阴影对比的区域,反射往往更为明显。和在真实世界中一样,如果环境整体处于黑暗中,本身也很阴暗,但是遭到了强光照射,反射往往会显得很"突出"。这就是为什么这个示例选择了使用地铁场景。在地下,没有真正的自然光源。少数灯具被布置在相隔很远的地方,而且它们相当明亮。这就意味着整体的阴影和黑暗会作为衬托,使反射效果在观看者或玩家眼中很醒目。

Contrast.png

现实世界的反光表面

在创建逼真的反射效果时,除了利用对比,还应该考虑在现实世界中会形成反射的各类表面。在这个演示中,我们选择了在地面使用潮湿的水泥地,在墙上使用瓷砖。在大部分场景中都有滴水和流水,增加了大部分环境的反光度。当然,这也意味着明智地创建材质是得到良好效果的关键。

有关材质创建的更多信息,请查看我们的材质基于物理的材质 文档。

Subway.png

布置反射捕捉

ReflectionActors.png

获得合适反射效果的关键是在场景的各处布置反射捕捉Actor。你可能首先想到的是把这些Actor布满场景,直到看到良好结果。但是,在使用这些Actor时,需要记住一些规则:

  • 屏幕空间——每个反射捕捉Actor都会产生一些成本,具体取决于屏幕被其半径覆盖的范围。从这个角度来讲,它们类似于粒子或动态光源。也就是说,你应该注意避免将捕捉Actor的半径设得过大。

  • 重叠——反射捕捉Actor的半径是可以重叠的。重叠的Actor会导致每个像素的反射成本增大。再加上屏幕空间所增加的成本,你可能很快就会发现,简单地用高半径的反射捕捉Actor覆盖场景在性能上是不可行的。

  • 层级布置——为了在节省资源的同时得到良好的反射采集Actor布局,可以使用层级布局,这会让你获得重叠最少的可靠反射设置。在这样的系统中,要先布置一个大半径的捕捉Actor,获取来自背景的反射,然后布置一系列较小的捕捉Actor,获取细节相关的反射。

LevelReflection.png

大半径。反射关卡的大部分和背景。

比较局部化的反射。捕捉个别房间。

GREEN

小半径的细节反射。放置于需要重要的小细节的区域。

相关主题

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback