欢迎访问宙启技术站
智能推送

ShaderLab学习小结(一)最简化的顶点片断Shader

发布时间:2023-05-15 11:20:39

ShaderLab是Unity中的一个着色器开发环境,用于创建各种图形效果。本文将介绍如何创建最简化的顶点片断Shader。

首先,需新建一个空的着色器文件(shader)并用ShaderLab编写:

Shader "Custom/BasicShader" {
   SubShader {
      Pass {
      }
   } 
}

这里,Shader中的“Custom/BasicShader”可以任意命名,SubShader表示一个渲染阶段,Pass可以理解为一个渲染管线的步骤。

在Pass中,我们可以编写顶点和片元着色器:

Shader "Custom/BasicShader" {
   SubShader {
      Pass {
         CGPROGRAM
         
         #pragma vertex vert
         #pragma fragment frag
         
         struct appdata {
            float4 vertex : POSITION;
         };
         
         struct v2f {
            float4 pos : SV_POSITION;
         };
         
         v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex);
            return o;
         }
         
         fixed4 frag (v2f i) : SV_Target {
            return fixed4(1.0, 1.0, 1.0, 1.0);
         }
         
         ENDCG
      }
   }
}

这里,我们使用了CG程序编写顶点和片元着色器。通过#pragma vertex vert和#pragma fragment frag可以告诉Unity使用哪个函数作为顶点和片元着色器。

接下来,在appdata中定义了顶点的数据格式,这里的POSITION表示顶点的位置信息。

接着,在v2f中定义了传递给片元着色器的数据格式,这里的SV_POSITION表示屏幕空间的位置。

然后,在vert函数中,我们将顶点位置进行转换,并将其存储在v2f中。

最后,在frag函数中,我们返回一个固定的颜色值(白色)。在此之前,我们还可以进行其他的计算来生成所需要的颜色值。

最后,将其保存到Unity后,就可以在场景中应用这个最简化的顶点片断Shader了。

总结一下,最简化的顶点片断Shader所涉及到的内容有:ShaderLab语言、CG程序、顶点和片元着色器以及数据格式的定义。这些知识点是学习ShaderLab的基础,也是开发Shader的必备技能。