summaryrefslogtreecommitdiff
path: root/VRCSDK3AvatarsLegacy/Assets/Avatars/Auri/materials/OptimizedShaders/body/Includes/CGI_PoiRimLighting.cginc
blob: 28892904a32911f01b2448fd6c9b3962fd48b214 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef POI_RIM
    #define POI_RIM
    
    float4 _RimLightColor;
    float _RimLightingInvert;
    float _RimWidth;
    float _RimStrength;
    float _RimSharpness;
    float _RimLightColorBias;
    float _ShadowMix;
    float _ShadowMixThreshold;
    float _ShadowMixWidthMod;
    float _EnableRimLighting;
    float _RimBrighten;
    float _RimLightNormal;
    float _RimHueShiftEnabled;
    float _RimHueShiftSpeed;
    float _RimHueShift;
    
    #if defined(PROP_RIMTEX) || !defined(OPTIMIZER_ENABLED)
        POI_TEXTURE_NOSAMPLER(_RimTex);
    #endif
    #if defined(PROP_RIMMASK) || !defined(OPTIMIZER_ENABLED)
        POI_TEXTURE_NOSAMPLER(_RimMask);
    #endif
    #if defined(PROP_RIMWIDTHNOISETEXTURE) || !defined(OPTIMIZER_ENABLED)
        POI_TEXTURE_NOSAMPLER(_RimWidthNoiseTexture);
    #endif
    
    float _RimWidthNoiseStrength;
    
    float4 rimColor = float4(0, 0, 0, 0);
    float rim = 0;
    
    void applyRimLighting(inout float4 albedo, inout float3 rimLightEmission)
    {
        #if defined(PROP_RIMWIDTHNOISETEXTURE) || !defined(OPTIMIZER_ENABLED)
            float rimNoise = POI2D_SAMPLER_PAN(_RimWidthNoiseTexture, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0));
        #else
            float rimNoise = 0;
        #endif
        rimNoise = (rimNoise - .5) * float(0.1);
        
        float viewDotNormal = abs(dot(poiCam.viewDir, poiMesh.normals[float(1)]));
        
        if (float(0))
        {
            viewDotNormal = 1 - abs(dot(poiCam.viewDir, poiMesh.normals[float(1)]));
        }
        float rimWidth = float(0.8);
        rimWidth -= rimNoise;
        #if defined(PROP_RIMMASK) || !defined(OPTIMIZER_ENABLED)
            float rimMask = POI2D_SAMPLER_PAN(_RimMask, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0));
        #else
            float rimMask = 1;
        #endif
        
        #if defined(PROP_RIMTEX) || !defined(OPTIMIZER_ENABLED)
            rimColor = POI2D_SAMPLER_PAN(_RimTex, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0)) * float4(1,1,1,1);
        #else
            rimColor = float4(1,1,1,1);
        #endif
        
        
        if(float(0))
        {
            rimColor.rgb = hueShift(rimColor.rgb, float(0) + _Time.x * float(0));
        }
        
        rimWidth = max(lerp(rimWidth, rimWidth * lerp(0, 1, poiLight.lightMap - float(0.5)) * float(0.5), float(0)), 0);
        rim = 1 - smoothstep(min(float(0.25), rimWidth), rimWidth, viewDotNormal);
        rim *= float4(1,1,1,1).a * rimColor.a * rimMask;
        rimLightEmission = rim * lerp(albedo, rimColor, float(0)) * float(0);
        albedo.rgb = lerp(albedo.rgb, lerp(albedo.rgb, rimColor, float(0)) + lerp(albedo.rgb, rimColor, float(0)) * float(0), rim);
    }
#endif