111 lines
3.6 KiB
HLSL
111 lines
3.6 KiB
HLSL
//////////////////////////////////////////////////////
|
|
// MK Glow Composite Sample //
|
|
// //
|
|
// Created by Michael Kremmel //
|
|
// www.michaelkremmel.de //
|
|
// Copyright © 2021 All rights reserved. //
|
|
//////////////////////////////////////////////////////
|
|
#ifndef MK_GLOW_COMPOSITE_SAMPLE
|
|
#define MK_GLOW_COMPOSITE_SAMPLE
|
|
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(o);
|
|
|
|
#ifndef COMPUTE_SHADER
|
|
FragmentOutputAuto fO;
|
|
INITIALIZE_STRUCT(FragmentOutputAuto, fO);
|
|
#endif
|
|
|
|
half4 g = SampleTex2D(PASS_TEXTURE_2D(_BloomTex, sampler_linear_clamp_BloomTex), UV_0);
|
|
//g = 0;
|
|
|
|
#if defined(MK_LENS_SURFACE) && defined(MK_NATURAL)
|
|
half4 gs = g;
|
|
#endif
|
|
|
|
half4 source = SAMPLE_SOURCE;
|
|
g.a = source.a;
|
|
#ifdef COLORSPACE_GAMMA
|
|
half3 src = GammaToLinearSpace(source.rgb);
|
|
#else
|
|
half3 src = source.rgb;
|
|
#endif
|
|
|
|
//return SAMPLE_SOURCE + lerp(half4(0.1,0,0,0), half4(0,0.1,0,0), unity_StereoEyeIndex);
|
|
//return lerp(half4(0.1,0,0,0), half4(0,0.1,0,0), unity_StereoEyeIndex);
|
|
|
|
#ifdef MK_GLOW_DEBUG
|
|
src = 0;
|
|
#endif
|
|
|
|
#ifdef MK_NATURAL
|
|
g.rgb = lerp(src, g.rgb, BLOOM_INTENSITY);
|
|
#else
|
|
g.rgb *= BLOOM_INTENSITY;
|
|
#if defined(MK_RENDER_PRIORITY_BALANCED) || defined(MK_RENDER_PRIORITY_QUALITY)
|
|
g.rgb = Blooming(g.rgb, BLOOMING);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef MK_GLARE
|
|
half4 glare = 0;
|
|
#ifdef MK_GLARE_1
|
|
glare = SampleTex2D(PASS_TEXTURE_2D(_Glare0Tex, sampler_linear_clamp_Glare0Tex), UV_0) * GLARE0_INTENSITY;
|
|
#endif
|
|
#ifdef MK_GLARE_2
|
|
glare += SampleTex2D(PASS_TEXTURE_2D(_Glare1Tex, sampler_linear_clamp_Glare1Tex), UV_0) * GLARE1_INTENSITY;
|
|
#endif
|
|
#ifdef MK_GLARE_3
|
|
glare += SampleTex2D(PASS_TEXTURE_2D(_Glare2Tex, sampler_linear_clamp_Glare2Tex), UV_0) * GLARE2_INTENSITY;
|
|
#endif
|
|
#ifdef MK_GLARE_4
|
|
glare += SampleTex2D(PASS_TEXTURE_2D(_Glare3Tex, sampler_linear_clamp_Glare3Tex), UV_0) * GLARE3_INTENSITY;
|
|
#endif
|
|
#ifdef MK_NATURAL
|
|
glare.rgb = max(0, lerp(src.rgb, glare.rgb * 0.25, GLARE_GLOBAL_INTENSITY));
|
|
#else
|
|
glare *= GLARE_GLOBAL_INTENSITY;
|
|
#endif
|
|
|
|
g.rgb = max(0, lerp(g.rgb, glare.rgb, GLARE_BLEND));
|
|
#endif
|
|
|
|
#ifdef MK_LENS_FLARE
|
|
g.rgb += SampleTex2DCircularChromaticAberration(PASS_TEXTURE_2D(_LensFlareTex, sampler_linear_clamp_LensFlareTex), UV_0, LENS_FLARE_CHROMATIC_ABERRATION).rgb;
|
|
#endif
|
|
|
|
#ifdef MK_LENS_SURFACE
|
|
half3 dirt = SampleTex2DNoScale(PASS_TEXTURE_2D(_LensSurfaceDirtTex, sampler_linear_clamp_LensSurfaceDirtTex), LENS_SURFACE_DIRT_UV).rgb;
|
|
half3 diffraction = SampleTex2DNoScale(PASS_TEXTURE_2D(_LensSurfaceDiffractionTex, sampler_linear_clamp_LensSurfaceDiffractionTex), LENS_DIFFRACTION_UV).rgb;
|
|
|
|
#ifdef COLORSPACE_GAMMA
|
|
dirt = GammaToLinearSpace(dirt);
|
|
diffraction = GammaToLinearSpace(diffraction);
|
|
#endif
|
|
|
|
#ifdef MK_NATURAL
|
|
g.rgb = lerp(g.rgb, g.rgb + gs.rgb * LENS_SURFACE_DIRT_INTENSITY, dirt);
|
|
g.rgb = lerp(g.rgb, g.rgb + gs.rgb * LENS_SURFACE_DIFFRACTION_INTENSITY, diffraction);
|
|
#else
|
|
dirt *= LENS_SURFACE_DIRT_INTENSITY;
|
|
diffraction *= LENS_SURFACE_DIFFRACTION_INTENSITY;
|
|
g.rgb = lerp(g.rgb * 3, g.rgb + g.rgb * dirt + g.rgb * diffraction, 0.5) * 0.3333h;
|
|
#endif
|
|
#endif
|
|
|
|
//When using gamma space at least try to get a nice looking result by adding the glow in the linear space of the src even if the base color space is gamma
|
|
#ifdef MK_GLOW_COMPOSITE
|
|
#ifdef COLORSPACE_GAMMA
|
|
#ifndef MK_NATURAL
|
|
g.rgb += src.rgb;
|
|
#endif
|
|
RETURN_TARGET_TEX ConvertToColorSpace(g);
|
|
#else
|
|
#ifndef MK_NATURAL
|
|
g.rgb += src.rgb;
|
|
#endif
|
|
RETURN_TARGET_TEX g;
|
|
#endif
|
|
#else
|
|
RETURN_TARGET_TEX ConvertToColorSpace(g);
|
|
#endif
|
|
#endif |