我对着色器完全不熟悉,我从未做过一个
我想知道是否有可能使用着色器呈现通常不亮的纹理,除了特定的颜色,应该呈现为透明
有点像绿屏,我想让着色器渲染rgba(0,0,0,0)而不是rgba(0,1,0,1)
我知道我可以使用带有alpha的纹理,但我需要这个用于移动设备上的视频纹理,所以我认为这是唯一的选择
提前感谢您提供的任何提示或答案
答案 0 :(得分:3)
您正在寻找色度键着色器。
this Unity forum thread中有一些细节,我认为这个会做你所要求的,虽然另一个解决方案可能会“更好”,具体取决于你可以对你的视频源做些什么,等等。如果可以的话,给你读一下。
Shader "Matte/RGB Color"
{
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_Matte ("Matte Color", Color) = (1,0,1,1)
_Thresh ("Threshold", Range (0,1)) = 0.0
_Cutoff ("Cutoff", Range (0,1)) = .5
}
SubShader {
Pass {
AlphaTest Less [_Cutoff]
CGPROGRAM
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos : POSITION;
float4 uv : TEXCOORD0;
};
sampler2D _MainTex;
uniform half4 _Matte;
uniform float _Thresh;
uniform float _Cutoff;
half4 frag (v2f i) : COLOR
{
//return _Matte;
half4 color = tex2D(_MainTex, i.uv.xy);
half3 keyMinus = half3( (_Matte.r - _Thresh), (_Matte.g - _Thresh), (_Matte.b - _Thresh) );
half3 keyPlus = half3( (_Matte.r + _Thresh), (_Matte.g + _Thresh), (_Matte.b + _Thresh) );
if ( ((color.r > keyMinus.r) (color.r < keyPlus.r)) ((color.g > keyMinus.g) (color.g < keyPlus.g)) ((color.b > keyMinus.b) (color.b < keyPlus.b)) )
{
return _Cutoff;
}
return float4(color.rgb, max(0, _Cutoff-0.01));
}
ENDCG
} // pass
} // subshader
//Fallback "Transparent/Diffuse"
} // shader
资产商店也有资产,例如this one(8美元),可能效果更好,也可能没有。