Geometry Shader URP

Hello there.
At the start, I would say that I am a total newbie when it comes to shaders. Can’t do much by myself. Pointing that out I recently found an amazing effect which I would like to try in my demo project in URP.
Problem is it was created in Built-in RP and I need to translate it to the URP. I already fight with this for 4-5 days. Looking everywhere for help. Maybe someone will point out why its not working.

I basically managed to get most things working from that shader but the main party (Geometry) is not working and I can’t find out why.

Some sharp and big minds out there would care to help??

<— Original tutorial of the effect —>

And my tries to recreate it in URP. The main problem lies somewhere in the geometry part I think.

Shader "Unlit/TestShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color("Color", Color) = (1, 1, 1, 1)
        [HDR]_AmbientColor("Ambient Color", Color) = (0.4,0.4,0.4,1)
        _BumpMap("Normal Map", 2D) = "bump" {}
        _BumpStr("Normal Map Strenght", float) = 1

        _FlowMap("Flow (RG)", 2D) = "black" {}
        _DissolveTexture("Dissolve Texutre", 2D) = "white" {}
        _DissolveColor("Dissolve Color Border", Color) = (1, 1, 1, 1)
        _DissolveBorder("Dissolve Border", float) = 0.05


        _Exapnd("Expand", float) = 1
        _Weight("Weight", Range(0,1)) = 0
        _Direction("Direction", Vector) = (0, 0, 0, 0)
        [HDR]_DisintegrationColor("Disintegration Color", Color) = (1, 1, 1, 1)
        _Glow("Glow", float) = 1

        _Shape("Shape Texutre", 2D) = "white" {}
        _R("Radius", float) = .1
    }
    SubShader
    {
        Tags
        {
            "RenderPipeline"="UniversalPipeline"
            "RenderType"="Opaque"
            "Queue"="Geometry+0"
        }
        LOD 100

        //Forward Lit Pass
        Pass
        {
            Name "Universal Forward"
            Tags
            {
                "LightMode" = "UniversalForward"
            }
            // Render State
            Blend One Zero, One Zero
            Cull Back
            ZTest LEqual
            ZWrite On
            // ColorMask: <None>
           
            HLSLPROGRAM
            #pragma prefer_hlslcc gles
            #pragma exclude_renderers d3d11_9x
            #pragma target 2.0
            #pragma multi_compile_instancing
            #pragma require geometry

            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
            #pragma multi_compile _ _ADDITIONAL_LIGHTS
            #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
            #pragma multi_compile _ _SHADOWS_SOFT

            #pragma vertex vert
            #pragma geometry geom
            #pragma fragment frag
            #pragma require geometry

            #include "TestShader.hlsl"
            ENDHLSL
        }
       
       
        Pass
        {
            Name "ShadowCaster"
            Tags
            {
                "LightMode" = "ShadowCaster"
            }
            Cull Back

            HLSLPROGRAM
            #pragma prefer_hlslcc gles
            #pragma exclude_renderers d3d11_9x
            #pragma target 2.0
            #pragma multi_compile_instancing
            #pragma require geometry

            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
            #pragma multi_compile _ _ADDITIONAL_LIGHTS
            #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
            #pragma multi_compile _ _SHADOWS_SOFT

            #pragma vertex vert
            #pragma geometry geom
            #pragma fragment frag
            #pragma require geometry
           
            #include "TestShader.hlsl"
            ENDHLSL
        }
    }
}



---------------------------------------------------------
---------------------------------------------------------
---------------------------------------------------------

#ifndef TESTSHADER_INCLUDED
#define TESTSHADER_INCLUDED

#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
// #include "Lighting.cginc"

#define UNITY_MATRIX_TEXTURE0 float4x4(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1)


struct appdata
{
    float4 vertex : POSITION;
    float3 normal : NORMAL;
    float2 uv : TEXCOORD0;
};

struct v2g
{
    float4 objPos : SV_POSITION;
    float2 uv : TEXCOORD0;
    float3 normal : TEXCOORD3;
    float3 worldPos : TEXCOORD2;
};

struct g2f
{
    float4 worldPos : SV_POSITION;
    float2 uv : TEXCOORD0;
    half4 color : TEXCOORD4;
    float3 normal : TEXCOORD3;
};

sampler2D _MainTex;
float4 _MainTex_ST;
float4 _Color;
float4 _AmbientColor;
sampler2D _BumpMap;
float _BumpStr;
float _Metallic;

sampler2D _FlowMap;
float4 _FlowMap_ST;
sampler2D _DissolveTexture;
float4 _DissolveColor;
float _DissolveBorder;


float _Exapnd;
float _Weight;
float4 _Direction;
float4 _DisintegrationColor;
float _Glow;
sampler2D _Shape;
float _R;


float remap(float value, float from1, float to1, float from2, float to2)
{
    return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}

float4 remapFlowTexture(float4 tex)
{
    return float4(
        remap(tex.x, 0, 1, -1, 1),
        remap(tex.y, 0, 1, -1, 1),
        0,
        remap(tex.w, 0, 1, -1, 1)
    );
}

float2 MultiplyUV (float4x4 mat, float2 inUV) {
    float4 temp = float4 (inUV.x, inUV.y, 0, 0);
    temp = mul (mat, temp);
    return temp.xy;
}


v2g vert(appdata v)
{
    v2g o = (v2g)0;

    o.objPos = v.vertex;
    o.uv = v.uv;
    o.normal = TransformObjectToWorldNormal(v.normal);
    o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
    return o;
}

[maxvertexcount(7)]
void geom(triangle v2g inputs[3], inout TriangleStream<g2f> triStream)
{
    float2 avgUV = (inputs[0].uv + inputs[1].uv + inputs[2].uv) / 3;
    float3 avgPos = (inputs[0].objPos + inputs[1].objPos + inputs[2].objPos) / 3;
    float3 avgNormal = (inputs[0].normal + inputs[1].normal + inputs[2].normal) / 3;

    float dissolve_value = tex2Dlod(_DissolveTexture, float4(avgUV, 0, 0)).r;
    float t = clamp(_Weight * 2 - dissolve_value, 0, 1);

    float2 flowUV = TRANSFORM_TEX(mul(unity_ObjectToWorld, avgPos).xz, _FlowMap);
    float4 flowVector = remapFlowTexture(tex2Dlod(_FlowMap, float4(flowUV, 0, 0)));

    float3 pseudoRandomPos = (avgPos) + _Direction;
    pseudoRandomPos += (flowVector.xyz * _Exapnd);

    float3 p = lerp(avgPos, pseudoRandomPos, t);
    float radius = lerp(_R, 0, t);


    if (t > 0)
    {
        float3 look = _WorldSpaceCameraPos - p;
        look = normalize(look);

        float3 right = UNITY_MATRIX_IT_MV[0].xyz;
        float3 up = UNITY_MATRIX_IT_MV[1].xyz;

        float halfS = 0.5f * radius;

        float4 v[4];
        v[0] = float4(p + halfS * right - halfS * up, 1.0f);
        v[1] = float4(p + halfS * right + halfS * up, 1.0f);
        v[2] = float4(p - halfS * right - halfS * up, 1.0f);
        v[3] = float4(p - halfS * right + halfS * up, 1.0f);


        g2f vert;
        vert.worldPos = TransformObjectToHClip(v[0]);
        vert.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, float2(1.0f, 0.0f));
        vert.color = float4(1, 1, 1, 1);
        vert.normal = avgNormal;
        triStream.Append(vert);

        vert.worldPos = TransformObjectToHClip(v[1]);
        vert.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, float2(1.0f, 1.0f));
        vert.color = float4(1, 1, 1, 1);
        vert.normal = avgNormal;
        triStream.Append(vert);

        vert.worldPos = TransformObjectToHClip(v[2]);
        vert.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, float2(0.0f, 0.0f));
        vert.color = float4(1, 1, 1, 1);
        vert.normal = avgNormal;
        triStream.Append(vert);

        vert.worldPos = TransformObjectToHClip(v[3]);
        vert.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, float2(0.0f, 1.0f));
        vert.color = float4(1, 1, 1, 1);
        vert.normal = avgNormal;
        triStream.Append(vert);

        triStream.RestartStrip();
    }

    for (int j = 0; j < 3; j++)
    {
        g2f o;
        o.worldPos = TransformObjectToHClip(inputs[j].objPos);
        o.uv = TRANSFORM_TEX(inputs[j].uv, _MainTex);
        o.color = half4(0, 0, 0, 0);
        o.normal = inputs[j].normal;
        triStream.Append(o);
    }

    triStream.RestartStrip();
}

half4 frag(g2f i) : SV_Target
{
    half4 col = tex2D(_MainTex, i.uv) * _Color;
               
    float3 normal = normalize(i.normal);
    half3 tnormal = UnpackNormal(tex2D(_BumpMap, i.uv));
    tnormal.xy *= _BumpStr;
    tnormal = normalize(tnormal);

    float NdotL = dot((float4)0, normal * tnormal);
    float4 light = NdotL * (half4)0;
    col *= (_AmbientColor + light);
              
    float brightness = i.color.w  * _Glow;
    col = lerp(col, _DisintegrationColor,  i.color.x);

    if(brightness > 0){
        col *= brightness + _Weight;
    }


    float dissolve = tex2D(_DissolveTexture, i.uv).r;
               
    if(i.color.w == 0){
        clip(dissolve - 2*_Weight);
        if(_Weight > 0){
            col +=  _DissolveColor * _Glow * step( dissolve - 2*_Weight, _DissolveBorder);
        }
    }else{
        float s = tex2D(_Shape, i.uv).r;
        if(s < .5) {
            discard;
        }

    }

    return col;
}

#endif

What’s the use of #include “TestShader.hlsl”
Unity can’t open it.