UE4移动端光照材质系统说明

2021-04-07   3,034 次阅读


  1. 光源类型:

    • 方向光(Directional Light):

      ​ 移动端仅支持一个stationarymoveable方向光,若有多个方向光,根据创建的顺序选择,选择使用第一个创建的方向光,如果没有放置方向光,会使用一盏默认的默认的纯黑方向光。

      ​ 移动端stationarymoveable方向光静态物体的直接光照是动态计算的,若使用了预计算光照,则有光照图及间接光照缓存,在移动端后有间接光照效果,static方向光生产的光照图既有直接光照又有间接光照,而stationarymoveable方向光只有间接光照。

      ​ 移动端stationarymoveable方向光静态物体无论是否使用预计算光照,直接光照(包括高光)总是动态计算的

      移动端moveable方向光则不产生光照贴图但是有光照缓存。

      ​ 方向光间接光照强度(Indirect Lighting Intensity):调整该盏方向光对全局光照GI的间接光照Indirect Light的影响。置零表示该盏光照对全局间接光不产生影响。

    • 点光源(Point Light):
      1. 移动端动态点光源支持最多4个,可以通过命令或者工程设置里设置MobileNumDynamicPointLights设置为0是可以减少shader指令数量,目前PiratesPirates Island 虚幻4海岛环境)工程设置为2。
      2. 若无动态点光源需求可设置为0提高效率。
    • 天光(Sky Light):

      stationarymoveable有一定的计算量,static类型无相关动态计算

  2. 光源移动类型:

    在每个光源的 Transform 区块中,可以看到Mobility(移动性) 的属性 在该属性有三个设置:Static(静态) 、 Stationary(固定) 和 Mobile(移动)

    • 静态(Static)

      完全静态的光源在游戏运行过程中几乎没有任何性能消耗。

    • 固定(Stationary)

      这种类型的光源,可以在运行时改变颜色和亮度,但是不能移动、旋转或修改影响范围。

    • 动态(Mobile)

      完全动态的光源,可以在运行时改变其自身的所有属性。

    静态光源(Static Lights):

    ​ 是指在运行时不能以任何方式改变或移动的光源。它们仅在光照贴图中进行计算,一旦处理完成后,不会再有进一步的性能影响。可移动对象不能喝静态光源进行交互,所以静态光源的用处是非常有限的。

    在三种不同的光源可移动性属性中,静态光源的质量中等、可变性最低、性能消耗也最少。

    固定光源(Stationary Lights):

    ​ 是保持固定位置不变的光源,但可以在其他方面进行变更,例如亮度和颜色。这是它们与静态光源的主要不同之处,静态光源无法在游戏时以任何方式进行变更。然而,应该注意的是,在运行时对亮度进行修改仅会影响直接光照。间接(反射)光照由于是通过 Lightmass 进行预计算的,所以不会改变。

    动态光源(Movable Lights):

    ​ 产生完全动态的光照和阴影,可以改变光源位置、旋转度、颜色、亮度、衰减、半径等属性,几乎光源的任何属性都可以修改。它们产生的光照不会烘焙到光照贴图中,也不会产生间接光照效果。

    关于光照通道:

    ​ 光照通道(Lighting Channels) 使动态光源仅在其光照通道发生重叠时才对物体产生影响。它主要用于动画,使用户能更自如地掌握 Actor 的照亮。当前虚幻引擎支持最多 3 种光照通道。

  3. 材质:

    • 对性能影响较大的材质属性:
      • 完全粗糙(Fully Rough)

        移动端若可满足效果需求,勾选,勾选后会减少shader指令数量提高渲染效率

        image

      • 混合模式(Blend Mode)

        一般情况使用Opaque类型,Masked类型

      • 光照模型(Shading Model)

        如无特殊需要默认使用Default Lit类型,如满足效果需求前提下使用Unlit节省消耗。

        移动端DefaultLit内部占用4个贴图采样,Unlit会少一些,PostProcess也会少一些。

        image

      • 双面(Two Sided)

        如无特殊需要默认不勾选。

      • 使用光照图(Use Lightmap Directional)

        取消勾选后消耗减小

        image

      • 高质量反射(High Quality Reflections)

        不勾选情况下,贴图采样为1次,勾选后变为3次,如无特殊需求不勾选。

        image

      • 平面反射(Planar Reflections)

        勾选后增加一次贴图采样

        image

      • 自定义UV(Custom UV)

        材质中有UV缩放计算时在移动端会出现马赛克现象,使用Cuatom UV可解决这一问题。

        image

      • 开启移动端材质状态输出

        日志窗口输出移动端相关数据,包括采样数量,采样数量存在bug只有在报错,可以作为材质复杂程度的一个依据。

      • 关于Automatically Set Usage in Editor

        默认情况下编辑器会自动设置材质用途,一般情况下勾选越多最终产生的shader会越复杂,一般情况下勾选即可。

      • 属性节点

        • Albedo(BaseColor/Diffuse)

          用于计算Diffuse,当材质设置Fully Rough时,Diffuse叠加了一个0.45倍的Specular颜色。

        • Specular

        • Metallic

          内部实现Diffuse减去了Metallic倍数的部分强度,即Metallic会降低Diffuse部分强度。

        • Roughness

        • Emissive

          颜色值直接与最终计算颜色相加,超过1.0会晕开,效果由后期实现,开启Bloom时才起效。

  4. 阴影:

    移动端支持两种动态阴影,调制阴影和级联阴影。

    • 静态阴影:
    • 调制阴影:

      支持调节阴影颜色,缺点是没有自阴影,不能和预烘焙的阴影很好的结合,角色的动态阴影和预烘焙的阴影结合是有明显的区别。(单独画物件阴影,使用的时候作为贴画,贴在投射物上)

      参考文档:使用调制阴影

    • 级联阴影CSM:

      不支持颜色调节,有自阴影可以和预烘焙阴影完美结合。

      参考文档:使用级联阴影

  5. Lightmass:

    • 相关组件:

      • Lightmass Importance Volume
      • Lightmass Character Indirect Detail Volume
    • LightMass设置参数

    image-20210407200139262

    • Num Indirect Lighting Bounces

      间接光反弹次数,设置越大效果越好,同时计算量会增大,时间消耗增大。

    • Indirect Lighting Quality

      间接光质量,设置越大效果越好,同时计算量会增大,时间消耗增大。

    • Environment Color

      环境光颜色设置。

    • Environment Intensity

      环境光强度。

    • Force No Precomputed Lighting

      强制关闭预计算光照,勾选后LightmapLighting samples将不会生成。

    • 预可见性(Precompute visibility)

      在构建中也可构建预可见性数据,在移动端可以提升渲染性能。

      参考文章UE4预计算可见性

  6. 环境反射:

    ​ 反射周围环境,功能为场景中的每个地方提供了有效的光滑反射效果。 一些重要的材质,比如金属,都依靠各个方向反射效果,这正是环境反射提供的功能。

    ​ 获取的反射并不是自动的更新,这条需要谨记。只有在加载地图、直接编辑捕获体,或者构建光照时才会更新捕获的反射。 如果在地图上编辑了一些改动,比如调整了灯光的亮度,或者移动了场景的物件,那么就需要选择捕获体并点击 Update Captures 来更新改变。

    ​ 相关数据保存在.umap文件里。

    设置环境反射分辨率(在project setting里面):

    image

    相关组件:
    • SphereReflectionCapture

      ReflectionCapture Actors确定获取点的位置。在编辑过程中反射的效果是实时更新的,但游戏运行时是静态的。 将这些获取的场景投影到简单的形状上能够得到大致的反射视差效果。每个像素在不同的Cubemap 之间混合计算得到最终值。

    • BoxReflectionCapture

      盒型的用途非常有限,通常来说它仅适合走廊门厅或者矩形的房间。这是因为只有在盒型内的像素才能看见反射, 同时盒型内的场景会被投影到这个盒型上。

      参考文档1反射环境

      参考文档2反射

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议