如何将两个纹理混合成一个新纹理?
我有一个来自android画廊的纹理和一些logo png纹理。我需要将此徽标添加到图库中的纹理中,并将其存储为变量以作为新图像保存到库中。
这些着色器基于您控制的0-1值在两个纹理之间进行混合。第一个版本是超快的,因为它不使用光照,第二个版本使用我在Simply Lit着色器中使用的相同的基本环境+漫反射计算。
http://wiki.unity3d.com/index.php/Blend_2_Textures
将不同的纹理拖到每个材质的可变槽上,然后使用Blend控件将它们混合到味道中。
请注意,点亮的版本需要在最旧的iOS设备上使用的GPU上两次通过。
ShaderLab - Blend 2 Textures.shader
Shader "Blend 2 Textures" {
Properties {
_Blend ("Blend", Range (0, 1) ) = 0.5
_MainTex ("Texture 1", 2D) = ""
_Texture2 ("Texture 2", 2D) = ""
}
SubShader {
Pass {
SetTexture[_MainTex]
SetTexture[_Texture2] {
ConstantColor (0,0,0, [_Blend])
Combine texture Lerp(constant) previous
}
}
}
}
ShaderLab - 混合2纹理,简单Lit.shader
Shader "Blend 2 Textures, Simply Lit" {
Properties {
_Color ("Color", Color) = (1,1,1)
_Blend ("Blend", Range (0,1)) = 0.5
_MainTex ("Texture 1", 2D) = ""
_Texture2 ("Texture 2", 2D) = ""
}
Category {
Material {
Ambient[_Color]
Diffuse[_Color]
}
// iPhone 3GS and later
SubShader {Pass {
Lighting On
SetTexture[_MainTex]
SetTexture[_Texture2] {
ConstantColor (0,0,0, [_Blend])
Combine texture Lerp(constant) previous
}
SetTexture[_] {Combine previous * primary Double}
}}
// pre-3GS devices, including the September 2009 8GB iPod touch
SubShader {
Pass {
SetTexture[_MainTex]
SetTexture[_Texture2] {
ConstantColor (0,0,0, [_Blend])
Combine texture Lerp(constant) previous
}
}
Pass {
Lighting On
Blend DstColor SrcColor
}
}
}
}