Unity | Shader基础知识(第六集:语法<如何加入外部颜色资源>)

目录

一、本节介绍

1 上集回顾

2 本节介绍

二、语法结构

1 复习

2 理论知识

3 Shader里声明的写法

4 Properties和SubShader毕竟不是一家人

三、 片元着色器中使用资源

四、代码实现

五、全部代码

六、下集介绍


相关阅读

Unity - Manual: Writing Surface Shaders


一、本节介绍

1 上集回顾

上集制作了一个小彩球。

2 本节介绍

如何加入外部颜色资源Color来控制球体颜色,类似代码里public Color可以在外面看见(如图1所示)并改颜色(如图2所示)。

图1 加入Color
图2 外部改变材质颜色

二、语法结构

1 复习

之前学过的语法结构代码如下:

Shader "Custom/001"    //shader地址
{
SubShader    //干预着色器
    {
        pass    //通道
        {
            CGPROGRAM    //开始CG语言
            #pragma vertex vert      //引用顶点着色器
            #pragma fragment frag    //引用片元着色器

            #include"UnityCG.cginc"    //引用unity写好的一些内容

            ENDCG    //结束CG语言
        }
    }
}

2 理论知识

我们外部的资源一般在干预着色器之前就要放进来,所以位置是在地址内部,SubShader外部。

学习英文:

Property                财产

Properties             财产(复数)------代码里用这个

代码如下:

Shader "Custom/001"
{
//财产
Properties
     {
     }
SubShader
    {
        pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include"UnityCG.cginc"

            ENDCG
        }
    }
}

3 Shader里声明的写法

在C#语法中,我们声明的代码如下:

//公开 //类型是Color        //赋值为(1,1,1,1)
public Color color = new Color(1,1,1,1);
            //起名是color

shder它本身不是平时的脚本,所以它在起名上面需要两个名字

  • 外部显示的名字(如图3所示),例如我起名为Color
图3 外部显示的名字
  • 内部使用时的名字 ,例如我起名为_Color
  • shader里声明名称的代码
Properties
     {
     //内部使用的名称  //声明的数据类型
    _Color("Color",Color)=(1,1,1,1)
         //外部使用的名称   //赋值(1,1,1,1)
     }

4 Properties和SubShader毕竟不是一家人

虽然我们在 Properties里面已经声明了Color,但这仅仅只代表,这个shader脚本里存在了这个信息,并不代表我们可以直接用。

  • 我们用的时候在SubShader中还是要重新声明一下(表明你借过来用)
  • 着色器里面可外部资源的数据类型不一样,Color这个类型它就不认识,它认识的常用的有float3,float4等,Color本质就是一个float4。
  • SubShader接过数据代码
SubShader
    {
        pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include"UnityCG.cginc"
            
            //重新声明_Color
            float4 _Color ;

            ENDCG
        }
    }

三、 片元着色器中使用资源

这时我们可以制作一个球,这个球的颜色根据外面改的颜色而显示它的颜色。改变颜色是片元着色器里直接更改的。

四、代码实现

            float4 frag():SV_TARGET
            {
                    //直接将接到的数据输出
            return _Color;
            }

五、全部代码

都是基于之前教程里讲的之后往下增减的代码。

Shader "Custom/001"
{
Properties
     {
     //内部使用的名称  //声明的数据类型
    _Color("Color",Color)=(1,1,1,1)
         //外部使用的名称   //赋值(1,1,1,1)
     }
SubShader
    {
        pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include"UnityCG.cginc"

            float4 _Color ;

            appdata_base vert(appdata_base v)
            {
            v.vertex =UnityObjectToClipPos(v.vertex);
            return v;
            }

            float4 frag():SV_TARGET
            {
            return _Color;
            }
            ENDCG
        }
    }
}

六、下集介绍

本集讲了如何添加外部资源,并通过外部资源来更改现在材质。

下集讲案例,如何加入外部图片资源。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

希望能给大家写更多有用的文章~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值