Unity Shader | 入门—程序(一)

创建shader( 如下 )

一、Shader Lab基本结构

//此处shader的名字不要求和文件名一致
Shader "Chichi/01-myshader"{
	
	//(在面板显示,可调节)属性
    Properties{
		//属性 _Color("属性名",类型) = (r,g,b,a)
		//在shader语言中必须再自定义一次它显示的属性名
		_Color("_Color",Color) = (1,1,1,1)
    }

	/*属性块,可以编写多个SubShader,显卡运行效果时,
	如果第一个SubShader某些效果显卡显示不了,它会自动运行下一个SubShader */
    SubShader{
		//一个pass块相当于一个功能方法(至少一个)
		Pass{
		//此处编写shader代码(也能写HLSLPROGRAM)
			CGPROGRAM
			//使用CG语言编写shader代码
			ENDCG
		}		
    }
	//用来指定一个已经存在的Shader(当上述方案显卡都无法执行时的后备方案)
    FallBack "VertexLit"	    //有一个指定的_Color,注意重名
}

( 补充说明 )

二、属性(Properties{})的几种类型

_Colour("Colour",Color) = (1,1,1,1)        //float4

_Vector("Vector",Vector) = (1,2,3,4)       //float4
//Color和Vector本质上是一种类型

_Int("Int",Int) = 3233                                //float

_Float("Float",Float)  = 4.5                      //float
//Shader里面只有float没有double,不用加f 

_Range("Range",Range(1,11)) = 6         //float
//Range本支上相当于做了范围限制的Float

_2D("Texture",2D) = "white"{}                  //sampler2D
//不指定图片时默认颜色white

_Cube("Cube",Cube) = "white"{}             //samplerCube
//立方体纹理——天空盒子

_3D("Texture",3D) = "black"{}                  //sampler3D

三、使用CG语言编写shader代码(pass块中)

Pass{
			CGPROGRAM
			//使用CG语言编写shader代码
			//需要重新对上述属性定义,但是不用再赋默认值(会自动取到)		
			/* 
               fixed(-2 到 +2),可以存储颜色的值
               float4对应4个值
               所有的float都能用half代替
			   float用32位进行存储,half用16位进行存储(-6万 到 +6万) 
            */
            //fixed4 _Colour
            float4 _Colour;
			float4 _Vector;
			float3 t1;
			half2 t;
            float _Int;
			float _Float;
			float _Range;
			sampler2D _2D;
			samplerCube _Cube;
			sampler3D _3D;		
			ENDCG
	}		

四、制作一个可运行的简易Shader

顶点函数:以建模中心为原点,对渲染物体的顶点进行几何变换( 每个顶点被函数处理 ),使其从模型空间转换到剪裁(屏幕)空间

片元函数:一个模型对应若干像素(即片元),函数对每个像素点的颜色进行处理,并返回一个颜色值

顶点函数和片元函数的方法名、返回值、参数都不是固定的,而且是被系统自动调用的,无需自己调用

Shader "Chichi / 02 - myshader can Run"{
	//Properties 可以没有
	SubShader{
		Pass{
			CGPROGRAM
			
#pragma vertex vert		//顶点函数(函数名自定义)		
#pragma fragment frag	//片元函数(函数名自定义)
			// 参数(v): POSITION →固定语义:把顶点坐标传递给参数
			// 方法() : SV_POSITION →固定语义:返回值是剪裁空间下的顶点坐标
			float4 vert(float4 v : POSITION) : SV_POSITION {
                //矩阵和position的乘法运算
				float4 pos = mul(UNITY_MATRIX_MVP,v);
				return pos;							
			}
			//返回颜色
			fixed4 frag() : SV_Target {
				return fixed4(0.5,0.5,1,0.5);
			
			}

			ENDCG
		}
	}
	Fallback "VertexLit"
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值