2017-07-07 130 views
1

我完全陌生的着色透明的,我從來沒有一個着色器呈現的不是顏色

我想知道,如果它是不可能性有,通常使沒有亮燈的質感,除了特定顏色的着色器,這應該被渲染爲透明

有點像一個藍綠的事情,我想使着色渲染RGBA(0,0,0,0),而不是RGBA(0,1,0,1)

我知道我可以使用帶alpha的紋理,但是我需要在移動設備上使用這種紋理,所以我認爲這是唯一的選擇

預先感謝您提供任何提示或提供的答案

回答

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),它可以更好地工作或可能不會。

+0

謝謝你的提示! 在那裏發現了很多好東西,但仍然不是一個正常工作的着色器。 至少我明白了着色器工作原理 – ZioCain