当前位置: 首页 > news >正文

UE4_后期处理_后期处理材质四—场景物体描边

一、效果如下图:

二、分析:

回顾复习:在后期处理材质三中,我们通过计算开启自定义深度通道物体的像素点上下左右4个像素SceneTextureCustomDepth深度之和来判断物体的外部(包含物体的边)和内部,只有内部像素他的上下左右4个像素自定义深度之和才为有限值,边和外部都为无限大(这与没有自定义深度物体用无穷大填充有关),这样我们使用if语句就能判定它与无穷大的关系,从而让边和外部为描边颜色,内部为场景颜色。我们通过自定义模具得到物体外部为0内部为模具值的蒙版,这样我们可以用lerp节点,当为0时为场景色,而边和内部为上一步if语句的结果就可以了。

那么场景物体描边怎么来确定这个边呢?

边有什么特点呢?相信理解了场景深度、自定义深度和自定义模具知识的朋友们,会发现边的场景深度是不是悬殊很大?因为2个物体有间隔,所以两个物体的场景深度悬殊大,差值是不是很大?那么我们怎么得到这个差值呢?是不是边的上边像素减去边的下边像素是有很大的值?这能不能作为边的判定条件呢?

三、所涉知识点:

SceneTextureSceneDepth(场景深度)

场景深度图代表的意思是物体离摄像机越远数值就越大,离摄像机越近数字就越小越接近黑色 。测试如下图:

四、制作步骤:

1、当前像素的场景深度减去右下方像素的场景深度

根据我们的分析,如果我们把一张场景深度图减去偏移一个像素的深度图,那么在场景深度有断层的附近将会有数值相对较大的差值出现,我们就可以用这种方法得到场景的描边勾线 。

效果制作如下:

得到效果图如下:

画面有抖动,材质的可混合位置为色调映射前就解决这个问题了。

2、分析结果出现原因

上一步,我们运用之前偏移像素点的方法,以SceneTexelSize作为偏移单位,接着与保存UV各个像素点uv坐标的 ScreenPosition进行相加,然后输出给SceneTextureSceneDepth的UV来获得临近的场景深度,最后用原本的场景深度减去获得的结果,就得到了上面的结果。我会发现不是我们想要的结果。

从不同的角度去观察墙面会得到不同的效果,如下图:

为什么会出现这种情况呢?我们来分析一下:

先用场景深度图的变化来看看:

水平方向偏移50个场景文素单位后得到的图:

发现场景深度发生了移动,如果两者相减(调整下文素大小),会得到下图:

发现上图只是对左边的边就行了描边,而右边没有描边,文素大小不调整看看效果:

 如果还是不理解我们可以用具体的数值进行解释:

这是右边,你会发现都是正的。下面看看左边的具体数值,都是负的,就是黑色的。

3、场景物体边缘判断

通过上面的操作我们得到了左边边缘的描边,要想得到右边就需要偏移方向相反,如果我们把它们加起来就得到了左右的边缘描边,如下图:

如果你对上面不理解,那么我们还是需要具体的数值来加深理解,如下图:

经过左右偏移相加之后,你会发现除了边缘为正的,其它都是为0或者为负的,也就是黑色。

同理,我们获得上下边缘的描边再加上去。

4、拓展与提高

(1)但是这个描边勾线还不是最精确的,因为当在同一平面的场景深度时,线框就没了。

为了得到更精确的描边勾线,我们可以用SceneTextureSceneNormal(场景法线),可以让细小的凹槽部分(面的朝向不同)也能有颜色上的差异,而颜色的差异也就是数值上的差异。

同样用上面的方法再制作一遍(这边直接复制修改SceneTexture的ID就好了),然后会得到一个法线版本的描边勾线(注意最后除的5000是为了观察效果的,得去掉,否则一片黑)。

效果图如下:

为了得到更全的描边效果,可以把两种方法的结果去最大值max,这样应该就不会遗漏未描的边。

(2)描边颜色该如何修改?

直接乘以一个颜色就可以了。

(3)遮罩范围内是真实的,另一边是线框的效果

就是用一个遮罩来判断使用场景纹理:postprocessinput0还是场景描边。这里需要用到一个蓝图节点spheremask,知识点如下:

SphereMask的参数

SphereMask有四个输入参数。

A:待检查的位置。

B:圆心的位置。

Radius:半径。

Hardness:硬度,0是完整过渡,100是没有过渡。

输出的是一个0~1之间的数。当A在B之外时,输出0,当A在B的位置时,输出1。A在园内时,输出0~1,具体取决于是否有硬度以及位置。

注意,A和B可以1~4维的vector。

我们可以在小白人蓝图中把小白人的位置传递给材质参数集中向量参数location,其为为B的输入,worldposition为A的输入,Radius为材质参数集中的标量参数,可以让它在3秒内,随着时间变化,让它作为Radius的输入。蓝图节点如下:

后期处理材质中:

小白人蓝图中:

材质参数集:

这样的话就有了动态的效果了。

(4)如何让角色周围是描边并添加遮罩的发光圈

首先我们需要在材质中得到角色的位置,可以通过材质参数集进行传递,步骤如下:

新建材质参数集,参数命名为locationVector:

小白人蓝图中实时给它传递值:

材质中使用:

效果如图:

(5)天空应该怎么摘出来?

天空没办法开启自定义深度通道,所以我们要尝试用SceneTextureSceneDepth(场景深度)求出,因为天空离摄像机最远,所以可以与某个比较大的数(比天空离摄像机的距离略小)进行对比的时候,只有天空的部分会比这个数大,我们就能得到天空的黑白遮罩蒙版了。测试材质连接如下:

效果如下图:

这样我们就得到了天空的蒙版,可以让天空显示原来的颜色,其它部分显示线框。

效果图如下:

五、参考教程:

https://zhuanlan.zhihu.com/p/87762783

UE4后期处理材质的一些应用(下) - 哔哩哔哩

【UE4】虚幻4使用后期处理制作的发光轮廓线效果_哔哩哔哩_bilibili

相关文章:

UE4_后期处理_后期处理材质四—场景物体描边

一、效果如下图: 二、分析: 回顾复习:在后期处理材质三中,我们通过计算开启自定义深度通道物体的像素点上下左右4个像素SceneTextureCustomDepth深度之和来判断物体的外部(包含物体的边)和内部&#xff0c…...

华为OD机试 - 推荐多样性(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...

梧桐数据库(WuTongDB):CBO(Cost-Based Optimizer)基于代价的优化器技术简介

CBO(基于代价的优化器,Cost-Based Optimizer)是现代数据库系统中最广泛使用的查询优化器之一。它通过计算执行查询时可能消耗的资源(如CPU、内存、I/O)来选择最优的执行计划,以提高查询性能。 1. CBO 的工…...

深入探索Go语言中的函数:匿名函数、指针参数与函数返回

1. Go语言中的函数 函数是任何编程语言中的核心元素,它们帮助我们将大型程序分解为更小的、易于管理的部分。在Go语言中,函数是通过 func 关键字定义的。理想的函数应当是独立的,完成单一任务。如果你发现某个函数正在执行多个任务&#xff…...

Android12_13左上角状态栏数字时间显示右移动

文章目录 问题场景解决问题 一、基础资料二、代码追踪三、解决方案布局的角度解决更改paddingStart 的默认值设置marginLeft 值 硬编码的角度解决 问题场景 1)早期一般屏幕都是方形的,但是曲面屏,比如:好多车机Android产品、魔镜…...

望繁信科技携流程智能解决方案亮相CNDS 2024新能源产业数智峰会

9月13日,CNDS 2024中国新能源产业数智峰会在北京圆满落幕。本次峰会以“走向数字新能源”为主题,汇聚了来自新能源领域的顶尖领袖、专家学者及知名企业代表,共同探讨数字化技术在新能源行业中的创新应用和发展趋势。上海望繁信科技有限公司&a…...

nginx负载均衡(轮询与权重)

文章目录 1. nginx的介绍2. nginx使用场景3. nginx在windows的下载与安装4. nginx的简单使用5. nginx进行轮询测试6. nginx进行权重测试7. 总结 1. nginx的介绍 Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也是一个开源的、…...

【计算机网络】网络通信中的端口号

文章目录 一、引入端口号二、端口号的作用三、端口号的确定 在TCP/IP协议中,传输层有两个重要的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP用于提供可靠的数据传输,而UDP则适合用于广播…...

Python 解析 JSON 数据

1、有如下 JSON 数据,存放在 data.json 文件: [{"id":1, "name": "小王", "gender": "male", "score": 96.8}, {"id":2, "name": "小婷", "gender&qu…...

利用LlamaIndex构建ARG本地知识库

文章目录 1. 环境准备2. 启用诊断日志3. 配置本地模型4. 配置本地向量模型5. LlamaIndex全局配置6. 创建 PGVectorStore7. 从数据库加载数据8. 文本分割器: SpacyTextSplitter9. 配置管道10. 创建向量存储索引11 .指定响应模式,以及启用流式响应 在现代的人工智能应…...

PCM的缺点

PCM的主要缺点包括需要较大的‌数据传输带宽和‌存储空间,导致无法实现‌高压缩比,相对较低的‌数据压缩效率。‌‌ PCM(脉冲编码调制)作为一种无损编码技术,虽然能够保留原始信号的完整性,适用于需要高保…...

【C语言】(指针系列四)回调函数+qsort函数

一、回调函数 回调函数就是通过函数指针调用的函数 如果你把函数的指针作为参数传递给另外一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数并不是一个单一的函数实现的,而是在某种情况下,编…...

全面理解tensor编程中矩阵的行和列

经常会在编程中遇到理解矩阵行和列的事情。 1、要明确无论这个张量有多少维度,它的矩阵乘法都只能作用于最后两个维度。 例如: import torcha torch.rand([64, 32, 3, 4]) b torch.rand([64, 32, 3, 4])c torch.matmul(a, b.transpose(2, 3)) # 交…...

【Kubernetes】常见面试题汇总(十)

目录 29.简述 Kubernetes 自动扩容机制? 30.简述 Kubernetes Service 类型? 31.简述 Kubernetes Service 分发后端的策略? 32.简述 Kubernetes Headless Service ? 29.简述 Kubernetes 自动扩容机制? (…...

CSS —— 界面布局

flexbox - 弹性盒子布局(弹性布局) 一维方向,横纵向排列。 采用flex布局的元素,称为 Flex 容器(flex container),简称"容器" flex-direction 用于设置主轴方向;子元素默…...

SpringBoot万级并发-jemeter-Address already in use: connect

一、场景 用Jmeter压力单测接口的时候,发现报 Response code:Non HTTP response code: java.net.BindException Response message:Non HTTP response message: Address already in use: connect 然后我这边是wondows的电脑操作压测的,操作系统win10&…...

P1228 地毯填补问题

![](地毯填补问题 - 洛谷) #include<bits/stdc.h> using namespace std; #define qw dfs(zxl-1,zyl-1,zx,zy,l); #define we dfs(zxl-1,zyl,zx,zyl,l); #define er dfs(zxl,zyl-1,zxl,zy,l); #define rt dfs(zxl,zyl,zxl,zyl,l);void dfs(int x,int y,int zx,int zy,int…...

【计算机网络】UDP TCP介绍

UDP & TCP介绍 UDP报文格式报文内容介绍端口号报文长度校验和载荷 TCP报文格式初步了解TCP机制确认应答超时重传连接管理滑动窗口流量控制拥塞控制紧急传输数据推送延时应答捎带应答面向字节流异常处理心跳机制 UDP 和 TCP 的区别 UDP 报文格式 对于网络协议, 本质上就是…...

JDBC初相识

文章目录 JDBC的由来JDBC的好处 JDBC核心API的介绍JDBC会用到的包JDBC四个核心对象JDBC访问数据库的步骤 客户端操作MySQL数据库的方式 使用第三方客户端来访问MySQL&#xff1a;SQLyog、Navicat 使用MySQL自带的命令行方式 通过Java来访问MySQL数据库&#xff0c;今天要学习…...

Go语言现代web开发07 map字典

Maps are complex data types used to store key-value pairs. Each key can appear only once on the map and can be used to find the value paired with that key. The default value for the map is nil. A nil map has no keys and keys cannot be added. 映射是用于存储…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...