UE4学习总结(1)蓝图基础
蓝图类的基础配置
蓝图类创建
蓝图类创建:调用构造函数Construction Script。
如下图,本例中,构造函数内部读取初、末位置数据并存入自定义的结构体以供取用。
PS:修改结构体成员的方法是调用”Set Scalar Parameter Value”函数,如下图所示,collection,Parameter Name,Parameter Value分别是结构体名称、成员名称、成员的修改值。
静态网格体
只需要把静态网格体拖拽到蓝图里面的“static mesh”就可以了(add component->static mesh)。之后蓝图内的操作只需要输入参数更改static meshd的位置、方位,决定是否渲染就行了。这让控制模型在关卡中的运动变得极为简单。
编程部分:事件+函数
事件图表中,Event Begin Play相对于Main函数,只能有一个,是程序的入口和初始化。Event Tick是每变化一帧就调用一次的事件,很像Verilog里面的[email protected]( posedge clk),进行与画面变化同步的控制。事件控制其后的函数调用。
用事件进行程序设计的好处是,可以方便地进行中断操作。可以随意设置接口,对于强烈依赖于外部命令(如游戏)的程序开发很便捷。
如图,红色模块是各个事件。
实例化静态网格
任何虚拟仿真的程序,无非分为内部算法和可视化模块(渲染)。当内部程序运行时,需要通过可视化模块展现在显示屏中。每次在场景中添加任何事物时,都相当于图形硬件的额外绘制调用。如果此物是某一级别的静态网格,则它会应用于该网格的每个副本。如果在某一级别上反复出现几次相同的静态网格,那么进行优化的一种方法是将该静态网格实例化,以减少绘制调用的数量。1
下图为每次更新含600个人的方阵时使用实例化静态网格渲染的蓝图。
由于每一帧都会有600个人物的位置变化,如果逐一渲染,则浪费性能。因此在循环中先将位置变化结果存入实例化静态网格,循环结束时,所有事物(600个人)都看作一个实例,此时只要渲染一个事物,其它事物全都会被渲染。因此实例化静态网格使效率提升几个数量级。
动态网格体
本例中使用材质实例使原本静止的人物模型运动起来。一个材质实例是大小为M*N,其中M理解为各个像素点,N是帧数,因此第i行表征了第i帧各个位置的运动情况,第1~N帧共同组成了整个运动图像。材质实例利用了面向对象语言中的继承关系。从一个材质父类中继承的材质实例包含了父类材质的性质,并且可以应用于静态网格体中,本例中使得静态网格体运动起来。
材质实例的操作很丰富,目前尝试过的有调整帧数从而改变运动快慢、添加随机数使得运动状态不定。通过接口配置材质实例很方便,这也体现了UE4模块化的特点。
-
https://software.intel.com/content/www/cn/zh/develop/articles/unreal-engine-4-optimization-tutorial-part-2.html ↩︎