对于游戏,始于好玩,陷于好玩,忠于好玩。
今个学习了浅墨大神的一篇关于混合纹理的文章,比较基础,整理如下:
一.双纹理混合
Shader "WC/双纹理混合" {
Properties {
_MainTex ("主纹理 (RGB)", 2D) = "white" {}
_BlendTex ("混合纹理 (RGB)", 2D) = "white"{}
}
SubShader {
//通道1
Pass{
setTexture[_MainTex] {combine texture} //主纹理
setTexture[_BlendTex] {combine texture * previous} //混合纹理 texture为_MainTex的颜色,previous为上一次SetTexture的结果
}
//通道 N..
//Pass
//{
// ooooooxxxxxx
//}
}
}
二.纹理 + 自发光
Shader "WC/纹理 + 自发光" {
Properties {
_MainTex ("主纹理 (RGB)", 2D) = "white" {}
_Color ("自发光",Color) = (1,1,1,1)
}
SubShader {
Pass{
SetTexture[_MainTex]
{
constantColor [_Color] //定义自发光颜色 注:关键字constantColor: 定义combine命令里的常量颜色
combine constant lerp(texture) previous //lerp差值函数,这里是用texture(_MainTex的透明度通道值)在constant和previous之间进行差值,差值是反向的,当透明度为0时使用previous,为1时使用constant
//注:constant为上句constantColor定义的颜色,texture为_MainTex的颜色,previous为上一次SetTexture的结果
}
SetTexture[_MainTex]
{
combine previous * texture //将纹理与上次SetTexture结果混合
}
}
}
}
三.顶点光照 + 纹理 + 自发光
Shader "WC/顶点光照 + 纹理 + 自发光" {
Properties {
_MainTex ("主纹理 (RGB)", 2D) = "white" {}
_MainColor ("主颜色",Color) = (1,1,1,1)
_SpecColor ("高光颜色",Color) = (1,1,1,1)
_IlluminCol ("混合自发光色", Color) = (1,1,1,1)
_Emission ("自发光色", Color) = (0,0,0,0)
_Shininess ("光泽度", Range (0.01, 1)) = 0.7
}
SubShader
{
Pass
{
Material
{
Diffuse[_MainColor] //漫反射
Ambient[_MainColor] //环境光
Specular[_SpecColor] //高光
Emission[_Emission] //自发光
Shininess[_Shininess] //光泽度
}
Lighting On
SeparateSpecular On //开启独立镜面反射 开启后,高光色会在混合计算后被加入
SetTexture[_MainTex]
{
constantColor [_IlluminCol]
combine constant lerp(texture) previous
}
SetTexture[_MainTex]
{
combine previous * texture
}
SetTexture[_MainTex]
{
combine previous * primary,previous * primary // 注:默认情况下primary颜色是漫反射,阴影色和高光颜色(在光线计算中定义)的加和
}
}
}
}
四.顶点光照+自发光+纹理混合
Shader "WC/顶点光照+自发光+纹理混合" { Properties { _MainTex ("主纹理 (RGB)", 2D) = "white" {} _BlendTex ("混合纹理 (RGB)",2D) = "black" {} _MainColor ("主颜色",Color) = (1,1,1,1) _SpecColor ("高光颜色",Color) = (1,1,1,1) _IllsColor ("混合自发光色",Color) = (1,1,1,1) _Emission ("自发光",Color) = (1,1,1,1) _Shininess ("光泽度",Range(0.01,1)) = 0.5 } SubShader { Pass { Material { Diffuse[_MainColor] Ambient[_MainColor] Specular[_SpecColor] Emission[_Emission] Shininess[_Shininess] } Lighting On SeparateSpecular On SetTexture[_MainTex] { constantColor[_IllsColor] //自发光 combine constant lerp(texture) previous //差值 } SetTexture[_BlendTex] { combine previous * texture //纹理混合 } SetTexture[_MainTex] { combine previous * primary,previous * primary } } } }
完