2015年8月26日

在虚幻引擎4中模拟区域光源

作者 Alan Noon

真实世界中,光源有各种各样的形状和大小:日光灯、传统灯泡及卷曲的灯泡、车头灯、篝火、天空光照等。

在专业的摄影技术中,光照有很多种不同的控制方式。彩色透明滤光板用于给光源着色。镜头挡光板改变投射光的形状及图案。柔光镜尤其吸引我们,比如柔光箱和摄影伞,用于重定向、传播及柔和光线。

现代离线渲染解决方案中一个典型的强大功能是区域光源。区域光源的工作原理同真实世界中摄影师的柔光箱漫射器功能非常相似:它使得可以从一个较大表面上发射大量光照,从而使用漫反射光照填充一个空间。这会降低场景中阴影和高光的粗糙度,一般会以更加合意的方式渲染表面。

到书写本文为止,虚幻引擎4还不支持区域光源。但是,通过一些基本的几何体、简单的材质、及标准的虚幻引擎聚光源,我们可以通过创建自己的实时漫射器来以令人信服的、可以轻松控制的方式模拟区域光源。

步骤1:场景

最初,在我们简单地场景中,我们有一个像房子一样的建筑物,里面有窗子、门及天空光源。还有一个定向光源当太阳。现有还放置了几个专用的actor:三个球体反射捕获Actor,用于辅助精确地渲染反射表面;一个Lightmass重要体积,用于指导Lightmass在哪里进行光照烘培;及一个后期处理体积,用于通过各种视觉特效来调整最终渲染效果。

在编辑器中运行时产生的效果:

SimLight_0

很明显,该建筑物的内部很黑。我们要做的是模拟光照通过窗子和门从外面涌入的效果,从而使得光子进入到建筑物中。这些光子将在场景中来回反射,照亮它们射入时接触到的表面,最终产生更加真实的、令人满意的效果。

步骤2:添加光源

 我们要做的第一步是添加光源,就是在外面,大致每个入口中间的位置处。Inner Cone Angle(内锥角)和Outer Cone Angles(外锥角)已经打开,从而最大化传播每个聚光灯的光线。

  • Inner Cone Angle(内锥角)    80.0
  • Outer Cone Angle(外锥角)    85.0

构建光照后在编辑器中运行的效果:

SimLight_1

效果更好了,因为我们至少看到了室内场景,但是请注意光照和阴影都是非常刺眼的。通过组合剩余的Bounce Cards(反光板),我们获得了同建筑可视化渲染相关的更高质量的区域光照。

步骤3:漫射光线

我们的反光板由简单的平面组成,这些平面缩放成为适当的大小并放在了每个门口的外面,就在每个聚光灯远处一点。每个平面应用了一个白色材质***,并调整了朝向,以便它们朝向建筑物的内部。

为了给反光板提供恰好足够的覆盖量,光源本身会减小它们的衰减半径。不同的场景可能需要不同的值。会旋转光源使其朝外,远离建筑物内部,并直接射入刚刚放置的平面。

  • Attenuation Radius(衰减半径) = 200.0

反光板配置:

SimLight_3

场景设置:

SimLight_4

构建光照后在编辑器中运行的效果:

SimLight_6

高级技巧:如果不需要反光板产生的发光外部世界效果,那么可以选择所有反光板,从详细信息面板中,启用Actor的“Hidden In Game(在游戏中隐藏)”复选框。

SimLight_5

脚注:

*Lightmass 设置

Lightmass工具执行光照烘培过程并将结果编码到每个对象的光照贴图中。通过增加关键参数,场景中静态光照的最终质量得到了提升。该项目的调整包括:

  • Static Mesh Lightmap resolution(静态网格物体光照贴图分辨率) = 512
  • Num Indirect Lighting Bounces(间接光照反弹次数) = 25
  • Indirect Lighting Quality(间接光照质量) = 8.0
  • Use Ambient Occlusion(使用环境遮挡) = True
  • Compress Lightmaps(压缩光照贴图) = False

增加这些值将会提升最终的光照质量,所付出的代价是光照烘培时间,这取决于可用的处理能力。推荐您通过使用较低的值进行迭代,“勾勒”出场景的一般效果和色调,一旦达到希望效果后,最终提升这些值来获得最终效果。

**后期处理

后期处理特效是非常强大的功能,可以动态地影响渲染器的最终输出效果。一丁点的后期处理特效也会大有帮助。一些光溢出、一些颜色校正、少许对比都会给场景增色不少。

  • 场景颜色
    • Fringe Intensity(边缘强度) = 0.575221
    • Grain Intensity(颗粒强度) = 0.150442
  • 自动曝光
    • Min Brightness(最小亮度) = 1.0
    • Max Brightness(最大亮度) = 1.0
  • 镜头眩光
    • Intensity(强度) = 0.0
  • Unbound(未绑定) = False

边缘及颗粒设置添加照相失真的暗示。

这里,自动曝光和镜头眩光设置有效地禁用了这些效果。

Unbound(未绑定)使得后期处理体积可以在整个场景上全局性地生效。

*** 反光板材质

主要的反光板材质非常简单:Vector3,用做底色;Scalar标量,用于将那个颜色同自发光通道相乘。材质实例版本增加了亮度。

  • 亮度 = 13.0

SimLight_7
Master Material                |                Material Instance

注意,材质的自发光质量没有设置为真正地发射光照到场景并列入Lightmass计算;在该情形中,这纯粹是一种审美选择。