在UE中使用Stencil功能

Stencil是指利用深度buffer的后8位数据进行bit mask信息的绘制,从而制作类似角色mask遮罩等效果,下面就在UE中进行制作。

1.首先在Project Settings项目设置中开启stencil,搜索stencil关键字在Custom Depth Stencil Pass选项中设置为Enabled with Stencil:
在这里插入图片描述

2.找一个用来测试Stencil效果的StaticMesh,搜索关键字custom,找到参数Renedr CustomDepth Pass勾选,并设置Stencil通道为1:
在这里插入图片描述
3.接下来去调试视图中看看效果,选择Buffer Visualization-Custom Stencil,查看自定义Stencil数据调试视图:
在这里插入图片描述
4.可以看见设置给StaticMesh对象的Stencil生效了:
在这里插入图片描述
5.接下来要制作一个后处理特效,去应用Stencil信息从而制作效果。新建一个材质球,将材质类型设置为PostProcess后处理材质:
在这里插入图片描述
6.创建节点SceneTexture拿到场景材质信息,在节点的设置面板Scene Texture Id中通过PostProcessInput0拿到画面内容,通过CustomStencil拿到Stencil信息,面板中选择对应下拉选项即可:
在这里插入图片描述
7.回到场景中,找到PostProcessVolume,配置自定义后处理,添加PPSMat后处理材质球:
在这里插入图片描述
8.应用后,最终效果如下,Stencil信息已生效:
在这里插入图片描述


Tips:一般来讲Stencil是0-255的数值范围,后处理材质也能读到大于1的Stencil信息,所以做判断时可以用Subtract配合Clamp做插值即可:
在这里插入图片描述
本文参考自UE官方教程:https://www.bilibili.com/video/BV1hA411n7vZ

### 创建带有高亮效果的自定义粒子系统 在 Unreal Engine 5 中,为了创建一个带高亮效果的自定义粒子系统并利用 C++ 进行开发,可以遵循以下结构化的方法来构建这个特性。 #### 定义基础类与继承关系 考虑到灵活性和可扩展性的需求,建议先通过 C++ 编写一个基类用于封装通用逻辑以及核心功能。这允许后续基于此基类创建蓝图子类以便于快速调整特定行为而无需修改底层代码[^1]: ```cpp // MyParticleEmitter.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyParticleEmitter.generated.h" UCLASS() class MYPROJECT_API AMyParticleEmitter : public AActor { GENERATED_BODY() public: AMyParticleEmitter(); protected: virtual void BeginPlay() override; private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true")) class UParticleSystemComponent* ParticleSystem; }; ``` ```cpp // MyParticleEmitter.cpp #include "MyParticleEmitter.h" #include "Kismet/GameplayStatics.h" #include "Particles/ParticleSystemComponent.h" AMyParticleEmitter::AMyParticleEmitter() { PrimaryActorTick.bCanEverTick = true; ParticleSystem = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("ParticleSystem")); } void AMyParticleEmitter::BeginPlay() { Super::BeginPlay(); } ``` 这段代码展示了如何设置基本框架——即声明了一个名为 `AMyParticleEmitter` 的新 Actor 类型,并在其内部初始化了一个粒子系统的组件实例。 #### 添加高亮显示支持 为了让对象能够响应交互事件从而触发视觉上的变化(比如当鼠标悬停时),可以通过材质编辑器配置特殊渲染路径以启用自定义深度通道处理,进而达到突出显示的效果[^2]。具体操作如下所示: - 在项目资源管理界面找到目标静态网格体或动态模型; - 修改其绘制属性选项卡下的“Custom Depth Stencil Value”,赋予独一无二数值标识该物体; - 启用“Render CustomDepth Pass”。 上述步骤确保了即使场景中有多个实体共存也不会相互干扰各自独立的表现形式。 #### 整合粒子发射机制 最后一步涉及集成预先准备好的粒子模板到当前工程里去。假设已经拥有了合适的 `.uasset` 文件,则只需将其拖拽至相应位置即可完成导入过程;之后再回到之前建立起来的角色蓝图中关联好对应的 PSysComp 属性字段便大功告成啦! 对于那些希望通过编程方式加载外部素材包的情况来说,也可以借助引擎 API 来达成目的,例如调用 `ConstructorHelpers::FObjectFinder<>` 或者直接读取文件流等等[^3]。 ```cpp // 假设 P_Gideon_Primary_Projectile 是已有的粒子系统资产名称 static ConstructorHelpers::FObjectFinder<UParticleSystem> ParticleAsset(TEXT("/Path/To/P_Gideon_Primary_Projectile")); if (ParticleAsset.Succeeded()) { ParticleSystem->SetTemplate(ParticleAsset.Object); } else { UE_LOG(LogTemp, Warning, TEXT("Failed to load particle system asset.")); } ``` 以上就是关于怎样运用 C++ 结合 Blueprint 构建具备发光特性的个性化特效体系的大致流程介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值