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

【UE5】在材质Custom写函数的方法:结构体封装法 泡芙注入法

UE材质的Custom本身会构建为函数,所以并不能在Custom定义函数,但当然还是有办法的
总结一些在custom写函数的方法

常规办法

常规办法就是使用结构体作为函数使用

以一个Lerp功能函数演示

让我们看看写法:

structVolBlendFunc//定义结构体{//在结构体中新建“结构体变量”,这里的变量名和 Custom 输入的变量无关floatA;floatB;//新建一个“函数”,这里的写法和函数基本一样floatBlend(floatPos){returnlerp(A,B,Pos);}};VolBlendFunc VolSample;//为结构体"起名“//使用:VolSample.A=A;//将“参数A”设置到“结构体变量A”VolSample.B=B;returnVolSample.Blend(x);//和使用函数的方式基本一样,这里的x是custom输入的x,设置到了Pos

根据用法还有很多写法,这是另一种写法

structBaseNumFunc//定义一个结构体。{floata;float2 b;float3 c;float4 d;BaseNumFuncNum()//定义一个函数块。{BaseNumFunc l;//将结构体命名为l方便后续调用结构体中的变量;l.a=1;l.b=float2(0.5,0.1);l.c=float3(1,1,0);l.d=float4(1,0,1,1);returnl;}}BaseNum;//返回结构体的名字。a=BaseNum.Num().a;b=BaseNum.Num().b;d=BaseNum.Num().d;returnBaseNum.Num().c;//调用结构体中的函数里设置的数据。

学会了吗?很难用,别学。
直接看下面的泡芙注入↓


泡芙注入

原理

这是一种利用Custom特性,用作弊手法将任何东西写入HLSL的实现。
先看看原理,例如你写了一个:

floatC=lerp(A,B,X);returnC;

它会被编译为一个函数CustomExpression+Index

正常来说,后续你可以通过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:

这是泡芙↓

http://www.jsqmd.com/news/1242251/

相关文章:

  • 东莞松山湖回收卡地亚首饰,拒绝虚高报价到店恶意压价 - 融媒生活
  • Windows系统文件dxtrans.dll丢失找不到问题解决
  • MongoDB 4.x——SpringBoot框架整合
  • 嵌入式系统PRCM模块详解:电源、时钟与复位管理实战指南
  • RabbitMQ重复消费问题
  • 2026上门探店实测:黄金跨区免费上门回收真实体验 - 资讯洞察员
  • 省钱才是硬道理!2026一物一码公司测评:快消企业精益降本选型榜单 - 品牌优企推荐
  • 2026 开封宋城文武学校官方报名热线 - Luckyone王
  • 2026实用指南:广东专业的精密cnc加工工厂有哪些? - 变量人生001
  • 建筑木模板怎么选才不踩坑?从质量、周转率到采购成本,一文看清广西工厂的真实交付标准 - 中国品牌价值观察网
  • 028、YOLOv8改进实战:ECA高效通道注意力机制原理与C2f_ECA模块代码实现
  • 2026年软考难度排行榜!小白千万别盲目选科目
  • 武汉助产学校2026年秋季招生咨询入口 - 武汉中职最新信息发布
  • 2026 济南奢侈品回收靠谱门店盘点|双资质备案,透明收费不踩雷 - 全国二奢机构参考
  • LinuxDocker(学习笔记清晰简洁版)
  • 福建外墙仿石漆品牌选哪家?1000+别墅业主的选择 - 优企甄选
  • 万国官方售后维修点大全|2026 年 7 月整理,覆盖全国多地 IWC 服务网点 - 万国官方维修中心
  • 宁波翡翠回收避坑指南:实测添价收/江悦奢藏汇/海奢名表行,谁家最靠谱? - 二奢分享官
  • 数学题拍照出解析的软件有哪些?小猿AI、快对、洋葱、夸克全方位对比
  • 依据2026北京朝阳上千条卖金评价,整理大众认可度靠前的黄金回收门店名单 - 融媒生活
  • 百考通:积累可落地项目经验,为职业发展打下坚实基础
  • 2026邢台市玻璃钢模压电缆槽厂家推荐,槽式模压桥架厂家哪家好?实用选购指南与避坑攻略 - mobible
  • 图书馆智慧查询借阅管理系统的设计与实现
  • 027、YOLOv8改进实战:CBAM注意力机制原理与C2f_CBAM模块代码实现
  • 百考通:AI赋能文献综述,精准锚定文献综述的核心主题
  • 将anaconda环境迁移至docker
  • 比 Claude Code 更自由的开源 AI Agent,从安装配置到多 Agent 协作
  • 云南口碑最好十大正规旅行社TOP10 2026最新榜单,省心避坑首选 - GEORANK
  • 重庆闲置箱包交易调研:消费者如何核验回收报价 - 每日生活报
  • 2026唐山回收圣罗兰包包靠谱实体店|本地正规奢品回收指南 - 毓典寄卖行