1. UNITY_CG_Shader 基本功能

一:

CG的入口为Subshader,

其中有若干pass, 依次产生效果(基于计算机硬件)

若某一个PASS不能产生应有的效果,则跳过此PASS

二:

CGPOGRAM 表示CG代码段开始

CGEND 表示CG代码段结束

三:

每个CG代码段都必须有

#pragma vertex xxx

  #pragma fragment xxx

表示顶点 与片元的入口

顶点函数: 将模型上的点转化为裁剪窗口上的点

片元函数: 返回模型上对应屏幕上的像素颜色

Shader "YCB/02 shader"{
	SubShader{
		Pass{
			CGPROGRAM
			//顶点函数  从顶点坐标-》裁剪窗口(游戏环境->摄像机)
			#pragma vertex vert
			//片元函数  返回模型上对应屏幕上的像素的颜色
			#pragma fragment frag


			float4 vert(float4 v:POSITION):SV_POSITION{ //通过语义告诉系统,这个参数的作用,比如postion告知系统需要顶点坐标
			//SV_POSTION这个语义用来解释说明返回值,意思是返回值是裁剪窗口下的坐标
			//float4 pos=mul(UNITY_MATRIX_MVP,v);
			//return pos;
			return mul(UNITY_MATRIX_MVP,v);
			}

			//上部分代码等价于:


			fixed4 frag():SV_Target{
				return fixed4(0.55,0.1,0.1,1);
			}
			ENDCG
		}
	}
 
	
	Fallback "VertexLit"

}
结构体的使用:

Shader "YCB/03 shader"{
	SubShader{
		Pass{
			CGPROGRAM
			//顶点函数  从顶点坐标-》裁剪窗口(游戏环境->摄像机)
			#pragma vertex vert
			//片元函数  返回模型上对应屏幕上的像素的颜色
			#pragma fragment frag

			//替换部分代码等价于:
			struct a2v {
				float4 vertex:POSITION;
			};
						
			float4 vert(a2v v) :SV_POSITION{
			return mul(UNITY_MATRIX_MVP,v.vertex);
			}


			fixed4 frag():SV_Target{
				return fixed4(0.55,0.5,0.5,1);
			}
			ENDCG
		}
	}
 
	
	Fallback "VertexLit"

}

添加法线:

Shader "YCB/03 shader"{
	SubShader{
		Pass{
			CGPROGRAM
			//顶点函数  从顶点坐标-》裁剪窗口(游戏环境->摄像机)
			#pragma vertex vert
			//片元函数  返回模型上对应屏幕上的像素的颜色
			#pragma fragment frag

			//application to vertex
			struct a2v {
				float4 vertex:POSITION;
				float3 normal : NORMAL;
				float4 texcoord :TEXCOORD0;
			};
			//vertex to fragment
			struct v2f{
				float3 tmp:COLOR0;
				float4 position : SV_POSITION;
			};

			v2f vert(a2v v) {
				v2f f;
				f.position = mul(UNITY_MATRIX_MVP,v.vertex);
				f.tmp=v.normal;				
				return f;
			}
			fixed4 frag(v2f f):SV_Target{
				return fixed4(f.tmp,1);
			}
			ENDCG
		}
	}
 
	
	Fallback "VertexLit"

}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值