Unity | Shader基础知识(第二集:shader语言的格式)

发布时间:2023-12-17 22:23:58

目录

一、本节介绍

1 上集回顾

2 本节介绍

二、shader的基本格式

1 SubShader块

2 通道(Pass)

3 CG语言

4 语义

5 引入

三、下集介绍


一、本节介绍

1 上集回顾

上节课我们学到,空的shader是玫红色的,英文里叫pink(我实在不想承认它是粉红色)

2 本节介绍

这节课我们要学习shader简单的语法格式。

二、shader的基本格式

1 SubShader块

shader里面可以放很多其他的东西,每个东西我们都要给分一个块,同时,我们必须有的一个块是具体影响shader行为的块,它的名字叫SubShader。

代码如下:

Shader "Custom/001"
{
SubShader{    }
}
2 通道(Pass)

有时候,同一个物体,我希望它一会变成水的状态,一会变成石头的状态。那么这部分内容我们必须写在同一个SubShader块中,但又要把他们区分开。所以出现了一个语法叫Pass。

一个SubShader里,可以写很多Pass,一个水Pass,一个石头Pass等等。

代码如下:

Shader "Custom/001"
{
SubShader
    {
        //假如这里写水的渲染
        pass{    }
        //假如这里写石头的渲染
        pass{    }
    }
}
3 CG语言

上文说过,我们用的是unity给我们升级过的语言,shader原本的语言之一是CG语言(CGPROGRAM),我们要告诉一下unity后面会出现CG语言,让它能认识。

代码如下:

Shader "Custom/001"
{
    SubShader
    {
        pass
        {
            CGPROGRAM    //开始CG语言了

            ENDCG        //CG语言结束了
        }
    }
}
4 语义

之前提过,我们并没有完全接手所有的shader过程,只是参与一部分,那么如何正确的“交接”就是一个很重要的事情。语义的功能,就是负责“交接”。

因此,shader规定了一些词汇,可让你获得一些信息,也可以去传递一些信息,这些词汇就叫做语义,他的用法就是:语义词汇

例:

需求:我希望拿到现在shader所在模型的每个顶点的位置。

语义:Shader说,只要你用了:POSITION就能拿到这个数据。

声明:因为POSITION的数据是Vector4,所以我们也需要一个Vector4来接应这个数据。

CG语言:在CG语言里,Vector2的表达是float2,Vector3的表达是float3,Vector4的表达是float4,所以我们声明的是float4

备注:这里只是写法不一样,本质就是四个数,就像西红柿和番茄一样,地域不同叫法不一样。

代码如下:

//声明变量float4  //变量名称v  //POSITION就是语义,你只要:POSITION就能获取到模型的顶点
float4 v:POSITION
5 引入

写代码大多需要引入,例如:C#里的using UnityEngine;

在shader里,引入是#pragma

不同点:shader引入后需要给引入的内容起个名字,下面案例起名叫vert

代码如下:

 #pragma vertex vert

和C#一样,引用之后,就可以用引入内容里有的方法,在这里当你引入了顶点着色器并起了名,你就可以用顶点着色器的方法了。

顶点着色器的方法代码如下:

            #pragma vertex vert

            float4 vert()
            {
            return //一个float4
            }

三、下集介绍

本节课了解了Shader的基本语法。

下节课我们会利用学会的语法,讲一个简单的干预颜色案例。?

文章来源:https://blog.csdn.net/weixin_49427945/article/details/134967314
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。