Search Unity

Resolved Glow filter over color mask [Solved with custom blur node]

Discussion in 'Shader Graph' started by ParadoxSolutions, May 29, 2020.

  1. ParadoxSolutions

    ParadoxSolutions

    Joined:
    Jul 27, 2015
    Posts:
    325
    I need something that will inflate/blur/glow the edges of any white shape over a black background in an unlit shader.

    Edit: Made some progress on a gaussian blur implementation in a custom node, however I can't figure out the proper syntax to sample a texture from there. Although I do need the blur to function on the output of a color mask not the original texture. Can it be done with nodes?


    Edit #2:
    Created a custom blur node, doesn't operate on a color input like I originally wanted but I can just put it before my color mask. Here is the code:

    Inputs:
    MainTex = Texture2D
    state = Sampler2D
    uv = Vector2
    magnitude = vector1

    Code (CSharp):
    1.    
    2. col = MainTex.Sample(state, uv);
    3.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y - (magnitude * 2)));
    4.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y - (magnitude * 2)));
    5.         col += MainTex.Sample(state, float2(uv.x, uv.y - (magnitude * 2)));
    6.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y - (magnitude * 2)));
    7.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y - (magnitude * 2)));
    8.  
    9.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y - (magnitude * 1)));
    10.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y - (magnitude * 1)));
    11.         col += MainTex.Sample(state, float2(uv.x, uv.y - (magnitude * 1)));
    12.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y - (magnitude * 1)));
    13.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y - (magnitude * 1)));
    14.  
    15.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y));
    16.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y));
    17.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y));
    18.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y));
    19.  
    20.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y + (magnitude * 1)));
    21.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y + (magnitude * 1)));
    22.         col += MainTex.Sample(state, float2(uv.x, uv.y + (magnitude * 1)));
    23.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y + (magnitude * 1)));
    24.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y + (magnitude * 1)));
    25.  
    26.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y + (magnitude * 2)));
    27.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y + (magnitude * 2)));
    28.         col += MainTex.Sample(state, float2(uv.x, uv.y + (magnitude * 2)));
    29.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 1), uv.y + (magnitude * 2)));
    30.         col += MainTex.Sample(state, float2(uv.x + (magnitude * 2), uv.y + (magnitude * 2)));
    31.  
    32.         col /= 25; // normalize
    Outputs:
    col = Vector4
     
    Last edited: May 30, 2020