Diff
checker
Texte
Texte
Images
Documents
Excel
Dossiers
Legal
Enterprise
Application de bureau
Prix
Se connecter
Télécharger Diffchecker Desktop
Comparer le texte
Trouver la différence entre deux fichiers texte
Outils
Historique
Affichage
Vue
Divisé
Unifié
Éditeur live
Masquer les espaces
Cacher identiques
Sans retour à la ligne
Niveau de précision
Intelligent
Syntaxe
Aucun
Modifier l’apparence
Traitement
Ignorer
Transformer le texte
Aller au premier écart
Modifier l'entrée
Diffchecker Desktop
La façon la plus sécurisée d'utiliser Diffchecker. Obtenez l'application Diffchecker Desktop : vos diffs ne quittent jamais votre ordinateur !
Obtenir Desktop
AmbientLightDither2017 vs AmbientLightDither2020
Créé
il y a 7 ans
Le diff n'expire jamais
Effacer
Exporter
Partager
Expliquer
35 suppressions
Lignes
Total
Supprimé
Caractères
Total
Supprimé
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
540 lignes
Copier tout
40 ajouts
Lignes
Total
Ajouté
Caractères
Total
Ajouté
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
525 lignes
Copier tout
/**
/**
* Copyright (C) 2015 Ganossa (mediehawk@gmail.com)
* Copyright (C) 2015 Ganossa (mediehawk@gmail.com)
*
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* this software and associated documentation files (the "Software"), to deal in
* the Software with restriction, including without limitation the rights to
* the Software with restriction, including without limitation the rights to
* use and/or sell copies of the Software, and to permit persons to whom the Software
* use and/or sell copies of the Software, and to permit persons to whom the Software
* is furnished to do so, subject to the following conditions:
* is furnished to do so, subject to the following conditions:
*
*
* The above copyright notice and the permission notices (this and below) shall
* The above copyright notice and the permission notices (this and below) shall
* be included in all copies or substantial portions of the Software.
* be included in all copies or substantial portions of the Software.
*
*
* Permission needs to be specifically granted by the author of the software to any
* Permission needs to be specifically granted by the author of the software to any
* person obtaining a copy of this software and associated documentation files
* person obtaining a copy of this software and associated documentation files
* (the "Software"), to deal in the Software without restriction, including without
* (the "Software"), to deal in the Software without restriction, including without
* limitation the rights to copy, modify, merge, publish, distribute, and/or
* limitation the rights to copy, modify, merge, publish, distribute, and/or
* sublicense the Software, and subject to the following conditions:
* sublicense the Software, and subject to the following conditions:
*
*
* The above copyright notice and the permission notices (this and above) shall
* The above copyright notice and the permission notices (this and above) shall
* be included in all copies or substantial portions of the Software.
* be included in all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
* SOFTWARE.
*/
*/
/**
/**
* This version of AmbientLight.fx has been modified to allow the "dither" effect
* This version of AmbientLight.fx has been modified to allow the "dither" effect
* to be toggled on and off.
* to be toggled on and off.
*/
*/
Copier
Copié
Copier
Copié
#include "ReShadeUI.fxh"
uniform bool alDebug <
uniform bool alDebug <
ui_tooltip = "Activates debug mode of AL, upper bar shows detected light, lower bar shows adaptation";
ui_tooltip = "Activates debug mode of AL, upper bar shows detected light, lower bar shows adaptation";
> = false;
> = false;
Copier
Copié
Copier
Copié
uniform float alInt <
uniform float alInt <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 20.0;
ui_min = 0.0; ui_max = 20.0;
ui_tooltip = "Base intensity of AL";
ui_tooltip = "Base intensity of AL";
> = 10.15;
> = 10.15;
Copier
Copié
Copier
Copié
uniform float alThreshold <
uniform float alThreshold <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 100.0;
ui_min = 0.0; ui_max = 100.0;
ui_tooltip = "Reduces intensity for not bright light";
ui_tooltip = "Reduces intensity for not bright light";
> = 15.00;
> = 15.00;
uniform bool AL_Dither <
uniform bool AL_Dither <
ui_tooltip = "Applies dither - may cause diagonal stripes";
ui_tooltip = "Applies dither - may cause diagonal stripes";
> = true;
> = true;
uniform bool AL_Adaptation <
uniform bool AL_Adaptation <
ui_tooltip = "Activates adaptation algorithm";
ui_tooltip = "Activates adaptation algorithm";
> = true;
> = true;
Copier
Copié
Copier
Copié
uniform float alAdapt <
uniform float alAdapt <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 4.0;
ui_min = 0.0; ui_max = 4.0;
ui_tooltip = "Intensity of AL correction for bright light";
ui_tooltip = "Intensity of AL correction for bright light";
> = 0.70;
> = 0.70;
Copier
Copié
Copier
Copié
uniform float alAdaptBaseMult <
uniform float alAdaptBaseMult <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 4.0;
ui_min = 0.0; ui_max = 4.0;
ui_tooltip = "Multiplier for adaption applied to the original image";
ui_tooltip = "Multiplier for adaption applied to the original image";
> = 1.00;
> = 1.00;
Copier
Copié
Copier
Copié
uniform int alAdaptBaseBlackLvL <
uniform int alAdaptBaseBlackLvL <
__UNIFORM_SLIDER_INT1
ui_type = "drag";
ui_min = 0; ui_max = 4;
ui_min = 0; ui_max = 4;
ui_tooltip = "Distinction level of black and white (lower => less distinct)";
ui_tooltip = "Distinction level of black and white (lower => less distinct)";
> = 2;
> = 2;
uniform bool AL_Dirt <
uniform bool AL_Dirt <
> = true;
> = true;
uniform bool AL_DirtTex <
uniform bool AL_DirtTex <
ui_tooltip = "Defines if dirt texture is used as overlay";
ui_tooltip = "Defines if dirt texture is used as overlay";
> = false;
> = false;
uniform bool AL_Vibrance <
uniform bool AL_Vibrance <
ui_tooltip = "Vibrance of dirt effect";
ui_tooltip = "Vibrance of dirt effect";
> = false;
> = false;
uniform int AL_Adaptive <
uniform int AL_Adaptive <
ui_type = "combo";
ui_type = "combo";
ui_min = 0; ui_max = 2;
ui_min = 0; ui_max = 2;
ui_items = "Warm\0Cold\0Light Dependent\0";
ui_items = "Warm\0Cold\0Light Dependent\0";
> = 0;
> = 0;
Copier
Copié
Copier
Copié
uniform float alDirtInt <
uniform float alDirtInt <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 2.0;
ui_min = 0.0; ui_max = 2.0;
ui_tooltip = "Intensity of dirt effect";
ui_tooltip = "Intensity of dirt effect";
> = 1.0;
> = 1.0;
Copier
Copié
Copier
Copié
uniform float alDirtOVInt <
uniform float alDirtOVInt <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 2.0;
ui_min = 0.0; ui_max = 2.0;
ui_tooltip = "Intensity of colored dirt effect";
ui_tooltip = "Intensity of colored dirt effect";
> = 1.0;
> = 1.0;
uniform bool AL_Lens <
uniform bool AL_Lens <
ui_tooltip = "Lens effect based on AL";
ui_tooltip = "Lens effect based on AL";
> = false;
> = false;
Copier
Copié
Copier
Copié
uniform float alLensThresh <
uniform float alLensThresh <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 1.0;
ui_min = 0.0; ui_max = 1.0;
ui_tooltip = "Reduces intensity of lens effect for not bright light";
ui_tooltip = "Reduces intensity of lens effect for not bright light";
> = 0.5;
> = 0.5;
Copier
Copié
Copier
Copié
uniform float alLensInt <
uniform float alLensInt <
__UNIFORM_SLIDER_FLOAT1
ui_type = "drag";
ui_min = 0.0; ui_max = 10.0;
ui_min = 0.0; ui_max = 10.0;
ui_tooltip = "Intensity of lens effect";
ui_tooltip = "Intensity of lens effect";
> = 2.0;
> = 2.0;
Différences enregistrées
Texte d'origine
Ouvrir un fichier
/** * Copyright (C) 2015 Ganossa (mediehawk@gmail.com) * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software with restriction, including without limitation the rights to * use and/or sell copies of the Software, and to permit persons to whom the Software * is furnished to do so, subject to the following conditions: * * The above copyright notice and the permission notices (this and below) shall * be included in all copies or substantial portions of the Software. * * Permission needs to be specifically granted by the author of the software to any * person obtaining a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, including without * limitation the rights to copy, modify, merge, publish, distribute, and/or * sublicense the Software, and subject to the following conditions: * * The above copyright notice and the permission notices (this and above) shall * be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This version of AmbientLight.fx has been modified to allow the "dither" effect * to be toggled on and off. */ uniform bool alDebug < ui_tooltip = "Activates debug mode of AL, upper bar shows detected light, lower bar shows adaptation"; > = false; uniform float alInt < ui_type = "drag"; ui_min = 0.0; ui_max = 20.0; ui_tooltip = "Base intensity of AL"; > = 10.15; uniform float alThreshold < ui_type = "drag"; ui_min = 0.0; ui_max = 100.0; ui_tooltip = "Reduces intensity for not bright light"; > = 15.00; uniform bool AL_Dither < ui_tooltip = "Applies dither - may cause diagonal stripes"; > = true; uniform bool AL_Adaptation < ui_tooltip = "Activates adaptation algorithm"; > = true; uniform float alAdapt < ui_type = "drag"; ui_min = 0.0; ui_max = 4.0; ui_tooltip = "Intensity of AL correction for bright light"; > = 0.70; uniform float alAdaptBaseMult < ui_type = "drag"; ui_min = 0.0; ui_max = 4.0; ui_tooltip = "Multiplier for adaption applied to the original image"; > = 1.00; uniform int alAdaptBaseBlackLvL < ui_type = "drag"; ui_min = 0; ui_max = 4; ui_tooltip = "Distinction level of black and white (lower => less distinct)"; > = 2; uniform bool AL_Dirt < > = true; uniform bool AL_DirtTex < ui_tooltip = "Defines if dirt texture is used as overlay"; > = false; uniform bool AL_Vibrance < ui_tooltip = "Vibrance of dirt effect"; > = false; uniform int AL_Adaptive < ui_type = "combo"; ui_min = 0; ui_max = 2; ui_items = "Warm\0Cold\0Light Dependent\0"; > = 0; uniform float alDirtInt < ui_type = "drag"; ui_min = 0.0; ui_max = 2.0; ui_tooltip = "Intensity of dirt effect"; > = 1.0; uniform float alDirtOVInt < ui_type = "drag"; ui_min = 0.0; ui_max = 2.0; ui_tooltip = "Intensity of colored dirt effect"; > = 1.0; uniform bool AL_Lens < ui_tooltip = "Lens effect based on AL"; > = false; uniform float alLensThresh < ui_type = "drag"; ui_min = 0.0; ui_max = 1.0; ui_tooltip = "Reduces intensity of lens effect for not bright light"; > = 0.5; uniform float alLensInt < ui_type = "drag"; ui_min = 0.0; ui_max = 10.0; ui_tooltip = "Intensity of lens effect"; > = 2.0; #include "ReShade.fxh" uniform float2 AL_t < source = "pingpong"; min = 0.0f; max = 6.28f; step = float2(0.1f, 0.2f); >; #define GEMFX_PIXEL_SIZE float2(1.0f / (BUFFER_WIDTH / 16.0f), 1.0f / (BUFFER_HEIGHT / 16.0f)) texture alInTex { Width = BUFFER_WIDTH / 16; Height = BUFFER_HEIGHT / 16; Format = RGBA32F; }; texture alOutTex { Width = BUFFER_WIDTH / 16; Height = BUFFER_HEIGHT / 16; Format = RGBA32F; }; texture detectIntTex { Width = 32; Height = 32; Format = RGBA8; }; sampler detectIntColor { Texture = detectIntTex; }; texture detectLowTex { Width = 1; Height = 1; Format = RGBA8; }; sampler detectLowColor { Texture = detectLowTex; }; texture dirtTex < source = "Dirt.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture dirtOVRTex < source = "DirtOVR.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture dirtOVBTex < source = "DirtOVB.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDBTex < source = "LensDB.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDB2Tex < source = "LensDB2.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDOVTex < source = "LensDOV.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDUVTex < source = "LensDUV.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; sampler alInColor { Texture = alInTex; }; sampler alOutColor { Texture = alOutTex; }; sampler dirtSampler { Texture = dirtTex; }; sampler dirtOVRSampler { Texture = dirtOVRTex; }; sampler dirtOVBSampler { Texture = dirtOVBTex; }; sampler lensDBSampler { Texture = lensDBTex; }; sampler lensDB2Sampler { Texture = lensDB2Tex; }; sampler lensDOVSampler { Texture = lensDOVTex; }; sampler lensDUVSampler { Texture = lensDUVTex; }; void PS_AL_DetectInt(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectInt : SV_Target0) { detectInt = tex2D(ReShade::BackBuffer, texcoord); } void PS_AL_DetectLow(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectLow : SV_Target0) { detectLow = 0; if (texcoord.x != 0.5 && texcoord.y != 0.5) discard; [loop] for (float i = 0.0; i <= 1; i += 0.03125) { [unroll] for (float j = 0.0; j <= 1; j += 0.03125) { detectLow.xyz += tex2D(detectIntColor, float2(i, j)).xyz; } } detectLow.xyz /= 32 * 32; } void PS_AL_DetectHigh(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 x : SV_Target) { x = tex2D(ReShade::BackBuffer, texcoord); x = float4(x.rgb * pow(abs(max(x.r, max(x.g, x.b))), 2.0), 1.0f); float base = (x.r + x.g + x.b); base /= 3; float nR = (x.r * 2) - base; float nG = (x.g * 2) - base; float nB = (x.b * 2) - base; [flatten] if (nR < 0) { nG += nR / 2; nB += nR / 2; nR = 0; } [flatten] if (nG < 0) { nB += nG / 2; [flatten] if (nR > -nG / 2) nR += nG / 2; else nR = 0; nG = 0; } [flatten] if (nB < 0) { [flatten] if (nR > -nB / 2) nR += nB / 2; else nR = 0; [flatten] if (nG > -nB / 2) nG += nB / 2; else nG = 0; nB = 0; } [flatten] if (nR > 1) { nG += (nR - 1) / 2; nB += (nR - 1) / 2; nR = 1; } [flatten] if (nG > 1) { nB += (nG - 1) / 2; [flatten] if (nR + (nG - 1) < 1) nR += (nG - 1) / 2; else nR = 1; nG = 1; } [flatten] if (nB > 1) { [flatten] if (nR + (nB - 1) < 1) nR += (nB - 1) / 2; else nR = 1; [flatten] if (nG + (nB - 1) < 1) nG += (nB - 1) / 2; else nG = 1; nB = 1; } x.r = nR; x.g = nG; x.b = nB; } void PS_AL_HGB(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 hgb : SV_Target) { const float sampleOffsets[5] = { 0.0, 2.4347826, 4.3478260, 6.2608695, 8.1739130 }; const float sampleWeights[5] = { 0.16818994, 0.27276957, 0.111690125, 0.024067905, 0.0021112196 }; hgb = tex2D(alInColor, texcoord) * sampleWeights[0]; hgb = float4(max(hgb.rgb - alThreshold, 0.0), hgb.a); float step = 1.08 + (AL_t.x / 100) * 0.02; [flatten] if ((texcoord.x + sampleOffsets[1] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[1] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[1] * step; [flatten] if ((texcoord.x - sampleOffsets[1] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[1] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[1] * step; [flatten] if ((texcoord.x + sampleOffsets[2] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[2] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[2] * step; [flatten] if ((texcoord.x - sampleOffsets[2] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[2] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[2] * step; [flatten] if ((texcoord.x + sampleOffsets[3] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[3] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[3] * step; [flatten] if ((texcoord.x - sampleOffsets[3] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[3] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[3] * step; [flatten] if ((texcoord.x + sampleOffsets[4] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[4] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[4] * step; [flatten] if ((texcoord.x - sampleOffsets[4] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[4] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[4] * step; } void PS_AL_VGB(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 vgb : SV_Target) { const float sampleOffsets[5] = { 0.0, 2.4347826, 4.3478260, 6.2608695, 8.1739130 }; const float sampleWeights[5] = { 0.16818994, 0.27276957, 0.111690125, 0.024067905, 0.0021112196 }; vgb = tex2D(alOutColor, texcoord) * sampleWeights[0]; vgb = float4(max(vgb.rgb - alThreshold, 0.0), vgb.a); float step = 1.08 + (AL_t.x / 100) * 0.02; [flatten] if ((texcoord.y + sampleOffsets[1] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[1] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[1] * step; [flatten] if ((texcoord.y - sampleOffsets[1] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[1] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[1] * step; [flatten] if ((texcoord.y + sampleOffsets[2] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[2] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[2] * step; [flatten] if ((texcoord.y - sampleOffsets[2] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[2] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[2] * step; [flatten] if ((texcoord.y + sampleOffsets[3] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[3] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[3] * step; [flatten] if ((texcoord.y - sampleOffsets[3] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[3] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[3] * step; [flatten] if ((texcoord.y + sampleOffsets[4] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[4] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[4] * step; [flatten] if ((texcoord.y - sampleOffsets[4] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[4] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[4] * step; } float4 PS_AL_Magic(float4 vpos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target { float4 base = tex2D(ReShade::BackBuffer, texcoord); float4 high = tex2D(alInColor, texcoord); float adapt = 0; #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Adaptation) { //DetectLow float4 detectLow = tex2D(detectLowColor, 0.5) / 4.215; float low = sqrt(0.241 * detectLow.r * detectLow.r + 0.691 * detectLow.g * detectLow.g + 0.068 * detectLow.b * detectLow.b); //.DetectLow low = pow(low * 1.25f, 2); adapt = low * (low + 1.0f) * alAdapt * alInt * 5.0f; if (alDebug) { float mod = (texcoord.x * 1000.0f) % 1.001f; //mod = abs(mod - texcoord.x / 4.0f); if (texcoord.y < 0.01f && (texcoord.x < low * 10f && mod < 0.3f)) return float4(1f, 0.5f, 0.3f, 0f); if (texcoord.y > 0.01f && texcoord.y < 0.02f && (texcoord.x < adapt / (alInt * 1.5) && mod < 0.3f)) return float4(0.2f, 1f, 0.5f, 0f); } } high = min(0.0325f, high) * 1.15f; float4 highOrig = high; float2 flipcoord = 1.0f - texcoord; float4 highFlipOrig = tex2D(alInColor, flipcoord); highFlipOrig = min(0.03f, highFlipOrig) * 1.15f; float4 highFlip = highFlipOrig; float4 highLensSrc = high; #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Dirt) { float4 dirt = tex2D(dirtSampler, texcoord); float4 dirtOVR = tex2D(dirtOVRSampler, texcoord); float4 dirtOVB = tex2D(dirtOVBSampler, texcoord); float maxhigh = max(high.r, max(high.g, high.b)); float threshDiff = maxhigh - 3.2f; [flatten] if (threshDiff > 0) { high.r = (high.r / maxhigh) * 3.2f; high.g = (high.g / maxhigh) * 3.2f; high.b = (high.b / maxhigh) * 3.2f; } float4 highDirt = AL_DirtTex ? highOrig * dirt * alDirtInt : highOrig * high * alDirtInt; if (AL_Vibrance) { highDirt *= 1.0f + 0.5f * sin(AL_t.x); } float highMix = highOrig.r + highOrig.g + highOrig.b; float red = highOrig.r / highMix; float green = highOrig.g / highMix; float blue = highOrig.b / highMix; highOrig = highOrig + highDirt; if (AL_Adaptive == 2) { high = high + high * dirtOVR * alDirtOVInt * green; high = high + highDirt; high = high + highOrig * dirtOVB * alDirtOVInt * blue; high = high + highOrig * dirtOVR * alDirtOVInt* red; } else if (AL_Adaptive == 1) { high = high + highDirt; high = high + highOrig * dirtOVB * alDirtOVInt; } else { high = high + highDirt; high = high + highOrig * dirtOVR * alDirtOVInt; } highLensSrc = high * 85f * pow(1.25f - (abs(texcoord.x - 0.5f) + abs(texcoord.y - 0.5f)), 2); } float origBright = max(highLensSrc.r, max(highLensSrc.g, highLensSrc.b)); float maxOrig = max((1.8f * alLensThresh) - pow(origBright * (0.5f - abs(texcoord.x - 0.5f)), 4), 0.0f); float smartWeight = maxOrig * max(abs(flipcoord.x - 0.5f), 0.3f * abs(flipcoord.y - 0.5f)) * (2.2 - 1.2 * (abs(flipcoord.x - 0.5f))) * alLensInt; smartWeight = min(0.85f, max(0, AL_Adaptation ? smartWeight - adapt : smartWeight)); #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Lens) { float4 lensDB = tex2D(lensDBSampler, texcoord); float4 lensDB2 = tex2D(lensDB2Sampler, texcoord); float4 lensDOV = tex2D(lensDOVSampler, texcoord); float4 lensDUV = tex2D(lensDUVSampler, texcoord); float4 highLens = highFlip * lensDB * 0.7f * smartWeight; high += highLens; highLens = highFlipOrig * lensDUV * 1.15f * smartWeight; highFlipOrig += highLens; high += highLens; highLens = highFlipOrig * lensDB2 * 0.7f * smartWeight; highFlipOrig += highLens; high += highLens; highLens = highFlipOrig * lensDOV * 1.15f * smartWeight / 2f + highFlipOrig * smartWeight / 2f; highFlipOrig += highLens; high += highLens; } float dither = 0.15 * (1.0 / (pow(2, 10.0) - 1.0)); dither = lerp(2.0 * dither, -2.0 * dither, frac(dot(texcoord, ReShade::ScreenSize * float2(1.0 / 16.0, 10.0 / 36.0)) + 0.25)); if (all(base.xyz == 1.0)) { return 1.0; } #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Adaptation && AL_Dither) { base.xyz *= max(0.0f, (1.0f - adapt * 0.75f * alAdaptBaseMult * pow((1.0f - (base.x + base.y + base.z) / 3), alAdaptBaseBlackLvL))); float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + dither; float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt)); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix); } if (AL_Adaptation) { base.xyz *= max(0.0f, (1.0f - adapt * 0.75f * alAdaptBaseMult * pow((1.0f - (base.x + base.y + base.z) / 3), alAdaptBaseBlackLvL))); float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))); float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt)); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix); } if (AL_Dither) { float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + dither + adapt; float4 baseSample = lerp(base, highSampleMix, alInt); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, alInt * 0.85f) * baseSampleMix); } float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + adapt; float4 baseSample = lerp(base, highSampleMix, alInt); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, alInt * 0.85f) * baseSampleMix); } technique AmbientLight { pass AL_DetectInt { VertexShader = PostProcessVS; PixelShader = PS_AL_DetectInt; RenderTarget = detectIntTex; } pass AL_DetectLow { VertexShader = PostProcessVS; PixelShader = PS_AL_DetectLow; RenderTarget = detectLowTex; } pass AL_DetectHigh { VertexShader = PostProcessVS; PixelShader = PS_AL_DetectHigh; RenderTarget = alInTex; } #define PASS_AL_H(i) \ pass AL_H##i \ { \ VertexShader = PostProcessVS; \ PixelShader = PS_AL_HGB; \ RenderTarget = alOutTex; \ } #define PASS_AL_V(i) \ pass AL_V##i \ { \ VertexShader = PostProcessVS; \ PixelShader = PS_AL_VGB; \ RenderTarget = alInTex; \ } PASS_AL_H(1) PASS_AL_V(1) PASS_AL_H(2) PASS_AL_V(2) PASS_AL_H(3) PASS_AL_V(3) PASS_AL_H(4) PASS_AL_V(4) PASS_AL_H(5) PASS_AL_V(5) PASS_AL_H(6) PASS_AL_V(6) PASS_AL_H(7) PASS_AL_V(7) PASS_AL_H(8) PASS_AL_V(8) PASS_AL_H(9) PASS_AL_V(9) PASS_AL_H(10) PASS_AL_V(10) PASS_AL_H(11) PASS_AL_V(11) PASS_AL_H(12) PASS_AL_V(12) pass AL_Magic { VertexShader = PostProcessVS; PixelShader = PS_AL_Magic; } }
Texte modifié
Ouvrir un fichier
/** * Copyright (C) 2015 Ganossa (mediehawk@gmail.com) * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software with restriction, including without limitation the rights to * use and/or sell copies of the Software, and to permit persons to whom the Software * is furnished to do so, subject to the following conditions: * * The above copyright notice and the permission notices (this and below) shall * be included in all copies or substantial portions of the Software. * * Permission needs to be specifically granted by the author of the software to any * person obtaining a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, including without * limitation the rights to copy, modify, merge, publish, distribute, and/or * sublicense the Software, and subject to the following conditions: * * The above copyright notice and the permission notices (this and above) shall * be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This version of AmbientLight.fx has been modified to allow the "dither" effect * to be toggled on and off. */ #include "ReShadeUI.fxh" uniform bool alDebug < ui_tooltip = "Activates debug mode of AL, upper bar shows detected light, lower bar shows adaptation"; > = false; uniform float alInt < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 20.0; ui_tooltip = "Base intensity of AL"; > = 10.15; uniform float alThreshold < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 100.0; ui_tooltip = "Reduces intensity for not bright light"; > = 15.00; uniform bool AL_Dither < ui_tooltip = "Applies dither - may cause diagonal stripes"; > = true; uniform bool AL_Adaptation < ui_tooltip = "Activates adaptation algorithm"; > = true; uniform float alAdapt < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 4.0; ui_tooltip = "Intensity of AL correction for bright light"; > = 0.70; uniform float alAdaptBaseMult < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 4.0; ui_tooltip = "Multiplier for adaption applied to the original image"; > = 1.00; uniform int alAdaptBaseBlackLvL < __UNIFORM_SLIDER_INT1 ui_min = 0; ui_max = 4; ui_tooltip = "Distinction level of black and white (lower => less distinct)"; > = 2; uniform bool AL_Dirt < > = true; uniform bool AL_DirtTex < ui_tooltip = "Defines if dirt texture is used as overlay"; > = false; uniform bool AL_Vibrance < ui_tooltip = "Vibrance of dirt effect"; > = false; uniform int AL_Adaptive < ui_type = "combo"; ui_min = 0; ui_max = 2; ui_items = "Warm\0Cold\0Light Dependent\0"; > = 0; uniform float alDirtInt < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 2.0; ui_tooltip = "Intensity of dirt effect"; > = 1.0; uniform float alDirtOVInt < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 2.0; ui_tooltip = "Intensity of colored dirt effect"; > = 1.0; uniform bool AL_Lens < ui_tooltip = "Lens effect based on AL"; > = false; uniform float alLensThresh < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 1.0; ui_tooltip = "Reduces intensity of lens effect for not bright light"; > = 0.5; uniform float alLensInt < __UNIFORM_SLIDER_FLOAT1 ui_min = 0.0; ui_max = 10.0; ui_tooltip = "Intensity of lens effect"; > = 2.0; #include "ReShade.fxh" uniform float2 AL_t < source = "pingpong"; min = 0.0f; max = 6.28f; step = float2(0.1f, 0.2f); >; #define GEMFX_PIXEL_SIZE float2(1.0f / (BUFFER_WIDTH / 16.0f), 1.0f / (BUFFER_HEIGHT / 16.0f)) texture alInTex { Width = BUFFER_WIDTH / 16; Height = BUFFER_HEIGHT / 16; Format = RGBA32F; }; texture alOutTex { Width = BUFFER_WIDTH / 16; Height = BUFFER_HEIGHT / 16; Format = RGBA32F; }; texture detectIntTex { Width = 32; Height = 32; Format = RGBA8; }; sampler detectIntColor { Texture = detectIntTex; }; texture detectLowTex { Width = 1; Height = 1; Format = RGBA8; }; sampler detectLowColor { Texture = detectLowTex; }; texture dirtTex < source = "Dirt.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture dirtOVRTex < source = "DirtOVR.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture dirtOVBTex < source = "DirtOVB.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDBTex < source = "LensDB.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDB2Tex < source = "LensDB2.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDOVTex < source = "LensDOV.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; texture lensDUVTex < source = "LensDUV.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; }; sampler alInColor { Texture = alInTex; }; sampler alOutColor { Texture = alOutTex; }; sampler dirtSampler { Texture = dirtTex; }; sampler dirtOVRSampler { Texture = dirtOVRTex; }; sampler dirtOVBSampler { Texture = dirtOVBTex; }; sampler lensDBSampler { Texture = lensDBTex; }; sampler lensDB2Sampler { Texture = lensDB2Tex; }; sampler lensDOVSampler { Texture = lensDOVTex; }; sampler lensDUVSampler { Texture = lensDUVTex; }; void PS_AL_DetectInt(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectInt : SV_Target0) { detectInt = tex2D(ReShade::BackBuffer, texcoord); } void PS_AL_DetectLow(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectLow : SV_Target0) { detectLow = 0; if (texcoord.x != 0.5 && texcoord.y != 0.5) discard; [loop] for (float i = 0.0; i <= 1; i += 0.03125) { [unroll] for (float j = 0.0; j <= 1; j += 0.03125) { detectLow.xyz += tex2D(detectIntColor, float2(i, j)).xyz; } } detectLow.xyz /= 32 * 32; } void PS_AL_DetectHigh(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 x : SV_Target) { x = tex2D(ReShade::BackBuffer, texcoord); x = float4(x.rgb * pow(abs(max(x.r, max(x.g, x.b))), 2.0), 1.0f); float base = (x.r + x.g + x.b); base /= 3; float nR = (x.r * 2) - base; float nG = (x.g * 2) - base; float nB = (x.b * 2) - base; [flatten] if (nR < 0) { nG += nR / 2; nB += nR / 2; nR = 0; } [flatten] if (nG < 0) { nB += nG / 2; [flatten] if (nR > -nG / 2) nR += nG / 2; else nR = 0; nG = 0; } [flatten] if (nB < 0) { [flatten] if (nR > -nB / 2) nR += nB / 2; else nR = 0; [flatten] if (nG > -nB / 2) nG += nB / 2; else nG = 0; nB = 0; } [flatten] if (nR > 1) { nG += (nR - 1) / 2; nB += (nR - 1) / 2; nR = 1; } [flatten] if (nG > 1) { nB += (nG - 1) / 2; [flatten] if (nR + (nG - 1) < 1) nR += (nG - 1) / 2; else nR = 1; nG = 1; } [flatten] if (nB > 1) { [flatten] if (nR + (nB - 1) < 1) nR += (nB - 1) / 2; else nR = 1; [flatten] if (nG + (nB - 1) < 1) nG += (nB - 1) / 2; else nG = 1; nB = 1; } x.r = nR; x.g = nG; x.b = nB; } void PS_AL_HGB(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 hgb : SV_Target) { const float sampleOffsets[5] = { 0.0, 2.4347826, 4.3478260, 6.2608695, 8.1739130 }; const float sampleWeights[5] = { 0.16818994, 0.27276957, 0.111690125, 0.024067905, 0.0021112196 }; hgb = tex2D(alInColor, texcoord) * sampleWeights[0]; hgb = float4(max(hgb.rgb - alThreshold, 0.0), hgb.a); float stepMult = 1.08 + (AL_t.x / 100) * 0.02; [flatten] if ((texcoord.x + sampleOffsets[1] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[1] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[1] * stepMult; [flatten] if ((texcoord.x - sampleOffsets[1] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[1] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[1] * stepMult; [flatten] if ((texcoord.x + sampleOffsets[2] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[2] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[2] * stepMult; [flatten] if ((texcoord.x - sampleOffsets[2] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[2] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[2] * stepMult; [flatten] if ((texcoord.x + sampleOffsets[3] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[3] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[3] * stepMult; [flatten] if ((texcoord.x - sampleOffsets[3] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[3] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[3] * stepMult; [flatten] if ((texcoord.x + sampleOffsets[4] * GEMFX_PIXEL_SIZE.x) < 1.05) hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[4] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[4] * stepMult; [flatten] if ((texcoord.x - sampleOffsets[4] * GEMFX_PIXEL_SIZE.x) > -0.05) hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[4] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[4] * stepMult; } void PS_AL_VGB(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 vgb : SV_Target) { const float sampleOffsets[5] = { 0.0, 2.4347826, 4.3478260, 6.2608695, 8.1739130 }; const float sampleWeights[5] = { 0.16818994, 0.27276957, 0.111690125, 0.024067905, 0.0021112196 }; vgb = tex2D(alOutColor, texcoord) * sampleWeights[0]; vgb = float4(max(vgb.rgb - alThreshold, 0.0), vgb.a); float stepMult = 1.08 + (AL_t.x / 100) * 0.02; [flatten] if ((texcoord.y + sampleOffsets[1] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[1] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[1] * stepMult; [flatten] if ((texcoord.y - sampleOffsets[1] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[1] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[1] * stepMult; [flatten] if ((texcoord.y + sampleOffsets[2] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[2] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[2] * stepMult; [flatten] if ((texcoord.y - sampleOffsets[2] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[2] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[2] * stepMult; [flatten] if ((texcoord.y + sampleOffsets[3] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[3] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[3] * stepMult; [flatten] if ((texcoord.y - sampleOffsets[3] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[3] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[3] * stepMult; [flatten] if ((texcoord.y + sampleOffsets[4] * GEMFX_PIXEL_SIZE.y) < 1.05) vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[4] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[4] * stepMult; [flatten] if ((texcoord.y - sampleOffsets[4] * GEMFX_PIXEL_SIZE.y) > -0.05) vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[4] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[4] * stepMult; } float4 PS_AL_Magic(float4 vpos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target { float4 base = tex2D(ReShade::BackBuffer, texcoord); float4 high = tex2D(alInColor, texcoord); float adapt = 0; #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Adaptation) { //DetectLow float4 detectLow = tex2D(detectLowColor, 0.5) / 4.215; float low = sqrt(0.241 * detectLow.r * detectLow.r + 0.691 * detectLow.g * detectLow.g + 0.068 * detectLow.b * detectLow.b); //.DetectLow low = pow(low * 1.25f, 2); adapt = low * (low + 1.0f) * alAdapt * alInt * 5.0f; if (alDebug) { float mod = (texcoord.x * 1000.0f) % 1.001f; //mod = abs(mod - texcoord.x / 4.0f); if (texcoord.y < 0.01f && (texcoord.x < low * 10f && mod < 0.3f)) return float4(1f, 0.5f, 0.3f, 0f); if (texcoord.y > 0.01f && texcoord.y < 0.02f && (texcoord.x < adapt / (alInt * 1.5) && mod < 0.3f)) return float4(0.2f, 1f, 0.5f, 0f); } } high = min(0.0325f, high) * 1.15f; float4 highOrig = high; float2 flipcoord = 1.0f - texcoord; float4 highFlipOrig = tex2D(alInColor, flipcoord); highFlipOrig = min(0.03f, highFlipOrig) * 1.15f; float4 highFlip = highFlipOrig; float4 highLensSrc = high; #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Dirt) { float4 dirt = tex2D(dirtSampler, texcoord); float4 dirtOVR = tex2D(dirtOVRSampler, texcoord); float4 dirtOVB = tex2D(dirtOVBSampler, texcoord); float maxhigh = max(high.r, max(high.g, high.b)); float threshDiff = maxhigh - 3.2f; [flatten] if (threshDiff > 0) { high.r = (high.r / maxhigh) * 3.2f; high.g = (high.g / maxhigh) * 3.2f; high.b = (high.b / maxhigh) * 3.2f; } float4 highDirt = AL_DirtTex ? highOrig * dirt * alDirtInt : highOrig * high * alDirtInt; if (AL_Vibrance) { highDirt *= 1.0f + 0.5f * sin(AL_t.x); } float highMix = highOrig.r + highOrig.g + highOrig.b; float red = highOrig.r / highMix; float green = highOrig.g / highMix; float blue = highOrig.b / highMix; highOrig = highOrig + highDirt; if (AL_Adaptive == 2) { high = high + high * dirtOVR * alDirtOVInt * green; high = high + highDirt; high = high + highOrig * dirtOVB * alDirtOVInt * blue; high = high + highOrig * dirtOVR * alDirtOVInt* red; } else if (AL_Adaptive == 1) { high = high + highDirt; high = high + highOrig * dirtOVB * alDirtOVInt; } else { high = high + highDirt; high = high + highOrig * dirtOVR * alDirtOVInt; } highLensSrc = high * 85f * pow(1.25f - (abs(texcoord.x - 0.5f) + abs(texcoord.y - 0.5f)), 2); } float origBright = max(highLensSrc.r, max(highLensSrc.g, highLensSrc.b)); float maxOrig = max((1.8f * alLensThresh) - pow(origBright * (0.5f - abs(texcoord.x - 0.5f)), 4), 0.0f); float smartWeight = maxOrig * max(abs(flipcoord.x - 0.5f), 0.3f * abs(flipcoord.y - 0.5f)) * (2.2 - 1.2 * (abs(flipcoord.x - 0.5f))) * alLensInt; smartWeight = min(0.85f, max(0, AL_Adaptation ? smartWeight - adapt : smartWeight)); #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Lens) { float4 lensDB = tex2D(lensDBSampler, texcoord); float4 lensDB2 = tex2D(lensDB2Sampler, texcoord); float4 lensDOV = tex2D(lensDOVSampler, texcoord); float4 lensDUV = tex2D(lensDUVSampler, texcoord); float4 highLens = highFlip * lensDB * 0.7f * smartWeight; high += highLens; highLens = highFlipOrig * lensDUV * 1.15f * smartWeight; highFlipOrig += highLens; high += highLens; highLens = highFlipOrig * lensDB2 * 0.7f * smartWeight; highFlipOrig += highLens; high += highLens; highLens = highFlipOrig * lensDOV * 1.15f * smartWeight / 2f + highFlipOrig * smartWeight / 2f; highFlipOrig += highLens; high += highLens; } float dither = 0.15 * (1.0 / (pow(2, 10.0) - 1.0)); dither = lerp(2.0 * dither, -2.0 * dither, frac(dot(texcoord, BUFFER_SCREEN_SIZE * float2(1.0 / 16.0, 10.0 / 36.0)) + 0.25)); if (all(base.xyz == 1.0)) { return 1.0; } #if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__ [flatten] #endif if (AL_Adaptation && AL_Dither) { base.xyz *= max(0.0f, (1.0f - adapt * 0.75f * alAdaptBaseMult * pow(abs(1.0f - (base.x + base.y + base.z) / 3), alAdaptBaseBlackLvL))); float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + dither; float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt)); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix); } else if (AL_Adaptation) { base.xyz *= max(0.0f, (1.0f - adapt * 0.75f * alAdaptBaseMult * pow(abs(1.0f - (base.x + base.y + base.z) / 3), alAdaptBaseBlackLvL))); float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))); float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt)); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix); } else if (AL_Dither) { float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + dither + adapt; float4 baseSample = lerp(base, highSampleMix, alInt); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, alInt * 0.85f) * baseSampleMix); } else { float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + adapt; float4 baseSample = lerp(base, highSampleMix, alInt); float baseSampleMix = baseSample.r + baseSample.g + baseSample.b; return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, alInt * 0.85f) * baseSampleMix); } } technique AmbientLight { pass AL_DetectInt { VertexShader = PostProcessVS; PixelShader = PS_AL_DetectInt; RenderTarget = detectIntTex; } pass AL_DetectLow { VertexShader = PostProcessVS; PixelShader = PS_AL_DetectLow; RenderTarget = detectLowTex; } pass AL_DetectHigh { VertexShader = PostProcessVS; PixelShader = PS_AL_DetectHigh; RenderTarget = alInTex; } #define PASS_AL_H(i) \ pass AL_H##i \ { \ VertexShader = PostProcessVS; \ PixelShader = PS_AL_HGB; \ RenderTarget = alOutTex; \ } #define PASS_AL_V(i) \ pass AL_V##i \ { \ VertexShader = PostProcessVS; \ PixelShader = PS_AL_VGB; \ RenderTarget = alInTex; \ } PASS_AL_H(1) PASS_AL_V(1) PASS_AL_H(2) PASS_AL_V(2) PASS_AL_H(3) PASS_AL_V(3) PASS_AL_H(4) PASS_AL_V(4) PASS_AL_H(5) PASS_AL_V(5) PASS_AL_H(6) PASS_AL_V(6) PASS_AL_H(7) PASS_AL_V(7) PASS_AL_H(8) PASS_AL_V(8) PASS_AL_H(9) PASS_AL_V(9) PASS_AL_H(10) PASS_AL_V(10) PASS_AL_H(11) PASS_AL_V(11) PASS_AL_H(12) PASS_AL_V(12) pass AL_Magic { VertexShader = PostProcessVS; PixelShader = PS_AL_Magic; } }
Trouver la différence