概览
关系:模型是人,材质是衣服,着色器是裁缝
FixedShader
Fixed01.shader
//决定Shader在Material中出现的路径,这个名字跟Shader的文件名字没有任何关系
Shader "My Shaders/Fixed Shader/01"
{
//属性
Properties
{
//变量名("变量显示在编辑器中的名字",变量的类型)=初始值
//定义一个浮点数
_FloatValue("一个浮点数",float) =0.5
//定义一个整数
_IntValue("一个整数",int)=10
//范围浮点数
_Shininess("光泽度",range(1,10))=5
//四维变量
_Vec4("四维数",vector)=(1,2,3,4)
//颜色
_MainColor("主颜色",color)=(1,0,0,1)
//贴图
_MainTexture("主纹理",2D) = "white"{}
//非2介贴图变量
_RecTexture("副纹理",rect) = ""{}
//立方体贴图变量
_CubeTexture("天空盒",cube) = ""{}
//3D贴图变量_Shininess
_3DTexture("3D纹理",3D) = ""{}
}
//子着色器
//是一种渲染方案,是着色的方式,一个Shader当中可能会有多个Shader
//但是系统只能使用一个SubShader,调用顺序默认从上往下
//系统会根据自身的硬件性能来判断能否使用SubShader
SubShader
{
//标签,可以指定一个渲染队列
tags{"Queue"="3000"}//tags{"Queue"="3000"}//有固定的写法
//每个Pass都可以理解为一个方法
Pass
{
//正面剔除
//cull Front
//关闭深度测试
ZTest Less
//设置固定的颜色
//Color(0,0,1,0)
//设置可调颜色
color[_MainColor]
}
//Pass
//{
//反面剔除
//cull back
//}
}
//默认Shadr(备胎),当上面的SubShader都不能用的时候,系统会使用这个备胎(渲染方案、Shader)
//FallBack "aaa/MySurfaceShader"
FallBack "Diffuse"
}
- 基本组成
- 路径:Shader
- 属性:Properties
- 子着色器:SubShader
- 默认着色器:FallBack“Diffuse”
2.数据类型 - 浮点数、整数:变量名("变量显示在编辑器中的名字",float/int)=初始值
- 范围浮点数:变量名("变量显示在编辑器中的名字",range(最小范围,最大范围))=初始值
- 四维变量:变量名("变量显示在编辑器中的名字",vector)=(初始值1,初始值2,初始值3,初始值4)
- 颜色:变量名("变量显示在编辑器中的名字",color)=(初始值1,初始值2,初始值3,初始值4)
- 贴图:变量名("变量显示在编辑器中的名字",2D)="white"{}
- 非2阶贴图:变量名("变量显示在编辑器中的名字",rect)=""{}
- 立方体贴图:变量名("变量显示在编辑器中的名字",cube)=""{}
- 3D贴图:变量名("变量显示在编辑器中的名字",3D)=""{}
- tags{}
4.Pass{}:类似于C#中的方法
5.剔除
- 正面剔除:cull Front
- 反面剔除:cull back
- 关闭剔除:cull off
6.深度测试:ZTest 测试等级
7.设置颜色 - 设置固定颜色:Color(0,0,1,0)
- 设置可调颜色:color[变量名]
- material{}:固定管道着色器的标志
- Diffuse[变量名]
- Ambient[变量名]
- Specular[变量名]
- Emission[变量名]
- 打开顶点光照:Lighting On
- 设置纹理:settexture[变量名]{}
- combine
- primary
- 打开镜面反射:SeparateSpecular on
- CG代码块:CGROGRAM...ENDCG
15.编译指令: #pragma 着色器类型 着色器的函数名称 光照模型
-着色器类型:surface
- 光照模型:Lambert、Standard fullforwardshadows
- finalcolor:SetColor
- 输入结构:struct Input{float4 f;};
- 编写着色器方法:
- 着色器方法名(Input 输入变量名,inout SurfaceOutput 输出变量名){}
- 着色器方法名(Input 输入变量名,inout SurfaceOutputStandard 输出变量名){}
- 输出颜色:输出变量名.Albedo=颜色变量名.rgb;
- 输出透明度:输出变量名.Alpha=颜色变量名.a;
- 通过uv坐标获取每个顶点的颜色值:tex2D(纹理对象,每个顶点的uv(在Input结构中))
- 计算法线:UnpackNormal();
- 输出法线:输出变量名.Normal
- 设置颜色的方法:方法名(Input 输入变量名,SurfaceOutputStandard 输出变量名,inout fixed4 color){}
- 声明顶点着色器:#pragma vertex 方法名
- 声明片段着色器:#pragma fragment 方法名
- 引用CG库: include "UnityCG.cginc"
- LOD 对应颜色的数值
- 设置LOD值:material对象.shader.maximumLOD=设置值
Fixed02.shader
// 决定Shader在Material中出现的路径,这个名字跟Shader的文件名字没有任何关系
Shader "My Shaders/Fixed Shader/02"
{
// 属性
Properties
{
// 漫反射颜色
_MainColor("漫反射颜色", color) = (0, 0, 0, 1)
// 环境光颜色
_AmbientColor("环境光颜色", color) = (0, 0, 0, 1)
// 光泽度
_Shininess("光泽度", range(0.1, 1)) = 0.5
// 高光颜色
_Specular("高光颜色", color) = (0, 0, 0, 1)
// 自发光颜色
_Emission("自发光颜色", color) = (0, 0, 0, 1)
// 纹理贴图
_MainTexture("纹理", 2D) = ""{}
}
// 子着色器是一种渲染方案,是着色的方式,一个Shader当中可能会有多个Shader
// 但是系统只能使用一个SubShader,调用顺序默认从上往下
// 系统会根据自身的硬件性能来判断能否使用SubShader
SubShader
{
tags{"Queue" = "Geometry"}
//ZTest off
Pass
{
//cull off
// 固定管线着色器的标志
material
{
Diffuse[_MainColor]
Ambient[_AmbientColor]
//Specular[_Specular]
Emission[_Emission]
}
// 打开顶点光照
Lighting On
// 设置纹理
settexture[_MainTexture]
{
// 纹理与漫反射的颜色混合
combine texture * primary double
}
// 打开镜面反射
//SeparateSpecular on
}
}
// 默认Shader(备胎),当上面的SubShader都不能用的时候,系统会使用这个备胎(渲染方案、Shader)
//FallBack "aaa/MySurfaceShader"
FallBack "Diffuse"
}
SurfaceShader
Surface01.shader
Shader "My Shaders/Surface Shader/01"
{
Properties
{
_Color("Color", color) = (1, 1, 1, 1)
}
SubShader
{
// 编写CG代码
CGPROGRAM
// 编译指令 表面着色器 着色器的函数名称(自己定义的) 光照模型
// 光照模型是一个公式,系统会使用此公式去计算某个点的光照效果
#pragma surface surf Lambert
struct Input
{
float4 color : COLOR;
};
// 定义一个颜色变量,跟上面的属性对应
float4 _Color;
// 表面着色器函数
void surf(Input IN, inout SurfaceOutput o)
{
o.Albedo = _Color.rgb;
o.Alpha = _Color.a;
}
ENDCG
}
FallBack "Diffuse"
}
Surface02.shader
Shader "My Shaders/Surface Shader/02"
{
Properties
{
_Color("Color", color) = (1, 1, 1, 1)
_MainTexture("MainTexture", 2D) = ""{}
_Glossiness("Smoothness", range(0, 1)) = 0.5
_Metallic("Matallic", range(0, 1)) = 0.5
}
SubShader
{
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
// 定义主纹理的uv变量
float2 uv_MainTexture;
};
// 在CG代码块中重新定义_MainTex等属性,使CG代码块能够访问到这些属性
fixed4 _Color;
sampler2D _MainTexture;
fixed _Glossiness;
fixed _Metallic;
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
// 通过uv坐标获取每个顶点的颜色值,并进行赋值
// tex2D(纹理对象, 每个顶点的uv(在Input结构中))
fixed4 c = tex2D(_MainTexture, IN.uv_MainTexture) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
}
ENDCG
}
FallBack "Diffuse"
}
Surface03.shader
Shader "My Shaders/Surface Shader/03"
{
Properties
{
_Color("Color", color) = (1, 1, 1, 1)
_MainTexture("MainTexture", 2D) = ""{}
_Glossiness("Smoothness", range(0, 1)) = 0.5
_Metallic("Matallic", range(0, 1)) = 0.5
// 法线纹理
_BumpMap("NormalTexture", 2D) = ""{}
}
SubShader
{
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
// 定义主纹理的uv变量
float2 uv_MainTexture;
// 定义发现纹理的uv变量
float2 uv_BumpMap;
};
// 在CG代码块中重新定义_MainTex等属性,使CG代码块能够访问到这些属性
fixed4 _Color;
sampler2D _MainTexture;
fixed _Glossiness;
fixed _Metallic;
sampler2D _BumpMap;
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
// 通过uv坐标获取每个顶点的颜色值,并进行赋值
// tex2D(纹理对象, 每个顶点的uv(在Input结构中))
fixed4 c = tex2D(_MainTexture, IN.uv_MainTexture) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
// 通过uv获取每个顶点的颜色值,并通过UnpackNormal计算法线(3维向量)
fixed3 f = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
o.Normal = f;
}
ENDCG
}
FallBack "Diffuse"
}
Surface04.shader
// 表面着色器加纹理贴图+法线纹理+可调节颜色
Shader "My Shaders/Surface Shader/04"
{
Properties
{
_Color("Color", color) = (1, 1, 1, 1)
_MainTex("MainTexture", 2D) = ""{}
// 法线纹理
_BumpMap("NormalTexture", 2D) = ""{}
}
SubShader
{
CGPROGRAM
#pragma surface surf Standard fullforwardshadows finalcolor:SetColor
#pragma target 3.0
struct Input
{
// 定义主纹理的UV变量
float2 uv_MainTex;
// 定义法线纹理的UV变量
float2 uv_BumpMap;
};
// 在CG代码中重新定义_MainTex,使CG代码块能够访问到_MainTex
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _Color;
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
// 通过uv坐标获取每个顶点的颜色值,并赋值
// tex2D(纹理对象,每个顶点的uv(需要在Input结构当中通过uv_MainTex获取))
fixed3 c = tex2D(_MainTex, IN.uv_MainTex).rgb;
o.Albedo = c.rgb;
// 通过uv获取每个顶点的颜色值,并通过UnpackNormal获取计算法线(fixed3)
fixed3 f = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
o.Normal = f;
}
// 设置颜色的方法
void SetColor(Input IN, SurfaceOutputStandard o, inout fixed4 color)
{
color *= _Color;
}
ENDCG
}
FallBack "Diffuse"
}
OutLine01.shader
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Custom/OutLine1"
{
Properties
{
_MainTex("main tex",2D) = ""{}
_Factor("factor",Range(0,0.1)) = 0.01//描边粗细因子
_OutLineColor("outline color",Color) = (0,0,0,1)//描边颜色
}
SubShader
{
Pass
{
Cull Front //剔除前面
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 vertex :POSITION;
};
float _Factor;
half4 _OutLineColor;
v2f vert(appdata_full v)
{
v2f o;
//v.vertex.xyz += v.normal * _Factor;
//o.vertex = mul(UNITY_MATRIX_MVP,v.vertex);
//变换到视坐标空间下,再对顶点沿法线方向进行扩展
float4 view_vertex = mul(UNITY_MATRIX_MV,v.vertex);
float3 view_normal = mul(UNITY_MATRIX_IT_MV,v.normal);
view_vertex.xyz += normalize(view_normal) * _Factor; //记得normalize
o.vertex = mul(UNITY_MATRIX_P,view_vertex);
return o;
}
half4 frag(v2f IN):COLOR
{
//return half4(0,0,0,1);
return _OutLineColor;
}
ENDCG
}
Pass
{
Cull Back //剔除后面
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 vertex :POSITION;
float4 uv:TEXCOORD0;
};
sampler2D _MainTex;
v2f vert(appdata_full v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
return o;
}
half4 frag(v2f IN) :COLOR
{
//return half4(1,1,1,1);
half4 c = tex2D(_MainTex,IN.uv);
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}
Surface05.sahder
// 表面着色器加纹理贴图+法线纹理+可调节颜色+边缘高光
Shader "My Shaders/Surface Shader/05"
{
Properties
{
_Color("Color", color) = (1, 1, 1, 1)
_MainTex("MainTexture", 2D) = ""{}
// 法线纹理
_BumpMap("NormalTexture", 2D) = ""{}
// 边缘高光的颜色
_RimColor("RimColor", color) = (1, 0, 0, 1)
// 边缘高光系数
_Rim("边缘高光系数", range(0, 5)) = 0
}
SubShader
{
CGPROGRAM
#pragma surface surf Standard fullforwardshadows finalcolor:SetColor
#pragma target 3.0
struct Input
{
// 定义主纹理的UV变量
float2 uv_MainTex;
// 定义法线纹理的UV变量
float2 uv_BumpMap;
// 视角的方向
float3 viewDir;
};
// 在CG代码中重新定义_MainTex,使CG代码块能够访问到_MainTex
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _Color;
fixed4 _RimColor;
half _Rim;
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
// 通过uv坐标获取每个顶点的颜色值,并赋值
// tex2D(纹理对象,每个顶点的uv(需要在Input结构当中通过uv_MainTex获取))
fixed3 c = tex2D(_MainTex, IN.uv_MainTex).rgb;
o.Albedo = c.rgb;
// 通过uv获取每个顶点的颜色值,并通过UnpackNormal获取计算法线(fixed3)
fixed3 f = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
o.Normal = f;
half rim = 1 - saturate(dot(IN.viewDir, o.Normal));
// 设置高光
o.Emission = _RimColor.rgb * pow(rim, _Rim);
}
// 设置颜色的方法
void SetColor(Input IN, SurfaceOutputStandard o, inout fixed4 color)
{
color *= _Color;
}
ENDCG
}
FallBack "Diffuse"
}
Surface05Ctrl.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Surface05Ctrl : MonoBehaviour
{
[Range(0, 5)]
public float range;
Material m;
void Start ()
{
m = GetComponent<Renderer>().material;
}//end_Start
void Update ()
{
m.SetFloat("_Rim", range);
}//end_Update
}
Surface06.shader
// 表面着色器加纹理贴图+法线纹理+可调节颜色+边缘高光
Shader "My Shaders/Surface Shader/06cull"
{
Properties
{
_Color("Color", color) = (1, 1, 1, 1)
_MainTex("MainTexture", 2D) = ""{}
}
SubShader
{
// 说明Shader渲染的类型,决定渲染顺序
Tags{"RenderType" = "Opaque"}
// 不写剔除的话,默认就是背面剔除
//cull back
// 正面剔除
//cull front
// 关闭剔除
cull off
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
// 定义主纹理的UV变量
float2 uv_MainTex;
// 定义法线纹理的UV变量
float2 uv_BumpMap;
};
// 在CG代码中重新定义_MainTex,使CG代码块能够访问到_MainTex
sampler2D _MainTex;
fixed4 _Color;
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
// 通过uv坐标获取每个顶点的颜色值,并赋值
// tex2D(纹理对象,每个顶点的uv(需要在Input结构当中通过uv_MainTex获取))
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Surface0601.sahder
// 表面着色器加纹理贴图+法线纹理+可调节颜色+边缘高光
Shader "My Shaders/Surface Shader/06cull01"
{
Properties
{
_Color("Color", color) = (1, 1, 1, 1)
_FrontTexture("正向纹理", 2D) = ""{}
_BackTexture("反向纹理", 2D) = ""{}
}
SubShader
{
// 说明Shader渲染的类型,决定渲染顺序
Tags{"RenderType" = "Opaque"}
// 不写剔除的话,默认就是背面剔除
cull back
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
// 定义正向纹理的UV变量
float2 uv_FrontTexture;
};
// 在CG代码中重新定义_MainTex,使CG代码块能够访问到_MainTex
sampler2D _FrontTexture;
fixed4 _Color;
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
// 通过uv坐标获取每个顶点的颜色值,并赋值
// tex2D(纹理对象,每个顶点的uv(需要在Input结构当中通过uv_MainTex获取))
fixed4 c = tex2D(_FrontTexture, IN.uv_FrontTexture) * _Color;
o.Albedo = c.rgb;// * fixed3(1, 0, 0);
o.Alpha = c.a;
}
ENDCG
// 正面剔除
cull front
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
// 定义正向纹理的UV变量
float2 uv_BackTexture;
};
// 在CG代码中重新定义_MainTex,使CG代码块能够访问到_MainTex
sampler2D _BackTexture;
fixed4 _Color;
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
// 通过uv坐标获取每个顶点的颜色值,并赋值
// tex2D(纹理对象,每个顶点的uv(需要在Input结构当中通过uv_MainTex获取))
fixed4 c = tex2D(_BackTexture, IN.uv_BackTexture) * _Color;
o.Albedo = c.rgb;// * fixed3(0, 1, 0);
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Surface07.shader
// 表面着色器加纹理贴图+法线纹理+可调节颜色+边缘高光
Shader "My Shaders/Surface Shader/07"
{
SubShader
{
LOD 600 // red
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
fixed f;
};
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = fixed3(1, 0, 0);
}
ENDCG
}
SubShader
{
LOD 400 // green
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
fixed f;
};
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = fixed3(0, 1, 0);
}
ENDCG
}
SubShader
{
LOD 200 // blue
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
fixed f;
};
// 编写表面着色器的方法
void surf(Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = fixed3(0, 0, 1);
}
ENDCG
}
FallBack "Diffuse"
}
LODCtrl.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LODCtrl : MonoBehaviour
{
Material m;
void Start ()
{
//m = GetComponent<Renderer>().sharedMaterial;
m = GetComponent<Renderer>().material;
}//end_Start
void Update ()
{
if (Input.GetKeyDown(KeyCode.A))
{
//m.color = Color.red;
m.shader.maximumLOD = 600;
}
if (Input.GetKeyDown(KeyCode.B))
{
//m.color = Color.green;
m.shader.maximumLOD = 400;
}
if (Input.GetKeyDown(KeyCode.C))
{
//m.color = Color.blue;
m.shader.maximumLOD = 200;
}
}//end_Update
}
Surface08.shader
// 表面着色器加纹理贴图+法线纹理+可调节颜色+边缘高光
Shader "My Shaders/Surface Shader/08"
{
Properties
{
_Color01("Color1", color) = (1, 0, 0, 1)
_Color02("Color2", color) = (0, 1, 0, 1)
}
SubShader
{
//tags{"Queue" = "Transprent"}
// 处理没有遮挡住的部分,显示红色
ZTest LEqual
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
fixed4 _Color01;
struct Input
{
fixed f;
};
void surf(Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = _Color01.rgb;
}
ENDCG
// 处理遮挡住的部分,显示绿色
ZTest Greater
CGPROGRAM
#pragma surface surf Standard fullforwardshadows finalcolor:SetColor
fixed4 _Color02;
struct Input
{
fixed f;
};
void surf(Input IN, inout SurfaceOutputStandard o)
{
//o.Albedo = _Color02;
//o.Alpha = 0;
}
void SetColor(Input IN, SurfaceOutputStandard o, inout fixed4 color)
{
color *= _Color02;
}
ENDCG
}
FallBack "Diffuse"
}
Vertex and Fragment Shader
VF01.shader
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "My Shaders/Vertex and Fragment Shader/VF01"
{
// Pass中出现了CGPROGRAM和ENDCG 出现了顶点和片段函数
SubShader
{
Pass
{
CGPROGRAM
// 顶点函数和片段函数的指令,声明两个函数
#pragma vertex vert
#pragma fragment frag
// 顶点的输出结构
struct vertOut
{
// 顶点的位置:语义(添加语义绑定,对变量做解释说明)
float4 pos : POSITION; // 模型空间下的顶点坐标
};
// 片段的输出结构
struct fragOut
{
fixed4 Col : COLOR; // 顶点的颜色
};
// 顶点函数,返回值是顶点结构体
vertOut vert(float4 v:POSITION) // 顶点信息从模型空间传到裁剪空间
{
vertOut o;
//o.pos = UnityObjectToClipPos(v);
o.pos = UnityObjectToClipPos(v);
return o;
}
// 片段函数,返回值是片段信息
fragOut frag()
{
fragOut o;
o.Col = fixed4(1, 0, 0, 1);
return o;
}
ENDCG
}
}
FallBack "Diffuse"
}
VF02.shader
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "My Shaders/Vertex and Fragment Shader/VF02"
{
Properties
{
_Color("Color", Color) = (1, 1, 1, 1)
_MainTexture("MainTexture", 2D) = ""{}
}
// Pass中出现了CGPROGRAM和ENDCG 出现了顶点和片段函数
SubShader
{
Pass
{
CGPROGRAM
// 顶点函数和片段函数的指令,声明两个函数
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// 重新定义属性,使CG代码能过够使用这些属性
fixed4 _Color;
sampler2D _MainTexture;
float4 _MainTexture_ST;
// 顶点的输出结构
struct vertOut
{
// 顶点的位置:语义(添加语义绑定,对变量做解释说明)
float4 pos : POSITION; // 模型空间下的顶点坐标
float2 uv : TEXCOORD0; // 表示纹理坐标
};
// 片段的输出结构
struct fragOut
{
fixed4 Col : COLOR; // 顶点的颜色
};
// 顶点函数,返回值是顶点结构体
vertOut vert(appdata_base o)
{
vertOut res;
//o.pos = UnityObjectToClipPos(v);
res.pos = UnityObjectToClipPos(o.vertex);
res.uv = TRANSFORM_TEX(o.texcoord, _MainTexture);
return res;
}
// 片段函数,返回值是片段信息
fragOut frag(vertOut IN)
{
fragOut o;
o.Col = tex2D(_MainTexture, IN.uv) * _Color;
return o;
}
ENDCG
}
}
FallBack "Diffuse"
}
VF03.shader
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "My Shaders/Vertex and Fragment Shader/VF03"
{
// Pass中出现了CGPROGRAM和ENDCG 出现了顶点和片段函数
SubShader
{
Pass
{
CGPROGRAM
// 顶点函数和片段函数的指令,声明两个函数
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// 顶点的输出结构
struct vertOut
{
// 顶点的位置:语义(添加语义绑定,对变量做解释说明)
fixed4 pos : POSITION; // 模型空间下的顶点坐标
};
// 顶点函数,返回值是顶点结构体
float4 vert(appdata_base o) : POSITION
{
return UnityObjectToClipPos(o.vertex);
}
// VPOS顶点位置,SV_Target是显示到屏幕上的颜色值(由片段函数传递给系统的)
fixed4 frag(float4 sp : VPOS):SV_Target
{
fixed r = abs(cos(_Time.z));
fixed g = abs(sin(_Time.z));
fixed b = abs(sin(_Time.z));
return fixed4(r, g, b, 1);
}
ENDCG
}
}
FallBack "Diffuse"
}