简介
本插件通过UnrealEngine的MeshDraw框架实现类似Unity的多Pass效果,无需后处理即可实现BackFace描边、剖切效果。并且可以让一个部位同时渲染Unlit与Lit光照模式的Material。
- 商城地址:https://www.unrealengine.com/marketplace/zh-CN/product/multidraw
- 轮廓组件演示视频:
- Email:378100977@qq.com
- Discord:https://discord.gg/y4fWqYsf4U
注意:因为UE5.4修改了UStaticMeshComponent的虚函数GetUsedMaterials的标记为final,所以导致插件不能正常运行。为了避免崩溃问题,所以停用了OutlineStaticMeshComponent、MultiDrawStaticMeshComponent的功能。可使用再添加一个StaticMeshComponent并赋予Outline材质的方法临时解决。
MultiDraw5.0案例项目
MultiDraw5.1~5.3案例项目
MultiDraw5.4案例项目
MultiDraw5.5案例项目
使用方法:下载在Plugins文件中放入MultiDraw,即可运行。
注意:本项目只有5.0及以上版本才可以打开。
更新日志
2024.5.1
- 更新UE5.4版本,因为引擎源码发生改变为了避免崩溃,停用了OutlineStaticMeshComponent、MultiDrawStaticMeshComponent的功能。
2023.8.1
- 增加ProceduralMeshComponent与DynamicMeshComponent的MultiDraw版本.
2023.7.28
- 更新CurveWidthControlOutline方案。
- 增加ProceduralMeshComponent与DynamicMeshComponent的Outline版本。
2023.3.29
- 更新MultiDraw通过指定材质ID来控制绘制的功能。
2022.12.19
- 更新UE5.1版本。
- 支持OverlayMaterial。
- Outline与MultiDraw现在支持Translucent材质。
2022.10.30
- 更新实时更换材质功能。
快速入门
描边案例:
- 新建一个Actor蓝图类并挂载OutlineComponent。
- 设置模型以及材质。
- 创建Outline材质并且放入OutlinePassMaterialSet中。
- 将这个Actor放入场景中。
MultiPass演示:
- 新建一个Actor蓝图类并挂载MultiDrawComponent。
- 设置模型以及材质。
- 根据需要将需要绘制的材质与参数放入PerPassDrawSettingses中。
- 根据需求给材质设置PixelOffset,以便让材质按照想要顺序进行渲染。
- 将这个Actor放入场景中。
剖切案例:
- 进入Simulation模式。
- 旋转Plant模型即可。
说明
OutlineComponent
组件名为OutlineSkeletalMeshComponent与OutlineStaticMeshComponent。材质为一对一模式,即Mesh中Material Element Slot Index与OutlinePassMaterialSet中的相同。如果不想绘制只需要将OutlinePassMaterialSet中对应材质设置为空即可。
选项:
- CullingMode:所有Outline材质的剔除模式。有正面剔除、背面剔除、与双面渲染3个选项。
- bCastShadow:所有Outline材质的投影模式。即是否可以投射阴影到其他物体上。
- OutlinePassMaterialSet:指定Outline材质的数组。
MultiDrawComponent
组件名为MultiDrawSkeletalMeshComponent与MultiDrawStaticMeshComponent。材质为一对多模式,即模型的每个部位都会使用所有指定的材质渲染一次。但是因为深度剔除,所以需要使用深度偏移来控制渲染排序。
选项:
- CullingMode:材质的剔除模式。有正面剔除、背面剔除、与双面渲染3个选项。
- bCastShadow:材质的投影模式。即是否可以投射阴影到其他物体上。
- bDraw:控制材质是否需要渲染。
- MaterialInterface:指定用于渲染的材质。
角色类
为了方便用户,本插件实现了替换Mesh组件的ThirdPersonChracter类:AOutlineCharacter与MultiDrawCharacter。
代码操作如下:
class AOutlineCharacter : public ACharacter
{
GENERATED_BODY()
public:
AOutlineCharacter(const FObjectInitializer& ObjectInitializer);
};
AOutlineCharacter::AOutlineCharacter(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer.SetDefaultSubobjectClass<UOutlineSkeletalMeshComponent>(ACharacter::MeshComponentName))
{}
描边材质说明
本插件提供了3种Outline材质。
- ExampleContent\Materials\Outline\M_FixedOffsetOutline:固定WorldPositionOffset的Outline材质,仅用作演示。
- ExampleContent\Materials\Outline\M_ViewFixOffsetOutline:根据摄像机距离来调整Outline宽度的材质。但在距离较近时,轮廓会变得很细。
- ExampleContent\Materials\Outline\M_PerfectionViewFixOffsetOutline:修正上面问题的材质。
- ExampleContent\Materials\Outline\M_CurveControlOutline.uasset:使用曲线控制描边宽度。
M_CurveWidthControlOutline方案比较完美,强烈推荐使用。如果对于控制效果不满意可以自行修改曲线来调整效果。
- 曲线的R通道用来控制模型与摄像机的距离对于描边宽度的影响。
- 曲线的G通道用来控制摄像机FOV对于描边宽度的影响。
组件并没有限制材质类型,所以也可以使用其他ShaderModel的材质来制作你想得到的效果。
实时更换材质功能
取得对应组件,调用函数即可。对于SkeletalMesh需要确保材质有勾选Use for SkeletalMesh 以及Use for cloth。
其他平台效果
只在编辑器里进行了测试。