ASE编写的节点shader如何用代码优化?如何使用Sublime Text编辑器写Unity Shader?...
技术综合 44510 10
实名

通过了实名认证的内容创造者

发布于 2021-9-1 14:43:19

您需要 登录 才可以下载或查看,没有账号?注册

x
http://www.sublimetext.com/


ASE(Amplify Shader Editor) 连连看是美术同学习惯使用的Shader神器,但是可能生成的代码有一点点冗余
虽然不影响效率,但是为了让项目更工整,且可以入的了程序大大的眼,并被项目接受
需要亿点简单的操作,美术同学,美术TA就能把代码做干净点!
这个默认管线的话,不需要会写代码!也不需要懂程序,很简单只要符合3个条件就能掌握
  • 碳基生命的平均智慧水平并能上网。(URP嘛,呢可能得硅基!)
  • 会 Ctrl+C
  • 会 Ctrl+V

首先需要一个代码编辑器 可以是VC2017+  或者unity自己的
安装太多编辑器很麻烦,很费劲

经常有人推荐 Sublime Text  编辑各类文本和代码,也开始使用
但是默认情况下他不方便写 shader,也不会高亮
这里记录一下方法,方便后面使用

官网下载,别被其他网站的夹带给装了流氓插件!!
[/quoteleft]
安装后  shader和cginc文件设置为sublime为默认打开方式
image.png


https://github.com/cjsjy123/Unity-Shader
然后去这里下载 ZIP包
image.png


下载的包放这里

打开下面的文件

右键自己的unity 找到自己对应的cginc (CGIncludes)目录
获取 自己安装的unity路劲中的CGIncludes目录
这里虽然写的是Unity V5  但是任何版本unity到2021+都可以,关键字变化不大,放心使用

直接复制 地址似乎是不行了
//////// 和\\\\\\\\ 是有区别的这里注意了!!
     保存 重启!!!

关联shader默认打开,重新打开shader,嗯发现关键字已经变色了!各种结构清晰了
参考
https://blog.csdn.net/yuxikuo_1/article/details/83353610


开始优化代码
默认管线下!
先用ASE简单连一个贴图调色

---看对应的代码--
        路径名部分       
Shader "Dev/T1ShaderLive2D"
就是路径名,大家可以在这里修改,也就是修改在材质球上如何选择shader
一般我推荐的习惯是
项目代码或者商标名/功能/特点  
如E3D/ActorPBR/2T_dissolve
意思就是E3D系列的  PB光照模型的角色 shader
2T_dissolve  使用了2张Texture的可溶解shader


                 参数暴露 Properties    部分  


这部分等于 在ASE的参数上选择暴露
排序等于左侧面板底部


        删除ASE设置 和 节点信息        
最后一段  /*ASEBEGIN    ASEEND*/  内的全部信息
一看就不像是代码的东西!这个东西删除掉,保存对于ASE就不可逆了
ASE将无法再继续打开编辑,一般是最后步骤,不要轻易的删除!
当然你有备份,也可以用这种方法来发布传送自己的shader,可以防止小白盗用你的成果
但是高手是防不住的!因为算法还在!如何用算法还原 ASE 节点,是我们以后要讨论的复杂的系统问题

优化后默认管线只有43行,还是 非常干净的!


然后我们再来看URP的代码优化问题,URP有点不太一样,非常不一样。
只是这里调整了一下管线,保存

好家伙-有点懵-和节点的内容99%都没有关系,我就乘了一个颜色,上来就干到了858行的复杂度
并且一堆陌生感的结构和引用,在默认管线下!从来没见过这些,这URP是真的有性能提升么?
冷静之后开始删减
找到所有Tess的关键字的 函数比如
CalcDistanceTessFactor
CalcTriEdgeTessFactors
CalcEdgeTessFactor
FixedTess
EdgeLengthBasedTess
EdgeLengthBasedTessCull
struct TessellationFactors


把不认识的,看似非必要的函数删干净之后依然有600多行
就会是以下报错
所以建议是  URP的 ASE代码优化!非资深战斗coder 不要轻易魔改操作!
也请相关了解情况的大佬赐教!


image.png

评分

参与人数 3元素币 +39 活跃度 +12 展开 理由
拷给你 + 14 + 5 看起来不错
lanch + 10 + 1 元素帖子强,满满正能量。
欠钱不想还... + 15 + 6 压箱底的宝贝吧这是

查看全部评分

想要成大触,天天上元素
使用道具 <
神佛之上  发表于 2022-11-22 23:44:56  
10#
给力!元素有你更精彩
回复 收起回复
使用道具
大黑猫  发表于 2021-9-7 17:44:38  
9#
1111
回复 收起回复
使用道具
挥别  发表于 2021-9-3 10:18:09  
8#
回复 收起回复
使用道具
随浪逐波  发表于 2021-9-2 17:42:20  
7#
感谢分享
回复 收起回复
使用道具
水木神川  发表于 2021-9-2 00:16:47  
6#
谢谢分享
回复 收起回复
使用道具
qq_马卡龙_WRh  发表于 2021-9-1 16:59:29  
5#
但是这么多关键字,会导致生成的变体非常非常多.打手机包,bulitin管线用了Standard,经常Standard的shader变体内存占用能有几百兆. 所以我是不用Standard,自己管理这些关键字.尽量不把无用的变体收集起来打倒手机包里. URP还没做过项目,不知道Lit的变体有多少,听说可以直接用,是有专门的变体优化了吗?

回复

老哥分析的很专业  发表于 2021-11-16 01:03

评分

参与人数 1元素币 +1 展开 理由
元素界王神... + 1 URP Unlit ,ASE把左侧选项全部关闭,只有2个变体!

查看全部评分

回复 收起回复
使用道具
qq_马卡龙_WRh  发表于 2021-9-1 16:55:32  
4#
记得ShaderForge生成的代码就是顶点片元的,会很长.ASE用表面着色器,所以生成代码非常简洁.
回复 收起回复
使用道具
qq_马卡龙_WRh  发表于 2021-9-1 16:53:58  
3#
示例里面,用Unlit连了一个乘法.多的很多代码都是#ifdef和#endif包裹的,其实就是处理各种乱七八糟情况的.比如关键字ALPHATEST_ON,TESSELLATION_ON,还有处理GPUInstance相关功能的宏,处理阴影的宏等等,其他的还有VR相关的等等,一大堆乱七八糟的.刚开始确实看得累,需要先剔除出我们当前所在的情况是哪一个.
回复 收起回复
使用道具
qq_马卡龙_WRh  发表于 2021-9-1 16:04:25  
2#
默认管线下他用的表面着色器,是对顶点片元的进一步封装.其实展开一样也是很多很多层的.各种宏定义处理不同状况.URP已经抛弃了表面着色器,其实更利于学习

评分

参与人数 1元素币 +1 展开 理由
元素界王神... + 1 明白了!就是URP更直接不套娃,所以都暴露了出来。

查看全部评分

回复 收起回复
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表