材质类和材质实例类
2024年1月7日 2024年1月11日
为静态网格体应用材质,使其具有图案和纹理
使用基础颜色
材质类以M_打头
材质实例类以MI_打头,未遵守该约定
修改材质参数后,需要手动保存
材质
虚幻引擎中的一种资产,负责视觉部分,如静态网格物体 static mesh
,骨骼网格物体 skeletal mesh
,粒子系统 particle system
,以及其他物体的外观
更确切地说,材质是一种着色器,即一个微型子例程,可以在GPU上运行并计算场景中像素点的颜色和位置
材质实例
材质实例类派生自材质类
材质类可以有多个派生的材质实例类, 针对材质参数, 给出不同值
创建材质类
在内容浏览器创建材质类
M_Color
- 创建文件夹
Content/Material
- 右键 >(创建基础资产)材质
在虚幻编辑器中打开材质类
双击材质类,在材质编辑器中查看材质
材质编辑器: 专门用来编辑材质
为材质设置颜色
BaseColor
-
使用
Constant4Vector
作为输入 -
转换为参数,命名为
Color
为材质设置金属度
Metallic
-
使用
Constant
作为输入 -
为0,不具备金属度
-
金属度效果图
创建材质实例类
-
内容浏览器选中材质类, 右键 >
Create Material Intance
, 命名为M_Color_Inst
-
双击材质实例类,在材质编辑器中打开
-
如果Color没有转换为参数,材质实例类不能修改Color值
-
-
创建多个材质实例类,Color值不同
为静态网格体应用材质
方法一: 将材质拖放到视口中的对象上
方法二: 在内容浏览器选中材质, 在细节面板应用
- 在内容浏览器中选中材质
- 在世界大纲中选中对象
- 在细节面板中为静态网格体应用该材质
方法三: 在细节面板设置材质
- 在世界大纲中选中对象
- 在下拉框选中要应用材质
创建基于C++类的蓝图类
可以在虚幻编辑器中创建蓝图类,使其派生自C++类
可以在虚幻编辑器中编辑蓝图类,设置数据成员初始值及其他
基于C++类的蓝图类命名以BP_打头
创建蓝图类
- 创建文件夹
Content/BlueprintClasses
- 在内容浏览器右键, 选择
Create Blueprint class based on SimpleGeometry
- 名字以BP_开头
在虚幻编辑器中打开蓝图类
双击蓝图类,在蓝图编辑器中查看蓝图类
创建多个蓝图类,使StaticMesh绑定不同模型,并为静态网格体应用不同材质实例类
在代码中设置材质对象的参数
包含头文件
SimpleGeometry.cpp
1#include "Materials/MaterialInstanceDynamic.h"
设置材质参数
已为正方体绑定材质M_Color,获取指向对应材质对象的指针
只有一个材质,索引为0
- | |
---|---|
UStaticMeshComponent::CreateAndSetMaterialInstanceDynamic | 获取指向材质对象的指针 |
UMaterialInstanceDynamic::SetVectorParameterValue | 设置材质对象参数 |
添加函数成员, 在BeginPlay中调用
SimpleGeometry.cpp
private
1void ASimpleGeometry::SetMaterialParameter() 2{ 3 if (!StaticMesh) return; 4 UMaterialInstanceDynamic *Material = StaticMesh->CreateAndSetMaterialInstanceDynamic(0); 5 if(Material) 6 { 7 Material->SetVectorParameterValue("Color", FLinearColor::MakeRandomColor()); 8 } 9}