【Unity3D Shader编程】之十三 单色透明Shader 标准镜面高光Shader

本文介绍了Unity3D中Shader的编程实践,涉及单色透明Shader、颜色可调版单色透明Shader和双面双色透明Shader的实现,以及标准镜面高光Shader和带纹理的specular shader。通过代码示例和实例展示,展示了不同Shader在游戏场景中的应用效果,提供相关资源下载链接。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               


 本系列文章由@浅墨_毛星云 出品,转载请注明出处。  
 文章链接: http://blog.csdn.net/poem_qianmo/article/details/50878538
 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 
 本文工程使用的Unity3D版本: 5.2.1 

 

 

本次更新放出的Shader为透明系列的3个Shader和标准的镜面高光Shader的两个Shader。由易到难,由入门级到应用级,难度梯度合理。

依然是先放出游戏场景的exe和运行截图。

 

 



本期用的模型为妙蛙草。



 

【可运行的本文配套exe游戏场景请点击这里下载】

 

 

 

OK,直奔主题吧。

 

 

 



一、单色透明Shader




在上篇文章中单色透明的基础上进行改造,加入alpha混合,构成了这篇文章的第一个Shader——单色透明Shader。具体代码如下:

 

//透明单色ShaderShader "浅墨Shader编程/Volume13/1.SimpleAlphaShader"//------------------------------------【唯一的子着色器】------------------------------------ SubShader {   //设置Queue为透明,在所有非透明几何体绘制之后再进行绘制  Tags{ "Queue" = "Transparent" }  Pass  {   //不写入深度缓冲,为了不遮挡住其他物体   ZWrite Off   //选取Alpha混合方式   Blend  SrcAlpha SrcAlpha   //Blend SrcAlpha OneMinusSrcAlpha   //===========开启CG着色器语言编写模块============   CGPROGRAM   //编译指令:告知编译器顶点和片段着色函数的名称   #pragma vertex vert    #pragma fragment frag   //--------------------------------【顶点着色函数】-----------------------------   // 输入:POSITION语义(坐标位置)   // 输出:SV_POSITION语义(像素位置)   //---------------------------------------------------------------------------------   float4 vert(float4 vertexPos : POSITION) : SV_POSITION   {    //坐标系变换    //输出的顶点位置(像素位置)为模型视图投影矩阵乘以顶点位置,也就是将三维空间中的坐标投影到了二维窗口    return mul(UNITY_MATRIX_MVP, vertexPos);   }   //--------------------------------【片段着色函数】-----------------------------   // 输入:无   // 输出:COLOR语义(颜色值)   //---------------------------------------------------------------------------------   float4 frag(void) : COLOR   {    //返回单色    return float4(0.3, 1.0, 0.1, 0.6);   }   //===========结束CG着色器语言编写模块===========   ENDCG  } }}

将其施用于材质之上的效果如下:

 

实景效果如下:

 







二、颜色可以调版单色透明Shader

 


 

老规矩,让颜色可调,来一个Properties属性块,替换掉Hard encoding硬编码的颜色。所以,代码如下:

 

//颜色可以调版单色透明ShaderShader "浅墨Shader编程/Volume13/2.ColorChangeAlpha"//------------------------------------【属性值】------------------------------------ Properties {  //颜色值  _ColorWithAlpha("ColorWithAlpha", Color) = (0.9, 0.1, 0.1, 0.5) } //------------------------------------【唯一的子着色器】------------------------------------ SubShader {  //设置Queue为透明,在所有非透明几何体绘制之后再进行绘制  Tags{ "Queue" = "Transparent" }  //--------------------------------唯一的通道-------------------------------  Pass  {   //不写入深度缓冲,为了不遮挡住其他物体   ZWrite Off   //选取Alpha混合方式   Blend  SrcAlpha SrcAlpha   //Blend SrcAlpha OneMinusSrcAlpha   //===========开启CG着色器语言编写模块============   CGPROGRAM   //编译指令:告知编译器顶点和片段着色函数的名称   #pragma vertex vert    #pragma fragment frag   //变量声明   uniform float4 _ColorWithAlpha;   //--------------------------------【顶点着色函数】-----------------------------   // 输入:POSITION语义(坐标位置)   // 输出:SV_POSITION语义(像素位置)   //---------------------------------------------------------------------------------   float4 vert(float4 vertexPos : POSITION) : SV_POSITION   {    //坐标系变换    //输出的顶点位置(像素位置)为模型视图投影矩阵乘以顶点位置,也就是将三维空间中的坐标投影到了二维窗口    return mul(UNITY_MATRIX_MVP, vertexPos);   }   //--------------------------------【片段着色函数】-----------------------------   // 输入:无   // 输出:COLOR语义(颜色值)   //---------------------------------------------------------------------------------   float4 frag(void) : COLOR   {    //返回自定义的RGBA颜色    return _ColorWithAlpha;   }   //===========结束CG着色器语言编写模块===========   ENDCG  } }}


将其施用于材质之上的效果如下:



这边的调色板中,,除了RGB三色,还有Alpha值可以进行调节。

实景效果如下:


 

 

 



三、双面双色颜色可以调版透明Shader

 


我们可以利用Cull语句,分别在两个Pass中Cull Front和Cull Back,以让材质的正面和反面显示出不同的颜色。代码实现如下:

//双面双色颜色可以调版透明ShaderShader "浅墨Shader编程/Volume13/3.TwoSideColorChangeAlpha"//------------------------------------【属性值】------------------------------------ Properties {  //正面颜色值  _ColorWithAlpha_Front("ColorWithAlpha_Front", Color) = (0.9, 0.1, 0.1, 0.5)  //背面颜色值  _ColorWithAlpha_Back("ColorWithAlpha_Back", Color) = (0.1, 0.3, 0.9, 0.5) } //------------------------------------【唯一的子着色器】------------------------------------ SubShader {  //设置Queue为透明,在所有非透明几何体绘制之后再进行绘制  Tags{ "Queue" = "Transparent" }  //------------------------【通道1:渲染正面】-------------------------  Pass  {   //剔除背面,渲染正面   Cull Back   //不写入深度缓冲,为了不遮挡住其他物体   ZWrite Off    //选取Alpha混合方式   Blend SrcAlpha OneMinusSrcAlpha   //Blend  SrcAlpha SrcAlpha   //===========开启CG着色器语言编写模块============   CGPROGRAM   //编译指令:告知编译器顶点和片段着色函数的名称   #pragma vertex vert    #pragma fragment frag   //变量声明   uniform float4 _ColorWithAlpha_Front;   //--------------------------------【顶点着色函数】---
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值