2015-12-01 95 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上執行要慢。非常感謝! –