Diff
checker
テキスト
テキスト
画像
ドキュメント
Excel
フォルダ
Legal
Enterprise
デスクトップ
料金
ログイン
Diffchecker デスクトップのダウンロード
テキスト比較
2 つのテキスト ファイルの違いを見つける
ツール
履歴
ライブエディター
未変更行を折りたたむ
折り返しなし
レイアウト
分割
統合
比較精度
スマート
単語
文字
シンタックスハイライト
構文を選択
無視
テキスト変換
最初の差分へ移動
入力を編集
Diffchecker Desktop
Diffcheckerを実行する最も安全な方法。Diffchecker Desktopアプリを入手:あなたの差分はコンピューターから出ることはありません!
Desktopを入手
AmbientLightDither2017 vs AmbientLightDither2020
作成日
6 年前
差分は期限切れになりません
クリア
エクスポート
共有
説明
34 削除
行
合計
削除
文字
合計
削除
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
540 行
すべてコピー
40 追加
行
合計
追加
文字
合計
追加
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
525 行
すべてコピー
/**
/**
* 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.
*/
*/
コピー
コピー済み
コピー
コピー済み
#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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
コピー
コピー済み
コピー
コピー済み
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;
#include "ReShade.fxh"
#include "ReShade.fxh"
uniform float2 AL_t < source = "pingpong"; min = 0.0f; max = 6.28f; step = float2(0.1f, 0.2f); >;
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))
#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 alInTex { Width = BUFFER_WIDTH / 16; Height = BUFFER_HEIGHT / 16; Format = RGBA32F; };
texture alOutTex { 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; };
texture detectIntTex { Width = 32; Height = 32; Format = RGBA8; };
sampler detectIntColor { Texture = detectIntTex; };
sampler detectIntColor { Texture = detectIntTex; };
texture detectLowTex { Width = 1; Height = 1; Format = RGBA8; };
texture detectLowTex { Width = 1; Height = 1; Format = RGBA8; };
sampler detectLowColor { Texture = detectLowTex; };
sampler detectLowColor { Texture = detectLowTex; };
texture dirtTex < source = "Dirt.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; };
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 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 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 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 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 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; };
texture lensDUVTex < source = "LensDUV.png"; > { Width = 1920; Height = 1080; MipLevels = 1; Format = RGBA8; };
sampler alInColor { Texture = alInTex; };
sampler alInColor { Texture = alInTex; };
sampler alOutColor { Texture = alOutTex; };
sampler alOutColor { Texture = alOutTex; };
sampler dirtSampler { Texture = dirtTex; };
sampler dirtSampler { Texture = dirtTex; };
sampler dirtOVRSampler { Texture = dirtOVRTex; };
sampler dirtOVRSampler { Texture = dirtOVRTex; };
sampler dirtOVBSampler { Texture = dirtOVBTex; };
sampler dirtOVBSampler { Texture = dirtOVBTex; };
sampler lensDBSampler { Texture = lensDBTex; };
sampler lensDBSampler { Texture = lensDBTex; };
sampler lensDB2Sampler { Texture = lensDB2Tex; };
sampler lensDB2Sampler { Texture = lensDB2Tex; };
sampler lensDOVSampler { Texture = lensDOVTex; };
sampler lensDOVSampler { Texture = lensDOVTex; };
sampler lensDUVSampler { Texture = lensDUVTex; };
sampler lensDUVSampler { Texture = lensDUVTex; };
void PS_AL_DetectInt(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectInt : SV_Target0)
void PS_AL_DetectInt(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectInt : SV_Target0)
{
{
detectInt = tex2D(ReShade::BackBuffer, texcoord);
detectInt = tex2D(ReShade::BackBuffer, texcoord);
}
}
コピー
コピー済み
コピー
コピー済み
void PS_AL_DetectLow(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectLow : SV_Target0)
void PS_AL_DetectLow(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 detectLow : SV_Target0)
{
{
detectLow = 0;
detectLow = 0;
if (texcoord.x != 0.5 && texcoord.y != 0.5)
if (texcoord.x != 0.5 && texcoord.y != 0.5)
discard;
discard;
[loop]
[loop]
for (float i = 0.0; i <= 1; i += 0.03125)
for (float i = 0.0; i <= 1; i += 0.03125)
{
{
[unroll]
[unroll]
for (float j = 0.0; j <= 1; j += 0.03125)
for (float j = 0.0; j <= 1; j += 0.03125)
{
{
detectLow.xyz += tex2D(detectIntColor, float2(i, j)).xyz;
detectLow.xyz += tex2D(detectIntColor, float2(i, j)).xyz;
}
}
}
}
detectLow.xyz /= 32 * 32;
detectLow.xyz /= 32 * 32;
}
}
コピー
コピー済み
コピー
コピー済み
void PS_AL_DetectHigh(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 x : SV_Target)
void PS_AL_DetectHigh(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 x : SV_Target)
{
{
x = tex2D(ReShade::BackBuffer, texcoord);
x = tex2D(ReShade::BackBuffer, texcoord);
x = float4(x.rgb * pow(abs(max(x.r, max(x.g, x.b))), 2.0), 1.0f);
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 base = (x.r + x.g + x.b); base /= 3;
float nR = (x.r * 2) - base;
float nR = (x.r * 2) - base;
float nG = (x.g * 2) - base;
float nG = (x.g * 2) - base;
float nB = (x.b * 2) - base;
float nB = (x.b * 2) - base;
[flatten]
[flatten]
if (nR < 0)
if (nR < 0)
{
{
nG += nR / 2;
nG += nR / 2;
nB += nR / 2;
nB += nR / 2;
nR = 0;
nR = 0;
}
}
[flatten]
[flatten]
if (nG < 0)
if (nG < 0)
{
{
nB += nG / 2;
nB += nG / 2;
[flatten] if (nR > -nG / 2) nR += nG / 2; else nR = 0;
[flatten] if (nR > -nG / 2) nR += nG / 2; else nR = 0;
nG = 0;
nG = 0;
}
}
[flatten]
[flatten]
if (nB < 0)
if (nB < 0)
{
{
[flatten] if (nR > -nB / 2) nR += nB / 2; else nR = 0;
[flatten] if (nR > -nB / 2) nR += nB / 2; else nR = 0;
[flatten] if (nG > -nB / 2) nG += nB / 2; else nG = 0;
[flatten] if (nG > -nB / 2) nG += nB / 2; else nG = 0;
nB = 0;
nB = 0;
}
}
[flatten]
[flatten]
if (nR > 1)
if (nR > 1)
{
{
nG += (nR - 1) / 2;
nG += (nR - 1) / 2;
nB += (nR - 1) / 2;
nB += (nR - 1) / 2;
nR = 1;
nR = 1;
}
}
[flatten]
[flatten]
if (nG > 1)
if (nG > 1)
{
{
nB += (nG - 1) / 2;
nB += (nG - 1) / 2;
[flatten] if (nR + (nG - 1) < 1) nR += (nG - 1) / 2; else nR = 1;
[flatten] if (nR + (nG - 1) < 1) nR += (nG - 1) / 2; else nR = 1;
nG = 1;
nG = 1;
}
}
[flatten]
[flatten]
if (nB > 1)
if (nB > 1)
{
{
[flatten] if (nR + (nB - 1) < 1) nR += (nB - 1) / 2; else nR = 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;
[flatten] if (nG + (nB - 1) < 1) nG += (nB - 1) / 2; else nG = 1;
nB = 1;
nB = 1;
}
}
x.r = nR; x.g = nG; x.b = nB;
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)
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 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 };
const float sampleWeights[5] = { 0.16818994, 0.27276957, 0.111690125, 0.024067905, 0.0021112196 };
hgb = tex2D(alInColor, texcoord) * sampleWeights[0];
hgb = tex2D(alInColor, texcoord) * sampleWeights[0];
hgb = float4(max(hgb.rgb - alThreshold, 0.0), hgb.a);
hgb = float4(max(hgb.rgb - alThreshold, 0.0), hgb.a);
コピー
コピー済み
コピー
コピー済み
float step
= 1.08 + (AL_t.x / 100) * 0.02;
float step
Mult
= 1.08 + (AL_t.x / 100) * 0.02;
[flatten]
[flatten]
if ((texcoord.x + sampleOffsets[1] * GEMFX_PIXEL_SIZE.x) < 1.05)
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
;
hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[1] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[1] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.x - sampleOffsets[1] * GEMFX_PIXEL_SIZE.x) > -0.05)
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
;
hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[1] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[1] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.x + sampleOffsets[2] * GEMFX_PIXEL_SIZE.x) < 1.05)
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
;
hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[2] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[2] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.x - sampleOffsets[2] * GEMFX_PIXEL_SIZE.x) > -0.05)
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
;
hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[2] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[2] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.x + sampleOffsets[3] * GEMFX_PIXEL_SIZE.x) < 1.05)
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
;
hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[3] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[3] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.x - sampleOffsets[3] * GEMFX_PIXEL_SIZE.x) > -0.05)
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
;
hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[3] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[3] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.x + sampleOffsets[4] * GEMFX_PIXEL_SIZE.x) < 1.05)
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
;
hgb += tex2D(alInColor, texcoord + float2(sampleOffsets[4] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[4] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.x - sampleOffsets[4] * GEMFX_PIXEL_SIZE.x) > -0.05)
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
;
hgb += tex2D(alInColor, texcoord - float2(sampleOffsets[4] * GEMFX_PIXEL_SIZE.x, 0.0)) * sampleWeights[4] * step
Mult
;
}
}
コピー
コピー済み
コピー
コピー済み
void PS_AL_VGB(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 vgb : SV_Target)
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 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 };
const float sampleWeights[5] = { 0.16818994, 0.27276957, 0.111690125, 0.024067905, 0.0021112196 };
vgb = tex2D(alOutColor, texcoord) * sampleWeights[0];
vgb = tex2D(alOutColor, texcoord) * sampleWeights[0];
vgb = float4(max(vgb.rgb - alThreshold, 0.0), vgb.a);
vgb = float4(max(vgb.rgb - alThreshold, 0.0), vgb.a);
コピー
コピー済み
コピー
コピー済み
float step
= 1.08 + (AL_t.x / 100) * 0.02;
float step
Mult
= 1.08 + (AL_t.x / 100) * 0.02;
[flatten]
[flatten]
if ((texcoord.y + sampleOffsets[1] * GEMFX_PIXEL_SIZE.y) < 1.05)
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
;
vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[1] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[1] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.y - sampleOffsets[1] * GEMFX_PIXEL_SIZE.y) > -0.05)
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
;
vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[1] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[1] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.y + sampleOffsets[2] * GEMFX_PIXEL_SIZE.y) < 1.05)
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
;
vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[2] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[2] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.y - sampleOffsets[2] * GEMFX_PIXEL_SIZE.y) > -0.05)
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
;
vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[2] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[2] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.y + sampleOffsets[3] * GEMFX_PIXEL_SIZE.y) < 1.05)
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
;
vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[3] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[3] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.y - sampleOffsets[3] * GEMFX_PIXEL_SIZE.y) > -0.05)
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
;
vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[3] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[3] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.y + sampleOffsets[4] * GEMFX_PIXEL_SIZE.y) < 1.05)
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
;
vgb += tex2D(alOutColor, texcoord + float2(0.0, sampleOffsets[4] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[4] * step
Mult
;
[flatten]
[flatten]
if ((texcoord.y - sampleOffsets[4] * GEMFX_PIXEL_SIZE.y) > -0.05)
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
;
vgb += tex2D(alOutColor, texcoord - float2(0.0, sampleOffsets[4] * GEMFX_PIXEL_SIZE.y)) * sampleWeights[4] * step
Mult
;
}
}
float4 PS_AL_Magic(float4 vpos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target
float4 PS_AL_Magic(float4 vpos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target
{
{
float4 base = tex2D(ReShade::BackBuffer, texcoord);
float4 base = tex2D(ReShade::BackBuffer, texcoord);
float4 high = tex2D(alInColor, texcoord);
float4 high = tex2D(alInColor, texcoord);
float adapt = 0;
float adapt = 0;
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
[flatten]
[flatten]
#endif
#endif
コピー
コピー済み
コピー
コピー済み
if (AL_Adaptation)
if (AL_Adaptation)
{
{
//DetectLow
//DetectLow
float4 detectLow = tex2D(detectLowColor, 0.5) / 4.215;
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);
float low = sqrt(0.241 * detectLow.r * detectLow.r + 0.691 * detectLow.g * detectLow.g + 0.068 * detectLow.b * detectLow.b);
//.DetectLow
//.DetectLow
low = pow(low * 1.25f, 2);
low = pow(low * 1.25f, 2);
adapt = low * (low + 1.0f) * alAdapt * alInt * 5.0f;
adapt = low * (low + 1.0f) * alAdapt * alInt * 5.0f;
if (alDebug)
if (alDebug)
{
{
float mod = (texcoord.x * 1000.0f) % 1.001f;
float mod = (texcoord.x * 1000.0f) % 1.001f;
//mod = abs(mod - texcoord.x / 4.0f);
//mod = abs(mod - texcoord.x / 4.0f);
if (texcoord.y < 0.01f && (texcoord.x < low * 10f && mod < 0.3f))
if (texcoord.y < 0.01f && (texcoord.x < low * 10f && mod < 0.3f))
return float4(1f, 0.5f, 0.3f, 0f);
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))
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);
return float4(0.2f, 1f, 0.5f, 0f);
}
}
}
}
high = min(0.0325f, high) * 1.15f;
high = min(0.0325f, high) * 1.15f;
float4 highOrig = high;
float4 highOrig = high;
float2 flipcoord = 1.0f - texcoord;
float2 flipcoord = 1.0f - texcoord;
float4 highFlipOrig = tex2D(alInColor, flipcoord);
float4 highFlipOrig = tex2D(alInColor, flipcoord);
highFlipOrig = min(0.03f, highFlipOrig) * 1.15f;
highFlipOrig = min(0.03f, highFlipOrig) * 1.15f;
float4 highFlip = highFlipOrig;
float4 highFlip = highFlipOrig;
float4 highLensSrc = high;
float4 highLensSrc = high;
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
[flatten]
[flatten]
#endif
#endif
コピー
コピー済み
コピー
コピー済み
if (AL_Dirt)
if (AL_Dirt)
{
{
float4 dirt = tex2D(dirtSampler, texcoord);
float4 dirt = tex2D(dirtSampler, texcoord);
float4 dirtOVR = tex2D(dirtOVRSampler, texcoord);
float4 dirtOVR = tex2D(dirtOVRSampler, texcoord);
float4 dirtOVB = tex2D(dirtOVBSampler, texcoord);
float4 dirtOVB = tex2D(dirtOVBSampler, texcoord);
float maxhigh = max(high.r, max(high.g, high.b));
float maxhigh = max(high.r, max(high.g, high.b));
float threshDiff = maxhigh - 3.2f;
float threshDiff = maxhigh - 3.2f;
[flatten]
[flatten]
if (threshDiff > 0)
if (threshDiff > 0)
{
{
high.r = (high.r / maxhigh) * 3.2f;
high.r = (high.r / maxhigh) * 3.2f;
high.g = (high.g / maxhigh) * 3.2f;
high.g = (high.g / maxhigh) * 3.2f;
high.b = (high.b / maxhigh) * 3.2f;
high.b = (high.b / maxhigh) * 3.2f;
}
}
float4 highDirt = AL_DirtTex ? highOrig * dirt * alDirtInt : highOrig * high * alDirtInt;
float4 highDirt = AL_DirtTex ? highOrig * dirt * alDirtInt : highOrig * high * alDirtInt;
if (AL_Vibrance)
if (AL_Vibrance)
{
{
highDirt *= 1.0f + 0.5f * sin(AL_t.x);
highDirt *= 1.0f + 0.5f * sin(AL_t.x);
}
}
float highMix = highOrig.r + highOrig.g + highOrig.b;
float highMix = highOrig.r + highOrig.g + highOrig.b;
float red = highOrig.r / highMix;
float red = highOrig.r / highMix;
float green = highOrig.g / highMix;
float green = highOrig.g / highMix;
float blue = highOrig.b / highMix;
float blue = highOrig.b / highMix;
highOrig = highOrig + highDirt;
highOrig = highOrig + highDirt;
if (AL_Adaptive == 2)
if (AL_Adaptive == 2)
{
{
high = high + high * dirtOVR * alDirtOVInt * green;
high = high + high * dirtOVR * alDirtOVInt * green;
high = high + highDirt;
high = high + highDirt;
high = high + highOrig * dirtOVB * alDirtOVInt * blue;
high = high + highOrig * dirtOVB * alDirtOVInt * blue;
high = high + highOrig * dirtOVR * alDirtOVInt* red;
high = high + highOrig * dirtOVR * alDirtOVInt* red;
}
}
else if (AL_Adaptive == 1)
else if (AL_Adaptive == 1)
{
{
high = high + highDirt;
high = high + highDirt;
high = high + highOrig * dirtOVB * alDirtOVInt;
high = high + highOrig * dirtOVB * alDirtOVInt;
}
}
else
else
{
{
high = high + highDirt;
high = high + highDirt;
high = high + highOrig * dirtOVR * alDirtOVInt;
high = high + highOrig * dirtOVR * alDirtOVInt;
}
}
highLensSrc = high * 85f * pow(1.25f - (abs(texcoord.x - 0.5f) + abs(texcoord.y - 0.5f)), 2);
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 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 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;
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));
smartWeight = min(0.85f, max(0, AL_Adaptation ? smartWeight - adapt : smartWeight));
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
[flatten]
[flatten]
#endif
#endif
コピー
コピー済み
コピー
コピー済み
if (AL_Lens)
if (AL_Lens)
{
{
float4 lensDB = tex2D(lensDBSampler, texcoord);
float4 lensDB = tex2D(lensDBSampler, texcoord);
float4 lensDB2 = tex2D(lensDB2Sampler, texcoord);
float4 lensDB2 = tex2D(lensDB2Sampler, texcoord);
float4 lensDOV = tex2D(lensDOVSampler, texcoord);
float4 lensDOV = tex2D(lensDOVSampler, texcoord);
float4 lensDUV = tex2D(lensDUVSampler, texcoord);
float4 lensDUV = tex2D(lensDUVSampler, texcoord);
float4 highLens = highFlip * lensDB * 0.7f * smartWeight;
float4 highLens = highFlip * lensDB * 0.7f * smartWeight;
high += highLens;
high += highLens;
highLens = highFlipOrig * lensDUV * 1.15f * smartWeight;
highLens = highFlipOrig * lensDUV * 1.15f * smartWeight;
highFlipOrig += highLens;
highFlipOrig += highLens;
high += highLens;
high += highLens;
highLens = highFlipOrig * lensDB2 * 0.7f * smartWeight;
highLens = highFlipOrig * lensDB2 * 0.7f * smartWeight;
highFlipOrig += highLens;
highFlipOrig += highLens;
high += highLens;
high += highLens;
highLens = highFlipOrig * lensDOV * 1.15f * smartWeight / 2f + highFlipOrig * smartWeight / 2f;
highLens = highFlipOrig * lensDOV * 1.15f * smartWeight / 2f + highFlipOrig * smartWeight / 2f;
highFlipOrig += highLens;
highFlipOrig += highLens;
high += highLens;
high += highLens;
}
}
float dither = 0.15 * (1.0 / (pow(2, 10.0) - 1.0));
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));
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))
if (all(base.xyz == 1.0))
{
{
return 1.0;
return 1.0;
}
}
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
#if __RENDERER__ < 0xa000 && !__RESHADE_PERFORMANCE_MODE__
[flatten]
[flatten]
#endif
#endif
if (AL_Adaptation && AL_Dither)
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)));
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 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + dither;
float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt));
float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt));
float baseSampleMix = baseSample.r + baseSample.g + baseSample.b;
float baseSampleMix = baseSample.r + baseSample.g + baseSample.b;
return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix);
return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix);
}
}
コピー
コピー済み
コピー
コピー済み
else
if (AL_Adaptation)
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)));
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 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0)));
float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt));
float4 baseSample = lerp(base, highSampleMix, max(0.0f, alInt - adapt));
float baseSampleMix = baseSample.r + baseSample.g + baseSample.b;
float baseSampleMix = baseSample.r + baseSample.g + baseSample.b;
return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix);
return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, (alInt - adapt) * 0.85f) * baseSampleMix);
}
}
コピー
コピー済み
コピー
コピー済み
else
if (AL_Dither)
if (AL_Dither)
{
{
float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + dither + adapt;
float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + dither + adapt;
float4 baseSample = lerp(base, highSampleMix, alInt);
float4 baseSample = lerp(base, highSampleMix, alInt);
float baseSampleMix = baseSample.r + baseSample.g + baseSample.b;
float baseSampleMix = baseSample.r + baseSample.g + baseSample.b;
return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, alInt * 0.85f) * baseSampleMix);
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);
float4 highSampleMix = (1.0 - ((1.0 - base) * (1.0 - high * 1.0))) + adapt;
float baseSampleMix = baseSample.r + baseSample.g + baseSample.b;
float4 baseSample = lerp(base, highSampleMix, alInt);
return baseSampleMix > 0.008 ? baseSample : lerp(base, highSampleMix, max(0.0f, alInt * 0.85f) * baseSampleMix);
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
technique AmbientLight
{
{
pass AL_DetectInt
pass AL_DetectInt
{
{
VertexShader = PostProcessVS;
VertexShader = PostProcessVS;
PixelShader = PS_AL_DetectInt;
PixelShader = PS_AL_DetectInt;
RenderTarget = detectIntTex;
RenderTarget = detectIntTex;
}
}
pass AL_DetectLow
pass AL_DetectLow
{
{
VertexShader = PostProcessVS;
VertexShader = PostProcessVS;
PixelShader = PS_AL_DetectLow;
PixelShader = PS_AL_DetectLow;
RenderTarget = detectLowTex;
RenderTarget = detectLowTex;
}
}
pass AL_DetectHigh
pass AL_DetectHigh
{
{
VertexShader = PostProcessVS;
VertexShader = PostProcessVS;
PixelShader = PS_AL_DetectHigh;
PixelShader = PS_AL_DetectHigh;
RenderTarget = alInTex;
RenderTarget = alInTex;
}
}
#define PASS_AL_H(i) \
#define PASS_AL_H(i) \
pass AL_H##i \
pass AL_H##i \
{ \
{ \
VertexShader = PostProcessVS; \
VertexShader = PostProcessVS; \
PixelShader = PS_AL_HGB; \
PixelShader = PS_AL_HGB; \
RenderTarget = alOutTex; \
RenderTarget = alOutTex; \
}
}
#define PASS_AL_V(i) \
#define PASS_AL_V(i) \
pass AL_V##i \
pass AL_V##i \
{ \
{ \
VertexShader = PostProcessVS; \
VertexShader = PostProcessVS; \
PixelShader = PS_AL_VGB; \
PixelShader = PS_AL_VGB; \
RenderTarget = alInTex; \
RenderTarget = alInTex; \
}
}
PASS_AL_H(1)
PASS_AL_H(1)
PASS_AL_V(1)
PASS_AL_V(1)
PASS_AL_H(2)
PASS_AL_H(2)
PASS_AL_V(2)
PASS_AL_V(2)
PASS_AL_H(3)
PASS_AL_H(3)
PASS_AL_V(3)
PASS_AL_V(3)
PASS_AL_H(4)
PASS_AL_H(4)
PASS_AL_V(4)
PASS_AL_V(4)
PASS_AL_H(5)
PASS_AL_H(5)
PASS_AL_V(5)
PASS_AL_V(5)
PASS_AL_H(6)
PASS_AL_H(6)
PASS_AL_V(6)
PASS_AL_V(6)
PASS_AL_H(7)
PASS_AL_H(7)
PASS_AL_V(7)
PASS_AL_V(7)
PASS_AL_H(8)
PASS_AL_H(8)
PASS_AL_V(8)
PASS_AL_V(8)
PASS_AL_H(9)
PASS_AL_H(9)
PASS_AL_V(9)
PASS_AL_V(9)
PASS_AL_H(10)
PASS_AL_H(10)
PASS_AL_V(10)
PASS_AL_V(10)
PASS_AL_H(11)
PASS_AL_H(11)
PASS_AL_V(11)
PASS_AL_V(11)
PASS_AL_H(12)
PASS_AL_H(12)
PASS_AL_V(12)
PASS_AL_V(12)
pass AL_Magic
pass AL_Magic
{
{
VertexShader = PostProcessVS;
VertexShader = PostProcessVS;
PixelShader = PS_AL_Magic;
PixelShader = PS_AL_Magic;
}
}
}
}
保存された差分
原文
ファイルを開く
/** * 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; } }
変更されたテキスト
ファイルを開く
/** * 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; } }
違いを見つける