(Unity) 给Alpha Cutout Shader添加描边效果

5
我有一个非常简单的抠图着色器,用于在3D空间中显示图标(见下文)。
我希望“以编程方式”添加一个轮廓/描边,它遵循alpha轮廓,并具有用户定义的厚度和颜色。

Visual description of desired effect

(左侧)我目前拥有的是 - alpha抠图着色器 (右侧)我想要的是 - 在抠图周围加上轮廓线 请注意:这些不是精灵,它们是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个回答

3
我知道已经很晚了,但这里还是有一个解决方案。我发现这个脚本可以在截断附近应用轮廓。它由José Guerreiro托管在git hub上,并且确实解决了我的截断网格问题。我所要做的就是将截断网格添加到列表中并设置线条颜色。它具有其厚度、强度和截止功能。使用方法写在页面上。缺点是您必须将游戏置于播放模式以测试,但除此之外它真的很好。

注意:此轮廓仅适用于3D网格和精灵的截断;对于普通网格,它不起作用。

希望这可以帮助你。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ben Hayward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接