您需要 登录 才可以下载或查看,没有账号?注册
x
接上文(点击传送------>:【Unity3D Shader编程】之三(上) :子着色器、通道与标签的写法 & 纹理混合
【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 & 纹理混合
PS:由于原文较长.特分为上下两篇.[文章所带资源.回复可见.]作者原话(原帖地址见末尾):
接上文--------------------------
四、Shader书写实战
上面讲了一堆一堆的概念和写法,估计大家一遍看下来头都大了。没关系,依旧是让我们看一些示例Shader的写法,弄清楚上面这一堆堆的概念是如何应用的。主要是纹理相关内容的Shader书写
1. Alpha纹理混合
先看看如何用本文讲解的写法,写出一个简单的纹理混合Shader。首先设置第一个混合器只使用_MainTex,然后使用_BlendTex的Alpha通道来淡入_BlendTex的RGB颜色:
- Shader "浅墨Shader编程/Volume3/7.Alpha纹理混合"
- {
- //-------------------------------【属性】-----------------------------------------
- Properties
- {
- _MainTex ("基础纹理(RGB)", 2D) = "white" {}
- _BlendTex ("混合纹理(RGBA) ", 2D) = "white" {}
- }
-
- //--------------------------------【子着色器】--------------------------------
- SubShader
- {
- Pass
- {
- // 【1】应用主纹理
- SetTexture [_MainTex] { combine texture }
- // 【2】使用相乘操作来进行Alpha纹理混合
- SetTexture [_BlendTex] {combine texture * previous}
- }
- }
- }
点击此处复制文本
进行混合的2张纹理贴图:
此Shader编译后赋给材质的效果如下:
2.纹理的Alpha通道与自发光相混合
这个着色器使用_MainTex的Alpha来描述什么地方应用光照。它通过分两个阶段应用纹理来实现;第一个阶段,纹理的Alpha值被用来在顶点颜色和纯白色之间混合。第二阶段,乘入纹理的RGB通道:
- Shader "浅墨Shader编程/Volume3/8.纹理的Alpha通道与自发光相混合"
- {
- //-------------------------------【属性】-----------------------------------------
- Properties
- {
- _MainTex ("基础纹理 (RGB)-自发光(A)", 2D) = "red" { }
- }
-
- //--------------------------------【子着色器】----------------------------------
- SubShader
- {
- Pass
- {
- //【1】设置白色的顶点光照
- Material
- {
- Diffuse (1,1,1,1)
- Ambient (1,1,1,1)
- }
-
- //【2】开光照
- Lighting On
-
- //【3】使用纹理的Alpha通道来插值混合颜色(1,1,1,1)
- SetTexture [_MainTex]
- {
- constantColor (1,1,1,1)
- combine constant lerp(texture) previous
- }
-
- //【4】和纹理相乘
- SetTexture [_MainTex]
- {
- combine previous * texture
- }
- }
- }
- }
点击此处复制文本 此Shader编译后赋给材质的效果如下:
3. 纹理Alpha与自发光混合可调色版
这次我们给出一个Color属性,让自发光颜色可调:
- Shader "浅墨Shader编程/Volume3/9.纹理Alpha与自发光混合可调色版"
- {
- //-------------------------------【属性】---------------------------------------
- Properties
- {
- _IlluminCol ("自发光(RGB)", Color) = (1,1,1,1)
- _MainTex ("基础纹理 (RGB)-自发光(A)", 2D) = "white" {}
- }
-
- //--------------------------------【子着色器】--------------------------------
- SubShader
- {
- Pass
- {
- //【1】设置白色的顶点光照
- Material
- {
- Diffuse (1,1,1,1)
- Ambient (1,1,1,1)
- }
-
- //【2】开启光照
- Lighting On
-
- // 【3】将自发光颜色混合上纹理
- SetTexture [_MainTex]
- {
- // 使颜色属性进入混合器
- constantColor [_IlluminCol]
- // 使用纹理的alpha通道混合顶点颜色
- combine constant lerp(texture) previous
- }
-
- // 【4】乘以纹理
- SetTexture [_MainTex] {combine previous * texture }
-
- }
- }
- }
点击此处复制文本 此Shader编译后赋给材质的效果如下,可以自由调节颜色:
4. 顶点光照+纹理Alpha自发光混合我们将本文中介绍的知识点和上一篇文章中顶点光照相关的内容结合起来,主要是在Pass中添加了一句,让顶点光照可以和纹理颜色结合起来:
1://---------------------开启独立镜面反射----------------
2:SeparateSpecular On
完整的Shader代码如下:
- Shader "浅墨Shader编程/Volume3/11.顶点光照+自发光混合+纹理混合"
- {
- //-------------------------------【属性】-----------------------------------------
- Properties
- {
- _IlluminCol ("自发光色", Color) = (0,0,0,0)
- _Color ("主颜色", Color) = (1,1,1,0)
- _SpecColor ("高光颜色", Color) = (1,1,1,1)
- _Emission ("光泽颜色", Color) = (0,0,0,0)
- _Shininess ("光泽度", Range (0.01, 1)) = 0.7
- _MainTex ("基础纹理 (RGB)-自发光(A)", 2D) = "white" {}
- _BlendTex ("混合纹理(RGBA) ", 2D) = "white" {}
- }
-
- //--------------------------------【子着色器】--------------------------------
- SubShader
- {
- //----------------通道---------------
- Pass
- {
- //【1】设置顶点光照值
- Material
- {
- //可调节的漫反射光和环境光反射颜色
- Diffuse [_Color]
- Ambient [_Color]
- //光泽度
- Shininess [_Shininess]
- //高光颜色
- Specular [_SpecColor]
- //自发光颜色
- Emission [_Emission]
- }
-
- //【2】开启光照
- Lighting On
- //【3】--------------开启独立镜面反射--------------
- SeparateSpecular On
-
-
- //【4】将自发光颜色混合上纹理
- SetTexture [_MainTex]
- {
- // 使颜色属性进入混合器
- constantColor [_IlluminCol]
- // 使用纹理的alpha通道插值混合顶点颜色
- combine constant lerp(texture) previous
- }
-
- //【5】乘上基本纹理
- SetTexture [_MainTex] { combine previous * texture }
-
- //【6】使用差值操作混合Alpha纹理
- SetTexture [_BlendTex] { combine previous*texture }
-
- //【7】乘以顶点纹理
- SetTexture [_MainTex] {Combine previous * primary DOUBLE, previous * primary }
-
- }
- }
- }
点击此处复制文本
此Shader编译后赋给材质的效果如下:
换些高光之后的效果
正常白色高光:
五、最终游戏场景效果演示——光之城堡
上一次我们处于盛大的暴风雪之中,这次的场景,不妨让我们来到梦幻又神秘的的光之城堡,领略一番不一样的味道。以大师级美工鬼斧神工的场景作品为基础,浅墨加入了音乐,并调整了场景布局,加入了更多高级特效,于是便得到了如此这次让人颇显震撼的梦幻场景。
运行游戏,我们来到繁花盛开的光之城堡:
放张shader全家福
文章所带工程文件及可运行程序资源回复可下载尊敬的 游客,如果您要查看本帖关注 或 回复可见内容请 关注或 回复后刷新页面查看!
原文链接:http://blog.csdn.net/poem_qianmo/article/details/41175585
|