混合2纹理Unity C#

问题描述 投票:0回答:1

如何将两个纹理混合成一个新纹理?

我有一个来自android画廊的纹理和一些logo png纹理。我需要将此徽标添加到图库中的纹理中,并将其存储为变量以作为新图像保存到库中。

c# unity3d textures texture2d
1个回答
1
投票

这些着色器基于您控制的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
        }
    }
}

}
© www.soinside.com 2019 - 2024. All rights reserved.