hellcat-nardo-felidal/Assets/Dragon/Materials/OptimizedShaders/Blush/CGI_PoiFrag.cginc
2023-09-16 23:37:55 -07:00

342 lines
9.7 KiB
HLSL

#ifndef POIFRAG
#define POIFRAG
float _MainEmissionStrength;
float _IgnoreFog;
half _GIEmissionMultiplier;
float _IridescenceTime;
float _AlphaToMask;
float _ForceOpaque;
float _commentIfZero_EnableGrabpass;
float _AlphaPremultiply;
float2 _MainTexPan;
float _MainTextureUV;
float _LightingAdditiveEnable;
float _PPLightingMultiplier;
float _PPEmissionMultiplier;
float4 frag(v2f i, uint facing: SV_IsFrontFace): SV_Target
{
#ifdef FORWARD_ADD_PASS
#if !defined(POI_LIGHTING)
return 0;
#endif
if ((1.0 /*_LightingAdditiveEnable*/) == 0)
{
return 0;
}
#endif
UNITY_SETUP_INSTANCE_ID(i);
float4 albedo = 1;
float4 finalColor = 1;
float bakedCubemap = 0; // Whether or not metallic should run before or after lighting multiplication
float3 finalSpecular0 = 0;
float3 finalSpecular1 = 0;
float3 finalSSS = 0;
fixed lightingAlpha = 1;
float3 finalEnvironmentalRim = 0;
float3 finalEmission = 0;
float3 finalLighting = 1;
float3 emissionLighting = 1;
float3 IridescenceEmission = 0;
float3 spawnInEmission = 0;
float3 voronoiEmission = 0;
float3 matcapEmission = 0;
float3 depthTouchEmission = 0;
float3 decalEmission = 0;
float3 glitterEmission = 0;
float3 panosphereEmission = 0;
float3 backFaceEmission = 0;
float3 dissolveEmission = 0;
float3 rimLightEmission = 0;
float3 flipbookEmission = 0;
float3 textOverlayEmission = 0;
float3 videoEmission = 0;
float3 pathEmission = 0;
/**********************************************************************
Initialize the base data that's needed everywhere else in the shader
**********************************************************************/
calculateAttenuation(i);
InitializeMeshData(i, facing);
initializeCamera(i);
calculateTangentData();
#ifdef POI_BLACKLIGHT
createBlackLightMask();
if (_BlackLightMaskDebug)
{
return float4(blackLightMask.rgb, 1);
}
#endif
#ifdef POI_PARALLAX
calculateandApplyParallax();
#endif
float4 mainTexture = UNITY_SAMPLE_TEX2D(_MainTex, TRANSFORM_TEX(poiMesh.uv[(0.0 /*_MainTextureUV*/)], _MainTex) + _Time.x * float4(0,0,0,0));
half3 detailMask = 1;
calculateNormals(detailMask);
calculateVertexLightingData(i);
/**********************************************************************
Calculate Light Maps
**********************************************************************/
#ifdef POI_DATA
calculateLightingData(i);
#endif
#ifdef POI_LIGHTING
calculateBasePassLightMaps();
#endif
/**********************************************************************
Calculate Color Data
**********************************************************************/
initTextureData(albedo, mainTexture, backFaceEmission, dissolveEmission, detailMask);
#ifdef POI_PATHING
applyPathing(albedo, pathEmission);
#endif
#ifdef POI_DECAL
applyDecals(albedo, decalEmission);
#endif
#ifdef POI_IRIDESCENCE
if (_IridescenceTime == 0)
{
applyIridescence(albedo, IridescenceEmission);
}
#endif
#ifdef POI_VORONOI
applyVoronoi(albedo, voronoiEmission);
#endif
#ifdef POI_MSDF
ApplyTextOverlayColor(albedo, textOverlayEmission);
#endif
#ifdef POI_ENVIRONMENTAL_RIM
finalEnvironmentalRim = calculateEnvironmentalRimLighting(albedo);
#endif
#if defined(POI_METAL) || defined(POI_CLEARCOAT)
CalculateReflectionData();
#endif
#ifdef POI_DATA
distanceFade(albedo);
#endif
#ifdef POI_RANDOM
albedo.a *= i.angleAlpha;
#endif
#ifdef MATCAP
applyMatcap(albedo, matcapEmission);
#endif
#ifdef PANOSPHERE
applyPanosphereColor(albedo, panosphereEmission);
#endif
#ifdef POI_FLIPBOOK
applyFlipbook(albedo, flipbookEmission);
#endif
#ifdef POI_GLITTER
applyGlitter(albedo, glitterEmission);
#endif
#ifdef POI_RIM
applyRimLighting(albedo, rimLightEmission);
#endif
#ifdef POI_DEPTH_COLOR
applyDepthColor(albedo, depthTouchEmission, finalEmission, i.worldDirection);
#endif
#ifdef POI_IRIDESCENCE
if (_IridescenceTime == 1)
{
applyIridescence(albedo, IridescenceEmission);
}
#endif
#ifdef POI_VIDEO
applyScreenEffect(albedo, videoEmission);
#endif
applySpawnIn(albedo, spawnInEmission, poiMesh.uv[0], poiMesh.localPos);
/**********************************************************************
Handle a few alpha options
**********************************************************************/
if ((9.0 /*_Mode*/) == 1)
{
if ((0.0 /*_AlphaToMask*/) == 0)
{
applyDithering(albedo);
}
}
albedo.a = max((0.0 /*_ForceOpaque*/), albedo.a);
if ((9.0 /*_Mode*/) == 0)
{
albedo.a = 1;
}
if ((9.0 /*_Mode*/) >= 1)
{
clip(albedo.a - (0.0 /*_Cutoff*/));
}
if ((0.0 /*_AlphaPremultiply*/))
{
albedo.rgb *= saturate(albedo.a + 0.0000000001);
}
/**********************************************************************
Lighting Time :)
**********************************************************************/
#ifdef POI_LIGHTING
finalLighting = calculateFinalLighting(albedo.rgb, finalColor);
finalLighting = max(finalLighting *= (1.0 /*_PPLightingMultiplier*/), 0);
if (!(0.0 /*_LightingUncapped*/))
{
finalLighting = saturate(finalLighting);
}
#ifdef SUBSURFACE
finalSSS = calculateSubsurfaceScattering();
#endif
#endif
float4 finalColorBeforeLighting = albedo;
finalColor = finalColorBeforeLighting;
#ifdef POI_SPECULAR
finalSpecular0 = calculateSpecular(finalColorBeforeLighting);
#endif
#ifdef POI_PARALLAX
calculateAndApplyInternalParallax(finalColor);
#endif
#ifdef POI_ALPHA_TO_COVERAGE
ApplyAlphaToCoverage(finalColor);
#endif
if ((9.0 /*_Mode*/) == 1)
{
if ((0.0 /*_AlphaToMask*/) == 1)
{
applyDithering(finalColor);
}
}
#ifdef POI_METAL
calculateMetallicness();
bool probeExists = shouldMetalHappenBeforeLighting();
if (!probeExists)
{
ApplyMetallicsFake(finalColor, albedo);
}
#endif
#ifdef POI_LIGHTING
emissionLighting = finalLighting;
#if defined(FORWARD_ADD_PASS) && defined(POI_METAL)
finalLighting *= 1 - metalicMap;
#endif
applyLighting(finalColor, finalLighting);
#endif
#ifdef POI_BRDF
poiBRDF(finalColor, finalColorBeforeLighting);
#endif
#ifdef POI_METAL
if (probeExists)
{
ApplyMetallics(finalColor, albedo);
}
#endif
finalColor.rgb += finalSpecular0 + finalEnvironmentalRim + finalSSS;
#ifdef FORWARD_BASE_PASS
#ifdef POI_CLEARCOAT
calculateAndApplyClearCoat(finalColor);
#endif
#endif
finalColor.a = saturate(finalColor.a);
/**********************************************************************
Add Up all the emission values :D
**********************************************************************/
finalEmission += finalColorBeforeLighting.rgb * (0.0 /*_MainEmissionStrength*/) * albedo.a;
finalEmission += wireframeEmission;
finalEmission += IridescenceEmission;
finalEmission += spawnInEmission;
finalEmission += voronoiEmission;
finalEmission += matcapEmission;
finalEmission += depthTouchEmission;
finalEmission += decalEmission;
finalEmission += glitterEmission;
finalEmission += panosphereEmission;
finalEmission += backFaceEmission;
finalEmission += rimLightEmission;
finalEmission += flipbookEmission;
finalEmission += videoEmission;
finalEmission += textOverlayEmission;
finalEmission += dissolveEmission;
finalEmission += pathEmission;
#ifdef POI_EMISSION
finalEmission += calculateEmissionNew(finalColorBeforeLighting.rgb, finalColor);
#endif
finalEmission = max(finalEmission * (1.0 /*_PPEmissionMultiplier*/), 0);
#if defined(FORWARD_ADD_PASS)
finalEmission *= emissionLighting; // TODO: add in vertex lights
#else
finalEmission *= max(1, emissionLighting);
#endif
/**********************************************************************
Meta Pass Hype :D
**********************************************************************/
#ifdef POI_META_PASS
UnityMetaInput meta;
UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta);
meta.Emission = finalEmission * (1.0 /*_GIEmissionMultiplier*/);
meta.Albedo = saturate(finalColor.rgb);
#ifdef POI_SPECULAR
meta.SpecularColor = poiLight.color.rgb * float4(1,1,1,0.3921569).rgb * lerp(1, albedo.rgb, (0.0 /*_SpecularMetallic*/)) * float4(1,1,1,0.3921569).a;
#else
meta.SpecularColor = poiLight.color.rgb * albedo.rgb;
#endif
return UnityMetaFragment(meta);
#endif
/**********************************************************************
Apply Emission to finalColor
**********************************************************************/
finalColor.rgb += finalEmission;
/**********************************************************************
Grabpass features
**********************************************************************/
if (_commentIfZero_EnableGrabpass)
{
applyGrabEffects(finalColor);
}
/**********************************************************************
Unity Fog
**********************************************************************/
#ifdef FORWARD_BASE_PASS
if ((0.0 /*_IgnoreFog*/) == 0)
{
UNITY_APPLY_FOG(i.fogCoord, finalColor);
}
#endif
#ifdef FORWARD_ADD_PASS
if ((9.0 /*_Mode*/) > 0)
{
finalColor.rgb *= finalColor.a;
}
#endif
if ((9.0 /*_Mode*/) == 0)
{
finalColor.a = 1;
}
#ifdef FORWARD_ADD_PASS
#endif
#ifdef POI_DEBUG
displayDebugInfo(finalColor);
#endif
#ifdef POI_AUDIOLINK
if ((0.0 /*_AudioLinkTextureVisualization*/))
{
finalColor = poiMods.audioLinkTexture;
}
#endif
#ifdef FORWARD_ADD_PASS
#if defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && defined(DIRECTIONAL)
return finalColor + albedo * 0.00001;;
#endif
#endif
return finalColor + mainTexture * 0.00001;
}
#endif