Unityでシェーダーを書く方法を学び、カラーとアルファ値を分離して他のテクスチャ(またはレイヤー)に影響を与えないようにしています。Unity Shader:他のレイヤーに影響を与えないテクスチャレイヤーを作成するのに助けが必要です
私のシェイダーでは、文字の3つのテクスチャがあります(背景はそれぞれのテクスチャ設定で透明になっています)。
私は背景色を持ちたいと思っています。背景の上に3つのテクスチャ/レイヤーが必要で、背景や他のレイヤーに影響を与えずに各レイヤーの色合いとアルファ値を変更することができます。
も...
私はサーフィン機能でテクスチャで色を掛け、テクスチャ色合いの変化だけでなく、透明な背景を行います。トランスペアレントな背景色合いが透明なときに変化するのはなぜですか?
Properties{
_Background("BackroundColor", Color) = (1,1,1,1)
_Color("c1", Color) = (1,1,1,1)
_Color2("c2", Color) = (1,1,1,1)
_Color3("c3", Color) = (1,1,1,1)
_MainTex ("layer1", 2D) = "white" {}
_MainTex2 ("layer2", 2D) = "white" {}
_MainTex3 ("layer3", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque"}
CGPROGRAM
#pragma surface surf Lambert alpha
#pragma target 3.0
struct Input {
float2 uv_MainTex;
float2 uv2_MainTex2;
float2 uv3_MainTex3;
};
sampler2D _MainTex;
sampler2D _MainTex2;
sampler2D _MainTex3;
float4 _Background;
float4 _Color;
float4 _Color2;
float4 _Color3;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = _Background * (tex2D (_MainTex, IN.uv_MainTex).rgb*_Color) * (tex2D (_MainTex2, IN.uv2_MainTex2).rgb*_Color2) * (tex2D (_MainTex3, IN.uv3_MainTex3).rgb*_Color3);
o.Alpha = _Color.a * _Color2.a * _Color3.a;
}
ENDCG
}
Fallback "Diffuse"
色の値は、あなたが望むものではありません。特に、すべてのアルファ値を最後に掛け合わせることによって!それらのどれかが0の場合は、何も描画しません!**あなたが望む数学を理解するには、https://www.khronos.org/opengl/wiki/Blendingを参照してください。 – Draco18s