1. UNITY_CG_Shader 基本功能

来源:互联网 发布:windows ad域管理工具 编辑:程序博客网 时间:2024/06/04 23:29

一:

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 fragfloat4 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 vertexstruct a2v {float4 vertex:POSITION;float3 normal : NORMAL;float4 texcoord :TEXCOORD0;};//vertex to fragmentstruct 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"}