阅读背景:

图形学笔记2----unityShader基本格式_一个无聊的人做一些有意思的事_shader 格式

来源:互联网 

 一.书写格式

Shader "learn/MyShader" //shader名称
{
	Properties  //面板上面出现的一些属性需要在这里定义
	{
		//代码里用的名字("面板上现实的名字",类型)= 默认值
    
		m_int("disInt",Int) = 0
		m_float("disFloat",Float) = 0
		m_rand("disRange",Range(0.0,5.0)) = 3.0
		m_color("disColor",Color) = (1,1,1,1)
		m_vector("disVec",Vector) = (1,1,1,1)
		m_2d("dis2D",2D) = ""{}
		m_cube("disCube",Cube) = "white"{}
		m_3D("dis3D",3D) = "black" {}
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader  //这个语句块是必须的,看可以有多个,会根据平台去选择,多个原因是,不同的平台,显卡,渲染能力不行,我们可以指定什么显卡用什么渲染方式
    {
		//[Tags]标签,[RenderSeup]状态 都是可选的,这两个可以再pass外面用也可以在里面用(具体用法不同),如果在里面用的话那么将会应用于所有的pass
		//[RenderSeup]用来设置显卡的各种状态,例如开启混合|深度测试等等
		//[Tags]是一个键值对,用来表示,subshader和渲染引擎之间的关系,告诉引擎,我该怎样,或者如何渲染对象

        Tags { "RenderType"="Opaque" }
        LOD 100
	   //顶点,片元着色器的书写都会在pass里面,但是surfaceShader不需要,,
		//surfaceShader是对片元,顶点着色器更高一层的抽象,他的价值在于会帮我们处理很多光照细节,使我们不需要操心了
        Pass
        {
		//一般包含以下内容
		//[name] 名字,如果指定了名字,别的shader可以使用这个,例如USEPASS "MyShader/我这个pass的名字"注:unity会把所有名称转成大写,所以usepass 后面要大写
		//[Tags] 这里面的tag和在外面生命用法不一样了,表示希望我们来怎么渲染该物体,具体用法后期整理	
            CGPROGRAM  //开启CG代码段
			//编译指令
            #pragma vertex vert
            #pragma fragment frag
		    //定义了一个结构体
            struct appdata
            {
                float4 vertex : POSITION;//:后面表示不同的语义,这个表示,用模型空间的顶点坐标填充vertex
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };


            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                return col;
            }
            ENDCG
        }
    }
		//如果上面的subshader都不满足条件,就会执行下面的东西
		FallBack "指定pass"
	    FallBack off//关闭
}
Shader "learn/MyShader" //shader名称
{



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: