Shaderforge 属性
Shaderforge基础属性
颜色和四维向量
1. Color
官网说明
一个四维的数组,与Vector4节点相似,但是在材质球编辑器中是使用取色器赋值。
节点输出
输出RGBA四维颜色值
2. Vector4
官方说明
一个具有四个分量的数据,与Vector4(非属性节点Vector4)相同,但在材质球Inpector面板中显示是4个分开的X、Y、Z和W值。
节点输出
输出XYZW四维向量值
UntiyShader中定义颜色和向量属性
name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)
数字
3. Value
官方说明
一个一维数值,与Value节点(非属性节点)一样,但是会在材质球Inspector面板上显示出来。
节点输出
输出一个一维数值
4. Slider
官方说明
允许您轻松地调整最小值和最大值之间的值并将数值展示在Inspector面板中。
结点输出
同Value一样,都是输出一个一维数值,只能可以设置范围的最大值和最小值,并在面板中表现为滑动条
UnityShader中定义数字属性
name ("display name", Range (min, max)) = number //Range
name ("display name", Float) = number //Float
name ("display name", Int) = number //Int
纹理
5. Texture2D
官方说明
Texture2D节点包含对一张纹理的引用,并将在特定的UV坐标(如果连接)上对纹理进行采样。如果[Tex]输入是由Texture Assets节点连接的,该节点将不再显示在材质球面板上。输出[RGB]和单独RGBA的通道。
节点输出
节点输出的是存储纹理信息的RGBA四维数组和单独的R、G、B、A通道数据,每个通道都输出对应的一个一维数组。
6. Cubemap
官方说明
包含对cubemap的引用,并将以特定的MIP级别(如果连接的话)对它进行采样。输出[RGB]和单独的通道。
UnityShader中定义纹理
- 2D纹理
- Cube纹理(立方体纹理)
- 3D纹理 1,只能用script创建 2.opengl3.0及以上才支持
name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}
每条属性在subshader中用name引用
在材质球的Inspector面板中显示为display name
使用’=’赋予默认值。
注意:句末不要有分号
参考
More
7. Switch
官方说明
节点输出
UnityShader实现Switch
在Toggle的基础上加上Lerp操作就得到了Switch开关
- 写法
Shader "Hidden/Switch"
{
Properties
{
// 借助MaterialPropertyDrawer在材质面板定义类似于bool的变量,用于控制代码流程
[Toggle] _TOGGLE("m_toggle", Float) = 0
_color1("color1", Color) = (1, 0, 0, 1)
_color2("color2", Color) = (0, 1, 0, 1)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
//定义shader关键字"_TOGGLE_ON"
#pragma shader_feature _TOGGLE_ON
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 _color1;
fixed4 _color2;
fixed4 frag(v2f i) : SV_Target
{
fixed toggleValue;
// 如果勾选了_TOGGLE
#ifdef _TOGGLE_ON
toggleValue = 1;
#else
toggleValue = 0;
#endif
float3 color = lerp(_color1.rgb, _color2.rgb, toggleValue);
return fixed4(color, 1);
}
ENDCG
}
}
}
- 演示
8. Toggle
官方说明
一个基于复选框的0或1的值。
节点输出
勾选输出1,不勾选输出0
UnityShader实现Toggle
借助MaterialPropertyDrawer在材质面板定义类似于bool的变量
- 写法
Shader "Hidden/properties"
{
Properties
{
// 借助MaterialPropertyDrawer在材质面板定义类似于bool的变量,用于控制代码流程
[Toggle] _TOGGLE("m_toggle", Float) = 0
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
//定义shader关键字"_TOGGLE_ON"
#pragma shader_feature _TOGGLE_ON
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float3 color;
// 如果勾选了_TOGGLE
#ifdef _TOGGLE_ON
color = float3(1, 1, 1);
#else
color = float3(0, 0, 0);
#endif
return fixed4(color,1);
}
ENDCG
}
}
}
- 效果
9. Texture Assets
官方说明
该节点是一个对纹理的引用,用于对单个纹理进行多次采样。Texture Assets节点只能连接到
Texture2D节点的[Tex]。在材质球的面板中的反映是,用户只需要分配一个纹理。
节点输出
tex输出图片的纹理的RGBA的纹理信息,只能链接到Texture2d的tex输入通道。一个texture2d节点的tex连接了texAssets之后就不再显示在材质球的属性面板上,且其纹理不能再在节点中选择而是随着连接的Texture Assets的纹理变化而变化。
巧妙的使用Texture Assets节点可以让我们连接的shaderforge节点树更加清晰可读。