发布时间:2026/9/6 10:30:40
【UE5】在材质Custom写函数的方法:结构体封装法 泡芙注入法 UE材质的Custom本身会构建为函数所以并不能在Custom定义函数但当然还是有办法的总结一些在custom写函数的方法常规办法常规办法就是使用结构体作为函数使用以一个Lerp功能函数演示让我们看看写法structVolBlendFunc//定义结构体{//在结构体中新建“结构体变量”,这里的变量名和 Custom 输入的变量无关floatA;floatB;//新建一个“函数”这里的写法和函数基本一样floatBlend(floatPos){returnlerp(A,B,Pos);}};VolBlendFunc VolSample;//为结构体起名“//使用VolSample.AA;//将“参数A”设置到“结构体变量A”VolSample.BB;returnVolSample.Blend(x);//和使用函数的方式基本一样,这里的x是custom输入的x设置到了Pos根据用法还有很多写法这是另一种写法structBaseNumFunc//定义一个结构体。{floata;float2 b;float3 c;float4 d;BaseNumFuncNum()//定义一个函数块。{BaseNumFunc l;//将结构体命名为l方便后续调用结构体中的变量l.a1;l.bfloat2(0.5,0.1);l.cfloat3(1,1,0);l.dfloat4(1,0,1,1);returnl;}}BaseNum;//返回结构体的名字。aBaseNum.Num().a;bBaseNum.Num().b;dBaseNum.Num().d;returnBaseNum.Num().c;//调用结构体中的函数里设置的数据。学会了吗很难用别学。直接看下面的泡芙注入↓泡芙注入原理这是一种利用Custom特性用作弊手法将任何东西写入HLSL的实现。先看看原理例如你写了一个floatClerp(A,B,X);returnC;它会被编译为一个函数CustomExpressionIndex正常来说后续你可以通过CustomExpression0来调用这个函数但在编译时是无法控制编译器会将哪个Custom编译到什么index导致风险相当大但如果我们这么写呢return0;}floatBlend(floatPos){returnlerp(A,B,Pos);会发现他是原样写在了这里但你会注意到Custom自动生成的CustomExpression0看上去被我们直接结束了而下面的内容刚好构成了新的函数这种作弊方法正是利用了这个特性把任何东西写入HLSL包括函数写入只需要先写上return 0;}后面随便写任何HLSL的东西最后记得编译器在生成CustomExpression时会补一个}“因此最后一个”}不写return0;}//先手一个大比斗将其扇懵floatFA(floatPos)//写了一个函数{returnlerp(A,B,Pos);}floatFB(floatPos)//又写一个函数{returnlerp(A,B,Pos);//最后一个“}”不写等编译器自动补使用连法1“0法”那么实际使用时就是这样“加法”是为了在编译时会带着这个custom这个custom输出0(大比兜的值)一个0的操作没有性能损耗如果不连接这个Custom会作为无用节点被优化掉的return0;}//先手一个大比斗将其扇懵然后对HLSL进行疯狂的注入/**接下来你可以在HLSL里写任何东西不限于函数 //例如你可以写 #if !MATERIAL_LWC_ENABLED #define UE_DF_FORCE_FP32_OPS 1 #endif //也可以加include #include /Engine/Private/xxxx.ush **///用注释画画都行把hlsl疯狂注入成泡芙floatMyFLerp(floatX,floatY,floatPos)//写多少函数都行{returnlerp(X,Y,Pos);//总之切记最后一个“}”不写编译器需要补一个连法2“引脚法”还有一种方式在使用函数的CustomB开放一个没用的函数输入(引脚名无所谓)将泡芙CustomA连上也是可以防止CustomA被优化掉:相比0的方法优点是减少了一次0。缺点是让Custom节点之间有了某种实际上不存在的因果关系。取决于你的喜好了。如果注入的并不是函数如果你注入的内容不包括函数需要对结尾进行设计因为Custom必补一个}我喜欢用void(){收尾例如想在这画个画,Custom效果如下:编译结果其他玩法切换函数因为Switch是静态切换(在实际编译前)所以能做到这样的事。啊为啥叫泡芙注入啊Shader:这是泡芙↓

相关新闻

2026/9/1 12:50:53

速度最快的网线已经来了,为什么大多数家庭依然不用它

很多人在升级家庭网络时,都会遇到一个共同的问题:既然买网线,不如一步到位,直接选择速度最快的产品。如今电商平台上,Cat8网线已经越来越常见,不少商家都会打出"40Gbps高速传输"“电竞专用”"未来十年不用换"等宣传语,让不少用户认为数字越大,性能…

2026/8/31 1:16:40

P1049 [NOIP 2001 普及组] 装箱问题

记录157 #include<bits/stdc.h> using namespace std; int n,v,a[35]; int min_remain2e410;// 记录最小剩余空间&#xff0c;初始化为一个比V大的数 void dfs(int remain_v,int num){// remain_v: 当前剩余体积, num: 当前考虑到了第几个物品if(num>n){ // 1. 终止…

2026/9/6 3:23:56

P1071 [NOIP 2009 提高组] 潜伏者

记录156 #include<bits/stdc.h> using namespace std;int main() {// 优化IO速度ios::sync_with_stdio(false);cin.tie(0);string s1,s2,s3;cin>>s1>>s2>>s3;// 1. 定义两个 map// decode_map[密文字符] 明文字符map<char,char> decode_map; /…

2026/9/6 10:27:32

ARM体系详解:从指令集架构到Cortex-A/R/M实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 10:27:32

用Python+MAVSDK控制无人机:从仿真到真机实战指南

作为一个玩了好几年无人机、也写过不少飞控和地面站代码的人&#xff0c;我一直觉得&#xff1a;会飞无人机不算什么本事&#xff0c;能让无人机“听你的话”按程序自动飞&#xff0c;才算真正摸到了门道。而提到用Python控制无人机&#xff0c;绕不开的一个东西就是MAVSDK。这…

2026/9/6 10:27:32

CMSIS-DSP源码级剖析:从架构设计到工业落地实践

1. 从项目背景说起&#xff1a;为什么需要深挖CMSIS-DSP做嵌入式开发这些年&#xff0c;信号处理始终是个绕不开的话题。无论是电机控制里的电流环滤波、电力监控里的谐波分析&#xff0c;还是工业传感器里的振动特征提取&#xff0c;都离不开趁手的数学运算库。很多团队一开始…

2026/9/6 10:22:31

开源扫地机器人DIY:从SLAM到路径规划的完整技术拆解

我先直说结论&#xff1a;看到“扫地机器人都能自己造”这个标题的时候&#xff0c;我第一反应也是“离谱”。但顺着 GitHub 上开源仓库点进去翻了翻&#xff0c;冷静下来之后发现&#xff0c;这事还真不是标题党。现在的开源社区里&#xff0c;确实有人把一台扫地机器人从机械…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/5 2:45:13

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…