Unreal Engine4(虚幻4)学习心得-获取UE4
按照国际惯例自我介绍,多年GPU驱动工作经验,主要研究方向为3D图形学OpenGL,曾效力于Marvell手机部门和Intel开源技术组,目前任职于完美世界3D引擎组,热衷于对开源游戏引擎的研究。2013年开始阅读Cocos2d-x源码,曾录制一套Cocos2d-x教程,获得Cocos引擎中文官网举办的原创Cocos教程二等奖,目前该教程已转移到极客学院,从去年开始使用Unreal Engine4,并阅读其源码,将学习心得整理至此,借此与大家进行交流。个人网站:图形学人
不同人眼中的Unreal Engine
制作一个完整的游戏,需要许多部门的通力合作,比如工程师(引擎工程师、客户端工程师、服务器端工程师)、艺术家(原画、角色、动作、场景、特效、光照、UI)、策划等。不同人使用UE4的侧重点不同:
- 关卡设计师眼中的UE4
- 艺术家眼中的UE4
- 程序员眼中的UE4
- Unity转UE4
UE4下载地址
- Git下载地址下载前需绑定账号
- Zip包下载不建议使用这种方式
- 如果开发PS4等平台产品,还需要和UE4签订协议,拿到对应的代码
- 无代码版编辑器下载无需编译,可直接使用
UE4的编辑器
- 关卡编辑器
- 材质编辑器
- 蓝图编辑器
- 行为树编辑器
- 角色编辑器
- 特效编辑器
- UI编辑器
- 视频编辑器
- 声音编辑器
- Paper2D编辑器
- Ragdoll编辑器
- 静态物件编辑器
- 媒体编辑器
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:
- 首先在关卡中拖进一个Post Process Volume,并对其Unbound属性的checkbox进行勾选,目的是是的这个后处理将影响整个世界
- 如果不将Post Process Volume与整个世界关联,也可以不勾选其Unbound选项,而是调整其blend Radius即可
- 在Post Process Volume的Settings的Ambient Cubemap属性中,赋给其一个Cubemap Texture(),设置其Intensity,用于影响其光的强度,设置Tint用于影响颜色。
- 这里赋予的Cubemap就是我们刚才一直说的ambient cubemap,这里用的是预先准备好的cubemap,其实也可以在游戏中生成cubemap,但是会比较耗费性能
- Intensity和Tint这俩属性与原生的Ambient Cubemap算法无关,只是UE4给这个算法添加的两个属性,用于,比如我们准备了一个场景白天时候的Ambient Cubemap,然后可以通过修改这个Intensity和Tint,然后不修改Cubemap,就可以获取到这个场景晚上的Cubemap了。
- 设置世界中物体的材质,将其金属度设置为1,这个值是用于blend直接光和cubemap的,值越高,cubemap的比重越大;将其粗糙度设置为0,这样将使用清晰的Cubemap mipmap。
- 在这里还可以设置法线,但是一般使用默认法线就好,如果设置其他法线可能会造成扭曲的效果
- 这里还能获取到上一步设置的Ambient Cubemap Intensity和Tint,用于设计更复杂的算法
- 首先在关卡中拖进一个Post Process Volume,并对其Unbound属性的checkbox进行勾选,目的是是的这个后处理将影响整个世界
- UE4源码中相关的类FCubemapShaderParameters:
- 成员变量
- AmbientCubemapColor,由于AmbiendCubemap的实际使用方法还是将Cubemap中的RGBA值采样出来,参与到最终颜色的计算,所以通过设置这个参数,可以设置使用Cubemap的哪几个通道,各个通道采样的比例、颜色偏移等
- AmbiendCubemapMipAdjust,由于需要根据绘制物体的粗糙度等因素,计算出来使用cubemap的哪层mipmap,而设置这个参数,可以对此进行修正
- AmbientCubemap和AmbientCubemapSampler用于指定Ambient Cubemap指的Cubemap texture。
- 成员函数
- 函数Bind,用于将4个成员变量与shader中对应的变量进行bind
- 函数SetParameters/SetParametersTemplate通过给4个成员变量赋值进而给shader中的对应变量赋值
- 使用位置
- PostProcessAmbient类,正如刚才举到的例子,后处理中可以使用Ambient Cubemap,所以在这个后处理类中使用到了该类。
- FInjectAmbientCubemapPS类。
- 成员变量
Unreal Engine4(虚幻4)学习心得-材质
材质
制作材质的过程其实就相当于在写shader,只是UE4制作材质使用的是可视化方式在写shader。下面将介绍一些材质属性:
- Blend Mode混合模式 用于决定材质颜色如何和背景颜色混合。
- Opaque不透明
- Masked蒙版,蒙版材质可以利用蒙版贴图,将一些区域设置为可见或者不可见,比如铁丝网就可以使用蒙版
- Translucent半透明,可以以某种形式允许光线透过,比如玻璃
- Additive叠加,有透明度,用于增加颜色信息,比如各种粒子效果
- Modulate调制,将材质颜色乘以背景颜色,适合做贴花效果
- Lighting Mode光照模式 当半透明/透明的时候使用。
- Volumetric NonDirectional,是最节省的光照模式,只使用漫反射颜色,不用考虑材质法线。严格的说,只对动态光照的物体有效。
- Volumetric Directional,考虑材质法线。
- Volumetric PreVertex NonDirectional,同Volumetric NonDirectional,但是光照只在顶点计算,这样会减轻PS的消耗。
- Volumetric PreVertex Directional,同Volumetric Directional,但是光照只在顶点计算,这样会减轻PS的消耗。
- Base Color常规色 通常会通过PS制作一些贴图,作为基本色。所有的贴图都可以通过UV设置其平铺状态
- Emissive自发光 能让材质自己发光,可以用于制作材质外边缘的光晕效果。
- Specular高光 用于控制高光的颜色。光源照射到物体然后反射到人的眼睛里时,物体上最亮的那个点就是高光。高光控制着光线的反射,以展现一种光泽的效果。
- Opacity不透明 用于控制物体的透明度。
- OpacityMask不透明蒙版 用于和混合模式中的Masked蒙版模式组合使用,包含了可见还是不可见信息蒙版贴图就在这里连接。
- Normal法线 法线贴图是材质具有凹凸效果的原因。除非制作的是玻璃或者金属球之类的非常光滑的物体,否则一定要用法线。可以再加上一张细节贴图,与法线贴图相加,一起当做法线贴图。但是法线贴图中的凹凸信息其实是存在于RG通道中,B通道好比基准线,也就是被RG弄皱的底平面,因此如果想再加上一张细节贴图的话,蓝色通道千万不能动。法线贴图通过RGB的信息,以像素为单位来指定表面角度。
- WorldPositionOffset世界位置偏移量 只有要跟踪某个材质的世界位置,并且要沿某个方向移动它,这个属性才会被用到。
- 材质的其他属性(UDK)
- Diffuse漫反射 提供不透明颜色,好比常规颜色。通常会通过PS制作一些贴图(包含alpha通道,法线贴图),作为漫反射的基本色。
- DiffusePower漫反射次幂 描述颜色随光照信息的流失,从饱和向阴暗渐变的速度。
- SpecularPower高光次幂 用来模拟光滑度。
- Distortion扭曲 它能使一个对象表面的材质发生扭曲。使用方式比如:把混合模式设置为Additive叠加,然后设置无光照,然后把法线贴图连接到扭曲上(扭曲接收的就是法线信息,它要利用RGB通道来决定把像素点移到多远),就能看到热浪的效果,类似折射。
- TransmissionColor透射色 设置一个颜色,这样穿过物体表面的光线,好像会穿透物体扩散开来,呈现出次表面散射(3S)的样子(透射蒙版要设置为1才能看到)。比如设计角色的耳朵的时候,将耳朵部分的透射蒙版设置为1,然后将投射色设置为深红,那么当光线射到耳朵背面的时候,耳朵看上去就有次表面散射的效果。(这里只是模拟S3,而非真正的S3,但是很逼真,移动光源就可以看到半透明的效果)
- TransmissionMask透射蒙版 0和1组成的蒙版贴图用于决定哪里需要透射。透射色和透射蒙版主要用于蜡和人皮肤之类的地方
- BumpOffset凹凸偏移 凹凸偏移需要借用高度贴图。高度贴图可以使用法线贴图的alpha作为其高度值,然后将高度贴图作为基本色和法线的UV即可。
评论