2015-12-01 61 views
3

我有一个非常简单的剪裁着色器,用于在3D空间中显示图标(请参见下文)。(Unity)给Alpha剪裁着色器添加轮廓

我想以'编程方式'添加一个跟随alpha轮廓的轮廓/笔触,用户定义的厚度和颜色。

Visual description of desired effect

(左):我现在有 - 阿尔法缺口着色器 (右):我想要什么 - 一个轮廓来绕去切口 请注意:这些都不是精灵,他们是3D飞机

请问我该怎么做?

Shader "Custom/Transparent/CutoutEmissive" { 
Properties { 
    _Color ("Main Color", Color) = (1,1,1,1) 
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {} 
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 
    _EmissiveAmount ("Emissive Amount", Range(0,1)) = 0.5 
    _Outline ("Outline Thickness", Range(0,10)) = 0.0 
} 

SubShader { 
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"} 
    LOD 200 

CGPROGRAM 
#pragma surface surf Lambert alphatest:_Cutoff 

sampler2D _MainTex; 
fixed4 _Color; 
float _EmissiveAmount; 
float _Outline; 
struct Input { 
    float2 uv_MainTex; 
}; 

void surf (Input IN, inout SurfaceOutput o) { 
    fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; 
    o.Albedo = c.rgb; 
    o.Alpha = c.a; 

    o.Emission = c.rgb*_EmissiveAmount; 
} 
ENDCG 
} 

Fallback "Legacy Shaders/Transparent/Cutout/VertexLit" 
} 

回答

1

我知道它已经很晚了,但这里是反正。我遇到了这个解决方案,脚本在截断点附近应用了轮廓。它由José Guerreiro托管在git集线器上,它确实解决了我用截断网格的问题。我唯一要做的就是将截断网格添加到列表中并设置线条的颜色。它有它的厚度,强度和截止。用法写在页面上。缺点是你必须在播放模式的游戏,测试这一点,但否则它是非常好的

注意:本大纲仅适用于3D网格和精灵截止;正常的网格它不起作用。

希望这会有所帮助。

+0

这很有用 - 谢谢@killer_mech。这是一个遗憾,这不是着色器代码的一部分,因为我怀疑这可能比在GPU上执行要慢。非常感谢! –