UE5边缘描边材质及理论

开发过程中需要制作一个边缘描边材质的效果,顺着这个脉络搜索到了很多的能看懂和不太能看懂的资料,在这里梳理一下。

以下是查到的相关资料链接:

1、这个是在UE4工程里的制作流程,但是对于原理理论并不是非常了解:

ue4 材质描边、外发光、轮廓线_哔哩哔哩_bilibili

2、这篇是辅助整理关于材质制作的底层逻辑的理论梳理:

Unreal Engine 4 卡通轮廓线(Toon Outlines)教程 之 后期处理法(Post Process Outlines)_unreal轮廓线-优快云博客

3、这篇涉及到提到的边缘检测原理的内容

python+OpenCv笔记(十六):边缘检测原理(Sobel算子原理、Laplacian算子原理、Canny边缘检测原理)_python opencv sobel-优快云博客

4、其中涉及到一些算法的内容

1.Sobel算子原理解析_哔哩哔哩_bilibili

5、拓展补充的一些素材:

UE4后期处理材质的一些应用(上) - 哔哩哔哩 (bilibili.com)

以下内容为上面的部分内容复制粘贴过来的加上我理解和吸收的整理出来自己看的

一、边缘检测原理

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。

1、Sobel算子原理

Sobel算子是图像检测的重要算子之一,其本质是梯度运算。

例如,对于一张二维图像:

当我们将卷积核放在图像中时,有三种位置关系,如图:

卷积核和滤波器为类似的概念,关于卷积核 我的理解是相当于一个标准化的卡尺一样,去针对图像的颜色去处理,详细的可以参考链接

python+OpenCv笔记(十六):边缘检测原理(Sobel算子原理、Laplacian算子原理、Canny边缘检测原理)_python opencv sobel-优快云博客

2、Laplacian算子原理

使用的卷积核如图:

等下制作的材质描边也是使用了laplacian算子原理 将会用到这个卷积核。

二、实现方式

1、叠加描边    

在实现这个功能的算法之前,我使用的是一种简化的方案,即在蓝图里为原本的模型叠加一个mesh将新加的mesh比原来大一点、换个颜色,这样在视觉上就能呈现出描边的效果,以下是之前的操作方式:

增添mesh-设置为高光物体-附上高光材质

高光材质的制作很简单 开放出两个变量在蓝图里调用即可

问题在于:

我的需求需要在游戏开始时在蓝图里动态去获取当前这轮的模型,原本的高光材质的制作方式中模型的绑定写在了构造函数里面,如下图,构造函数的问题在于会在游戏开始前进行调用,但我每次游戏开始时调用的模型不同,因此不能用这种方式,但是如果将mymesh的模型绑定放到beginplay里的话,我需要在另一个蓝图去调用当前蓝图然后设置绑定mymesh,但是高亮材质的效果就会失效,怎么也无法显示,因此我在这里使用了另一种描边高亮材质的办法。

2、后期处理轮廓高亮材质

1)设置材质函数

这个材质函数我的理解就相当于laplacian中的卷积核

input代表移动的像素值,默认值从1开始,数值越大偏移的像素越大

使用sceneTexelSize的原因是这里如果当前的图像是放大两倍或者三倍,那么像素值可能不准确,参考的文章资料里有写,所以在这里要×SceneTexelSize

ScenePosition就是输出当前中心位置的像素点,根据卷积核后边数值要*-4

2)设置轮廓材质

刚才的input提出参数化,后面可以更改高光的宽度,然后将这个卷积核相加最后clamp一下保证在0-1里

!记得这里材质要改两个设置

此时已经可以看到轮廓了,拉一个postVolumn放到场景中,在后期处理材质添加刚才设置好的材质inst

3)问题是此时场景内全部的物体都是轮廓显示了,所以这里需要更改我们只要我们需要点击的物体进行轮廓高亮材质显示 ,继续修改材质

这里的设置是什么意思呢 参考UE4后期处理材质的一些应用(上) - 哔哩哔哩 (bilibili.com)这里的内容

我们需要设置一个蒙版 因为现在目前是全局都会轮廓显示,所以要根据场景的深度制作蒙版,这里的功能还可以用于制作遮挡物体的轮廓高亮显示:

     SceneDepth(场景深度):当前画面上的像素点和摄像机之间的距离。

       CustomDepth(自定义深度):开启物体上的自定义深度通道,获得被遮挡的物体离相机的距离。如果该位置没有物体开启自定义深度,那么得到的值则是无穷大。

       所以我们就可以根据自定义深度(绿色虚线)和场景深度(黑色虚线)的差值来判断是否有东西被挡住(如果有两个开启了自定义深度通道的物体在一条线上的话,那么获取到的CustomDepth是离摄像机更近的那个)

CustomDepth自定义深度-SceneDepth场景深度

       如果开启CustomDepth被挡住,那么CustomDepth>SceneDepth,CustomDepth-SceneDepth=有限值

       如果开启CustomDepth没被挡住,那么CustomDepth=SceneDepth

       如果没有开启CustomDepth,那么CustomDepth-SceneDepth=无穷大

还需要增加材质高亮的范围和颜色的调整

在这里设置SceneTexture代表场景内本身的压缩

好了,此时的材质已经完成了,如何开启对应模型的高亮呢

4)在蓝图里添加rendercustomdepth 也就是在材质里设置的渲染自定义深度

当鼠标点击到该物体的时候调用渲染自定义深度打开,显示高亮

5)获取当前的点击物体

功能实现,大功告成!

### 实现 Unreal Engine 中物体外发光效果的方法 在 Unreal Engine (UE) 中,可以通过材质编辑器以及后期处理来实现物体的外发光效果。以下是具体方法: #### 方法一:通过材质节点创建外发光效果 可以利用 Emissive(自发光)属性,在材质中添加渐变或模糊的效果。 1. **打开材质编辑器并调整参数** 创建一个新的材质或者修改现有的材质文件。在材质图表中找到 `Emissive Color` 节点,并将其连接到一个颜色输入节点上[^1]。 2. **应用模糊逻辑模拟光晕** 可以使用 Distance Function 或者 Radial Gradient 来制作柔和的边缘过渡效果。例如,将纹理与径向渐变相结合,从而让模型表面看起来像是向外扩散光线[^2]。 ```c++ // 示例伪代码展示如何动态计算距离函数用于发光强度调节 float4 CalculateGlowEffect(float3 worldPosition, float glowRadius){ float dist = distance(worldPosition, cameraPos); return smoothstep(glowRadius * 0.9, glowRadius, dist); } ``` 3. **启用屏幕空间反射增强真实感** 如果希望得到更高质量的结果,则可以在项目设置里开启 Screen Space Reflections 和 Bloom 功能。Bloom 是一种常见的图像后处理技术,能够自动捕捉高亮度区域并向周围扩展形成自然的辉光现象。 #### 方法二:借助后期处理体积 Post Process Volume 添加全局辉光 另一种方式是不依赖于单个对象本身,而是通过对整个场景施加统一风格化滤镜达到目的。 1. **配置PostProcessVolume组件** 插入一个 PostProcessVolume 至关卡内,并勾选其影响范围选项下的 Affects Translucent Objects 属性以便作用于半透明物件之上。 2. **定制Bloom设定值** 在细节面板下拉至 Rendering -> Lens 下方找到有关布隆的相关滑杆控件群组。适当提高 Intensity 数值可令整体画面更加明亮炫目;而 Size 参数则决定了光芒覆盖面积大小。 #### 注意事项 - 当前所描述的技术适用于静态网格体 Static Meshes 和 Skeletal Meshes 骨骼动画角色身上均可生效。 - 对性能有一定消耗,请根据目标平台优化资源占用情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值