TA-Shader-文件 【Unity3D Shader编程】之三(下) :子着色器、通道与标签的写法 & 纹理混合
发布于
2015-12-1
3446
36
TA资源类型
TA资源类型: 算法思路 
shader资源类型: shader代码 
适用引擎: unity 
资源介绍: -

您需要 登录 才可以下载或查看,没有账号?注册

x
接上文(点击传送------>:【Unity3D Shader编程】之三(上) :子着色器、通道与标签的写法 & 纹理混合

【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 & 纹理混合
PS:由于原文较长.特分为上下两篇.[文章所带资源.回复可见.]作者原话(原帖地址见末尾):


接上文--------------------------

四、Shader书写实战

上面讲了一堆一堆的概念和写法,估计大家一遍看下来头都大了。没关系,依旧是让我们看一些示例Shader的写法,弄清楚上面这一堆堆的概念是如何应用的。主要是纹理相关内容的Shader书写

1. Alpha纹理混合
先看看如何用本文讲解的写法,写出一个简单的纹理混合Shader。首先设置第一个混合器只使用_MainTex,然后使用_BlendTex的Alpha通道来淡入_BlendTex的RGB颜色:

  1. Shader "浅墨Shader编程/Volume3/7.Alpha纹理混合"
  2. {
  3.     //-------------------------------【属性】-----------------------------------------  
  4.     Properties   
  5.     {
  6.         _MainTex ("基础纹理(RGB)", 2D) = "white" {}
  7.         _BlendTex ("混合纹理(RGBA) ", 2D) = "white" {}
  8.     }
  9.    
  10.     //--------------------------------【子着色器】--------------------------------  
  11.     SubShader   
  12.     {
  13.         Pass   
  14.         {
  15.             // 【1】应用主纹理  
  16.             SetTexture [_MainTex] { combine texture }
  17.             // 【2】使用相乘操作来进行Alpha纹理混合  
  18.             SetTexture [_BlendTex] {combine texture * previous}
  19.         }
  20.     }
  21. }
点击此处复制文本

进行混合的2张纹理贴图:
9.2.jpg       9.3.jpg


此Shader编译后赋给材质的效果如下:





2.纹理的Alpha通道与自发光相混合
这个着色器使用_MainTex的Alpha来描述什么地方应用光照。它通过分两个阶段应用纹理来实现;第一个阶段,纹理的Alpha值被用来在顶点颜色和纯白色之间混合。第二阶段,乘入纹理的RGB通道:


  1. Shader "浅墨Shader编程/Volume3/8.纹理的Alpha通道与自发光相混合"
  2. {
  3.     //-------------------------------【属性】-----------------------------------------  
  4.     Properties  
  5.     {
  6.         _MainTex ("基础纹理 (RGB)-自发光(A)", 2D) =  "red" { }
  7.     }
  8.    
  9.     //--------------------------------【子着色器】----------------------------------  
  10.     SubShader   
  11.     {
  12.         Pass   
  13.         {
  14.             //【1】设置白色的顶点光照  
  15.             Material   
  16.             {
  17.                 Diffuse (1,1,1,1)
  18.                 Ambient (1,1,1,1)
  19.             }
  20.    
  21.             //【2】开光照  
  22.             Lighting On  
  23.    
  24.             //【3】使用纹理的Alpha通道来插值混合颜色(1,1,1,1)
  25.             SetTexture [_MainTex]   
  26.             {
  27.                 constantColor (1,1,1,1)
  28.                 combine constant lerp(texture) previous  
  29.             }
  30.    
  31.             //【4】和纹理相乘  
  32.             SetTexture [_MainTex]   
  33.             {
  34.                 combine previous * texture  
  35.             }
  36.         }
  37.     }
  38. }
点击此处复制文本
此Shader编译后赋给材质的效果如下:




3. 纹理Alpha与自发光混合可调色版
这次我们给出一个Color属性,让自发光颜色可调:

  1. Shader "浅墨Shader编程/Volume3/9.纹理Alpha与自发光混合可调色版"  
  2. {
  3.     //-------------------------------【属性】---------------------------------------  
  4.     Properties   
  5.     {
  6.         _IlluminCol ("自发光(RGB)", Color) = (1,1,1,1)
  7.         _MainTex ("基础纹理 (RGB)-自发光(A)", 2D) = "white" {}
  8.     }
  9.    
  10.     //--------------------------------【子着色器】--------------------------------  
  11.     SubShader   
  12.     {
  13.         Pass   
  14.         {
  15.             //【1】设置白色的顶点光照  
  16.             Material   
  17.             {
  18.                 Diffuse (1,1,1,1)
  19.                 Ambient (1,1,1,1)
  20.             }
  21.    
  22.             //【2】开启光照  
  23.             Lighting On  
  24.    
  25.             // 【3】将自发光颜色混合上纹理  
  26.             SetTexture [_MainTex]   
  27.             {
  28.                 // 使颜色属性进入混合器  
  29.                 constantColor [_IlluminCol]  
  30.                 // 使用纹理的alpha通道混合顶点颜色  
  31.                 combine constant lerp(texture) previous  
  32.             }
  33.    
  34.             // 【4】乘以纹理  
  35.             SetTexture [_MainTex] {combine previous * texture }
  36.    
  37.         }
  38.     }
  39. }
点击此处复制文本
此Shader编译后赋给材质的效果如下,可以自由调节颜色:


4. 顶点光照+纹理Alpha自发光混合
我们将本文中介绍的知识点和上一篇文章中顶点光照相关的内容结合起来,主要是在Pass中添加了一句,让顶点光照可以和纹理颜色结合起来:
1://---------------------开启独立镜面反射----------------  
2:SeparateSpecular On  


完整的Shader代码如下:
  1. Shader "浅墨Shader编程/Volume3/11.顶点光照+自发光混合+纹理混合"
  2. {
  3.         //-------------------------------【属性】-----------------------------------------
  4.     Properties
  5.         {
  6.                 _IlluminCol ("自发光色", Color) = (0,0,0,0)
  7.         _Color ("主颜色", Color) = (1,1,1,0)
  8.         _SpecColor ("高光颜色", Color) = (1,1,1,1)
  9.         _Emission ("光泽颜色", Color) = (0,0,0,0)
  10.         _Shininess ("光泽度", Range (0.01, 1)) = 0.7
  11.         _MainTex ("基础纹理 (RGB)-自发光(A)", 2D) = "white" {}
  12.         _BlendTex ("混合纹理(RGBA) ", 2D) = "white" {}
  13.     }

  14.         //--------------------------------【子着色器】--------------------------------
  15.     SubShader
  16.         {
  17.                 //----------------通道---------------
  18.         Pass
  19.                 {
  20.                         //【1】设置顶点光照值
  21.             Material
  22.                         {
  23.                                 //可调节的漫反射光和环境光反射颜色
  24.                 Diffuse [_Color]
  25.                 Ambient [_Color]
  26.                                 //光泽度
  27.                 Shininess [_Shininess]
  28.                                 //高光颜色
  29.                 Specular [_SpecColor]
  30.                                 //自发光颜色
  31.                 Emission [_Emission]
  32.             }

  33.                         //【2】开启光照
  34.             Lighting On
  35.                         //【3】--------------开启独立镜面反射--------------
  36.             SeparateSpecular On


  37.             //【4】将自发光颜色混合上纹理
  38.             SetTexture [_MainTex]
  39.                         {
  40.                                 // 使颜色属性进入混合器
  41.                 constantColor [_IlluminCol]
  42.                                 // 使用纹理的alpha通道插值混合顶点颜色
  43.                 combine constant lerp(texture) previous
  44.             }

  45.             //【5】乘上基本纹理
  46.             SetTexture [_MainTex] { combine previous * texture  }

  47.                         //【6】使用差值操作混合Alpha纹理
  48.             SetTexture [_BlendTex] { combine previous*texture }

  49.                         //【7】乘以顶点纹理
  50.                         SetTexture [_MainTex] {Combine previous * primary DOUBLE, previous * primary }

  51.         }
  52.     }
  53. }
点击此处复制文本

此Shader编译后赋给材质的效果如下:



换些高光之后的效果






正常白色高光:


五、最终游戏场景效果演示——光之城堡

上一次我们处于盛大的暴风雪之中,这次的场景,不妨让我们来到梦幻又神秘的的光之城堡,领略一番不一样的味道。以大师级美工鬼斧神工的场景作品为基础,浅墨加入了音乐,并调整了场景布局,加入了更多高级特效,于是便得到了如此这次让人颇显震撼的梦幻场景。
运行游戏,我们来到繁花盛开的光之城堡:












放张shader全家福


文章所带工程文件及可运行程序资源回复可下载
尊敬的游客,如果您要查看本帖关注 或 回复可见内容请关注回复后刷新页面查看!


原文链接:http://blog.csdn.net/poem_qianmo/article/details/41175585





参与人数 1 元素币 +20
还没有设置签名!您可以在此展示你的链接,或者个人主页!

使用道具 举报 登录

回复 <
元素界王神  发表于 2015-12-1 10:46:04  
2#
非常好的shader资料~大家赶紧来学!
回复 收起回复
使用道具
zzh  发表于 2016-5-7 15:09:25  
3#
真的很好啊
回复 收起回复
使用道具
FAFA123  发表于 2016-5-10 13:33:01  
4#
66666666666666666666
回复 收起回复
使用道具
空空山新雨后  发表于 2016-6-16 16:32:31  
5#
很叼 的shader资源 感谢楼主分享 啊
回复 收起回复
使用道具
1104084633  发表于 2016-6-27 18:55:36  
6#
没和你妈妈还没
回复 收起回复
使用道具
clown2015  发表于 2016-9-20 09:07:37  
7#
好东东,顶
回复 收起回复
使用道具
zhoulijing  发表于 2017-1-11 18:50:35  
8#

点赞
回复 收起回复
使用道具
zhoulijing  发表于 2017-1-12 17:54:10  
9#
看看
回复 收起回复
使用道具
soletracy123  发表于 2017-2-4 08:41:58  
10#
很叼 的shader资源 感谢楼主分享 啊
回复 收起回复
使用道具
大芸彩  发表于 2017-8-2 15:16:54  
11#
接下来就是我了
回复 收起回复
使用道具
Rubens  发表于 2017-8-3 10:15:03  
12#
非常感谢提供分享
回复 收起回复
使用道具
夏雅  发表于 2017-10-27 16:52:06  
13#
6666
回复 收起回复
使用道具
takashi1981414  发表于 2017-11-10 11:01:01  
14#
我们先定一个能达到的小目标,先赚它一亿元素币
回复 收起回复
使用道具
qq_小蜗牛_MjJ  发表于 2018-6-9 14:14:36  
15#
我们先定一个能达到的小目标,先赚它一亿元素币
回复 收起回复
使用道具
momocongzi  发表于 2018-6-23 08:46:27  
16#
搞不懂
回复 收起回复
使用道具
Time诚信  发表于 2018-6-23 13:39:54  
17#
路过看看
回复 收起回复
使用道具
g614749432  发表于 2018-10-16 07:17:50  
18#
感谢楼主分享
回复 收起回复
使用道具
(_獨特┭  发表于 2018-10-16 09:09:40  
19#
11111111111111111
回复 收起回复
使用道具
ゞ最初的奔跑ゞ  发表于 2018-10-18 09:49:58  
20#
不错哦,感谢楼主的分享!
回复 收起回复
使用道具
12下一页

快来发表你宝贵的意见吧!

成林 实名

通过了实名认证的内容创造者

unity3D

主题
181
精华
28
超神
5
扩散
761
微金
3000
智慧
220
余额
0
在线时间
5805 小时

【绝】结界玄晶 微库VIP 扩散者 紫色药水 学徒法袍 元素铜币 元素银币 元素金币 元素秘币 长剑 绿色药水 长枪 火元素

快速回复 返回顶部 返回列表