找手工活外发加工去哪个平台,seo代做,网站vi设计公司,html代码编辑首先这里是绑定.usf文件的路径#xff0c;并声明是用声明着色器 上面就是对应的usf文件路径#xff0c;在第一张图进行链接
Shader Frequency 的作用
Shader Frequency 是 Unreal Engine 中用于描述着色器类型和其执行阶段的分类。常见的 Shader Frequency 包括#xff1a…
首先这里是绑定.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_ComputeGPU计算、物理模拟、图像处理可变支持Compute ShaderSF_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.AllocParametersFGenerateNoiseCSShader::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);TShaderMapRefFGenerateNoiseCSShader 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;
} 首先第一行函数声明 参数 GraphBuilderRDG 的构建器管理渲染资源的生命周期和依赖关系。 View当前渲染的视图信息如摄像机参数、视口尺寸。 Inputs后处理阶段输入数据如场景颜色、深度纹理
从这里面获取到了场景颜色信息
拿的是Inputs也就是上面文字中后期处理阶段的数据例如场景颜色
拿到了SceneColor
CopyFromSlice创建纹理的副本避免直接修改原始纹理保证数据安全 作用为计算着色器 FGenerateNoiseCSShader 分配参数内存。
注意观察下面关于FGenerateNoiseCSShader的变量都是GenerateNosiseCS.usf里面的变量 之后都是给这三个参数赋值 FRDGTextureDesc定义纹理属性 Create2D创建 2D 纹理。 SceneColor.Texture-Desc.Format继承输入纹理的格式如 PF_A16B16G16R16。 TexCreate_ShaderResource | TexCreate_UAV允许纹理作为 Shader Resource 和 UAVUnordered 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/82401080/8135。 FComputeShaderUtils::AddPass将计算着色器任务添加到 RDG并命名事件为 Generate Noise。 生成需要的线程数一个像素对应一个线程进行处理GPU优势就是线程多计算快 作用将计算着色器的输出纹理 OutputTex 复制回原始场景颜色纹理。 细节 AddCopyTexturePass通过 RDG 添加纹理复制任务将 OutputTex 数据复制到 SceneColor.Texture。 现在要将屏幕中的noise消除 这个TOptional是用来做什么的呢其实最主要是用于非指针的类型可以判断非指针类型是否为空当然虚幻也可以用于指针举例如下 当一个TMap内判断是否为空没有初值但是TMap的int类型会默认赋初值为0这个时候就没有办法判断是否值被更改过因为可能传进来的值也有可能为0这个时候TOptional就排上用场了你将int包裹成TOptionalint就可以了如果有将值输入进去你就能判断是否值被修改过就能判断是否为空还是非空从而方便之后的操作 第二配置文件当你输入了配置文件到TOptional里面就可以判断非空如果没有配置那么就为空 这个使用场景还是很多的合理使用能够帮你减少很多麻烦 剩下就可以置空所有内容就可以清除掉我们屏幕的效果啦