Can someone port details.yfx from freestyle to reshade
- odikzz2
- Topic Author
Please Log in or Create an account to join the conversation.
- YF
Please Log in or Create an account to join the conversation.
- odikzz2
- Topic Author
Code for Details.fx
Details.yaml
samplerstates:
SamplerLinear:
filter: MIN_MAG_MIP_LINEAR
addressU: CLAMP
addressV: CLAMP
type: RGBA8_uint
constant-buffers:
globalParams: {screenSize: SCREEN_SIZE, captureState: CAPTURE_STATE, tileUV: TILE_UV_RANGE}
controlBuf: {g_sldSharpen: sharpenSlider, g_sldClarity : claritySlider, g_sldHDR : hdrSlider, g_sldBloom : bloomSlider}
typical_slider1:
type: float
minimum-value: -1.0
maximum-value: 1.0
default-value: 0.0
ui-sticky-region: 0.01
ui-value-unit: "%"
ui-value-min: -100
ui-value-max: 100
ui-value-step: 5
typical_slider2:
type: float
minimum-value: 0.0
maximum-value: 1.0
default-value: 0.0
ui-sticky-region: 0.01
ui-value-unit: "%"
ui-value-min: 0
ui-value-max: 100
ui-value-step: 5
user-constants:
- name: sharpenSlider
ui-label: "Sharpen"
ui-label-localized:
ru-RU: "Резкость"
fr-FR: "Accentuation"
it-IT: "Messa a fuoco"
de-DE: "Schärfen"
es-ES: "Nitidez"
es-MX: "Enfoque"
zh-CHS: "锐化"
zh-CHT: "銳化"
ja-JP: "シャープにする"
cs-CZ: "Zaostřit"
da-DK: "Gør skarpere"
el-GR: "Αύξηση ευκρίνειας"
en-UK: "Sharpen"
fi-FI: "Terävöitä"
hu: "Élesítés"
ko-KR: "선명도"
nl-NL: "Scherper maken"
nb-NO: "Gjør skarpere"
pl: "Wyostrzanie"
pt-PT: "Nitidez"
pt-BR: "Nitidez"
sl-SI: "Ostrenje"
sk-SK: "Zostriť"
sv-SE: "Skärpa"
th-TH: "ทำให้คมชัดขึ้น"
tr-TR: "Keskinleştirme"
default-value: 0.0
ui-sticky-value: 0.0
import: [typical_slider2]
- name: claritySlider
ui-label: "Clarity"
ui-label-localized:
ru-RU: "Четкость"
fr-FR: "Clarté"
it-IT: "Nitidezza"
de-DE: "Klarheit"
es-ES: "Claridad"
es-MX: "Claridad"
zh-CHS: "清晰度"
zh-CHT: "清晰度"
ja-JP: "鮮明さ"
cs-CZ: "Čirost"
da-DK: "Klarhed"
el-GR: "Καθαρότητα"
en-UK: "Clarity"
fi-FI: "Selkeys"
hu: "Tisztaság"
ko-KR: "투명도"
nl-NL: "Helderheid"
nb-NO: "Klarhet"
pl: "Przejrzystość"
pt-PT: "Claridade"
pt-BR: "Claridade"
sl-SI: "Jasnost"
sk-SK: "Jasnosť"
sv-SE: "Klarhet"
th-TH: "ความชัดเจน"
tr-TR: "Netlik"
default-value: 0.0
ui-sticky-value: 0.0
import: [typical_slider1]
- name: hdrSlider
ui-label: "HDR Toning"
ui-label-localized:
ru-RU: "Тонирование HDR"
fr-FR: "Tonalité HDR"
it-IT: "HDR"
de-DE: "HDR-Toning"
es-ES: "Tono HDR"
es-MX: "Tono de HDR"
zh-CHS: "高动态范围 (HDR) 调色"
zh-CHT: "HDR 色調"
ja-JP: "HDRトーニング"
cs-CZ: "Tónování HDR"
da-DK: "HDR-toning"
el-GR: "Τόνος HDR"
en-UK: "HDR toning"
fi-FI: "HDR-sävytys"
hu: "HDR árnyalatok"
ko-KR: "HDR 조색"
nl-NL: "HDR-toning"
nb-NO: "HDR-toning"
pl: "Tonowanie HDR"
pt-PT: "Tonalidade HDR"
pt-BR: "Tonalização do HDR"
sl-SI: "Toniranje HDR"
sk-SK: "Tónovanie HDR"
sv-SE: "HDR-toning"
th-TH: "HDR โทนนิ่ง"
tr-TR: "HDR tonlama"
default-value: 0.0
ui-sticky-value: 0.0
import: [typical_slider1]
- name: bloomSlider
ui-label: "Bloom"
ui-label-localized:
ru-RU: "Размытие"
fr-FR: "Flou"
it-IT: "Patinatura"
de-DE: "Überstrahleffekte"
es-ES: "Bloom (resplandor)"
es-MX: "Brillo de iluminación"
zh-CHS: "全屏泛光"
zh-CHT: "光暈"
ja-JP: "ブルーム"
cs-CZ: "Záře"
da-DK: "Bloom"
el-GR: "Bloom"
en-UK: "Bloom"
fi-FI: "Bloom-tehoste"
hu: "Virág"
ko-KR: "블룸"
nl-NL: "Bloom-effect"
nb-NO: "Bloom"
pl: "Rozświetlenie"
pt-PT: "Brilho"
pt-BR: "Bloom"
sl-SI: "Žarenje"
sk-SK: "Žiara"
sv-SE: "Bloom"
th-TH: "บลูม"
tr-TR: "Bloom"
default-value: 0.0
ui-sticky-value: 0.0
import: [typical_slider2]
blur1:
import: [pass_template]
shader: [email protected]
textures:
texOriginalColor:
channel: PIPE_INPUTS_COLOR
main:
import: [pass_template]
shader: [email protected]
textures:
texBlurred:
import: [blur1]
texOriginalColor:
channel: PIPE_INPUTS_COLOR
Details.yfx
// Shader file for NVIDIA Ansel
//
//
// Constants
//
#define PixelSize float2(1.0 / screenSize.x, 1.0 / screenSize.y) //x = Pixel width, y = Pixel height
cbuffer globalParams
{
float2 screenSize; //x = screen width, y = screen height
int captureState; //unused, my math works without using specific cases
float4 tileUV; //xy - top left tile coordinate, zw - bottom right tile coordinate
}
cbuffer controlBuf
{
float g_sldSharpen;
float g_sldClarity;
float g_sldHDR;
float g_sldBloom;
}
struct VSOut
{
float4 position : SV_POSITION;
float2 txcoord : TEXCOORD;
};
//
// Textures, Samplers
//
Texture2D texOriginalColor;
Texture2D texBlurred;
//
SamplerState SamplerLinear;
//
// Functions
//
float4 ScaleableGaussianBlurLinear(Texture2D tex,
float2 texcoord,
int nSteps,
float2 axis,
float2 texelsize)
{
float norm = -1.35914091423/(nSteps*nSteps);
float4 accum = tex.Sample(SamplerLinear,texcoord.xy);
float2 offsetinc = axis * texelsize;
float divisor = 0.5; //exp(0) * 0.5
[loop]
for(float iStep = 1; iStep <= nSteps; iStep++)
{
float2 tapOffsetD = iStep * 2.0 + float2(-1.0,0.0);
float2 tapWeightD = exp(tapOffsetD*tapOffsetD*norm);
float tapWeightL = dot(tapWeightD,1.0);
float tapOffsetL = dot(tapOffsetD,tapWeightD)/tapWeightL;
accum += tex.SampleLevel(SamplerLinear,texcoord.xy + offsetinc * tapOffsetL,0) * tapWeightL;
accum += tex.SampleLevel(SamplerLinear,texcoord.xy - offsetinc * tapOffsetL,0) * tapWeightL;
divisor += tapWeightL;
}
accum /= 2.0 * divisor;
return accum;
}
float4 BoxBlur(Texture2D tex, float2 texcoord, float2 texelsize)
{
float3 blurData[8] =
{
float3( 0.5, 1.5,1.50),
float3( 1.5,-0.5,1.50),
float3(-0.5,-1.5,1.50),
float3(-1.5, 0.5,1.50),
float3( 2.5, 1.5,1.00),
float3( 1.5,-2.5,1.00),
float3(-2.5,-1.5,1.00),
float3(-1.5, 2.5,1.00),
};
float4 blur = 0.0;
for(int i=0; i<8; i++) { blur += tex.SampleLevel(SamplerLinear,texcoord.xy + blurData.xy * texelsize.xy,0) * blurData.z; }
blur /= (4 * 1.5) + (4 * 1.0);
return blur;
}
//
// Pixel Shaders
//
float4 PS_LargeBlur1( VSOut IN ): SV_Target
{
return ScaleableGaussianBlurLinear(texOriginalColor,IN.txcoord.xy,15,float2(1,0),PixelSize.xy);
}
//
float4 PS_SharpenClarity( VSOut IN ): SV_Target
{
float4 color = texOriginalColor.Sample(SamplerLinear,IN.txcoord.xy);
float4 largeblur = ScaleableGaussianBlurLinear(texBlurred,IN.txcoord.xy,15,float2(0,1),PixelSize.xy);
float4 smallblur = BoxBlur(texOriginalColor,IN.txcoord.xy,PixelSize);
float a = dot(color.rgb,float3(0.299,0.587,0.114));
float sqrta = sqrt(a);
float b = dot(largeblur.rgb,float3(0.299,0.587,0.114));
float c = dot(smallblur.rgb,float3(0.299,0.587,0.114));
//HDR Toning
float HDRToning = sqrta * lerp(sqrta*(2*a*b-a-2*b+2.0), (2*sqrta*b-2*b+1), b > 0.5); //modified soft light v1
color = color / (a+1e-6) * lerp(a,HDRToning,g_sldHDR);
//sharpen
//float Sharpen = (a-c)/(g_sldSharpen*2.0+1e-6); //clamp to +- 1.0 / SHARPEN_AMOUNT with smooth falloff
//Sharpen = sign(Sharpen)*(pow(Sharpen,6)-abs(Sharpen))/(pow(Sharpen,6)-1);
//color += Sharpen*color*g_sldSharpen*2.0;
float Sharpen = dot(color.rgb - smallblur.rgb,float3(0.299,0.587,0.114));
float sharplimit = lerp(0.25,0.6,g_sldSharpen);
Sharpen = clamp(Sharpen,-sharplimit,sharplimit);
color.rgb = color.rgb / a * lerp(a,a+Sharpen,g_sldSharpen);
//clarity
float Clarity = (0.5 + a - b);
Clarity = lerp(2*Clarity + a*(1-2*Clarity), 2*(1-Clarity)+(2*Clarity-1)*rsqrt(a), a > b); //modified soft light v2
color.rgb *= lerp(1.0,Clarity,g_sldClarity);
//bloom
color.rgb = 1-(1-color.rgb)*(1-largeblur.rgb * g_sldBloom);
return color;
}
Please Log in or Create an account to join the conversation.
- YF
Please Log in or Create an account to join the conversation.
- YF
uniform float g_sldSharpen <
ui_label = "g_sldSharpen";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
uniform float g_sldClarity <
ui_label = "g_sldClarity";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
uniform float g_sldHDR <
ui_label = "g_sldHDR";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
uniform float g_sldBloom <
ui_label = "g_sldBloom";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
texture texOri
{
Width = BUFFER_WIDTH;
Height = BUFFER_HEIGHT;
Format = RGBA16F;
};
sampler samplerOri { Texture = texOri; };
static const float2 PixelSize = float2(BUFFER_RCP_WIDTH, BUFFER_RCP_HEIGHT);
//#define vec2 float2
//#define vec3 float3
//#define vec4 float4
//#define mix lerp
float4 ScaleableGaussianBlurLinear(sampler SamplerLinear,
float2 texcoord,
int nSteps,
float2 axis,
float2 texelsize)
{
float norm = -1.35914091423/(nSteps*nSteps);
float4 accum = tex2D(SamplerLinear,texcoord.xy);
float2 offsetinc = axis * texelsize;
float divisor = 0.5; //exp(0) * 0.5
[loop]
for(float iStep = 1; iStep <= nSteps; iStep++)
{
float2 tapOffsetD = iStep * 2.0 + float2(-1.0,0.0);
float2 tapWeightD = exp(tapOffsetD*tapOffsetD*norm);
float tapWeightL = dot(tapWeightD,1.0);
float tapOffsetL = dot(tapOffsetD,tapWeightD)/tapWeightL;
accum += tex2D(SamplerLinear,texcoord.xy + offsetinc * tapOffsetL) * tapWeightL;
accum += tex2D(SamplerLinear,texcoord.xy - offsetinc * tapOffsetL) * tapWeightL;
divisor += tapWeightL;
}
accum /= 2.0 * divisor;
return accum;
}
float4 BoxBlur(sampler SamplerLinear, float2 texcoord, float2 texelsize)
{
float3 blurData[8] =
{
float3( 0.5, 1.5,1.50),
float3( 1.5,-0.5,1.50),
float3(-0.5,-1.5,1.50),
float3(-1.5, 0.5,1.50),
float3( 2.5, 1.5,1.00),
float3( 1.5,-2.5,1.00),
float3(-2.5,-1.5,1.00),
float3(-1.5, 2.5,1.00),
};
float4 blur = 0.0;
for(int i=0; i<8; i++)
{
blur += tex2D(SamplerLinear,texcoord.xy + blurData.xy * texelsize.xy) * blurData.z;
}
blur /= (4 * 1.5) + (4 * 1.0);
return blur;
}
float4 PS_LargeBlur1(float4 position : SV_Position, float2 texcoord : TexCoord) : SV_Target
{
return ScaleableGaussianBlurLinear(ReShade::BackBuffer,texcoord.xy,15,float2(1,0),PixelSize.xy);
}
//
float4 PS_SharpenClarity(float4 position : SV_Position, float2 texcoord : TexCoord) : SV_Target
{
float4 color = tex2D(ReShade::BackBuffer,texcoord.xy);
float4 largeblur = ScaleableGaussianBlurLinear(samplerOri,texcoord.xy,15,float2(0,1),PixelSize.xy);
float4 smallblur = BoxBlur(ReShade::BackBuffer,texcoord.xy,PixelSize);
float a = dot(color.rgb,float3(0.299,0.587,0.114));
float sqrta = sqrt(a);
float b = dot(largeblur.rgb,float3(0.299,0.587,0.114));
float c = dot(smallblur.rgb,float3(0.299,0.587,0.114));
//HDR Toning
float HDRToning = sqrta * lerp(sqrta*(2*a*b-a-2*b+2.0), (2*sqrta*b-2*b+1), b > 0.5); //modified soft light v1
color = color / (a+1e-6) * lerp(a,HDRToning,g_sldHDR);
//sharpen
//float Sharpen = (a-c)/(g_sldSharpen*2.0+1e-6); //clamp to +- 1.0 / SHARPEN_AMOUNT with smooth falloff
//Sharpen = sign(Sharpen)*(pow(Sharpen,6)-abs(Sharpen))/(pow(Sharpen,6)-1);
//color += Sharpen*color*g_sldSharpen*2.0;
float Sharpen = dot(color.rgb - smallblur.rgb,float3(0.299,0.587,0.114));
float sharplimit = lerp(0.25,0.6,g_sldSharpen);
Sharpen = clamp(Sharpen,-sharplimit,sharplimit);
color.rgb = color.rgb / a * lerp(a,a+Sharpen,g_sldSharpen);
//clarity
float Clarity = (0.5 + a - b);
Clarity = lerp(2*Clarity + a*(1-2*Clarity), 2*(1-Clarity)+(2*Clarity-1)*rsqrt(a), a > b); //modified soft light v2
color.rgb *= lerp(1.0,Clarity,g_sldClarity);
//bloom
color.rgb = 1-(1-color.rgb)*(1-largeblur.rgb * g_sldBloom);
return color;
}
technique Nvida_HDRToning
{
pass
{
VertexShader = PostProcessVS;
PixelShader = PS_LargeBlur1;
RenderTarget = texOri;
}
pass
{
VertexShader = PostProcessVS;
PixelShader = PS_SharpenClarity;
}
}
Please Log in or Create an account to join the conversation.
- YF
Please Log in or Create an account to join the conversation.
- sanek7814
Please Log in or Create an account to join the conversation.
- sanek7814
Please Log in or Create an account to join the conversation.
- YF
#include "ReShade.fxh"
uniform float g_sldSharpen <
ui_label = "g_sldSharpen";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
uniform float g_sldClarity <
ui_label = "g_sldClarity";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
uniform float g_sldHDR <
ui_label = "g_sldHDR";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
uniform float g_sldBloom <
ui_label = "g_sldBloom";
ui_type = "slider";
ui_min = 0.0; ui_max = 1.0;
ui_step = 0.01;
> = 0.0;
texture texOri
{
Width = BUFFER_WIDTH;
Height = BUFFER_HEIGHT;
Format = RGBA16F;
};
sampler samplerOri { Texture = texOri; };
static const float2 PixelSize = float2(BUFFER_RCP_WIDTH, BUFFER_RCP_HEIGHT);
//#define vec2 float2
//#define vec3 float3
//#define vec4 float4
//#define mix lerp
float4 ScaleableGaussianBlurLinear(sampler SamplerLinear,
float2 texcoord,
int nSteps,
float2 axis,
float2 texelsize)
{
float norm = -1.35914091423/(nSteps*nSteps);
float4 accum = tex2D(SamplerLinear,texcoord.xy);
float2 offsetinc = axis * texelsize;
float divisor = 0.5; //exp(0) * 0.5
[loop]
for(float iStep = 1; iStep <= nSteps; iStep++)
{
float2 tapOffsetD = iStep * 2.0 + float2(-1.0,0.0);
float2 tapWeightD = exp(tapOffsetD*tapOffsetD*norm);
float tapWeightL = dot(tapWeightD,1.0);
float tapOffsetL = dot(tapOffsetD,tapWeightD)/tapWeightL;
accum += tex2D(SamplerLinear,texcoord.xy + offsetinc * tapOffsetL) * tapWeightL;
accum += tex2D(SamplerLinear,texcoord.xy - offsetinc * tapOffsetL) * tapWeightL;
divisor += tapWeightL;
}
accum /= 2.0 * divisor;
return accum;
}
float4 BoxBlur(sampler SamplerLinear, float2 texcoord, float2 texelsize)
{
float3 blurData[8] =
{
float3( 0.5, 1.5,1.50),
float3( 1.5,-0.5,1.50),
float3(-0.5,-1.5,1.50),
float3(-1.5, 0.5,1.50),
float3( 2.5, 1.5,1.00),
float3( 1.5,-2.5,1.00),
float3(-2.5,-1.5,1.00),
float3(-1.5, 2.5,1.00),
};
float4 blur = 0.0;
for(int j=0; j<8; j++)
{
blur += tex2D(SamplerLinear,texcoord.xy + blurData[j].xy * texelsize.xy) * blurData[j].z;
}
blur /= (4 * 1.5) + (4 * 1.0);
return blur;
}
float4 PS_LargeBlur1(float4 position : SV_Position, float2 texcoord : TexCoord) : SV_Target
{
return ScaleableGaussianBlurLinear(ReShade::BackBuffer,texcoord.xy,15,float2(1,0),PixelSize.xy);
}
//
float4 PS_SharpenClarity(float4 position : SV_Position, float2 texcoord : TexCoord) : SV_Target
{
float4 color = tex2D(ReShade::BackBuffer,texcoord.xy);
float4 largeblur = ScaleableGaussianBlurLinear(samplerOri,texcoord.xy,15,float2(0,1),PixelSize.xy);
float4 smallblur = BoxBlur(ReShade::BackBuffer,texcoord.xy,PixelSize);
float a = dot(color.rgb,float3(0.299,0.587,0.114));
float sqrta = sqrt(a);
float b = dot(largeblur.rgb,float3(0.299,0.587,0.114));
float c = dot(smallblur.rgb,float3(0.299,0.587,0.114));
//HDR Toning
float HDRToning = sqrta * lerp(sqrta*(2*a*b-a-2*b+2.0), (2*sqrta*b-2*b+1), b > 0.5); //modified soft light v1
color = color / (a+1e-6) * lerp(a,HDRToning,g_sldHDR);
//sharpen
//float Sharpen = (a-c)/(g_sldSharpen*2.0+1e-6); //clamp to +- 1.0 / SHARPEN_AMOUNT with smooth falloff
//Sharpen = sign(Sharpen)*(pow(Sharpen,6)-abs(Sharpen))/(pow(Sharpen,6)-1);
//color += Sharpen*color*g_sldSharpen*2.0;
float Sharpen = dot(color.rgb - smallblur.rgb,float3(0.299,0.587,0.114));
float sharplimit = lerp(0.25,0.6,g_sldSharpen);
Sharpen = clamp(Sharpen,-sharplimit,sharplimit);
color.rgb = color.rgb / a * lerp(a,a+Sharpen,g_sldSharpen);
//clarity
float Clarity = (0.5 + a - b);
Clarity = lerp(2*Clarity + a*(1-2*Clarity), 2*(1-Clarity)+(2*Clarity-1)*rsqrt(a), a > b); //modified soft light v2
color.rgb *= lerp(1.0,Clarity,g_sldClarity);
//bloom
color.rgb = 1-(1-color.rgb)*(1-largeblur.rgb * g_sldBloom);
return color;
}
technique Nvida_HDRToning
{
pass
{
VertexShader = PostProcessVS;
PixelShader = PS_LargeBlur1;
RenderTarget = texOri;
}
pass
{
VertexShader = PostProcessVS;
PixelShader = PS_SharpenClarity;
}
}
Please Log in or Create an account to join the conversation.
- YF
Please Log in or Create an account to join the conversation.
- sanek7814
Please Log in or Create an account to join the conversation.
- sanek7814
Please Log in or Create an account to join the conversation.
- YF
Please Log in or Create an account to join the conversation.
- b1es
Please Log in or Create an account to join the conversation.
- odikzz2
- Topic Author
Please Log in or Create an account to join the conversation.
- odikzz2
- Topic Author
Details.fx
ui_type = "drag";
ui_label = "Sharpen";
ui_label_en_US = "Sharpen";
ui_label_cs = "Zostření";
ui_label_da = "Gør skarpere";
ui_label_de = "Schärfen";
ui_label_el = "Όξυνση";
ui_label_en_UK = "Sharpen";
ui_label_es_ES = "Enfocar";
ui_label_es_MX = "Nitidez";
ui_label_fi = "Terävöitä";
ui_label_fr = "Affiner";
ui_label_hu = "Élesítés";
ui_label_it = "Nitidezza";
ui_label_ja = "鮮鋭化";
ui_label_ko = "선명화";
ui_label_nl = "Scherpstellen";
ui_label_nb = "Gjør skarpere";
ui_label_pl = "Wyostrzenie";
ui_label_pt_PT = "Acentuar";
ui_label_pt_BR = "Nitidez";
ui_label_ru = "Резкость";
ui_label_sk = "Zaostrenie";
ui_label_sl = "Izostritev";
ui_label_sv = "Skärpt";
ui_label_th = "ทำให้คมชัด";
ui_label_tr = "Keskinleştirme";
ui_label_zh_CHS = "使明朗";
ui_label_zh_CHT = "鮮明化";
ui_min = 0.0;
ui_max = 1.0;
> = 0.5;
uniform float g_sldClarity <
ui_type = "drag";
ui_label = "Clarity";
ui_label_en_US = "Clarity";
ui_label_cs = "Jasnost";
ui_label_da = "Klarhed";
ui_label_de = "Klarheit";
ui_label_el = "Διαύγεια";
ui_label_en_UK = "Clarity";
ui_label_es_ES = "Claridad";
ui_label_es_MX = "Claridad";
ui_label_fi = "Kirkkaus";
ui_label_fr = "Clarté";
ui_label_hu = "Tisztaság";
ui_label_it = "Chiarezza";
ui_label_ja = "鮮明度";
ui_label_ko = "선명도";
ui_label_nl = "Helderheid";
ui_label_nb = "Klarhet";
ui_label_pl = "Przejrzystość";
ui_label_pt_PT = "Claridade";
ui_label_pt_BR = "Clareza";
ui_label_ru = "Четкость";
ui_label_sk = "Jas";
ui_label_sl = "Jasnost";
ui_label_sv = "Klarhet";
ui_label_th = "ความชัดเจน";
ui_label_tr = "Berraklık";
ui_label_zh_CHS = "明亮度";
ui_label_zh_CHT = "清晰度";
ui_min = -1.0;
ui_max = 1.0;
> = 0.7;
uniform float g_sldHDR <
ui_type = "drag";
ui_label = "HDR Toning";
ui_label_en_US = "HDR Toning";
ui_label_cs = "Tónování HDR";
ui_label_da = "HDR-toning";
ui_label_de = "HDR-Tönung";
ui_label_el = "Τόνωση HDR";
ui_label_en_UK = "HDR Toning";
ui_label_es_ES = "Tonos HDR";
ui_label_es_MX = "Tonalidad de HDR";
ui_label_fi = "HDR-sävytys";
ui_label_fr = "Tonalité HDR";
ui_label_hu = "HDR tónusozás";
ui_label_it = "Tonalità HDR";
ui_label_ja = "HDR トーニング";
ui_label_ko = "HDR 토닝";
ui_label_nl = "HDR-tonen";
ui_label_nb = "HDR-toning";
ui_label_pl = "Tonowanie HDR";
ui_label_pt_PT = "Tonalidade HDR";
ui_label_pt_BR = "Tonificação HDR";
ui_label_ru = "Тонирование HDR";
ui_label_sk = "Tónovanie HDR";
ui_label_sl = "HDR niansiranje";
ui_label_sv = "HDR-toning";
ui_label_th = "การปรับภาพแบบ HDR Toning";
ui_label_tr = "HDR Tonlaması";
ui_label_zh_CHS = "HDR 调色";
ui_label_zh_CHT = "高動態範圍色調";
ui_min = -1.0;
ui_max = 1.0;
> = 0.6;
uniform float g_sldBloom <
ui_type = "drag";
ui_label = "Bloom";
ui_label_en_US = "Bloom";
ui_label_cs = "Přesvětlení";
ui_label_da = "Skær";
ui_label_de = "Überstrahlung";
ui_label_el = "Άνθισμα";
ui_label_en_UK = "Bloom";
ui_label_es_ES = "Bloom";
ui_label_es_MX = "Bloom";
ui_label_fi = "Hohde";
ui_label_fr = "Flou lumineux";
ui_label_hu = "Ellenfény";
ui_label_it = "Blooming";
ui_label_ja = "ブルーム";
ui_label_ko = "블룸";
ui_label_nl = "Bloom";
ui_label_nb = "Lyskontur";
ui_label_pl = "Rozświetlenie";
ui_label_pt_PT = "Auréola";
ui_label_pt_BR = "Bloom";
ui_label_ru = "Bloom";
ui_label_sk = "Žiara";
ui_label_sl = "Žarenje";
ui_label_sv = "Bakljus";
ui_label_th = "แสงบาน";
ui_label_tr = "Işık Patlaması";
ui_label_zh_CHS = "泛光";
ui_label_zh_CHT = "光暈";
ui_min = 0.0;
ui_max = 1.0;
> = 0.15;
#include "NvCommon.fxh"
texture LargeBlurTex { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; Format = BUFFER_FORMAT; }; //requires recent changes to support this
sampler sLargeBlurTex { Texture = LargeBlurTex; };
float4 gaussian(sampler sinput, float2 uv, int nSteps, float2 axis)
{
float norm = -1.35914091423 / (nSteps * nSteps);
float4 accum = tex2D(sinput, uv) * 0.5;
float2 offsetinc = axis * BUFFER_PIXEL_SIZE;
float divisor = 0.5; //exp(0) * 0.5
[loop]
for(float iStep = 1; iStep <= nSteps; iStep++)
{
//linear sample, gathers 2 texels at once
//only texel not being sampled that way is center, hence it needs 1/2 the weight
float tapOffset = iStep * 2.0 - 0.5;
float tapWeight = exp(iStep * iStep * norm);
accum += tex2Dlod(sinput, float4(uv + offsetinc * tapOffset, 0, 0)) * tapWeight;
accum += tex2Dlod(sinput, float4(uv - offsetinc * tapOffset, 0, 0)) * tapWeight;
divisor += tapWeight;
}
accum /= 2.0 * divisor;
return accum;
}
float4 box(sampler sinput, float2 uv)
{
const float3 blurData[8] =
{
float3( 0.5, 1.5,1.50),
float3( 1.5,-0.5,1.50),
float3(-0.5,-1.5,1.50),
float3(-1.5, 0.5,1.50),
float3( 2.5, 1.5,1.00),
float3( 1.5,-2.5,1.00),
float3(-2.5,-1.5,1.00),
float3(-1.5, 2.5,1.00),
};
float4 blur = 0.0;
for(int i=0; i<8; i++)
blur += tex2Dlod(sinput, float4(uv + blurData.xy * BUFFER_PIXEL_SIZE, 0, 0)) * blurData.z;
blur /= (4 * 1.5) + (4 * 1.0);
return blur;
}
float getluma(float3 color)
{
return dot(color,float3(0.299,0.587,0.114));
}
void PSGaussian1(in VSOut i, out float4 color : SV_Target)
{
color = gaussian(NV::ColorInput, i.uv, 15, float2(1, 0));
}
void PSGaussian2AndBlend(in VSOut i, out float4 color : SV_Target)
{
float4 largeblur = gaussian(sLargeBlurTex, i.uv, 15, float2(0, 1));
float4 smallblur = box(NV::ColorInput, i.uv);
color = tex2D(NV::ColorInput, i.uv);
float a = getluma(color.rgb);
float b = getluma(largeblur.rgb);
float c = getluma(smallblur.rgb);
//HDR Toning
float sqrta = sqrt(a);
float HDRToning = sqrta * lerp(sqrta*(2*a*b-a-2*b+2.0), (2*sqrta*b-2*b+1), b > 0.5); //modified soft light v1
color = color / (a+1e-6) * lerp(a,HDRToning,g_sldHDR);
//sharpen
float Sharpen = getluma(color.rgb - smallblur.rgb); //need to recompute, as luma of color changed by hdr toning
float sharplimit = lerp(0.25,0.6,g_sldSharpen);
Sharpen = clamp(Sharpen,-sharplimit, sharplimit);
color.rgb = color.rgb / a * lerp(a,a+Sharpen,g_sldSharpen);
//clarity
float Clarity = (0.5 + a - b);
Clarity = lerp(2*Clarity + a*(1-2*Clarity), 2*(1-Clarity)+(2*Clarity-1)*rsqrt(a), a > b); //modified soft light v2
color.rgb *= lerp(1.0,Clarity,g_sldClarity);
//bloom
color.rgb = 1-(1-color.rgb)*(1-largeblur.rgb * g_sldBloom);
}
technique Details
{
pass
{
VertexShader = VSMain;
PixelShader = PSGaussian1;
RenderTarget = LargeBlurTex;
}
pass
{
VertexShader = VSMain;
PixelShader = PSGaussian2AndBlend;
}
}
Adjustments.fx
ui_type = "drag";
ui_label = "Exposure";
ui_label_en_US = "Exposure";
ui_label_cs = "Expozice";
ui_label_da = "Eksponering";
ui_label_de = "Belichtung";
ui_label_el = "Έκθεση";
ui_label_en_UK = "Exposure";
ui_label_es_ES = "Exposición";
ui_label_es_MX = "Exposición";
ui_label_fi = "Valotus";
ui_label_fr = "Exposition";
ui_label_hu = "Megvilágítás";
ui_label_it = "Esposizione";
ui_label_ja = "露出";
ui_label_ko = "노출";
ui_label_nl = "Belichting";
ui_label_nb = "Eksponering";
ui_label_pl = "Ekspozycja";
ui_label_pt_PT = "Exposição";
ui_label_pt_BR = "Exposição";
ui_label_ru = "Экспозиция";
ui_label_sk = "Expozícia";
ui_label_sl = "Čas osvetlitve";
ui_label_sv = "Exponering";
ui_label_th = "การเปิดรับแสง";
ui_label_tr = "Pozlama";
ui_label_zh_CHS = "曝光";
ui_label_zh_CHT = "曝光";
ui_min = -1.0;
ui_max = 1.0;
> = 0.0;
uniform float g_sldHighlightsIntensity <
ui_type = "drag";
ui_label = "Highlights";
ui_label_en_US = "Highlights";
ui_label_cs = "Hlavní události";
ui_label_da = "Højdepunkter";
ui_label_de = "Highlights";
ui_label_el = "Κύρια σημεία";
ui_label_en_UK = "Highlights";
ui_label_es_ES = "Momentos destacados";
ui_label_es_MX = "Elementos destacados";
ui_label_fi = "Kohokohdat";
ui_label_fr = "Tons clairs";
ui_label_hu = "Kiemeltek";
ui_label_it = "Luci";
ui_label_ja = "ハイライト";
ui_label_ko = "강조표시";
ui_label_nl = "Highlights";
ui_label_nb = "Høydepunkter";
ui_label_pl = "Światła";
ui_label_pt_PT = "Destaques";
ui_label_pt_BR = "Destaques";
ui_label_ru = "Подсветка";
ui_label_sk = "Zvýraznené miesta";
ui_label_sl = "Označeno";
ui_label_sv = "Höjdpunkter";
ui_label_th = "ไฮไลต์";
ui_label_tr = "Aydınlık Vurgular";
ui_label_zh_CHS = "亮点";
ui_label_zh_CHT = "亮點";
ui_min = -1.0;
ui_max = 1.0;
> = 0.2;
uniform float g_sldShadowsIntensity <
ui_type = "drag";
ui_label = "Shadows";
ui_label_en_US = "Shadows";
ui_label_cs = "Stíny";
ui_label_da = "Skygger";
ui_label_de = "Schatten";
ui_label_el = "Σκιές";
ui_label_en_UK = "Shadows";
ui_label_es_ES = "Sombras";
ui_label_es_MX = "Sombras";
ui_label_fi = "Varjot";
ui_label_fr = "Tons foncés";
ui_label_hu = "Árnyékok";
ui_label_it = "Ombre";
ui_label_ja = "シャドウ";
ui_label_ko = "그림자";
ui_label_nl = "Schaduwen";
ui_label_nb = "Skygger";
ui_label_pl = "Cienie";
ui_label_pt_PT = "Sombras";
ui_label_pt_BR = "Sombras";
ui_label_ru = "Тени";
ui_label_sk = "Tiene";
ui_label_sl = "Sence";
ui_label_sv = "Skuggor";
ui_label_th = "เงา";
ui_label_tr = "Gölgeler";
ui_label_zh_CHS = "阴影";
ui_label_zh_CHT = "陰影";
ui_min = -1.0;
ui_max = 1.0;
> = -0.3;
uniform float g_sldContrast <
ui_type = "drag";
ui_label = "Contrast";
ui_label_en_US = "Contrast";
ui_label_cs = "Kontrast";
ui_label_da = "Kontrast";
ui_label_de = "Kontrast";
ui_label_el = "Αντίθεση";
ui_label_en_UK = "Contrast";
ui_label_es_ES = "Contraste";
ui_label_es_MX = "Contraste";
ui_label_fi = "Kontrasti";
ui_label_fr = "Contraste";
ui_label_hu = "Kontraszt";
ui_label_it = "Contrasto";
ui_label_ja = "コントラスト";
ui_label_ko = "대비";
ui_label_nl = "Contrast";
ui_label_nb = "Kontrast";
ui_label_pl = "Kontrast";
ui_label_pt_PT = "Contraste";
ui_label_pt_BR = "Contraste";
ui_label_ru = "Контраст";
ui_label_sk = "Kontrast";
ui_label_sl = "Kontrast";
ui_label_sv = "Kontrast";
ui_label_th = "การตัดกันของสี";
ui_label_tr = "Kontrast";
ui_label_zh_CHS = "对比度";
ui_label_zh_CHT = "對比";
ui_min = -1.0;
ui_max = 1.0;
> = 0.3;
uniform float g_sldGamma <
ui_type = "drag";
ui_label = "Gamma";
ui_label_en_US = "Gamma";
ui_label_cs = "Gama";
ui_label_da = "Gamma";
ui_label_de = "Gamma";
ui_label_el = "Γάμα";
ui_label_en_UK = "Gamma";
ui_label_es_ES = "Gamma";
ui_label_es_MX = "Gamma";
ui_label_fi = "Gamma";
ui_label_fr = "Gamma";
ui_label_hu = "Gamma";
ui_label_it = "Gamma";
ui_label_ja = "ガンマ";
ui_label_ko = "감마";
ui_label_nl = "Gamma";
ui_label_nb = "Gamma";
ui_label_pl = "Gamma";
ui_label_pt_PT = "Gama";
ui_label_pt_BR = "Gama";
ui_label_ru = "Гамма";
ui_label_sk = "Gama";
ui_label_sl = "Gama";
ui_label_sv = "Gamma";
ui_label_th = "แกมม่า";
ui_label_tr = "Gama";
ui_label_zh_CHS = "灰度";
ui_label_zh_CHT = "色差補正";
ui_min = -1.0;
ui_max = 1.0;
> = 0.0;
#include "NvCommon.fxh"
void PSMain(in VSOut i, out float4 color : SV_Target)
{
color = tex2D(NV::ColorInput, i.uv);
color.rgb *= exp2(g_sldExposure * 2.0);
//arbitary ranges for shadows and highlights
float3 shadows = smoothstep(0.666, 0.0, color.rgb);
float3 highlights = smoothstep(0.333, 1.0, color.rgb);
float3 rest = 1.0 - shadows - highlights;
color.rgb = pow(saturate(color.rgb), exp2(shadows * exp2(g_sldShadowsIntensity)
+ highlights * exp2(-g_sldHighlightsIntensity)
+ exp2(-g_sldGamma * 2.0)
+ rest - 2.0)); //correction so all sliders at 0 give 0 in sum
//contrast from 50% to 200%, in log space
const float contrastMin = log(0.5);
const float contrastMax = log(2.0);
float contrastFactor = exp(contrastMin + (g_sldContrast * 0.5 + 0.5) * (contrastMax - contrastMin));
color.rgb = (color.rgb - 0.5) * contrastFactor + 0.5;
}
technique BrightnessContrast
{
pass
{
VertexShader = VSMain;
PixelShader = PSMain;
}
}
Color.fx
ui_type = "drag";
ui_label = "Tint Color";
ui_label_en_US = "Tint Color";
ui_label_cs = "Barevný odstín";
ui_label_da = "Farvetone";
ui_label_de = "Tönungsfarbe";
ui_label_el = "Χρώμα χροιάς";
ui_label_en_UK = "Tint Colour";
ui_label_es_ES = "Tono";
ui_label_es_MX = "Color del tinte";
ui_label_fi = "Sävytysväri";
ui_label_fr = "Couleur de la teinte";
ui_label_hu = "Árnyalatszín";
ui_label_it = "Colore tonalità";
ui_label_ja = "ティントカラー";
ui_label_ko = "틴트 색상";
ui_label_nl = "Tintkleur";
ui_label_nb = "Fargenyanse";
ui_label_pl = "Kolor odcienia";
ui_label_pt_PT = "Cor da tinta";
ui_label_pt_BR = "Cor do tom";
ui_label_ru = "Цвет оттенка";
ui_label_sk = "Farba odtieňa";
ui_label_sl = "Barva odtenka";
ui_label_sv = "Färgton";
ui_label_th = "สีย้อม";
ui_label_tr = "Renk Tonu";
ui_label_zh_CHS = "色调";
ui_label_zh_CHT = "色度值";
ui_min = 0.0;
ui_max = 1.0;
> = 0.2;
uniform float g_sldIntensity <
ui_type = "drag";
ui_label = "Tint Intensity";
ui_label_en_US = "Tint Intensity";
ui_label_cs = "Intenzita odstínu";
ui_label_da = "Farvetoneintensitet";
ui_label_de = "Tönungsintensität";
ui_label_el = "Ένταση χροιάς";
ui_label_en_UK = "Tint Intensity";
ui_label_es_ES = "Intensidad de tono";
ui_label_es_MX = "Intensidad del tinte";
ui_label_fi = "Sävytyksen voimakkuus";
ui_label_fr = "Intensité de la teinte";
ui_label_hu = "Árnyalat intenzitása";
ui_label_it = "Intensità tonalità";
ui_label_ja = "ティント明度";
ui_label_ko = "틴트 강도";
ui_label_nl = "Tintintensiteit";
ui_label_nb = "Fargeintensitet";
ui_label_pl = "Intensywność odcienia";
ui_label_pt_PT = "Intensidade da tinta";
ui_label_pt_BR = "Intensidade do tom";
ui_label_ru = "Насыщенность оттенка";
ui_label_sk = "Intenzita odtieňa";
ui_label_sl = "Intenzivnost odtenka";
ui_label_sv = "Färgintensitet";
ui_label_th = "ความเข้มของสีย้อม";
ui_label_tr = "Renk Tonu Yoğunluğu";
ui_label_zh_CHS = "色调强度";
ui_label_zh_CHT = "色度強度";
ui_min = 0.0;
ui_max = 1.0;
> = 0.3;
uniform float g_sldTemperature <
ui_type = "drag";
ui_label = "Temperature";
ui_label_en_US = "Temperature";
ui_label_cs = "Teplota";
ui_label_da = "Temperatur";
ui_label_de = "Temperatur";
ui_label_el = "Θερμοκρασία";
ui_label_en_UK = "Temperature";
ui_label_es_ES = "Temperatura";
ui_label_es_MX = "Temperatura";
ui_label_fi = "Lämpötila";
ui_label_fr = "Température";
ui_label_hu = "Hőmérséklet";
ui_label_it = "Temperatura";
ui_label_ja = "温度";
ui_label_ko = "온도";
ui_label_nl = "Temperatuur";
ui_label_nb = "Temperatur";
ui_label_pl = "Temperatura";
ui_label_pt_PT = "Temperatura";
ui_label_pt_BR = "Temperatura";
ui_label_ru = "Температура";
ui_label_sk = "Teplota";
ui_label_sl = "Temperatura";
ui_label_sv = "Temperatur";
ui_label_th = "อุณหภูมิ";
ui_label_tr = "Sıcaklık";
ui_label_zh_CHS = "温度";
ui_label_zh_CHT = "溫度";
ui_min = -1.0;
ui_max = 1.0;
> = 0.0;
uniform float g_sldVibrance <
ui_type = "drag";
ui_label = "Vibrance";
ui_label_en_US = "Vibrance";
ui_label_cs = "Živost";
ui_label_da = "Dynamik";
ui_label_de = "Farbanpassung";
ui_label_el = "Ζωντάνια";
ui_label_en_UK = "Vibrance";
ui_label_es_ES = "Viveza";
ui_label_es_MX = "Intensidad del color";
ui_label_fi = "Värikylläisyys";
ui_label_fr = "Éclat";
ui_label_hu = "Élénkség";
ui_label_it = "Brillantezza";
ui_label_ja = "自然な彩度";
ui_label_ko = "선명도";
ui_label_nl = "Levendigheid";
ui_label_nb = "Intensitet";
ui_label_pl = "Nasycenie";
ui_label_pt_PT = "Saturação de cor";
ui_label_pt_BR = "Saturação de cor";
ui_label_ru = "Насыщенность";
ui_label_sk = "Živosť";
ui_label_sl = "Živost";
ui_label_sv = "Lyster";
ui_label_th = "สีสัน";
ui_label_tr = "Canlılık";
ui_label_zh_CHS = "亮丽";
ui_label_zh_CHT = "彩度";
ui_min = -1.0;
ui_max = 1.0;
> = 0.0;
#include "NvCommon.fxh"
void PSMain(in VSOut i, out float4 color : SV_Target)
{
color = tex2D(NV::ColorInput, i.uv);
//Transform RGB to YUV color space according to NTSC standard
float3 YUV;
YUV.x = dot(color.rgb, float3(0.299, 0.587, 0.114));
YUV.y = dot(color.rgb, float3(-0.14713, -0.28886, 0.436));
YUV.z = dot(color.rgb, float3(0.615, -0.51499, -0.10001));
//move along blue/orange chrominance line
YUV.y -= g_sldTemperature * YUV.x * 0.35;
YUV.z += g_sldTemperature * YUV.x * 0.35;
//tint along a line in chrominance plane. yz: dir, length: amount of tinting
YUV.y += sin(g_sldHue * 6.283185307) * g_sldIntensity * g_sldIntensity * YUV.x; //g_sldIntensity^2 for a more natural slider response feel
YUV.z += cos(g_sldHue * 6.283185307) * g_sldIntensity * g_sldIntensity * YUV.x;
//Transform YUV back to RGB according to NTSC standard
color.r = dot(YUV.xyz,float3(1.0,0.0,1.13983));
color.g = dot(YUV.xyz,float3(1.0,-0.39465,-0.58060));
color.b = dot(YUV.xyz,float3(1.0,2.03211,0.0));
color.rgb = saturate(color.rgb);
//vibrance
float2 maxmin;
maxmin.x = max(max(color.r, color.g), color.b);
maxmin.y = min(min(color.r, color.g), color.b);
float sat = maxmin.x - maxmin.y;
float luma = NV::GetLuma(color.rgb);
[flatten]
if(g_sldVibrance > 0) //if adding saturation, keep strongly saturated colors less affected
color.rgb = lerp(luma.rrr, color.rgb, 1 + g_sldVibrance * (1 - sat));
else //if removing saturation, remove most from those with much saturation
color.rgb = lerp(luma.rrr, color.rgb, saturate(1 + g_sldVibrance * (1 + sat)));
}
technique Color
{
pass
{
VertexShader = VSMain;
PixelShader = PSMain;
}
}
Colorblind.fx
ui_type = "drag";
ui_label = "Protanopia";
ui_label_en_US = "Protanopia";
ui_label_cs = "Protanopie";
ui_label_da = "Rødblindhed";
ui_label_de = "Protanopie";
ui_label_el = "Πρωτανοπία";
ui_label_en_UK = "Protanopia";
ui_label_es_ES = "Protanopía";
ui_label_es_MX = "Protanopia";
ui_label_fi = "Puna-vihersokeus";
ui_label_fr = "Protanopie";
ui_label_hu = "Protanópia";
ui_label_it = "Protanopia";
ui_label_ja = "第一色盲";
ui_label_ko = "적색약";
ui_label_nl = "Protanopie";
ui_label_nb = "Protanopi";
ui_label_pl = "Protanopia";
ui_label_pt_PT = "Protanopia";
ui_label_pt_BR = "Protanopia";
ui_label_ru = "Протанопия";
ui_label_sk = "Protanopia";
ui_label_sl = "Protanopija";
ui_label_sv = "Protanopi";
ui_label_th = "ตาบอดสีแดง";
ui_label_tr = "Kırmızı Körlüğü";
ui_label_zh_CHS = "红色盲";
ui_label_zh_CHT = "紅色盲";
ui_min = 0.0;
ui_max = 1.0;
> = 0.0;
uniform float g_sldDeuteranopia <
ui_type = "drag";
ui_label = "Deuteranopia";
ui_label_en_US = "Deuteranopia";
ui_label_cs = "Deuteranopie";
ui_label_da = "Grøndblindhed";
ui_label_de = "Deuteranopie";
ui_label_el = "Δευτερανοπία";
ui_label_en_UK = "Deuteranopia";
ui_label_es_ES = "Deuteranopía";
ui_label_es_MX = "Deuteranopia";
ui_label_fi = "Viher-punasokeus";
ui_label_fr = "Deutéranopie";
ui_label_hu = "Deuteranópia";
ui_label_it = "Deuteranopia";
ui_label_ja = "第二色盲";
ui_label_ko = "녹색약";
ui_label_nl = "Deuteranopie";
ui_label_nb = "Deuteranopi";
ui_label_pl = "Daltonizm";
ui_label_pt_PT = "Deuteranopia";
ui_label_pt_BR = "Deuteranopia";
ui_label_ru = "Дейтеранопия";
ui_label_sk = "Deuteranopia";
ui_label_sl = "Devteranopija";
ui_label_sv = "Deuteranopi";
ui_label_th = "ตาบอดสีเขียว";
ui_label_tr = "Yeşil Körlüğü";
ui_label_zh_CHS = "绿色盲";
ui_label_zh_CHT = "綠色盲";
ui_min = 0.0;
ui_max = 1.0;
> = 1.0;
uniform float g_sldTritanopia <
ui_type = "drag";
ui_label = "Tritanopia";
ui_label_en_US = "Tritanopia";
ui_label_cs = "Tritanopie";
ui_label_da = "Blåblindhed";
ui_label_de = "Tritanopie";
ui_label_el = "Τριτανοπία";
ui_label_en_UK = "Tritanopia";
ui_label_es_ES = "Tritanopía";
ui_label_es_MX = "Tritanopia";
ui_label_fi = "Tritanopia";
ui_label_fr = "Tritanopie";
ui_label_hu = "Tritanópia";
ui_label_it = "Tritanopia";
ui_label_ja = "第三色盲";
ui_label_ko = "청색약";
ui_label_nl = "Tritanopie";
ui_label_nb = "Tritanopi";
ui_label_pl = "Tritanopia";
ui_label_pt_PT = "Tritanopia";
ui_label_pt_BR = "Tritanopia";
ui_label_ru = "Тританопия";
ui_label_sk = "Tritanopia";
ui_label_sl = "Tritanopija";
ui_label_sv = "Tritanopi";
ui_label_th = "ตาบอดสีน้ำเงิน";
ui_label_tr = "Mavi Körlüğü";
ui_label_zh_CHS = "蓝色盲";
ui_label_zh_CHT = "藍色盲";
ui_min = 0.0;
ui_max = 1.0;
> = 0.0;
#include "NvCommon.fxh"
void PSMain(in VSOut i, out float4 color : SV_Target)
{
color = tex2D(NV::ColorInput, i.uv);
float3 RGB = color.rgb;
float3 LMS = float3( dot(RGB,float3(17.8824, 43.5161, 4.11935)),
dot(RGB,float3(3.45565, 27.1554, 3.86714)),
dot(RGB,float3(0.0299566, 0.184309, 1.46709)));
float3 LMS_daltonized = LMS;
//Protanopia - modify L only
LMS_daltonized.x = lerp(LMS_daltonized.x, dot(LMS,float3(0.0, 2.02344, -2.52581)), g_sldProtanopia);
//Deuteranopia - modify M only
LMS_daltonized.y = lerp(LMS_daltonized.y, dot(LMS,float3(0.494207, 0.0, 1.24827)), g_sldDeuteranopia);
//Tritanopia - modify S only
LMS_daltonized.z = lerp(LMS_daltonized.z, dot(LMS,float3(-0.395913, 0.801109, 0.0)), g_sldTritanopia);
float3 RGB_daltonized = float3( dot(LMS_daltonized,float3(0.0809444479, -0.130504409, 0.116721066)),
dot(LMS_daltonized,float3(-0.0102485335, 0.0540193266, -0.113614708)),
dot(LMS_daltonized,float3(-0.000365296938, -0.00412161469, 0.693511405)));
float3 RGB_corrected = RGB;
RGB_corrected.y += dot(RGB.xy - RGB_daltonized.xy, float2(0.7,1.0));
RGB_corrected.z += dot(RGB.xz - RGB_daltonized.xz, float2(0.7,1.0));
color = float4(RGB_corrected, 1.0);
}
technique Colorblind
{
pass
{
VertexShader = VSMain;
PixelShader = PSMain;
}
}
BlacknWhite.fx
ui_type = "drag";
ui_label = "Intensity";
ui_label_en_US = "Intensity";
ui_label_cs = "Intenzita";
ui_label_da = "Intensitet";
ui_label_de = "Intensität";
ui_label_el = "Ένταση";
ui_label_en_UK = "Intensity";
ui_label_es_ES = "Intensidad";
ui_label_es_MX = "Intensidad";
ui_label_fi = "Voimakkuus";
ui_label_fr = "Intensité";
ui_label_hu = "Intenzitás";
ui_label_it = "Intensità";
ui_label_ja = "明度";
ui_label_ko = "강도";
ui_label_nl = "Intensiteit";
ui_label_nb = "Intensitet";
ui_label_pl = "Intensywność";
ui_label_pt_PT = "Intensidade";
ui_label_pt_BR = "Intensidade";
ui_label_ru = "Насыщенность";
ui_label_sk = "Intenzita";
ui_label_sl = "Intenzivnost";
ui_label_sv = "Intensitet";
ui_label_th = "ความเข้ม";
ui_label_tr = "Yoğunluk";
ui_label_zh_CHS = "强度";
ui_label_zh_CHT = "強度";
ui_min = 0.0;
ui_max = 1.0;
> = 1.0;
uniform bool g_sldEnableDepth <
ui_label = "Enable Depth";
ui_label_en_US = "Enable Depth";
ui_label_cs = "Aktivovat hloubku";
ui_label_da = "Aktivér dybde";
ui_label_de = "Tiefe aktivieren";
ui_label_el = "Ενεργοποίηση βάθους";
ui_label_en_UK = "Enable Depth";
ui_label_es_ES = "Activar profundidad";
ui_label_es_MX = "Activar profundidad";
ui_label_fi = "Ota käyttöön syvyys";
ui_label_fr = "Activer la profondeur";
ui_label_hu = "Mélység bekapcsolása";
ui_label_it = "Abilita profondità";
ui_label_ja = "深度を有効化";
ui_label_ko = "깊이 활성화";
ui_label_nl = "Diepte inschakelen";
ui_label_nb = "Aktiver dybde";
ui_label_pl = "Włącz głębię";
ui_label_pt_PT = "Activar profundidade";
ui_label_pt_BR = "Habilitar profundidade";
ui_label_ru = "Включить глубину";
ui_label_sk = "Aktivovať hĺbku";
ui_label_sl = "Omogoči globino";
ui_label_sv = "Aktivera djup";
ui_label_th = "เปิดใช้ความลึก";
ui_label_tr = "Derinliği Etkinleştir";
ui_label_zh_CHS = "启用深度";
ui_label_zh_CHT = "啟用深度";
> = false;
uniform float g_sldDistance <
ui_type = "drag";
ui_label = "Border Distance";
ui_label_en_US = "Border Distance";
ui_label_cs = "Vzdálenost ohraničení";
ui_label_da = "Grænsesafstand";
ui_label_de = "Randabstand";
ui_label_el = "Απόσταση περιθωρίου";
ui_label_en_UK = "Border Distance";
ui_label_es_ES = "Distancia de borde";
ui_label_es_MX = "Distancia del borde";
ui_label_fi = "Reunan etäisyys";
ui_label_fr = "Distance des contours";
ui_label_hu = "Szegélytávolság";
ui_label_it = "Distanza bordo";
ui_label_ja = "ボーダー距離";
ui_label_ko = "테두리 거리";
ui_label_nl = "Randafstand";
ui_label_nb = "Kantavstand";
ui_label_pl = "Odległość graniczna";
ui_label_pt_PT = "Distância da borda";
ui_label_pt_BR = "Intensidade";
ui_label_ru = "Дальность границ";
ui_label_sk = "Vzdialenosť orámovania";
ui_label_sl = "Razdalja roba";
ui_label_sv = "Kantdistans";
ui_label_th = "ระยะของขอบ";
ui_label_tr = "Sınır Mesafesi";
ui_label_zh_CHS = "边界距离";
ui_label_zh_CHT = "邊框距離";
ui_min = 0.0;
ui_max = 1.0;
> = 0.5;
uniform bool g_sldInvertMask <
ui_label = "Reverse Depth Mask";
ui_label_en_US = "Reverse Depth Mask";
ui_label_cs = "Maska hloubky převrácení";
ui_label_da = "Omvendt dybdemaske";
ui_label_de = "Umgekehrte Tiefenmaske";
ui_label_el = "Ανάστροφη μάσκας βάθους";
ui_label_en_UK = "Reverse Depth Mask";
ui_label_es_ES = "Máscara de respiración invertida";
ui_label_es_MX = "Máscara de profundidad inversa";
ui_label_fi = "Käänteinen syvyysmaski";
ui_label_fr = "Masque de profondeur inversé";
ui_label_hu = "Fordított mélység maszk";
ui_label_it = "Maschera di profondità invertita";
ui_label_ja = "深度マスクの反転";
ui_label_ko = "역방향 깊이 마스크";
ui_label_nl = "Omgekeerde dieptestructuur";
ui_label_nb = "Omvendt dybdemaske";
ui_label_pl = "Maska odwróconej głębi";
ui_label_pt_PT = "Máscara de profundidade invertida";
ui_label_pt_BR = "Máscara de profundidade inversa";
ui_label_ru = "Обратная маска глубины";
ui_label_sk = "Spätná maska hĺbky";
ui_label_sl = "Maska obratne globine";
ui_label_sv = "Reverserad djupmask";
ui_label_th = "มาส์กกลับความลึก";
ui_label_tr = "Ters Derinlik Maskesi";
ui_label_zh_CHS = "反向深度蒙版";
ui_label_zh_CHT = "反向深度遮罩";
> = false;
#define RESHADE_EFFECT_REQUIRES_DEPTH
#include "NvCommon.fxh"
void PSMain(in VSOut i, out float4 color : SV_Target)
{
color = tex2D(NV::ColorInput, i.uv);
float depth = NV::GetLinearizedDepth(i.uv);
float gray = NV::GetLuma(color.rgb);
float desat_threshold = g_sldDistance * g_sldDistance;
desat_threshold *= desat_threshold; //^4 for better tweaking response
float desat_mask = depth > desat_threshold ? 1.0 : !g_sldEnableDepth;
desat_mask = g_sldInvertMask ? 1.0 - desat_mask : desat_mask;
desat_mask *= g_sldIntensity;
color = lerp(color, gray, desat_mask);
}
technique BlacknWhite
{
pass
{
VertexShader = VSMain;
PixelShader = PSMain;
}
}
Please Log in or Create an account to join the conversation.
- odikzz2
- Topic Author
#include "NvCommon.fxh"
void PSMain(in VSOut i, out float4 color : SV_Target)
{
color = tex2D(NV::HudlessInput, i.uv);
}
technique Hudless
{
pass
{
VertexShader = VSMain;
PixelShader = PSMain;
}
}
Please Log in or Create an account to join the conversation.
- BACHUVUTRU
could you spare some time: guide me, what i need to do to create the effects as you wrote. thank you very much
Please Log in or Create an account to join the conversation.
- BACHUVUTRU
what did i do wrong,
Please Log in or Create an account to join the conversation.
- odikzz2
- Topic Author
/*
Modified version of ReShade.fxh for Ansel/FreeStyle specific requirements
*/
#pragma once
#define BUFFER_PIXEL_SIZE float2(BUFFER_RCP_WIDTH, BUFFER_RCP_HEIGHT)
#define BUFFER_SCREEN_SIZE float2(BUFFER_WIDTH, BUFFER_HEIGHT)
#define BUFFER_ASPECT_RATIO (BUFFER_WIDTH * BUFFER_RCP_HEIGHT)
//NvCamera capture state enum
//use with following code in effect file
// uniform int captureState < source = "capture_state"; >;
//not present in common file as uniforms use memory
#define CAPTURE_STATE_NOT_STARTED 0
#define CAPTURE_STATE_REGULAR 1
#define CAPTURE_STATE_REGULARSTEREO 2
#define CAPTURE_STATE_HIGHRES 3
#define CAPTURE_STATE_360 4
#define CAPTURE_STATE_360STEREO 5
namespace NV
{
//standard texture inputs wrapped into namespace
texture ColorInputTex : COLOR;
texture DepthInputTex : DEPTH;
sampler ColorInput { Texture = ColorInputTex; };
sampler DepthInput { Texture = DepthInputTex; };
//only create texture if filter requires it
#ifdef RESHADE_EFFECT_REQUIRES_HUDLESS
texture HudlessInputTex : HUDLESS;
sampler HudlessInput { Texture = HudlessInputTex; };
#endif
#ifdef RESHADE_EFFECT_REQUIRES_COLORBASE
texture ColorBaseInputTex : COLOR_BASE;
sampler ColorBaseInput { Texture = ColorBaseInputTex; };
#endif
#ifdef RESHADE_EFFECT_REQUIRES_DEPTH
uniform bool g_sldInvertedDepth <
ui_type = "bool";
ui_label = "Depth input is reversed";
//can maybe reuse localization? Only "Invert Depth" is translated.
> = 1;
float GetLinearizedDepth(float2 uv)
{
float depth = tex2Dlod(DepthInput, float4(uv, 0, 0)).x;
depth = g_sldInvertedDepth ? 1.0 - depth : depth;
//not user adjustable in FreeStyle anyways
const float N = 1.0;
const float F = 1000.0;
depth /= F - depth * (F - N);
return depth;
}
#endif
//using Rec.709 at the moment, needs extension for different input formats
float GetLuma(float3 color)
{
const float3 luma_weights = float3(0.299, 0.587, 0.114);
return dot(luma_weights, color);
}
}
struct VSOut
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
VSOut VSMain(in uint vid : SV_VertexID)
{
VSOut o;
o.uv.x = (vid == 2) ? 2.0 : 0.0;
o.uv.y = (vid == 1) ? 2.0 : 0.0;
o.pos = float4(o.uv * float2(2.0, -2.0) + float2(-1.0, 1.0), 0.0, 1.0);
return o;
}
Please Log in or Create an account to join the conversation.