Unreal Engine4(虚幻4)学习心得-Ambient Cubemap 环境立方体贴图

来源:互联网 发布:.net在线考试系统源码 编辑:程序博客网 时间:2024/04/29 15:17

Unreal Engine4(虚幻4)学习心得-Ambient Cubemap 环境立方体贴图

创建项目

如何创建新的项目在这里就不做过多说明了,打开UE4 Editor,就可以选择是创建blueprint项目,还是C++项目。

  • blueprint蓝图项目
    blueprint蓝图项目,使用图形化编程方式,供非程序员可以不通过代码,就可以做出一个不错的UE4项目,可以用作demo,甚至是上线项目使用。
  • C++项目
    C++项目,也就是通过代码来完成一个项目的开发。不过其实说白了,蓝图中使用到的函数、变量,都是底层C++写好之后,选择性的暴漏给蓝图的。

创建了项目之后,从Editor左侧将一些static mesh、light之类的拖到关卡编辑器中,点击播放,也就可以看到场景的效果了。


Ambient Cubemap 环境立方体贴图

  • 用处
    在标准光照模型(Blinn-Phong模型)中,进入摄像机的光线分为4种,自发光、高光反射、漫反射、环境光。其中环境光适用于描述物体所收到的间接光照的。而Ambient Cubemap用于高质量光照环境的立方体贴图。
  • 实现方式
    其实就是对物体的六个方向拍照,得到一个cubemap,然后根据不同的光泽度,生成不同模糊程度的图片保存在不同mipmap中,然后根据物体的粗糙度、法线等因素,在shader中针对cubemap编写算法,然后将计算出来的结果,参与最终颜色的生成上。
  • 注意事项
    由于环境光并非一般的方向光,可以认为它的光照来自四面八方。所以不能对其使用shadow map,而只能使用SSAO,建议与带阴影的动态光照产生的直接光照组合使用。
  • UE4中的使用方法
    很多地方可以使用Ambient Cubemap,这里只说一种使用方式:在后处理中对全场景使用ambient cubemap:
    1. 首先在关卡中拖进一个Post Process Volume,并对其Unbound属性的checkbox进行勾选,目的是是的这个后处理将影响整个世界
      1. 如果不将Post Process Volume与整个世界关联,也可以不勾选其Unbound选项,而是调整其blend Radius即可
    2. 在Post Process Volume的Settings的Ambient Cubemap属性中,赋给其一个Cubemap Texture(),设置其Intensity,用于影响其光的强度,设置Tint用于影响颜色。
      1. 这里赋予的Cubemap就是我们刚才一直说的ambient cubemap,这里用的是预先准备好的cubemap,其实也可以在游戏中生成cubemap,但是会比较耗费性能
      2. Intensity和Tint这俩属性与原生的Ambient Cubemap算法无关,只是UE4给这个算法添加的两个属性,用于,比如我们准备了一个场景白天时候的Ambient Cubemap,然后可以通过修改这个Intensity和Tint,然后不修改Cubemap,就可以获取到这个场景晚上的Cubemap了。
    3. 设置世界中物体的材质,将其金属度设置为1,这个值是用于blend直接光和cubemap的,值越高,cubemap的比重越大;将其粗糙度设置为0,这样将使用清晰的Cubemap mipmap。
      1. 在这里还可以设置法线,但是一般使用默认法线就好,如果设置其他法线可能会造成扭曲的效果
      2. 这里还能获取到上一步设置的Ambient Cubemap Intensity和Tint,用于设计更复杂的算法
  • UE4源码中相关的类
    FCubemapShaderParameters:
    • 成员变量
      1. AmbientCubemapColor,由于AmbiendCubemap的实际使用方法还是将Cubemap中的RGBA值采样出来,参与到最终颜色的计算,所以通过设置这个参数,可以设置使用Cubemap的哪几个通道,各个通道采样的比例、颜色偏移等
      2. AmbiendCubemapMipAdjust,由于需要根据绘制物体的粗糙度等因素,计算出来使用cubemap的哪层mipmap,而设置这个参数,可以对此进行修正
      3. AmbientCubemap和AmbientCubemapSampler用于指定Ambient Cubemap指的Cubemap texture。
    • 成员函数
      1. 函数Bind,用于将4个成员变量与shader中对应的变量进行bind
      2. 函数SetParameters/SetParametersTemplate通过给4个成员变量赋值进而给shader中的对应变量赋值
    • 使用位置
      1. PostProcessAmbient类,正如刚才举到的例子,后处理中可以使用Ambient Cubemap,所以在这个后处理类中使用到了该类。
      2. FInjectAmbientCubemapPS类。
0 0