(Unity) Добавление контура в шейдер альфа-вырезов

У меня есть очень простой шейдер выреза для отображения иконок в 3D-пространстве (см. ниже).

Я хочу «программно» добавить контур/штрих, который следует альфа-контурам, с определенной пользователем толщиной и цветом.

Визуальное описание желаемого эффекта

(Слева): То, что у меня сейчас есть — шейдер альфа-вырезки (Справа): Что мне нужно — контур вокруг выреза Обратите внимание: это не спрайты, это 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"
}

person Ben Hayward    schedule 01.12.2015    source источник


Ответы (1)


Я знаю, что уже очень поздно, но все равно вот. Я наткнулся на это решение, где скрипт применяет контур рядом с отсечкой. Он размещен на git hub José Guerreiro и действительно решил мою проблему с обрезанными сетками. Единственное, что мне нужно было сделать, это добавить в список обрезанные сетки и задать цвет линии. Он имеет свою толщину, интенсивность и отсечку. Использование написано на самой странице. Недостатком является то, что вам нужно будет запустить игру в игровом режиме, чтобы проверить это, но в остальном это действительно приятно.

Примечание. Этот контур работает только с обрезкой 3D-сеток и спрайтов; нормальные сетки не работают.

Надеюсь это поможет.

person killer_mech    schedule 08.06.2016
comment
Это полезно - спасибо @killer_mech. Жаль, что это не часть кода шейдера, так как я подозреваю, что это могло бы выполняться медленнее, чем если бы это было сделано на графическом процессоре. Большое спасибо! - person Ben Hayward; 08.06.2016