前言
因为这次笔记涉及项目资源所以核心部分就不做过多展示,只讲GUI编写的技术。
起因:这次要为项目写,URP环境下特效整合Shader,因为整合Shader涉及功能多,在不同功能选择时需要UI有明显反馈所以需要写GUI
感谢:
坏熊猫//Zed
https://www.magesbox.com/article/detail/id/1321.html
阿修
虽然在论坛上获取到了两位提供的GUI整合Shader模板,仔细研究一番,发现与自己的需求还是有些区别,毕竟站在巨人的肩膀上还是要做出一些突破,照抄就没意思了,咋地也得有点突破。
熊猫模板
熊猫大佬的模板,GUI比较好看,我挺喜欢的,代码吧,这个能连出来也是牛逼。这里仍然有一些问题,就是他这里相对功能开关是IF开关使用类似Lerp算法,这种无论开关是否都会计算分支,性能上欠考虑,进项目得下功夫优化,做作品完全没有没问题
阿修模板
其实阿修大佬写的已经挺好了,就是吧,GUI框列表用的内置的,没额外写,功能全面,性能问题考虑也很周到,代码看起来非常专业。
参考总结
熊猫:内置渲染管线,界面好看,性能上存在一定问题,多选项使用按钮看起来不直观(他说Enum想用中文),熊猫大佬很美术
阿修:内置渲染管线,界面差点意思,性能使用宏开关不会并行计算,功能全面代码清晰,阿修大佬很技术
我的需求:URP轻量级渲染关系/通用渲染管线,界面采用熊猫的,计算采用阿修的宏开关
Shader制作
前言说了,项目Shader就不展示计算过程了,都是子模块拼接也不太复杂,这里说一下公开出来的参数
进入正题GUI环节
对应的就是这个下拉列表,就是写UI
写一些下拉列表判断,宏开关,自定义曲线的bool,
创建与材质参数中相对应的变量
将创建GUI显示变量与Shader变量链接起来
在OnGUI中 传值 以及各个列表创建
以扰动举例 主要参数已注释
混合模式判断与函数定义
补充
宏开多了,涉及变体数量问题,简单的计算还是要使用lerp去再优化回来,毕竟宏达到一定数量后,每多一个都会让变体数量几何倍数增长
因为各种功能贴图位比较多,float2 uv 会让 texcoord变多 ,需要使用float4 uv 然后 uv.xy uv.zw 这样就可以一个texcoord控制两个贴图UV
3. 因为溶解的开关我设置的是,不开启,溶解ADD,溶解ALPHA,属于选项类三选一,不存在两个同时开启情况,所以可以把两个溶解宏写在一行了,变体数量从128变为96(大致这个数波动不大)。
4.因为自定义数据中的TEXCOORD是从UV1的TEXCOORD0.xy开始累积的,所以好多时候在连接自定义数据数据时,总是从TEXCOORD0.zw开始,原定的xy变为zw开始,zw变成xy,这很不舒服,只需要在中间加入UV2,这样custom就与代码里一一对应。同时,如果不使用前面的自定义曲线直接用后面的自定义曲线(例:主纹理,遮罩,扰动,溶解),如果直接用溶解的话custom1不开,那标注的所有曲线顺序都会错乱,可以拿脚本去控制,custom链接可是这意味着一个粒子发射器一个脚本,所以我们在材质里给出提示,要是用自定义数据,就按照UV2,Custom1,Custom2都启动。详细请看粒子发射器顶点数据流。
5. 最后顶点颜色在输出前最后乘,这样可以作为总颜色控制,避免在最开始乘完之后,后面有加效果或者其他计算导致顶点颜色无法作用总颜色控制。
其他的也有一些简单算法,就比较基础无非就是开行开纵,让我想起来上大学学网页开发课时候注意事项:开横开竖 空格间隔 字体字号 颜色编码
挖了熊猫的坑就得填上,不然直不起来腰。
阿修大佬貌似很忙,我问的问题可能比较简单,修佬也耐心的解答了一下
以上算是这次GUI的总结,URP,宏,GUI,Shader这次包含的东西也是很多,也很有趣,特此笔记