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

  • Post author:
  • Post category:其他




学习目标:

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);
   }



版权声明:本文为m0_48781656原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。