最简单的顶点、片元着色器_02

2020-06-02  本文已影响0人  Rayson

shader 的输入输出流程:
1.由Mesh传入顶点数据,进入顶点着色器函数(vert),每个顶点执行一次这个函数.
2.顶点变换(顶点乘以UNITY_MATRIX_MVP矩阵,这个是untiy内置变量)把顶点信息输出到片元着色器函数(frag),片 元函数是逐个象素执行的,即每个象素都执行一次.
3.它的输入是顶点函数经过差值后的信息(这个是GPU自己处理的).输出的就是我们在屏幕上看到的图像。

//shader的路径
Shader "Unity Shaders/Shader1" {
    SubShader {
        Pass {
            //shader正文要包含在  CGPROGRAM-ENDCG 语句块里
            CGPROGRAM
            //顶点着色器函数名 vert
            #pragma vertex vert
            //片元着色器函数名 frag
            #pragma fragment frag
            //函数的输入v包含了这个顶点的位置,这是通过POSITION 语义指定的
            //POSITION 将告诉Unity,把模型的顶点坐标填充到输入参数v中
            float4 vert(float4 v : POSITION) : SV_POSITION {
                //返回值该顶点在裁剪空间中的位置
                //SV_POSITION 将告诉Unity,顶点着色器的输出是裁剪空间中的顶点坐标
                //return mul (UNITY_MATRIX_MVP, v);
                return UnityObjectToClipPos (v);//等价于上边那行
            }
 
            fixed4 frag() : SV_Target {
                //SV_Target 把用户的输出颜色存储到一个渲染目标(render target)中,这里将输出到默认的帧缓存中
                return fixed4(1.0, 1.0, 1.0, 1.0);
            }
            ENDCG
        }
    }
}
//shader的路径
Shader "Unity Shaders/Shader1" {
    SubShader {
        Pass {
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag
    
            float4 vert(float4 v : POSITION) : SV_POSITION {    
                return UnityObjectToClipPos (v);
            }
 
            fixed4 frag() : SV_Target {
                return fixed4(1.0, 1.0, 1.0, 1.0);
            }
            ENDCG
        }
    }
}

输出效果如下:


渲染效果.png
上一篇下一篇

猜你喜欢

热点阅读