ShaderForge学习笔记:Properties属性

发表于2018-07-16
评论0 4.2k浏览
这篇让大家来学习下ShaderForge插件中Properties属性的概念与使用。

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
使用’=’赋予默认值。
注意:句末不要有分号
参考
官方手册Manual/SL-Properties

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节点树更加清晰可读。
来自:https://blog.csdn.net/v_xchen_v/article/details/79146160

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签:

0个评论