UnityShaderASE_Shader模版设置
AI-摘要
MaoXiang GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
本章目标:
学习UnityShaderASE模版设置
学习如何定义Shader模版
配置环境:
VScode
Unity2022·····
Shader入门精要
一、添加修改ASE的Shader模版
1、找到ASE插件中的模版库(在Templats的Legacy下)

2、ASE可视化面板对于Shader编辑的基本逻辑
这些注释就是ASE读取来生成相应的shader代码的内容,都是通过直接在shader文件中作用

(1)/*ase_name*/
Shader /*ase_name*/ "Hidden/Templates/DoublePassUnlit" /*end*/
//这是Shader名称的占位符,用于在Shader代码中标识Shader的名称。它通常用于生成Shader的类名或文件名.作用:在编译时,/*ase_name*/会被替换为具体的Shader名称,例如"UnlitShader"。
/*end*/:表示占位符的结束标记。
(2)/*ase_props*/
Properties
{
/*ase_props*/
}
//这是Shader属性(Properties)的占位符,用于动态生成Shader的属性部分。这些属性通常包括纹理、颜色、浮点值等,由ASE的节点编辑器定义。作用:在编译时,/*ase_props*/会被替换为具体的属性定义。例如:
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
}(3)/*ase_subshader_options*/
/*ase_subshader_options:Name=Additional Options
Option:Vertex Position,InvertActionOnDeselection:Absolute,Relative:Relative
Absolute:SetDefine:ASE_ABSOLUTE_VERTEX_POS 1
Absolute:SetPortName:1,Vertex Position
Relative:SetPortName:1,Vertex Offset
*/
//这是SubShader选项的占位符,用于动态生成SubShader的配置选项。这些选项通常包括渲染状态(如混合模式、深度测试等)和条件编译指令。作用:在编译时,/*ase_subshader_options*/会被替换为具体的SubShader配置代码。
示例:
#pragma multi_compile _ ASE_ABSOLUTE_VERTEX_POS(4)/*ase_pass*/
/*ase_pass*/
Pass
{
Name "Unlit"
Blend Off
ZWrite On
ZTest Always
CGPROGRAM
...
ENDCG
}
//这是Pass部分的占位符,用于动态生成Shader的Pass代码。每个Pass定义了Shader在渲染过程中的一个阶段,例如前向渲染、阴影渲染等。作用:在编译时,/*ase_pass*/会被替换为具体的Pass代码,包括顶点着色器和片元着色器的定义。
(5)/*ase_pragma*/
#pragma vertex vert
#pragma fragment frag
/*ase_pragma*/
//这是#pragma指令的占位符,用于动态生成Shader编译指令。这些指令通常用于指定Shader的编译选项,如顶点着色器和片元着色器的入口函数。作用:在编译时,/*ase_pragma*/会被替换为额外的#pragma指令,例如:
#pragma multi_compile_instancing(6)/*ase_vdata*/
struct appdata
{
float4 vertex : POSITION;
float4 color : COLOR;
/*ase_vdata:p=p;c=c*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
//这是顶点数据(Vertex Data)的占位符,用于动态生成顶点输入结构体的定义。作用:在编译时,/*ase_vdata*/会被替换为额外的顶点数据定义,例如:
float2 uv : TEXCOORD0;(7)/*ase_interp*/
struct v2f
{
float4 vertex : SV_POSITION;
/*ase_interp(1,):sp=sp.xyzw;wp=tc0*/
UNITY_VERTEX_OUTPUT_STEREO
};
//这是插值器(Interpolator)的占位符,用于动态生成从顶点着色器到片元着色器的插值变量。作用:在编译时,/*ase_interp*/会被替换为具体的插值变量定义,例如:
float2 uv : TEXCOORD0;(8)/*ase_globals*/
/*ase_globals*/
//这是全局变量的占位符,用于动态生成Shader中的全局变量定义。作用:在编译时,/*ase_globals*/会被替换为具体的全局变量定义,例如:
sampler2D _MainTex;
float4 _MainTex_ST;(9)/*ase_vert_code*/和/*ase_frag_code*/
/*ase_vert_code:v=appdata;o=v2f*/
/*ase_frag_code:i=v2f*/
//这些是顶点着色器和片元着色器代码的占位符,用于动态生成具体的着色器逻辑。作用:在编译时,这些占位符会被替换为具体的顶点或片元着色器代码,例如:
o.uv = v.uv * _MainTex_ST.xy + _MainTex_ST.zw;3、对于自定义ASE模版编辑的注意事项
(1)多Pass设置
多Pass设置中的增加pass和结束增加pass的方法
//注意:找到ASE模版Pass一栏
/*ase_all_modules*/
//第一个pass,只有一个pass不需要pass_end
/*ase_pass*/
Pass
{...}
//第二个pass,需要在结尾加上/*ase_pass_end*/语句
/*ase_pass*/
Pass
{...}
/*ase_pass*/
Pass
{...}
/*ase_pass_end*/
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 卯相