UnityShader学习笔记(二)

一、Shader示例代码

1.Surface Shader示例代码

Shader "Example/Diffuse Simple" {

       SubShader {

         Tags { "RenderType" = "Opaque" }

         CGPROGRAM

         #pragma surface surf Lambert

         struct Input {

             float4 color : COLOR;

         };

         void surf (Input IN, inout SurfaceOutput o) {

             o.Albedo = 1;

         }

         ENDCG

       }

       Fallback "Diffuse"

}

2.Vertex/Fragment Shader示例代码

Shader "Unlit/SimpleShader"

{

   SubShader{

       Pass{

           CGPROGRAM

           #pragma vertex vert

           #pragma fragment frag

​

           float4 vert(float4 v : POSITION) :SV_POSITION{

               return mul(UNITY_MATRIX_MVP,v);

           }

           float4 frag() : SV_TARGET{

               return fixed4(1.0,0.0,0.0,1.0);

           }

           ENDCG

       }

   }

}

3.Fixed Function Shader示例代码

Shader "fixed shader/color"{

   Properties

   {

       _MainColor("Main Color", Color) = (1,1,1,1)

   }

   SubShader

   {

    Pass

    {

    Color[_MainColor]

    }

    }

    Fallback "Diffuse"

}

二、选择哪种着色器

     除非你有非常明确的需求必须要使用固定函数着色器,例如需要在非常旧的设备上运行你的游戏(这些设备非常少见),否则请使用可编程管线的着色器,即表面着色器或顶点/片元着色器。

    如果你想和各种光源打交道,你可能更喜欢使用表面着色器,但需要小心它在移动平台的性能表现。

    如果你需要使用的光照数目非常少,例如只有一个平行光,那么使用顶点片元着色器是一个更好的选择。

    最重要的是,如果你有很多自定义的渲染效果,那么请选择顶点/片元着色器。

三、后续...

    主要以顶点/片元着色器为首要学习shader。

    下一章将开始学习顶点/片元着色器的结构与组成部分。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容