Needing help with writing a LittleBigPlanet 3 PS4 styled "fuzz" Shader

As the title says, I’m looking for guidance to recreate a Shader from LittleBigPlanet 3 on PS4 that’s used on Sackboy’s skin materials, it’s a fur Shader that uses fins around the outline of Sackboy to make him fuzzy.
I have some images as an example for what I mean:


Below is the texture used for Sackboy’s fuzz effect with the color channels separated.
Red multiplies the length of the fins, Green is the alpha channel combined with the diffuse of the fins, Not sure what Blue does yet.

I have pre-existing Shader code using a snippet of code from a friend’s own game inserted into a Unity Standard Shader, and while it mostly works as intended, the lighting setup needed for their Shader is different from Unity’s Standard lighting, resulting in the fins having much darker lighting than intended and not looking as it does in LBP. Sackboy is used for reference below:

For now I just want to fix the lighting in the “Fins” section of the code so it isn’t so dark and looks more like the reference images, I’d also like to create a method of Specular to match the aesthetic of LBP as well later down the line, though it’s not as important to me as the fuzz effect at the moment. Help would be appreciated!

            //Fins

            Pass
            {
            LOD 100
            Cull Off
            ZWrite Off
            Ztest Less
            Blend SrcAlpha OneMinusSrcAlpha
            CGPROGRAM
            #define UNITY_SHADER_NO_UPGRADE
            #pragma vertex vert
            #pragma geometry geom
            #pragma fragment frag
            #pragma multi_compile_fwd_base
            #pragma target 4.0
            #pragma require geometry

            #include "UnityCG.cginc"
            #include "UnityLightingCommon.cginc"
            #include "AutoLight.cginc"

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


            struct v2g
            {
                float2 uv : TEXCOORD0;
                float2 uv_unscaled : TEXCOORD1;
                float2 uv2 : TEXCOORD2;
                float4 pos : SV_POSITION;
                float3 normal : NORMAL;
                float3 falloff : COLOR0;
                float4 diffuse : COLOR1;
                float4 ambient : COLOR2;
                SHADOW_COORDS(3)
            };

            struct g2f
            {
                float2 uv : TEXCOORD0;
                float2 originalUv : TEXCOORD1;
                float2 originalUv_unscaled : TEXCOORD2;
                float2 uv2 : TEXCOORD3;
                float4 vertex : SV_POSITION;
                float3 falloff : COLOR0;
                float4 diffuse : COLOR1;
                float4 ambient : COLOR2;
                SHADOW_COORDS(4)
            };

            sampler2D _MainTex;
            sampler2D _SideFurTex;
            sampler2D _FurMaskTex;
            float4 _MainTex_ST;
            float _Size;
            float _FurLayers;
            float4 _Comb;
            sampler2D _FluffTex;
            sampler2D _Dirt;
            sampler2D _Decals;
            float4 _Falloff;
            float _FalloffExponent;
            //float _FalloffExponent2;
            float _FalloffBrightness2;
            float4 _Falloff2;

            float3 DoFalloff(float lightatten, float4 normal, float4 viewDir, float3 worldNormal)
            {
                float biasedatten = lightatten * 0.5f;//pow(saturate(lightatten), _RimBias)*_RimBias;
                float4 FalloffTerm = pow(1 - dot(normal, normalize(viewDir)), 1);
                float4 Falloff1 = _Falloff * lerp(1 - worldNormal.y, 1, 0.5);
                float4 Falloff2 = _Falloff2 * lerp(worldNormal.y, 1, 0.75);
                float3 Falloff = lerp(Falloff1 * _FalloffExponent, Falloff2 * _FalloffBrightness2, biasedatten) * FalloffTerm / 3;
                return Falloff * saturate(pow(FalloffTerm, 0.35));
            }

            float DoSoftDiffuse(float NdotL)
            {
                NdotL = saturate(NdotL);
                return (pow(NdotL, 0.5) / 6) + (pow(NdotL, 1) / 5) + (pow(NdotL, 2) / 1.5);
            }

            v2g vert(appdata v)
            {
                v2g o;
                o.pos = mul(unity_ObjectToWorld, v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.uv_unscaled = v.uv;
                o.uv2 = v.uv2;
                o.normal = mul(v.normal, unity_WorldToObject);
                float4 viewDir = float4(ObjSpaceViewDir(v.vertex),1);
                float3 normal = v.normal;
                float3 worldNormal = UnityObjectToWorldNormal(v.normal);
                float3 wNormal = worldNormal;
                worldNormal *= 1.25f;
                float3 screenNormal = mul(UNITY_MATRIX_V, UnityObjectToWorldNormal(v.normal));
                //float3 falloff = pow(1 - dot(normal, normalize(viewDir)), _FalloffExponent2) * _FalloffExponent * 0.75;
                //float falloffthingy = 1 - lerp((clamp(screenNormal.x, 0, 1) * clamp(screenNormal.x, 0, 1)), (clamp(screenNormal.y, 0, 1) * clamp(screenNormal.y, 0, 1)), 0.5f);
                o.diffuse = DoSoftDiffuse(dot(worldNormal, _WorldSpaceLightPos0.xyz));
                o.diffuse.w = 1;
                o.falloff = DoFalloff(o.diffuse, float4(normal,0), viewDir, worldNormal) * 2;//((falloff * falloffthingy * _Falloff) + ((falloff * falloff * (1 - clamp(falloffthingy, 0, 1)) / 8) * _FalloffBrightness2 * _LightColor0));
                float ambientUp = wNormal.y;
                float ambientDown = 1 - wNormal.y;
                float4 ambient;
                ambient.w = 1;
                ambient.xyz = unity_AmbientSky * ambientUp;
                ambient.xyz += unity_AmbientGround * ambientDown;
                o.ambient = ambient;
                TRANSFER_SHADOW(o);
                return o;
            }

            [maxvertexcount(4)]
            void geom(line v2g IN[2], inout TriangleStream<g2f> triStream)
            {
                float4x4 vp = mul(UNITY_MATRIX_MVP, unity_WorldToObject);

                float3 eyeVec = normalize(((IN[0].pos - _WorldSpaceCameraPos) + (IN[1].pos - _WorldSpaceCameraPos)) / 2);
                float4 lineNormal = float4(normalize((IN[0].normal + IN[1].normal) / 2), 0) * 0.15 * _Size;
                float eyeDot = dot(lineNormal, eyeVec);

                float3 newNormal = normalize(cross(IN[1].pos - IN[0].pos, lineNormal));
                float maxOffset = 0.25f;

                if (eyeDot < maxOffset && eyeDot > -maxOffset)
                {

                    g2f pIn;

                    pIn.vertex = mul(vp, IN[1].pos);
                    pIn.uv = float2(0.0625 + ((IN[1].uv.x + IN[1].uv.y) / 2), 0);
                    pIn.originalUv = IN[1].uv;
                    pIn.originalUv_unscaled = IN[1].uv_unscaled;
                    pIn.uv2 = IN[1].uv2;
                    pIn.falloff = IN[1].falloff;
                    #if defined (SHADOWS_SCREEN) || defined (SHADOWS_DEPTH) || defined (SPOT)
                    pIn._ShadowCoord = IN[1]._ShadowCoord;
                    #endif
                    pIn.diffuse = IN[1].diffuse;
                    pIn.ambient = IN[1].ambient;
                    triStream.Append(pIn);

                    pIn.vertex = mul(vp, IN[1].pos + lineNormal);
                    pIn.uv = float2(0.0625 + ((IN[1].uv.x + IN[1].uv.y) / 2), 1);
                    pIn.originalUv = IN[1].uv;
                    pIn.originalUv_unscaled = IN[1].uv_unscaled;
                    pIn.uv2 = IN[1].uv2;
                    pIn.falloff = IN[1].falloff;
                    #if defined (SHADOWS_SCREEN) || defined (SHADOWS_DEPTH) || defined (SPOT)
                    pIn._ShadowCoord = IN[1]._ShadowCoord;
                    #endif
                    pIn.diffuse = IN[1].diffuse;
                    pIn.ambient = IN[1].ambient;
                    triStream.Append(pIn);

                    pIn.vertex = mul(vp, IN[0].pos);
                    pIn.uv = float2(((IN[1].uv.x + IN[1].uv.y) / 2), 0);
                    pIn.originalUv = IN[0].uv;
                    pIn.originalUv_unscaled = IN[0].uv_unscaled;
                    pIn.uv2 = IN[0].uv2;
                    pIn.falloff = IN[0].falloff;
                    #if defined (SHADOWS_SCREEN) || defined (SHADOWS_DEPTH) || defined (SPOT)
                    pIn._ShadowCoord = IN[0]._ShadowCoord;
                    #endif
                    pIn.diffuse = IN[0].diffuse;
                    pIn.ambient = IN[0].ambient;
                    triStream.Append(pIn);

                    pIn.vertex = mul(vp, IN[0].pos + lineNormal);
                    pIn.uv = float2(((IN[1].uv.x + IN[1].uv.y) / 2), 1);
                    pIn.originalUv = IN[0].uv;
                    pIn.originalUv_unscaled = IN[0].uv_unscaled;
                    pIn.uv2 = IN[0].uv2;
                    pIn.falloff = IN[0].falloff;
                    #if defined (SHADOWS_SCREEN) || defined (SHADOWS_DEPTH) || defined (SPOT)
                    pIn._ShadowCoord = IN[0]._ShadowCoord;
                    #endif
                    pIn.diffuse = IN[0].diffuse;
                    pIn.ambient = IN[0].ambient;
                    triStream.Append(pIn);

                    triStream.RestartStrip();
                }

            }

            fixed4 frag(g2f i) : SV_Target
            {

                half    shadow = 1.0;

                shadow = SHADOW_ATTENUATION(IN);

                fixed4 originalCol = tex2D(_MainTex, i.originalUv) * tex2D(_Dirt, i.originalUv_unscaled);
                fixed col = tex2D(_FluffTex, i.uv).y;
                fixed mask = tex2D(_FluffTex, i.originalUv_unscaled).x;

                //if (mask.r <= .5) discard;
                clip(mask.r - 0.75);

                float clampcolorterm_uv2 = 1;
                clampcolorterm_uv2 -= clamp((-clamp(floor(i.uv2.x), -1, 0) + (clamp(ceil(i.uv2.x), 1, 2) - 1)), 0, 1);
                float4 decaldiff = 0;
                //#if defined(DECAL)
                decaldiff = tex2D(_Decals, i.uv2);
                //#endif
                col = lerp(col, 0, pow(decaldiff.w,2) / 2 * clampcolorterm_uv2);

                originalCol.w *= col * mask;
                originalCol.xyz *= ((i.diffuse * shadow) + i.ambient);
                originalCol.xyz += i.falloff / 4;

                return originalCol;// *col;
            }

            ENDCG
            }

Anyone know what I need to do to fix the lighting in this? I’m sort of stuck at the moment until I can get the fluff to be lighter in color and properly working with all lighting conditions.

do you think you could send the whole shader code?

I realize this is an old thread; sorry to raise the dead, but wanted to see if you ever solved this?