Unity Shader 学习 002-Shader语义 vert frag函数

学习目标:

shader语义 vert frag函数

学习时间:

2022.5.27

学习产出:

1.实现效果

在这里插入图片描述

2.代码分析

Shader "Unlit/002"
{
    
    
    Properties
    {
    
    
        _MainTex ("Texture", 2D) = "white" {
    
    }
    }

    SubShader
    {
    
    
        Tags {
    
     "RenderType" = "Opaque" }
        LOD 100

        Pass
        {
    
    
            CGPROGRAM
            //定义了顶点着色器和片元着色器的函数名  在下面调用的时候 名字必须相同 否则会编译出错
            #pragma vertex vert   //顶点vert
            #pragma fragment frag    //片元frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            //POSITION  SV_POSITION 语义 不可省略 这些语义将会告诉系统,用户需要哪些输入值,以及用户的输出是什么 定义类型
            
            //POSITION 输入  v是我们输入的模型顶点信息
            //在这里POSITION将告诉Unity,把模型的顶点坐标填充到输入参数v中

            //SV_POSITION 输出 是顶点输出之后 我们裁剪空间里面的顶点坐标
            //在这里SV_POSITION将告诉Unity,顶点着色器的输出是裁剪空间中的顶点坐标
            //简单地说POSITION语意用于顶点着色器,用来指定这些个位置坐标值,是在变换前的顶点的object space坐标(模型坐标)。
            //SV_POSITION语意则用于像素着色器,用来标识经过顶点着色器变换之后的顶点坐标。

            float4 vert(float4 v:POSITION) :SV_POSITION
           {
    
    
                //将模型空间下的顶点转换到齐次裁剪空间
                return UnityObjectToClipPos(v); 
           }


           //frag函数没有任何输入 他的输出是一个fixed4类型的变量
           //使用SV_TARGET语义进行限定
           //它等同于告诉渲染器,把用户的输出颜色存储到一个渲染目标 这里将输出到默认的帧缓存中
           //这里返回了一个表示白色的fixed4类型的变量
           fixed4 frag() : SV_TARGET
           {
    
    
               return fixed4(1,1,1,1);
           }
            
            ENDCG
        }
    }
}

2.1 函数定义

我们必须在一个SubShader里面定义好我们的vertex和fragment的函数名
在这里定义好了之后,后面就会将这个函数名作为这个函数进行执行
定义了顶点着色器和片元着色器的函数名
在下面调用的时候 名字必须相同 否则会编译出错

//定义了顶点着色器和片元着色器的函数名  在下面调用的时候 名字必须相同 否则会编译出错
#pragma vertex vert   //顶点vert
#pragma fragment frag    //片元frag

3. 顶点着色器

渲染流水线就定义了顶点着色器的作用
顶点着色器一般用来处理图形每个顶点的变换,例如 平移、缩放、旋转、投影等,最终输出顶点的最终裁剪空间位置

在这里插入图片描述
POSITION SV_POSITION 语义 不可省略 这些语义将会告诉系统,用户需要哪些输入值,以及用户的输出是什么 定义类型

POSITION 输入 v是我们输入的模型顶点信息
在这里POSITION将告诉Unity,把模型的顶点坐标填充到输入参数v
现在v就存放着POSITION信息,作为参数传入了

SV_POSITION 输出 是顶点输出之后 我们裁剪空间里面的顶点坐标
在这里SV_POSITION将告诉Unity,顶点着色器的输出是裁剪空间中的顶点坐标

简单地说POSITION语意用于顶点着色器,用来指定这些个位置坐标值,是在变换前的顶点的object space坐标(模型坐标)。
SV_POSITION语意则用于像素着色器,用来标识经过顶点着色器变换之后的顶点坐标。

            float4 vert(float4 v:POSITION) :SV_POSITION
           {
    
    
                //将模型空间下的顶点转换到齐次裁剪空间
                return UnityObjectToClipPos(v); 
           }

4. 片元着色器

片元着色器的作用是处理由光栅化阶段生成的每个片元,最终计算出每个像素的最终颜色。归根结底,实际上就是数据的集合。这个数据集合包含每一个像素的各个颜色分量和像素透明度的值。

这里frag函数没有任何输入 他的输出是一个fixed4类型的变量
使用SV_TARGET语义进行限定
它等同于告诉渲染器,把用户的输出颜色存储到一个渲染目标 这里将输出到默认的帧缓存中
这里返回了一个表示白色的fixed4类型的变量

   fixed4 frag() : SV_TARGET
   {
    
    
       return fixed4(1,1,1,1);
   }

猜你喜欢

转载自blog.csdn.net/m0_48781656/article/details/125003547