美文网首页
最简单的顶点、片元着色器_02

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

作者: Rayson | 来源:发表于2020-06-02 16:25 被阅读0次

    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

    相关文章

      网友评论

          本文标题:最简单的顶点、片元着色器_02

          本文链接:https://www.haomeiwen.com/subject/qvouzhtx.html