【千锋合集】史上最全Unity3D全套教程|匠心之作_哔哩哔哩_bilibili
Shader "MyShader/Surface/Surface001" {
Properties {float number=10;
float2 pos=float2(0.3,0.5);//相当于unity中vector2
float3 vector3=float3(1,1,1);//相当于unity中vector3
float4 vector4=float4(0,0,1,1);//相当于unity中vector4half2 h2=half2(1,1);
half3 h3=half3(1,1,3);fixed a=0.1;
fixed3 color=fixed3(1,1,1);bool2 bl2=bool2(false,true);
//纹理
sampler2D tex;
}
//表明着色器中不需要添加Pass通道
SubShader {
CGPROGRAM //------CGPROGRAM的开始------
#pragma surface surf Lambert //表面着色器 函数名 光照模型
struct Input{
//定义输入颜色
float4 color:COLOR;
};//必须加分号
void surf(Input IN,inout SurfaceOutput o)
{
//设置输出RGB
o.Albedo=float3(1,1,0);
}
ENDCG//------CG语言的结束------
}
}
Shader "MyShader/Surface/Surface002" {
Properties {
_DiffuseColor("漫反射颜色",Color)=(1,0,0,1)
}
//表明着色器中不需要添加Pass通道
SubShader {
CGPROGRAM //------CGPROGRAM的开始------
#pragma surface surf Lambert alpha //表面着色器 函数名 光照模型 特殊设置
//声明属性变量
fixed4 _DiffuseColor;
struct Input{
//定义输入颜色
float4 color:COLOR;
};//必须加分号
void surf(Input IN,inout SurfaceOutput o)
{
//设置输出RGB
//o.Albedo=IN.color
o.Albedo=_DiffuseColor.rgb;
//设置输出的Alpha
o.Alpha=_DiffuseColor.a;
}
ENDCG//------CG语言的结束------
}
}
Shader "MyShader/Surface/Surface003" {
Properties {
_DiffuseColor("漫反射颜色",Color)=(1,0,0,1)
_MainTex("纹理图片",2D)=""{}
}
//表明着色器中不需要添加Pass通道
SubShader {
CGPROGRAM //------CGPROGRAM的开始------
#pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
//声明属性变量
fixed4 _DiffuseColor;
sampler2D _MainTex;
struct Input{
//定义图片的uv坐标***uv_图片类型
fixed2 uv_MainTex;
//定义输入颜色
float4 color:COLOR;
};//必须加分号
void surf(Input IN,inout SurfaceOutput o)
{
//通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
//叠加颜色值
o.Albedo*=_DiffuseColor.rgb*2;
}
ENDCG//------CG语言的结束------
}
}
Shader "MyShader/Surface/Surface004" {
Properties {
_MainTex("纹理图片",2D)=""{}
_BumpMap("法线贴图",2D)=""{}
_MainCol("颜色",Color)=(1,1,1,1)
}
//表明着色器中不需要添加Pass通道
SubShader {
CGPROGRAM //------CGPROGRAM的开始------
#pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
//声明属性变量
sampler2D _MainTex;
sampler2D _BumpMap;fixed4 _MainCol;
struct Input{
//定义图片的uv坐标***uv_图片类型
fixed2 uv_MainTex;
//定义法线贴图的uv坐标
fixed2 uv_BumpMap;
};//必须加分号
void surf(Input IN,inout SurfaceOutput o)
{
//通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
o.Albedo+=_MainCol.rgb;
//通过法线贴图的uv坐标查找法线贴图所对应的颜色值,赋给albedo
o.Normal=UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap));
}
ENDCG//------CG语言的结束------
}
}
Shader "MyShader/Surface/Surface005" {
Properties {
_MainTex("纹理图片",2D)=""{}
_BumpMap("法线贴图",2D)=""{}
_MainCol("颜色",Color)=(1,1,1,1)
_RimCol("发光颜色",Color)=(1,1,1,1)
_Rim("放光强度",Range(0,10))=0.5
}
//表明着色器中不需要添加Pass通道
SubShader {
CGPROGRAM //------CGPROGRAM的开始------
#pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
//声明属性变量
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _RimCol;
fixed4 _MainCol;
half _Rim;
struct Input{
//定义图片的uv坐标***uv_图片类型
fixed2 uv_MainTex;
//定义法线贴图的uv坐标
fixed2 uv_BumpMap;
//视图方向【顶点指向观察者的方向向量】
half3 viewDir;
};//必须加分号
void surf(Input IN,inout SurfaceOutput o)
{
//通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
//求发光系数
half rimPower= 1-saturate(dot(normalize(IN.viewDir),normalize(o.Normal)));
//通过发光系数进行自发光
o.Emission=_RimCol*rimPower*_Rim;
}
ENDCG//------CG语言的结束------
}
}
Shader "MyShader/Surface/Surface005" {
Properties {
_MainTex("纹理图片",2D)=""{}
_BumpMap("法线贴图",2D)=""{}
_MainCol("颜色",Color)=(1,1,1,1)
_RimCol("发光颜色",Color)=(1,1,1,1)
_Rim("放光强度",Range(0,10))=0.5
}
//表明着色器中不需要添加Pass通道
SubShader {
CGPROGRAM //------CGPROGRAM的开始------
#pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
//声明属性变量
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _RimCol;
fixed4 _MainCol;
half _Rim;
struct Input{
//定义图片的uv坐标***uv_图片类型
fixed2 uv_MainTex;
//定义法线贴图的uv坐标
fixed2 uv_BumpMap;
//视图方向【顶点指向观察者的方向向量】
half3 viewDir;
};//必须加分号
void surf(Input IN,inout SurfaceOutput o)
{
//通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
//求发光系数
half rimPower= 1-saturate(dot(normalize(IN.viewDir),normalize(o.Normal)));
//通过发光系数进行自发光
o.Emission=_RimCol*rimPower*_Rim;
}
ENDCG//------CG语言的结束------
}
}
o.Emission=_RimCol*pow(rimPower,_Rim);
Shader "MyShader/Surface/Surface006" {
Properties {
_MainTex("纹理图片",2D)=""{}
_BumpMap("法线贴图",2D)=""{}
_DetailTex("细节纹理",2D)=""{}
_MainCol("漫反射颜色",Color)=(1,1,1,1)
_RimCol("边缘发光颜色",Color)=(1,1,1,1)
_Rim("边缘发光强度",Range(0,10))=0.5
}
//表明着色器中不需要添加Pass通道
SubShader {
CGPROGRAM //------CGPROGRAM的开始------
#pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
//声明属性变量
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _DetailTex;
fixed4 _RimCol;
fixed4 _MainCol;
half _Rim;
struct Input{
//定义图片的uv坐标***uv_图片类型
fixed2 uv_MainTex;
//定义法线贴图的uv坐标
fixed2 uv_BumpMap;
//定义细节纹理的uv坐标
fixed2 uv_DetailTex;
//视图方向【顶点指向观察者的方向向量】
half3 viewDir;
};//必须加分号
void surf(Input IN,inout SurfaceOutput o)
{
//通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
//叠加细节纹理
o.Albedo+=tex2D(_DetailTex,IN.uv_DetailTex).rgb;
//叠加颜色
o.Albedo+=_MainCol.rgb;
//添加法线贴图
o.Normal=UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap));
//求发光系数
half rimPower= 1-saturate(dot(normalize(IN.viewDir),normalize(o.Normal)));
//通过发光系数进行自发光
//o.Emission=_RimCol*rimPower*_Rim;
o.Emission=_RimCol*pow(rimPower,_Rim);
}
ENDCG//------CG语言的结束------
}
}