在UE4中创建高斯模糊后期材质

本篇教程来自国外一位大佬的文章,在这里我会总结下制作过程,有些不重要的地方可能会直接跳过。原文链接:

https://www.raywenderlich.com/57-unreal-engine-4-custom-shaders-tutorial

 

 

关于如何在custom node中引用.usf文件,还是移步这里:

https://blog.youkuaiyun.com/weixin_43369654/article/details/92607776

准备工作

首先在工程文件根目录创建一个Shaders的文件夹,打开shaders文件夹,创建一个名为Gaussian.usf的文件。

unreal engine shadersunreal engine shaders

unreal engine shaders

新建一个材质球,并把细节面板的Material Domain设置成postprocess。按照如图的方式连接。Round(四舍五入)保证半径总是一个整数。Gaussian Blur(高斯模糊)就是我们本次的重点了,这是一个custom node:

创建好custom node后,看细节面板:

Code:写shader代码的地方,UE4只支持HLSL

Description:命名你的自定义节点

Inputs:<

<think>嗯,用户问的是UE5中背景模糊效果导致文本也被模糊的原因和解决方法。首先,我需要回忆一下UE5中的渲染流程,特别是UI和后期处理的效果如何相互作用。背景模糊通常属于后期处理效果,比如使用Post ProcessVolume中的景深或者高斯模糊。而UI元素,比如文本,一般是渲染在屏幕最上层的,按理说不应该被后期处理影响。但用户遇到了问题,说明可能有哪里配置不对。可能的原因有几个。首先,渲染顺序的问题。UE的默认渲染流程中,后期处理效果是在整个场景渲染之后应用的,包括UI。如果UI元素被错误地归类到场景的渲染层中,就会被模糊处理。比如,如果文本控件被放在3D场景中的某个Actor上,而不是作为UMG的屏幕空间UI,那么它可能会被后期处理影响。这时候需要检查UI的渲染层级设置,确保它是在屏幕空间而不是世界空间。其次,材质或控件的混合模式设置不正确。如果文本控件使用的材质有自定义的混合模式,可能会绕过默认的UI渲染路径,导致被后期处理捕获。这时候需要检查UMG中的控件材质,确保它们使用的是适合UI的混合模式,比如Translucent或者UI。另外,景深或模糊效果的半径设置过大也可能导致问题。即使UI在正确的层级,如果模糊半径覆盖了整个屏幕,可能会意外影响到UI元素。调整模糊半径到合适的范围,或者使用遮罩层限制模糊区域,可能有助于解决问题。 还有一种可能是UI控件的渲染目标设置错误。如果UI被渲染到场景的RenderTarget而不是屏幕的BackBuffer,后期处理效果会应用到这些Render Target上,导致模糊。需要确认UMG的渲染设置是否正确,是否设置为屏幕空间而非其他空间。 解决方案方面,首先应该检查UI的渲染层级和空间设置。确保文本控件是在屏幕空间的UMG中,而不是世界空间。然后调整后期处理体积的优先级,可能降低其影响范围,或者使用排除层将UI层从后期处理中排除。此外,可以尝试使用自定义深度模板值来区分UI元素和场景元素,在后期处理材质中通过模板测试来跳过UI部分。可能还需要参考UE5的官方文档,比如UMG最佳实践和后期处理设置,看看有没有相关的建议。比如引用[4]提到UMG的最佳实践,可能涉及如何正确设置UI控件以避免渲染问题。引用[2]提到的自定义深度模板值,可以用来标记UI元素,然后在后期处理中根据模板值排除它们,这样就不会被模糊影响了。 另外,用户可能需要调整模糊效果的实现方式。比如使用单独的后期处理体积,只影响特定区域,而不是整个屏幕。或者将背景模糊效果应用到一个中间渲染目标,然后将其与UI层合成,确保UI文本保持清晰。总结起来,关键点在于渲染顺序、层级设置、混合模式、后期处理排除以及可能的模板测试。需要一步步排查这些可能性,找到具体导致问题的原因,再针对性地调整设置。</think>在UE5中,背景模糊效果导致文本被模糊的常见原因及解决方案如下: ### 一、核心原因分析 1. **渲染层级冲突** UE5的后期处理效果(如高斯模糊)默认作用于整个场景层,包括$ZOrder$值未正确设置的UI元素。若文本控件未声明为$Screen Space$层级,可能被误判为场景元素[^4]。 2. **材质混合模式错误** 使用$Translucent Material$或$Alpha Compositing$的文本控件,可能因材质设置错误导致被后期处理捕获。例如混合模式未设置为$UI$专用通道[^2]。 3. **景深范围覆盖** 当背景模糊的$Focal Distance$设置过大时,可能覆盖到UI层。例如$Gaussian Blur Radius$超过屏幕尺寸的50%会导致边缘模糊扩散[^1]。 ### 二、解决方案步骤 #### 方法1:调整UI渲染层级 ```cpp // 在UMG控件蓝图中设置 TextBlock->SetRenderTransformPivot(FVector2D(0.5,0.5)); TextBlock->SetClipping(EWidgetClipping::ClipToBounds); TextBlock->SetZOrder(999); // 确保最高层级 ``` 通过$SetZOrder$强制文本渲染在后期处理通道之后,需配合项目设置中开启$Render UMG After Post-Processing$选项[^4]。 #### 方法2:使用自定义深度模板 1. 为文本控件添加$Custom Depth Stencil Value$: ```python # 在材质编辑器中 SetCustomDepthStencilValue(255) # 标记为特殊值 ``` 2. 修改后期处理材质,添加深度测试条件: $$ \text{if}(StencilValue == 255) \rightarrow \text{DiscardPixel} $$ 此方法可精准排除指定UI元素[^2]。 #### 方法3:分离渲染通道 1. 创建独立的$Render Target$用于背景模糊 2. 使用$Scene Capture Component$捕获背景层 3. 通过$Material Function$将模糊后的背景与UI层合成: $$ FinalColor = lerp(BlurredBG, UIText, UITextAlpha) $$ 该方法消耗更多性能,但能彻底隔离效果[^1]。 ### 三、验证流程 1. 在编辑器启用$Visualize Buffer>Post Process Input0$查看模糊作用域 2. 使用$Stat GPU/Stat SceneRendering`命令分析渲染管线 3. 通过$Systrace工具`监控UI元素的绘制时序[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值