【shaderforge学习笔记】 Properties属性

时间:2021-07-08 03:47:31

Shaderforge 属性

【shaderforge学习笔记】 Properties属性

Shaderforge基础属性

颜色和四维向量

1. Color

官网说明
【shaderforge学习笔记】 Properties属性
一个四维的数组,与Vector4节点相似,但是在材质球编辑器中是使用取色器赋值。
节点输出
输出RGBA四维颜色值
【shaderforge学习笔记】 Properties属性

2. Vector4

官方说明
【shaderforge学习笔记】 Properties属性
一个具有四个分量的数据,与Vector4(非属性节点Vector4)相同,但在材质球Inpector面板中显示是4个分开的X、Y、Z和W值。
节点输出
输出XYZW四维向量值
【shaderforge学习笔记】 Properties属性

UntiyShader中定义颜色和向量属性

name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)

数字

3. Value

官方说明
【shaderforge学习笔记】 Properties属性
一个一维数值,与Value节点(非属性节点)一样,但是会在材质球Inspector面板上显示出来。
节点输出
输出一个一维数值
【shaderforge学习笔记】 Properties属性

4. Slider

官方说明
【shaderforge学习笔记】 Properties属性
允许您轻松地调整最小值和最大值之间的值并将数值展示在Inspector面板中。
结点输出
同Value一样,都是输出一个一维数值,只能可以设置范围的最大值和最小值,并在面板中表现为滑动条
【shaderforge学习笔记】 Properties属性

UnityShader中定义数字属性

name ("display name", Range (min, max)) = number //Range
name ("display name", Float) = number //Float
name ("display name", Int) = number //Int

纹理

5. Texture2D

官方说明
【shaderforge学习笔记】 Properties属性
Texture2D节点包含对一张纹理的引用,并将在特定的UV坐标(如果连接)上对纹理进行采样。如果[Tex]输入是由Texture Assets节点连接的,该节点将不再显示在材质球面板上。输出[RGB]和单独RGBA的通道。
节点输出
节点输出的是存储纹理信息的RGBA四维数组和单独的R、G、B、A通道数据,每个通道都输出对应的一个一维数组。
【shaderforge学习笔记】 Properties属性

6. Cubemap

官方说明
【shaderforge学习笔记】 Properties属性
包含对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" {}

【shaderforge学习笔记】 Properties属性
每条属性在subshader中用name引用
在材质球的Inspector面板中显示为display name
使用’=’赋予默认值。
注意:句末不要有分号

参考

官方手册Manual/SL-Properties

More

7. Switch

官方说明
【shaderforge学习笔记】 Properties属性
节点输出
【shaderforge学习笔记】 Properties属性
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
}
}
}
  • 演示
    【shaderforge学习笔记】 Properties属性

8. Toggle

官方说明
【shaderforge学习笔记】 Properties属性
一个基于复选框的0或1的值。
节点输出
勾选输出1,不勾选输出0
【shaderforge学习笔记】 Properties属性

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
}
}
}
  • 效果
    【shaderforge学习笔记】 Properties属性

9. Texture Assets

官方说明
【shaderforge学习笔记】 Properties属性

该节点是一个对纹理的引用,用于对单个纹理进行多次采样。Texture Assets节点只能连接到
Texture2D节点的[Tex]。在材质球的面板中的反映是,用户只需要分配一个纹理。

节点输出
tex输出图片的纹理的RGBA的纹理信息,只能链接到Texture2d的tex输入通道。一个texture2d节点的tex连接了texAssets之后就不再显示在材质球的属性面板上,且其纹理不能再在节点中选择而是随着连接的Texture Assets的纹理变化而变化。
【shaderforge学习笔记】 Properties属性

巧妙的使用Texture Assets节点可以让我们连接的shaderforge节点树更加清晰可读。