//第一种
Shader "VRShader/DiffuseShader"
{
Properties
{
_Color("MainColor", Color) = (1, 1, 1, 1)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
//顶点着色器输入结构
struct appdata
{
float4 vertex : POSITION;//顶点位置
float3 normal : NORMAL;//法线向量坐标
};
//顶点着色器输出结构
struct v2f
{
float4 position : SV_POSITION;//像素位置
float3 normal : NORMAL;//法线向量坐标
};
//变量声明
float4 _LightColor0;
float4 _Color;
v2f vert(appdata input)
{
v2f output;
//输出的顶点位置为模型视图投影矩阵乘以顶点位置,也就是将三维空间中的坐标投影到了二维窗口
output.position = mul(UNITY_MATRIX_MVP, input.vertex);
//获取顶点在世界空间中的法线向量坐标
output.normal = mul(float4(input.normal, 0.0), unity_WorldToObject).xyz;
return output;
}
fixed4 frag(v2f input) : COLOR
{
//获取法线的方向
float3 normalDirection = normalize(input.normal);
//获取入射光线的值与方向
float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
//计算出漫反射颜色值 Diffuse=LightColor * MainColor * max(0,dot(N,L))
float3 diffuse = _LightColor0.rgb * _Color.rgb * max(0.0, -dot(normalDirection, lightDirection));
//合并漫反射颜色值与环境光颜色值
float4 DiffuseAmbient = float4(diffuse, 1.0) + UNITY_LIGHTMODEL_AMBIENT;
//将漫反射-环境光颜色值乘上纹理颜色,并返回
return DiffuseAmbient;
}
ENDCG
}
}
}
//第二种
Shader "VRShader/Rainbow_AdjustRGBValue"
{
properties
{
_ColorRValue("R",Range(0,1))=0.2
_ColorGValue("G",Range(0,1))=0.2
_ColorBValue("B",Range(0,1))=0.2
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//变量声明
float _ColorRValue;
float _ColorGValue;
float _ColorBValue;
//顶点输出结构体
struct vertexOutput
{
float4 position:SV_POSITION;
float4 color:TEXCOORD0;
};
//顶点函数
vertexOutput vert(float4 vertexPos:POSITION)
{
vertexOutput v;
v.position=mul(UNITY_MATRIX_MVP,vertexPos);
v.color=vertexPos+float4(_ColorRValue,_ColorGValue,_ColorBValue,0);
return v;
}
//片段函数
float4 frag(vertexOutput output):COLOR
{
return output.color;
}
ENDCG
}
}
}
//第三种
Shader "VRShader/Rainbow_AdjustValue"
{
properties
{
_ColorValue("ColorValue",Range(0,1))=0.2
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//变量声明
float _ColorValue;
//顶点输出结构体
struct vertexOutput
{
float4 position:SV_POSITION;
float4 color:TEXCOORD0;
};
//顶点函数
vertexOutput vert(float4 vertexPos:POSITION)
{
vertexOutput v;
v.position=mul(UNITY_MATRIX_MVP,vertexPos);
v.color=vertexPos+float4(_ColorValue,_ColorValue,_ColorValue,0);
return v;
}
//片段函数
float4 frag(vertexOutput output):COLOR
{
return output.color;
}
ENDCG
}
}
}
//第四种
Shader "VRShader/Vertex&Fragment&Rainbow"
{
Properties
{
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert//顶点函数声明
#pragma fragment frag//片段函数声明
//顶点函数输出结构体
struct vertexOutput
{
float4 position:SV_POSITION;//像素坐标位置
float4 color:TEXCOORD0;//0级纹理坐标
};
//顶点函数
vertexOutput vert(float4 vertexPos:POSITION)
{
//声明结构体
vertexOutput v;
//顶点坐标变换
v.position=mul(UNITY_MATRIX_MVP,vertexPos);
//设置顶点颜色
v.color=vertexPos+float4(0.2,0.2,0.2,1);
//返回结果
return v;
}
//片段函数
float4 frag(vertexOutput output):COLOR
{
//返回颜色值
return output.color;
}
ENDCG
}
}
}
//第五种
Shader "VRShader/Vertex&Fragment&SingleColor"
{
Properties
{
_Color("Color",color)=(1,1,1,1)
}
SubShader
{
//Pass通道
Pass
{
CGPROGRAM
#pragma vertex vert//顶点函数声明
#pragma fragment frag//片段函数声明
float4 _Color;
//顶点函数
//vertexPos顶点坐标位置(语义绑定POSITION)
//返回值float4像素坐标位置(语义绑定SV_POSITION)
float4 vert(float4 vertexPos:POSITION):SV_POSITION
{
return mul(UNITY_MATRIX_MVP,vertexPos);
}
//返回值(语义绑定COLOR颜色)
float4 frag():COLOR
{
//Hard Coding 硬编码
//return float4(1,0,0,1);
return _Color;
}
ENDCG
}
}
}
Shader(顶点片段着色器)
最新推荐文章于 2025-05-26 16:54:21 发布