Shader学习笔记2

来源:互联网 发布:华为 acl 端口 编辑:程序博客网 时间:2024/06/06 04:58

这一篇就全是官方文档上我感觉有用的一些效果了。

这是一种加入天空盒的Shader,他会呈现出以下状态,他也可以放在人物模型上,有反光的感觉
注意: 如果需要加入发现贴图,在Input结构体里要加上INTERNAL_DATA(没分号)
Shader"MySurfaceShader/CubeMapShader"{
Properties{

     _MainTexture("MainTexture",2D)="white"{}
    //加入一个天空盒
     _Cube("Cubemap",CUBE) = ""{}

}
SubShader{
//RenderType表示渲染模式,Opaque表示不透明物体
     Tags{"RenderType"="Opaque"}
//Level of Detail
     LOD200

CGPROGRAM
#pragma surface surf Lambert
structInput{
   //取得属性面板的纹理uv,用固定格式:uv变量名
   fixed2uv_MainTexture;
   fixed3worldRefl;
};

//2D在CG语言里面用sampler2D表示,sampler中文含义:采样
//Color在CG语言里面用fixed4表示
sampler2D_MainTexture;
samplerCUBE_Cube;
voidsurf (InputIN,inoutSurfaceOutputo){
//每个顶点的颜色,通过uv计算得到
o.Albedo =tex2D(_MainTexture,IN.uv_MainTexture).rgb;
o.Emission =texCUBE(_Cube,IN.worldRefl).rgb;
}
ENDCG
}

FallBack"DIFFUSE"
}


这个是边缘光的Shader

可以调节边缘光的颜色和强度
Shader"MySurfaceShader/HeroShader"{
Properties{

     _MainTexture("MainTexture",2D)="white"{}
     _BumpTex("BumpTexture",2D) ="bump"{}
    //边缘照明强调对象的边缘。(看上去像是边上一圈光)添加一些放射光基于曲面法线夹角和视图方向。
     _RimColor("Rim Color",Color) = (0.26,0.19,0.16,0.0)
     _RimPower("Rim Power",Range(0.5,8.0))=3.0

}
SubShader{
//RenderType表示渲染模式,Opaque表示不透明物体
     Tags{"RenderType"="Opaque"}
//Level of Detail
     LOD200

CGPROGRAM
#pragma surface surf Lambert
structInput{
   //取得属性面板的纹理uv,用固定格式:uv变量名
   fixed2uv_MainTexture;
   fixed2uv_BumpTex;
   //使用viewDir内置表面着色器变量。
   fixed3viewDir;
};

//2D在CG语言里面用sampler2D表示,sampler中文含义:采样
//Color在CG语言里面用fixed4表示
sampler2D_MainTexture;
sampler2D_BumpTex;
fixed4_RimColor;
half_RimPower;
voidsurf (InputIN,inoutSurfaceOutputo){
//每个顶点的颜色,通过uv计算得到
o.Albedo =tex2D(_MainTexture,IN.uv_MainTexture).rgb;
o.Normal =UnpackNormal(tex2D(_BumpTex,IN.uv_BumpTex));
halfrim = 1.0 -saturate(dot(normalize(IN.viewDir),o.Normal));
o.Emission = _RimColor.rgb*pow(rim,_RimPower);
}
ENDCG
}

FallBack"DIFFUSE"
}



贴图细节Shader

效果就像屏幕上的脏东西,长得和贴图一样
Shader"MySurfaceShader/TextureDetailShader"{
Properties{

     _MainTexture("MainTexture",2D)="white"{}
    //细节处理,更真实,更立体
     _Detail("Detail",2D)="grey"{}
}
SubShader{
//RenderType表示渲染模式,Opaque表示不透明物体
     Tags{"RenderType"="Opaque"}
//Level of Detail
     LOD200

CGPROGRAM
#pragma surface surf Lambert
structInput{
   //取得属性面板的纹理uv,用固定格式:uv变量名
   fixed2uv_MainTexture;
   //感觉像屏幕上的脏东西,长得和贴图一样
   fixed4screenPos;

};

//2D在CG语言里面用sampler2D表示,sampler中文含义:采样
//Color在CG语言里面用fixed4表示
sampler2D_MainTexture;
sampler2D_Detail;
voidsurf (InputIN,inoutSurfaceOutputo){
//每个顶点的颜色,通过uv计算得到
o.Albedo =tex2D(_MainTexture,IN.uv_MainTexture).rgb;
fixed2screenUV = IN.screenPos.xy/IN.screenPos.w;
screenUV *=fixed2(8,6);
o.Albedo *=tex2D(_Detail,screenUV).rgb*2;


}
ENDCG
}

FallBack"DIFFUSE"
}
这是细节Shader,和上面的代码差别不大,但是效果还是有区别的。

就是在基础贴图上乘等于一张细节贴图,产生一种贴图融合的感觉
Shader"MySurfaceShader/DetailShader"{
Properties{

     _MainTexture("MainTexture",2D)="white"{}
     _BumpTex("BumpTexture",2D) ="bump"{}
    //细节处理,更真实,更立体
     _Detail("Detail",2D)="grey"{}
}
SubShader{
//RenderType表示渲染模式,Opaque表示不透明物体
     Tags{"RenderType"="Opaque"}
//Level of Detail
     LOD200

CGPROGRAM
#pragma surface surf Lambert
structInput{
   //取得属性面板的纹理uv,用固定格式:uv变量名
   fixed2uv_MainTexture;
   fixed2uv_BumpTex;
   fixed2uv_Detail;

};

//2D在CG语言里面用sampler2D表示,sampler中文含义:采样
//Color在CG语言里面用fixed4表示
sampler2D_MainTexture;
sampler2D_BumpTex;
sampler2D_Detail;
voidsurf (InputIN,inoutSurfaceOutputo){
//每个顶点的颜色,通过uv计算得到
o.Albedo =tex2D(_MainTexture,IN.uv_MainTexture).rgb;
o.Albedo *=tex2D(_Detail,IN.uv_Detail).rgb*2;
o.Normal =UnpackNormal(tex2D(_BumpTex,IN.uv_BumpTex));

}
ENDCG
}

FallBack"DIFFUSE"
}


卡通效果Shader

是对物体的定点进行修改,产生扩张和收缩的效果,扩张0.1,大概就像是卡通的样子(夸张)

Shader"MySurfaceShader/AmountShader"{
Properties{

     _MainTexture("MainTexture",2D)="white"{}
    //人物变粗变细,0是正常,0+是向外扩张,0-是向内收缩
     _Amount ("Extrusion Amount",Range(-1,1))= 0.5

}
SubShader{
//RenderType表示渲染模式,Opaque表示不透明物体
     Tags{"RenderType"="Opaque"}
CGPROGRAM
#pragma surface surf Lambert vertex:vert
structInput{
   //取得属性面板的纹理uv,用固定格式:uv变量名
   fixed2uv_MainTexture;
};
fixed_Amount;
voidvert(inoutappdata_fullv){
v.vertex.xyz += v.normal*_Amount;
}


//2D在CG语言里面用sampler2D表示,sampler中文含义:采样
//Color在CG语言里面用fixed4表示
sampler2D_MainTexture;
voidsurf (InputIN,inoutSurfaceOutputo){
//每个顶点的颜色,通过uv计算得到
o.Albedo =tex2D(_MainTexture,IN.uv_MainTexture).rgb;
}
ENDCG
}

FallBack"DIFFUSE"
}
颜色修补Shader
这个Shader主要是surface中有finalcolor(Tint)的函数,是最后调用修补颜色用的
Shader"MySurfaceShader/TintShader"{
Properties{

     _MainTexture("MainTexture",2D)="white"{}
    //色彩(底色)
     _ColorTint("Tint",Color) = (1.0,0.6,0.6,1.0)
}
SubShader{
//RenderType表示渲染模式,Opaque表示不透明物体
     Tags{"RenderType"="Opaque"}
CGPROGRAM
//需要定义
#pragma surface surf Lambert finalcolor:mycolor
structInput{
   //取得属性面板的纹理uv,用固定格式:uv变量名
   fixed2uv_MainTexture;
};
fixed4_ColorTint;

//颜色修补函数
voidmycolor (InputIN,SurfaceOutputo,inoutfixed4color){

color*= _ColorTint;
}


sampler2D_MainTexture;
voidsurf (InputIN,inoutSurfaceOutputo){
//每个顶点的颜色,通过uv计算得到
o.Albedo =tex2D(_MainTexture,IN.uv_MainTexture).rgb;
}
ENDCG
}

FallBack"DIFFUSE"
}

0 0
原创粉丝点击