Hello @DevilSingh thanks for porting the crtdrvenom to reshade! I’m trying to play a ps2 game with it on PCSX2 but it looks weird think the parameters settings might be wrong lol I don’t understand much about it, could you tell me some good parameters settings?
In the first post here, I’ve posted a preset (with some screenshots) made by @guest.r for RA, that I like to use with PCSX2 and 3D games in general. You can try that, maybe you’ll like it too!
Oh nice, i didn’t notice the settings lol my bad. Thanks!
CRT-Guest-Advanced for ReShade (Let me know if you find any issues!) :
/*
CRT - Guest - Advanced (Copyright (C) 2018-2021 guest(r) - [email protected])
Incorporates many good ideas and suggestions from Dr. Venom.
I would also like give thanks to many Libretro forums members for continuous feedbacks, suggestions and caring about the shader.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hopes that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not,
write to the Free Software Foundation, Inc, 59 Temple Place - STE 330, Boston, MA 02111-1307, USA.
Ported to ReShade by DevilSingh with some help from guest(r)
*/
uniform float ResolutionX <
ui_label = "Resolution X";
> = 320.0;
uniform float ResolutionY <
ui_label = "Resolution Y";
> = 240.0;
uniform float lsmooth <
ui_type = "drag";
ui_min = 0.5;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Raster Bloom Effect Smoothing";
> = 0.7;
uniform float GAMMA_IN <
ui_type = "drag";
ui_min = 1.0;
ui_max = 5.0;
ui_step = 0.05;
ui_label = "Gamma Input";
> = 2.4;
uniform float inter <
ui_type = "drag";
ui_min = 0.0;
ui_max = 800.0;
ui_step = 25.0;
ui_label = "Interlace Trigger Resolution";
> = 350.0;
uniform float interm <
ui_type = "drag";
ui_min = 0.0;
ui_max = 5.0;
ui_step = 1.0;
ui_label = "Interlace Mode: OFF, Normal 1-3, Interpolation 4-5";
> = 1.0;
uniform float inters <
ui_type = "drag";
ui_min = 0.0;
ui_max = 0.5;
ui_step = 0.05;
ui_label = "Interlacing Effect Smoothness";
> = 0.0;
uniform float iscan <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Interlacing Scanline Effect";
> = 0.2;
uniform float prescalex <
ui_type = "drag";
ui_min = 1.0;
ui_max = 4.0;
ui_step = 1.0;
ui_label = "Prescale-X Factor (For xBR...Pre-Shader)";
> = 1.0;
uniform float SIZEH <
ui_type = "drag";
ui_min = 1.0;
ui_max = 50.0;
ui_step = 1.0;
ui_label = "Horizontal Glow Radius";
> = 6.0;
uniform float SIGMA_H <
ui_type = "drag";
ui_min = 0.2;
ui_max = 15.0;
ui_step = 0.1;
ui_label = "Horizontal Glow Sigma";
> = 1.2;
uniform float SIZEV <
ui_type = "drag";
ui_min = 1.0;
ui_max = 50.0;
ui_step = 1.0;
ui_label = "Vertical Glow Radius";
> = 6.0;
uniform float SIGMA_V <
ui_type = "drag";
ui_min = 0.2;
ui_max = 15.0;
ui_step = 0.1;
ui_label = "Vertical Glow Sigma";
> = 1.2;
uniform float SIZEX <
ui_type = "drag";
ui_min = 1.0;
ui_max = 50.0;
ui_step = 1.0;
ui_label = "Horizontal Bloom/Halation/(Glow) Radius";
> = 4.0;
uniform float SIGMA_X <
ui_type = "drag";
ui_min = 0.25;
ui_max = 15.0;
ui_step = 0.05;
ui_label = "Horizontal Bloom/Halation/(Glow) Sigma";
> = 0.7;
uniform float SIZEY <
ui_type = "drag";
ui_min = 1.0;
ui_max = 50.0;
ui_step = 1.0;
ui_label = "Vertical Bloom/Halation/(Glow) Radius";
> = 4.0;
uniform float SIGMA_Y <
ui_type = "drag";
ui_min = 0.25;
ui_max = 15.0;
ui_step = 0.05;
ui_label = "Vertical Bloom/Halation/(Glow) Sigma";
> = 0.7;
uniform float glow <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 0.01;
ui_label = "Glow Strength";
> = 0.08;
uniform float bloom <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 0.01;
ui_label = "Bloom Strength";
> = 0.0;
uniform float halation <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.01;
ui_label = "Halation Strength";
> = 0.0;
uniform float gamma_c <
ui_type = "drag";
ui_min = 0.5;
ui_max = 2.0;
ui_step = 0.02;
ui_label = "Gamma Correct";
> = 1.0;
uniform float brightboost1 <
ui_type = "drag";
ui_min = 0.25;
ui_max = 10.0;
ui_step = 0.05;
ui_label = "Bright Boost Dark Pixels";
> = 1.4;
uniform float brightboost2 <
ui_type = "drag";
ui_min = 0.25;
ui_max = 3.0;
ui_step = 0.05;
ui_label = "Bright Boost Bright Pixels";
> = 1.1;
uniform float gsl <
ui_type = "drag";
ui_min = -1.0;
ui_max = 2.0;
ui_step = 1.0;
ui_label = "Scanline Type";
> = 0.0;
uniform float scanline1 <
ui_type = "drag";
ui_min = 0.0;
ui_max = 20.0;
ui_step = 0.5;
ui_label = "Scanline Beam Shape Center";
> = 6.0;
uniform float scanline2 <
ui_type = "drag";
ui_min = 3.0;
ui_max = 40.0;
ui_step = 1.0;
ui_label = "Scanline Beam Shape Edges";
> = 8.0;
uniform float beam_min <
ui_type = "drag";
ui_min = 0.25;
ui_max = 3.5;
ui_step = 0.05;
ui_label = "Scanline Shape Dark Pixels";
> = 1.3;
uniform float beam_max <
ui_type = "drag";
ui_min = 0.5;
ui_max = 2.5;
ui_step = 0.05;
ui_label = "Scanline Shape Bright Pixels";
> = 1.0;
uniform float beam_size <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Increased Bright Scanline Beam";
> = 0.6;
uniform float vertmask <
ui_type = "drag";
ui_min = -1.0;
ui_max = 1.0;
ui_step = 0.1;
ui_label = "Scanline Color Deconvergence";
> = 0.0;
uniform float scans <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Scanline Saturation";
> = 0.6;
uniform float spike <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 0.1;
ui_label = "Scanline Spike Removal";
> = 1.0;
uniform float h_sharp <
ui_type = "drag";
ui_min = 0.2;
ui_max = 15.0;
ui_step = 0.2;
ui_label = "Horizontal Sharpness";
> = 5.2;
uniform float s_sharp <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.5;
ui_step = 0.1;
ui_label = "Substractive Sharpness (1.0 Recommended)";
> = 0.5;
uniform float smart_ei <
ui_type = "drag";
ui_min = 0.0;
ui_max = 20.0;
ui_step = 0.25;
ui_label = "Smart Edges Effect Strength";
> = 0.0;
uniform float ei_limit <
ui_type = "drag";
ui_min = 1.0;
ui_max = 12.0;
ui_step = 0.1;
ui_label = "Smart Edges Effect Strength Limit";
> = 2.0;
uniform float sth <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.01;
ui_label = "Smart Edges Smoothing Threshold";
> = 0.2;
uniform float TATE <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 1.0;
ui_label = "TATE Mode";
> = 0.0;
uniform float IOS <
ui_type = "drag";
ui_min = 0.0;
ui_max = 4.0;
ui_step = 1.0;
ui_label = "Integer Scaling: Odd:Y, Even:'X'+Y";
> = 0.0;
uniform float OS <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 1.0;
ui_label = "Raster Bloom Overscan Mode";
> = 1.0;
uniform float BLOOM <
ui_type = "drag";
ui_min = 0.0;
ui_max = 20.0;
ui_step = 1.0;
ui_label = "Raster Bloom %";
> = 0.0;
uniform float csize <
ui_type = "drag";
ui_min = 0.0;
ui_max = 0.25;
ui_step = 0.01;
ui_label = "Corner Size";
> = 0.0;
uniform float bsize <
ui_type = "drag";
ui_min = 100.0;
ui_max = 700.0;
ui_step = 10.0;
ui_label = "Border Smoothness";
> = 700.0;
uniform float warpX <
ui_type = "drag";
ui_min = 0.0;
ui_max = 0.125;
ui_step = 0.01;
ui_label = "Curvature X (Default 0.03)";
> = 0.0;
uniform float warpY <
ui_type = "drag";
ui_min = 0.0;
ui_max = 0.125;
ui_step = 0.01;
ui_label = "Curvature Y (Default 0.04)";
> = 0.0;
uniform float overscanY <
ui_type = "drag";
ui_min = -50.0;
ui_max = 50.0;
ui_step = 1.0;
ui_label = "Overscan Y Original Pixels";
> = 0.0;
uniform float shadowMask <
ui_type = "drag";
ui_min = -1.0;
ui_max = 8.0;
ui_step = 1.0;
ui_label = "CRT Mask: 0:CGWG, 1-4:Lottes, 5-7:'Trinitron'";
> = 0.0;
uniform float cgwg <
ui_type = "drag";
ui_min = -0.5;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Mask Strength (0, 5-8)";
> = 0.3;
uniform float masksize <
ui_type = "drag";
ui_min = 1.0;
ui_max = 4.0;
ui_step = 1.0;
ui_label = "CRT Mask Size (2.0 Is Nice In 4K)";
> = 1.0;
uniform float maskDark <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 0.05;
ui_label = "Lottes Mask Dark";
> = 0.5;
uniform float maskLight <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 0.05;
ui_label = "Lottes Mask Bright";
> = 1.5;
uniform float mcut <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 0.05;
ui_label = "Mask 5-7 Low Strength";
> = 1.1;
uniform float mask_gamma <
ui_type = "drag";
ui_min = 1.0;
ui_max = 5.0;
ui_step = 0.05;
ui_label = "Mask Gamma";
> = 2.4;
uniform float slotmask <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Slot Mask Strength";
> = 0.0;
uniform float slotwidth <
ui_type = "drag";
ui_min = 1.0;
ui_max = 6.0;
ui_step = 0.5;
ui_label = "Slot Mask Width";
> = 2.0;
uniform float double_slot <
ui_type = "drag";
ui_min = 1.0;
ui_max = 2.0;
ui_step = 1.0;
ui_label = "Slot Mask Height: 2x1 or 4x1";
> = 1.0;
uniform float slotms <
ui_type = "drag";
ui_min = 1.0;
ui_max = 4.0;
ui_step = 1.0;
ui_label = "Slot Mask Size";
> = 1.0;
uniform float mclip <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Keep Mask Effect With Clipping";
> = 0.5;
uniform float GAMMA_OUT <
ui_type = "drag";
ui_min = 1.0;
ui_max = 3.5;
ui_step = 0.05;
ui_label = "Gamma Output";
> = 2.4;
uniform float deconrx <
ui_type = "drag";
ui_min = -7.0;
ui_max = 7.0;
ui_step = 0.5;
ui_label = "Horizontal Deconvergence Red Range";
> = 0.0;
uniform float decongx <
ui_type = "drag";
ui_min = -7.0;
ui_max = 7.0;
ui_step = 0.5;
ui_label = "Horizontal Deconvergence Green Range";
> = 0.0;
uniform float deconbx <
ui_type = "drag";
ui_min = -7.0;
ui_max = 7.0;
ui_step = 0.5;
ui_label = "Horizontal Deconvergence Blue Range";
> = 0.0;
uniform float deconry <
ui_type = "drag";
ui_min = -7.0;
ui_max = 7.0;
ui_step = 0.5;
ui_label = "Vertical Deconvergence Red Range";
> = 0.0;
uniform float decongy <
ui_type = "drag";
ui_min = -7.0;
ui_max = 7.0;
ui_step = 0.5;
ui_label = "Vertical Deconvergence Green Range";
> = 0.0;
uniform float deconby <
ui_type = "drag";
ui_min = -7.0;
ui_max = 7.0;
ui_step = 0.5;
ui_label = "Vertical Deconvergence Blue Range";
> = 0.0;
uniform float decons <
ui_type = "drag";
ui_min = 0.0;
ui_max = 2.0;
ui_step = 0.05;
ui_label = "Deconvergence Strength";
> = 0.5;
uniform float deconsmooth <
ui_type = "drag";
ui_min = 0.0;
ui_max = 1.0;
ui_step = 0.25;
ui_label = "Deconvergence Smoothing";
> = 0.0;
uniform float addnoise <
ui_type = "drag";
ui_min = -1.0;
ui_max = 1.0;
ui_step = 0.05;
ui_label = "Add Noise";
> = 0.0;
#include "ReShade.fxh"
#define TexSize float2(ResolutionX,ResolutionY)
#define IptSize float2(ResolutionX,ResolutionY)
#define OptSize float4(BUFFER_SCREEN_SIZE,1.0/BUFFER_SCREEN_SIZE)
#define SrcSize float4(TexSize,1.0/TexSize)
#define FragCoord (texcoord*OptSize.xy)
#define fmod(x,y) (x-y*trunc(x/y))
#define eps 1e-10
#define invsqrsigma_h 1.0/(2.0*SIGMA_H*SIGMA_H)
#define invsqrsigma_v 1.0/(2.0*SIGMA_V*SIGMA_V)
#define invsqrsigma_x 1.0/(2.0*SIGMA_X*SIGMA_X)
#define invsqrsigma_y 1.0/(2.0*SIGMA_Y*SIGMA_Y)
#ifndef Texture_Res_X
#define Texture_Res_X 320
#endif
#ifndef Texture_Res_Y
#define Texture_Res_Y 240
#endif
texture TextureA{Width=Texture_Res_X;Height=Texture_Res_Y;Format=RGBA16F;};
sampler SamplerA{Texture=TextureA;MinFilter=Linear;MagFilter=Linear;};
texture TextureB{Width=Texture_Res_X;Height=Texture_Res_Y;Format=RGBA16F;};
sampler SamplerB{Texture=TextureB;MinFilter=Linear;MagFilter=Linear;};
texture TextureC{Width=Texture_Res_X;Height=Texture_Res_Y;Format=RGBA16F;};
sampler SamplerC{Texture=TextureC;MinFilter=Linear;MagFilter=Linear;};
texture TextureD{Width=Texture_Res_X;Height=Texture_Res_Y;Format=RGBA16F;};
sampler SamplerD{Texture=TextureD;MinFilter=Linear;MagFilter=Linear;};
texture TextureE{Width=Texture_Res_X;Height=Texture_Res_Y;Format=RGBA16F;};
sampler SamplerE{Texture=TextureE;MinFilter=Linear;MagFilter=Linear;};
texture TextureF{Width=Texture_Res_X;Height=Texture_Res_Y;Format=RGBA16F;};
sampler SamplerF{Texture=TextureF;MinFilter=Linear;MagFilter=Linear;};
sampler Sampler0{Texture=ReShade::BackBufferTex;};
uniform int framecount<source="framecount";>;
float sw0(float x,float color,float scanline)
{
float tmp=lerp(beam_min,beam_max,color);
float ex=x*tmp;
ex=(gsl>-0.5)?ex*ex:lerp(ex*ex,ex*ex*ex,0.4);
return exp2(-scanline*ex);
}
float sw1(float x,float color,float scanline)
{
float tmp=lerp(1.2*beam_min,beam_max,color);
x=lerp(x,beam_min*x,max(x-0.4*color,0.0));
float ex=x*tmp;
return exp2(-scanline*ex*ex);
}
float sw2(float x,float color,float scanline)
{
float tmp=lerp(2.5*beam_min,beam_max,color);
tmp=lerp(beam_max,tmp,pow(x,color+0.3));
float ex=x*tmp;
return exp2(-scanline*ex*ex);
}
float sst(float x)
{
return exp2(-10.0*x*x);
}
float3 mask1(float2 pos,float m)
{
pos=floor(pos/masksize);
float3 msk=maskDark;
float3 one=1.0;
float drk=lerp(max(clamp(lerp(mcut,cgwg,m),0.0,1.0)-0.3,0.0)+1.0,1.0,m);
float mcc=1.0-max(cgwg,0.0);
if(shadowMask==-1.0)
{
msk=1.0;
}
else
if(shadowMask==0.0)
{
pos.x=frac(pos.x*0.5);
if(pos.x<0.5)
{
msk.r=1.0;
msk.g=mcc;
msk.b=1.0;
}
else
{
msk.r=mcc;
msk.g=1.0;
msk.b=mcc;
}
}
else
if(shadowMask==1.0)
{
float lne=maskLight;
float odd=0.0;
if(frac(pos.x/6.0)<0.5)
odd=1.0;
if(frac((pos.y+odd)/2.0)<0.5)
lne=maskDark;
pos.x=frac(pos.x/3.0);
if(pos.x<0.333)
msk.r=maskLight;else
if(pos.x<0.666)
msk.g=maskLight;else
msk.b=maskLight;
msk*=lne;
}
else
if(shadowMask==2.0)
{
pos.x=frac(pos.x/3.0);
if(pos.x<0.333)
msk.r=maskLight;else
if(pos.x<0.666)
msk.g=maskLight;else
msk.b=maskLight;
}
else
if(shadowMask==3.0)
{
pos.x+=pos.y*3.0;
pos.x=frac(pos.x/6.0);
if(pos.x<0.333)
msk.r=maskLight;else
if(pos.x<0.666)
msk.g=maskLight;else
msk.b=maskLight;
}
else
if(shadowMask==4.0)
{
pos.xy=floor(pos.xy*float2(1.0,0.5));
pos.x+=pos.y*3.0;
pos.x=frac(pos.x/6.0);
if(pos.x<0.333)
msk.r=maskLight;else
if(pos.x<0.666)
msk.g=maskLight;else
msk.b=maskLight;
}
else
if(shadowMask==5.0)
{
msk=0.0;
pos.x=frac(pos.x/2.0);
if(pos.x<0.5)
{
msk.r=1.0;
msk.b=1.0;}else
msk.g=1.0;
msk=clamp(lerp(lerp(one,msk,mcut),lerp(one,msk,cgwg),m),0.0,1.0)*drk;
}
else
if(shadowMask==6.0)
{
msk=0.0;
pos.x=frac(pos.x/3.0);
if(pos.x<0.333)
msk.r=1.0;else
if(pos.x<0.666)
msk.g=1.0;else
msk.b=1.0;
msk=clamp(lerp(lerp(one,msk,mcut),lerp(one,msk,cgwg),m),0.0,1.0)*drk;
}
else
if(shadowMask==7.0)
{
float maskTmp=clamp(lerp(lerp(1.0,0.0,mcut),lerp(1.0,0.0,cgwg),m),0.0,1.0)*drk;
msk=maskTmp;
pos.x=frac(pos.x/2.0);
if(pos.x<0.5)
msk=1.0;
}
else
if(shadowMask==8.0)
{
msk=mcc;
pos.x=frac(pos.x*0.25);
if(pos.x<0.2)
msk.r=1.0;else
if(pos.x<0.4)
msk.rg=1.0.xx;else
if(pos.x<0.7)
msk.gb=1.0.xx;else
msk.b=1.0;
}
return msk;
}
float mask2(float2 pos,float m)
{
if(slotmask==0.0)return 1.0;
pos=floor(pos/slotms);
float mlen=slotwidth*2.0;
float px=frac(pos.x/mlen);
float py=floor(frac(pos.y/(2.0*double_slot))*2.0*double_slot);
float slot_dark=1.0-slotmask*(1.0-0.125*m);
float slot=1.0;
if(py==0.0&&px<0.5)slot=slot_dark;else
if(py==double_slot&&px>=0.5)slot=slot_dark;
return slot;
}
float2 warp(float2 pos)
{
pos=pos*2.0-1.0;
pos*=float2(1.0+(pos.y*pos.y)*warpX,1.0+(pos.x*pos.x)*warpY);
return pos*0.5+0.5;
}
float2 overscan(float2 pos,float dx,float dy)
{
pos=pos*2.0-1.0;
pos*=float2(dx,dy);
return pos*0.5+0.5;
}
float corner(float2 coord)
{
coord=(coord-0.5)*1.0+0.5;
coord=min(coord,1.0-coord)*float2(1.0,OptSize.y/OptSize.x);
float2 cdist=max(csize/3.0,max((1.0-smoothstep(100.0,600.0,bsize))*0.01,0.002));
coord=(cdist-min(coord,cdist));
float dist=sqrt(dot(coord,coord));
return clamp((cdist.x-dist)*bsize,0.0,1.0);
}
float3 declip(float3 c,float b)
{
float m=max(max(c.r,c.g),c.b);
if(m>b)c=c*b/m;
return c;
}
float3 gc(float3 c)
{
float mc=max(max(c.r,c.g),c.b);
float mg=pow(mc,1.0/gamma_c);
return c*mg/(mc+eps);
}
float3 plant(float3 t,float r)
{
float tt=max(max(t.r,t.g),t.b)+0.00001;
return t*r/tt;
}
float dist(float3 A,float3 B)
{
float r=0.5*(A.r+B.r);
float3 d=A-B;
float3 c=float3(2.0+r,4.0,3.0-r);
return sqrt(dot(c*d,d))/3.0;
}
float gaussh(float x)
{
return exp(-x*x*invsqrsigma_h);
}
float gaussv(float x)
{
return exp(-x*x*invsqrsigma_v);
}
float gaussx(float x)
{
return exp(-x*x*invsqrsigma_x);
}
float gaussy(float x)
{
return exp(-x*x*invsqrsigma_y);
}
float3 noise(float3 v)
{
if(addnoise<0.0){v.z=-addnoise;}else{v.z=v.z/6000.0;}
v=frac(v)+frac(v*1e4)+frac(v*1e-4);
v+=float3(0.12345,0.6789,0.314159);
v=frac(v*dot(v,v)*123.456);
v=frac(v*dot(v,v)*123.456);
return v;
}
float4 LuminancePS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float m=max(log2(SrcSize.x),log2(SrcSize.y));
m=max(m-1.0,1.0);
float2 dx=float2(1.0/SrcSize.x,0.0);
float2 dy=float2(0.0,1.0/SrcSize.y);
float2 y2=2.0*dy;
float2 x2=2.0*dx;
float ltotal=0.0;
ltotal+=max(0.0,length(tex2Dlod(Sampler0,float4(0.25,m,0.0,0.0)).rgb));
ltotal+=max(0.0,length(tex2Dlod(Sampler0,float4(float2(0.25,0.75),m,0.0)).rgb));
ltotal+=max(0.0,length(tex2Dlod(Sampler0,float4(float2(0.75,0.25),m,0.0)).rgb));
ltotal+=max(0.0,length(tex2Dlod(Sampler0,float4(0.75,m,0.0,0.0)).rgb));
ltotal*=0.25;
ltotal=pow(0.577350269*ltotal,0.65);
float history=tex2D(SamplerA,0.1).a;
ltotal=lerp(ltotal,history,lsmooth);
float3 l1=tex2D(Sampler0,texcoord.xy).rgb;
float3 r1=tex2D(Sampler0,texcoord.xy+dx).rgb;
float3 l2=tex2D(Sampler0,texcoord.xy-dx).rgb;
float3 r2=tex2D(Sampler0,texcoord.xy+x2).rgb;
float c1=dist(l2,l1);
float c2=dist(l1,r1);
float c3=dist(r2,r1);
return float4(c1,c2,c3,ltotal);
}
float4 LinearizePS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float3 c1=tex2Dlod(Sampler0,float4(texcoord,0.0,0.0)).rgb;
float3 c2=tex2Dlod(Sampler0,float4(texcoord+float2(0.0,SrcSize.w),0.0,0.0)).rgb;
float3 c=c1;
float intera=1.0;
float gamma_in=clamp(GAMMA_IN,1.0,5.0);
float m1=max(max(c1.r,c1.g),c1.b);
float m2=max(max(c2.r,c2.g),c2.b);
float3 df=abs(c1-c2);
float d=max(max(df.r,df.g),df.b);
if(interm==2.0)
d=lerp(0.1*d,10.0*d,step(m1/(m2+0.0001),m2/(m1+0.0001)));
float r=m1;
float yres_div=1.0;
if(inter<SrcSize.y/yres_div&&interm>0.5)
{
intera=0.5;
float liine_no=clamp(floor(fmod(SrcSize.y*texcoord.y,2.0)),0.0,1.0);
float frame_no=clamp(floor(fmod(float(framecount),2.0)),0.0,1.0);
float ii=abs(liine_no-frame_no);
if(interm <3.5)
{
r=clamp(max(m1*ii,(1.0-iscan)*min(m1,m2)),0.0,1.0);
c=plant(lerp(lerp(c1,c2,min(lerp(m1,1.0-m2,min(m1,1.0-m1))/(d+0.00001),1.0)),c1,ii),r);
if(interm==3.0)
c=(1.0-0.5*iscan)*lerp(c2,c1,ii);
intera=0.0;
}
if(interm==5.0)
{
c=lerp(c2,c1,0.5);intera=0.5;
}
}
c=pow(c,gamma_in);
if(texcoord.x>0.5){gamma_in=intera;}else{gamma_in=1.0/gamma_in;}
return float4(c,gamma_in);
}
float4 HGaussianPS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float f=frac(SrcSize.x*texcoord.x);
f=0.5-f;
float2 tex=floor(SrcSize.xy*texcoord)*SrcSize.zw+0.5*SrcSize.zw;
float3 color=0.0;
float2 dx=float2(SrcSize.z,0.0);
float w;
float wsum=0.0;
float3 pixel;
float n=-SIZEH;
do
{
pixel=tex2Dlod(SamplerB,float4(tex+n*dx,0.0,0.0)).rgb;
w=gaussh(n+f);
color=color+w*pixel;
wsum=wsum+w;
n=n+1.0;
}while(n<=SIZEH);
color=color/wsum;
return float4(color,1.0);
}
float4 VGaussianPS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float f=frac(SrcSize.y*texcoord.y);
f=0.5-f;
float2 tex=floor(SrcSize.xy*texcoord)*SrcSize.zw+0.5*SrcSize.zw;
float3 color=0.0;
float2 dy=float2(0.0,SrcSize.w);
float w;
float wsum=0.0;
float3 pixel;
float n=-SIZEV;
do
{
pixel=tex2Dlod(SamplerC,float4(tex+n*dy,0.0,0.0)).rgb;
w=gaussv(n+f);
color=color+w*pixel;
wsum=wsum+w;
n=n+1.0;
}while(n<=SIZEV);
color=color/wsum;
return float4(color,1.0);
}
float4 HBlurPS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float f=frac(SrcSize.x*texcoord.x);
f=0.5-f;
float2 tex=floor(SrcSize.xy*texcoord)*SrcSize.zw+0.5*SrcSize.zw;
float4 color=0.0;
float2 dx=float2(SrcSize.z,0.0);
float w;
float wsum=0.0;
float4 pixel;
float n=-SIZEX;
do
{
pixel=tex2Dlod(SamplerB,float4(tex+n*dx,0.0,0.0));
w=gaussx(n+f);
pixel.a=max(max(pixel.r,pixel.g),pixel.b);
pixel.a*=pixel.a*pixel.a;
color=color+w*pixel;
wsum=wsum+w;
n=n+1.0;
}while(n<=SIZEX);
color=color/wsum;
return float4(color.rgb,pow(color.a,0.333333));
}
float4 VBlurPS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float f=frac(SrcSize.y*texcoord.y);
f=0.5-f;
float2 tex=floor(SrcSize.xy*texcoord)*SrcSize.zw+0.5*SrcSize.zw;
float4 color=0.0;
float2 dy=float2(0.0,SrcSize.w);
float w;
float wsum=0.0;
float4 pixel;
float n=-SIZEY;
do
{
pixel=tex2Dlod(SamplerE,float4(tex+n*dy,0.0,0.0));
w=gaussy(n+f);
pixel.a*=pixel.a*pixel.a;
color=color+w*pixel;
wsum=wsum+w;
n=n+1.0;
}while(n<=SIZEY);
color=color/wsum;
return float4(color.rgb,pow(color.a,0.175));
}
float4 GuestPS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float lum=tex2D(SamplerA,0.1).a;
float gamma_in=1.0/tex2D(SamplerB,0.25).a;
float intera=tex2D(SamplerB,float2(0.75,0.25)).a;
bool interb=(intera<0.75);
bool notate=(TATE<0.5);
if(IOS >0.0)
{
float2 ofactor=OptSize.xy/SrcSize.xy;
float2 intfactor=(IOS<2.5)?floor(ofactor):ceil(ofactor);
float2 diff=ofactor/intfactor;
float scan=lerp(diff.y,diff.x,TATE);
texcoord=overscan(texcoord,scan,scan);
if(IOS==1.0||IOS==3.0)texcoord=lerp(float2(texcoord.x,texcoord.y),float2(texcoord.x,texcoord.y),TATE);
}
float factor=1.00+(1.0-0.5*OS)*BLOOM/100.0-lum*BLOOM/100.0;
texcoord=overscan(texcoord,factor,factor);
texcoord=overscan(texcoord,1.0,(SrcSize.y-overscanY)/SrcSize.y);
float2 pos=warp(texcoord);
bool smarte=(smart_ei>0.0&¬ate);
float2 coffset=0.5;
float2 ps=SrcSize.zw;
float2 OGL2Pos=pos*SrcSize.xy-coffset;
float2 fp=frac(OGL2Pos);
float2 dx=float2(ps.x,0.0);
float2 dy=float2(0.0,ps.y);
float2 x2=2.0*dx;
float2 y2=2.0*dy;
float2 offx=dx;
float2 off2=x2;
float2 offy=dy;
float fpx=fp.x;
if(!notate)
{
offx=dy;
off2=y2;
offy=dx;
fpx=fp.y;
}
float f=(notate)?fp.y:fp.x;
float2 pC4=floor(OGL2Pos)*ps+0.5*ps;
if(interb)pC4.y=pos.y-inters*SrcSize.w;
float zero=exp2(-h_sharp);
float sharp1=s_sharp*zero;
float fdivider=min(prescalex,2.0);
float wl3=(2.0+fpx)/fdivider;
float wl2=(1.0+fpx)/fdivider;
float wl1=(fpx)/fdivider;
float wr1=(1.0-fpx)/fdivider;
float wr2=(2.0-fpx)/fdivider;
float wr3=(3.0-fpx)/fdivider;
wl3*=wl3;wl3=exp2(-h_sharp*wl3);
wl2*=wl2;wl2=exp2(-h_sharp*wl2);
wl1*=wl1;wl1=exp2(-h_sharp*wl1);
wr1*=wr1;wr1=exp2(-h_sharp*wr1);
wr2*=wr2;wr2=exp2(-h_sharp*wr2);
wr3*=wr3;wr3=exp2(-h_sharp*wr3);
float fp1=1.0-fpx;
float wnorm=max(wl1,wr1);
float twl3=max(wl3-sharp1,0.0);
float twl2=max(wl2-sharp1,lerp(-0.12,0.0,1.0-fp1*fp1));float swl2=max(twl2,0.0);
float twl1=max(wl1-sharp1,0.0);
float twr1=max(wr1-sharp1,0.0);
float twr2=max(wr2-sharp1,lerp(-0.12,0.0,1.0-fpx*fpx));float swr2=max(twr2,0.0);
float twr3=max(wr3-sharp1,0.0);
bool sharp=(sharp1>0.0);
float rwl3,rwl2,rwr2;
float rwl1=twl1;
float rwr1=twr1;
float3 c1,c2;
if(smarte)
{
rwl3=wl3;rwl2=wl2;
rwl1=wl1;rwr1=wr1;
rwr2=wr2;
twl3=0.0;twr3=0.0;
float3 d=tex2Dlod(SamplerA,float4(pC4+dy+dy,0.0,0.0)).xyz;
float3 b=tex2D(SamplerA,pC4+offy).xyz;
float3 a=tex2D(SamplerA,pC4).xyz;
float3 t=tex2Dlod(SamplerA,float4(pC4-offy,0.0,0.0)).xyz;
c1=(h_sharp>2.6)?a:min(a,(t+a+b)/3.0);c1=max(c1-sth,0.0);
c2=(h_sharp>2.6)?b:min(b,(a+b+d)/3.0);c2=max(c2-sth,0.0);
}
float wts=1.0/(swl2+rwl1+rwr1+swr2);
float3 l3,l2,l1,r1,r2,r3,sl2,sl1,sr1,sr2,color1,color2,colmin,colmax;
l3=tex2D(SamplerB,pC4-off2).rgb;
l2=tex2D(SamplerB,pC4-offx).rgb;
l1=tex2D(SamplerB,pC4).rgb;
r1=tex2D(SamplerB,pC4+offx).rgb;
r2=tex2D(SamplerB,pC4+off2).rgb;
r3=tex2D(SamplerB,pC4+offx+off2).rgb;
sl2=l2*l2*l2;sl2*=sl2;
sl1=l1*l1*l1;sl1*=sl1;
sr1=r1*r1*r1;sr1*=sr1;
sr2=r2*r2*r2;sr2*=sr2;
colmin=min(min(l1,r1),min(l2,r2));
colmax=max(max(l1,r1),max(l2,r2));
if(smarte)
{
float pc=min(1.0+smart_ei*c1.y,ei_limit);
float pl=min(1.0+smart_ei*max(c1.y,c1.x),ei_limit);
float pr=min(1.0+smart_ei*max(c1.y,c1.z),ei_limit);
twl1=pow(rwl1,pc);twr1=pow(rwr1,pc);
twl2=pow(rwl2,pl);twr2=pow(rwr2,pr);
float wmax=max(twl1,twr1);
float sharp_ei=s_sharp*pow(zero,pc)/wmax;
twl2=max(twl2/wmax-sharp_ei,lerp(-0.15,0.0,1.0-fp1*fp1));
twl1=max(twl1/wmax-sharp_ei,0.0);
twr1=max(twr1/wmax-sharp_ei,0.0);
twr2=max(twr2/wmax-sharp_ei,lerp(-0.15,0.0,1.0-fpx*fpx));
}
color1=(l3*twl3+l2*twl2+l1*twl1+r1*twr1+r2*twr2+r3*twr3)/(twl3+twl2+twl1+twr1+twr2+twr3);
if(sharp)color1=clamp(color1,colmin,colmax);
float3 gtmp=1.0/6.0;
float3 scolor1=color1;
scolor1=(sl2*swl2+sl1*rwl1+sr1*rwr1+sr2*swr2)*wts;
scolor1=pow(scolor1,gtmp);float3 mcolor1=scolor1;
scolor1=min(lerp(color1,scolor1,spike),1.0);
float3 scolor2,mcolor2;
if(interb)pC4.y=pos.y+inters*SrcSize.w;else
pC4+=offy;
l3=tex2D(SamplerB,pC4-off2).rgb;
l2=tex2D(SamplerB,pC4-offx).rgb;
l1=tex2D(SamplerB,pC4).rgb;
r1=tex2D(SamplerB,pC4+offx).rgb;
r2=tex2D(SamplerB,pC4+off2).rgb;
r3=tex2D(SamplerB,pC4+offx+off2).rgb;
sl2=l2*l2*l2;sl2*=sl2;
sl1=l1*l1*l1;sl1*=sl1;
sr1=r1*r1*r1;sr1*=sr1;
sr2=r2*r2*r2;sr2*=sr2;
colmin=min(min(l1,r1),min(l2,r2));
colmax=max(max(l1,r1),max(l2,r2));
if(smarte)
{
float pc=min(1.0+smart_ei*c2.y,ei_limit);
float pl=min(1.0+smart_ei*max(c2.y,c2.x),ei_limit);
float pr=min(1.0+smart_ei*max(c2.y,c2.z),ei_limit);
twl1=pow(rwl1,pc);twr1=pow(rwr1,pc);
twl2=pow(rwl2,pl);twr2=pow(rwr2,pr);
float wmax=max(twl1,twr1);
float sharp_ei=s_sharp*pow(zero,pc)/wmax;
twl2=max(twl2/wmax-sharp_ei,lerp(-0.15,0.0,1.0-fp1*fp1));
twl1=max(twl1/wmax-sharp_ei,0.0);
twr1=max(twr1/wmax-sharp_ei,0.0);
twr2=max(twr2/wmax-sharp_ei,lerp(-0.15,0.0,1.0-fpx*fpx));
}
color2=(l3*twl3+l2*twl2+l1*twl1+r1*twr1+r2*twr2+r3*twr3)/(twl3+twl2+twl1+twr1+twr2+twr3);
if(sharp)color2=clamp(color2,colmin,colmax);
scolor2=color2;
scolor2=(sl2*swl2+sl1*rwl1+sr1*rwr1+sr2*swr2)*wts;
scolor2=pow(scolor2,gtmp);mcolor2=scolor2;
scolor2=min(lerp(color2,scolor2,spike),1.0);
float3 ctmp;float3 mcolor;float w3;float3 color;
float3 one=1.0;
if(!interb)
{
float shape1=lerp(scanline1,scanline2,f);
float shape2=lerp(scanline1,scanline2,1.0-f);
float wt1=sst(f);
float wt2=sst(1.0-f);
float3 color00=color1*wt1+color2*wt2;
float3 scolor0=scolor1*wt1+scolor2*wt2;
mcolor=(mcolor1*wt1+mcolor2*wt2)/(wt1+wt2);
ctmp=color00/(wt1+wt2);
float3 sctmp=scolor0/(wt1+wt2);
float wf1,wf2;
float3 cref1=lerp(sctmp,scolor1,beam_size);float creff1=max(max(cref1.r,cref1.g),cref1.b);
float3 cref2=lerp(sctmp,scolor2,beam_size);float creff2=max(max(cref2.r,cref2.g),cref2.b);
float f1=f;
float f2=1.0-f;
if(gsl <0.5){wf1=sw0(f1,creff1,shape1);wf2=sw0(f2,creff2,shape2);}else
if(gsl==1.0){wf1=sw1(f1,creff1,shape1);wf2=sw1(f2,creff2,shape2);}else
if(gsl==2.0){wf1=sw2(f1,creff1,shape1);wf2=sw2(f2,creff2,shape2);}
if((wf1+wf2)>1.0){float wtmp=1.0/(wf1+wf2);wf1*=wtmp;wf2*=wtmp;}
float3 w1=wf1;float3 w2=wf2;
cref1=color1/(max(max(color1.r,color1.g),color1.b)+0.00001);
cref2=color2/(max(max(color2.r,color2.g),color2.b)+0.00001);
w1=lerp(w1*lerp(one,cref1*cref1*cref1,scans),w1,wf1);
w2=lerp(w2*lerp(one,cref2*cref2*cref2,scans),w2,wf2);
float3 cd1=one;float3 cd2=one;float vm=sqrt(vertmask);
float v_hi1=1.0+0.3*vm;
float v_hi2=1.0+0.6*vm;
float v_low=1.0-vm;
float ds1=min(pow(2.0*f1+0.01,f2),1.0);
float ds2=min(pow(2.0*f2+0.01,f1),1.0);
if(vertmask<0.0)
{
cd1=lerp(one,float3(v_hi2,v_low,v_low),ds1);
cd2=lerp(one,float3(v_low,v_hi1,v_hi1),ds2);
}
else
{
cd1=lerp(one,float3(v_hi1,v_low,v_hi1),ds1);
cd2=lerp(one,float3(v_low,v_hi2,v_low),ds2);
}
color=gc(color1)*w1*cd1+gc(color2)*w2*cd2;
color=min(color,1.0);
w3=wf1+wf2;
}
if(interb)
{
color=gc(0.5*(color1+color2));
mcolor=max(max(color.r,color.g),color.b);
}
float mx=max(max(mcolor.r,mcolor.g),mcolor.b);
mx=pow(mx,1.20/gamma_in);
float3 orig1=color;
float3 cmask=one;
float2 maskcoord=FragCoord.yx*1.000001;
if(notate)maskcoord=maskcoord.yx;
float smask=mask2(maskcoord,mx);
cmask*=mask1(maskcoord,mx);
color=pow(color,mask_gamma/gamma_in);
color=color*cmask;
color=min(color,1.0);
color=color*smask;
color=pow(color,gamma_in/mask_gamma);
cmask=min(cmask*smask,1.0);
if(interb)ctmp=color;
float colmx=pow(max(max(ctmp.r,ctmp.g),ctmp.b),1.40/GAMMA_OUT);
float bb=lerp(brightboost1,brightboost2,colmx);
if(interb)bb=(abs(intera-0.5)<0.1)?pow(0.80*bb,0.65):pow(bb,0.70);
color*=bb;
float3 Glow=tex2D(SamplerD,pos).rgb;
float3 Bloom=tex2D(SamplerF,pos).rgb;
float maxb=tex2D(SamplerF,pos).a;
float3 Bloom1=min(Bloom*(orig1+color),max(0.5*(colmx+orig1-color),0.0));
color=color+bloom*Bloom1;
color=min(color,lerp(one,cmask,mclip));
if(!interb)color=declip(color,pow(w3,0.60));
Bloom=lerp(0.5*(Bloom+Bloom*Bloom),Bloom*Bloom,colmx);
color=color+(0.75+maxb)*Bloom*(0.75+0.70*pow(colmx,0.33333))*lerp(1.0,w3,0.5*colmx)*lerp(one,cmask,0.35+0.4*maxb)*halation;
Glow=lerp(Glow,0.25*color,0.7*colmx);
color=color+0.5*glow*Glow;
color=pow(color,1.0/GAMMA_OUT);
return float4(color,corner(pos));
}
float4 ChromaticPS(float4 position:SV_Position,float2 texcoord:TEXCOORD):SV_Target
{
float3 color=tex2D(Sampler0,texcoord).rgb;
float3 total=color;
const float masksizes[10]={2.0,2.0,3.0,3.0,3.0,3.0,2.0,3.0,2.0,4.0};
if((abs(deconrx)+abs(decongx)+abs(deconbx))>0.25)
{
float steps=masksizes[int(shadowMask)+1]*masksize;
steps*=(TATE<0.5)?(OptSize.z):(OptSize.w);
float stepy=(TATE<0.5)?(OptSize.w):(OptSize.z);
float2 dx=(TATE<0.5)?float2(steps,0.0):float2(0.0,steps);
float2 dy=(TATE>0.5)?float2(stepy,0.0):float2(0.0,stepy);
float2 rc=deconrx*dx+deconry*dy;
float2 gc=decongx*dx+decongy*dy;
float2 bc=deconbx*dx+deconby*dy;
dx=(dx+dy)*deconsmooth;
float r1=tex2D(Sampler0,texcoord+rc).r;
float g1=tex2D(Sampler0,texcoord+gc).g;
float b1=tex2D(Sampler0,texcoord+bc).b;
float r2=tex2D(Sampler0,texcoord+rc-dx).r;
float g2=tex2D(Sampler0,texcoord+gc-dx).g;
float b2=tex2D(Sampler0,texcoord+bc-dx).b;
float r3=tex2D(Sampler0,texcoord+rc+dx).r;
float g3=tex2D(Sampler0,texcoord+gc+dx).g;
float b3=tex2D(Sampler0,texcoord+bc+dx).b;
float3 result1=float3(r1,g1,b1);
float3 result2=float3(r2,g2,b2);
float3 result3=float3(r3,g3,b3);
total=clamp(lerp(color,(result1+result2+result3)/3.0,decons),0.0,1.0);
float mc=max(max(color.r,color.g),color.b);
float mr=max(max(total.r,total.g),total.b);
total=plant(total,clamp(lerp(mc,mr,0.7*mc+0.3),0.5*mc,1.0));
}
total=lerp(total,noise(float3(OptSize.xy*texcoord,float(framecount))),0.2*abs(addnoise));
float corner=tex2D(Sampler0,texcoord).a;
return float4(total*corner,1.0);
}
technique CRT_Guest_Advanced
{
pass Luminance
{
VertexShader=PostProcessVS;
PixelShader=LuminancePS;
RenderTarget=TextureA;
}
pass Linearize
{
VertexShader=PostProcessVS;
PixelShader=LinearizePS;
RenderTarget=TextureB;
}
pass GaussianX
{
VertexShader=PostProcessVS;
PixelShader=HGaussianPS;
RenderTarget=TextureC;
}
pass GaussianY
{
VertexShader=PostProcessVS;
PixelShader=VGaussianPS;
RenderTarget=TextureD;
}
pass Blur_Horz
{
VertexShader=PostProcessVS;
PixelShader=HBlurPS;
RenderTarget=TextureE;
}
pass Blur_Vert
{
VertexShader=PostProcessVS;
PixelShader=VBlurPS;
RenderTarget=TextureF;
}
pass Guest_CRT
{
VertexShader=PostProcessVS;
PixelShader=GuestPS;
}
pass Chromatic
{
VertexShader=PostProcessVS;
PixelShader=ChromaticPS;
}
}
(Also, make sure Texture_Res_X and Texture_Res_Y are always the same as Resolution X and Resolution Y)
It fails to initialize here (nvidia GTX770, win7, d3d9 x64 game, reshade 4.9.1):
E:\Jeux\Sonic Decompilation\reshade-shaders\Shaders\CRT-Guest-Advanced.fx(964,17-40): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
E:\Jeux\Sonic Decompilation\reshade-shaders\Shaders\CRT-Guest-Advanced.fx(925,16): error X6077: texld/texldb/texldp/dsx/dsy instructions with r# as source cannot be used inside dynamic conditional 'if' blocks, dynamic conditional subroutine calls, or loop/rep with break*.
Fixed some issues with GDV-Advanced! @Tatsuya79 thanks again for all the testing!
(Character limit reached in the last post. So had to move images here) :
Hi @DevilSingh, First of all thanks for all your efforts porting shaders to Reshade. Looks like crt-guest-advanced shader doesnt goes well with horisontal resolution - take a look at the screenshots below -
original image crt-guest-advanced with default settings Horizontal res x2 = 640As you can see “press start” looks a bit off, do you have any clues how to fix this ? For you other shaders - crt-geom and crt-guest-venom doubling hres does the justice. Thanks again.
Have you tried this? I forgot to add that note before when I first posted the shader here.
Can you post your preset here? So I can take a look.
I’ve finally solve it - forcing “reload preset” after making changes setting texture resolution does the trick.
Each time I try a game with a different resolution I have to specify the Texture_Res which aren’t shown in Reshade.
In Reshade I click “edit global preprocessor definitions”, then “current preset”, then I add 2 entries for Texture_Res_X and Texture_Res_Y with the right resolution.
If this is done, then I can copy and drag my ReShadePreset.ini into another game folder and it will show me the Texture_Res entries in Reshade.
Alternately, you can edit your ReShadePreset.ini and add as the first line:
PreprocessorDefinitions=Texture_Res_X=426,Texture_Res_Y=240
or whichever values you need.
They’ll probably show up then.
Now it does.
Record of Lodoss War -Deedlit in Wonder Labyrinth-
PreprocessorDefinitions=Texture_Res_X=640,Texture_Res_Y=360
[email protected]
[email protected]
[CRT-Guest-Advanced.fx]
addnoise=0.000000
beam_max=1.000000
beam_min=1.300000
beam_size=0.600000
bloom=0.000000
BLOOM=0.000000
brightboost1=2.100000
brightboost2=1.400000
bsize=6000.000000
CGWG=0.300000
cgwg=0.300000
csize=0.000000
deconbx=0.000000
deconby=0.000000
decongx=0.000000
decongy=0.000000
deconrx=0.000000
deconry=0.000000
decons=0.500000
deconsmooth=0.000000
double_slot=1.000000
ei_limit=2.000000
gamma_c=1.100001
GAMMA_IN=2.400000
GAMMA_OUT=2.400000
glow=0.000000
gsl=2.000000
halation=0.000000
h_sharp=3.600010
inter=400.000000
interm=0.000000
inters=0.000000
IOS=0.000000
iscan=0.200000
lsmooth=0.700000
maskDark=0.500000
maskLight=1.500000
masksize=1.000000
mask_gamma=2.400000
mclip=0.500000
mcut=1.100000
OS=0.000000
overscanY=0.000000
prescalex=1.000000
ResolutionX=640.000000
ResolutionY=360.000000
scanline1=6.000000
scanline2=32.000000
scans=0.600000
shadowMask=-1.000000
SIGMA_H=1.200000
SIGMA_V=1.200000
SIGMA_X=0.700000
SIGMA_Y=0.700000
SIZEH=6.000000
SIZEV=6.000000
SIZEX=4.000000
SIZEY=4.000000
slotmask=0.000000
slotms=1.000000
slotwidth=2.000000
smart_ei=0.000000
spike=0.000000
sth=0.200000
s_sharp=1.000000
TATE=0.000000
Texture_Res_X=640.000000
Texture_Res_Y=360.000000
vertmask=0.000000
warpX=0.000000
warpY=0.000000
Is this the current version of Guest? As in V2?
Just wanted to pop in and give a big thanks for porting this shader to Reshade. CRT Guest Dr Venom has been one of my favorite CRT shaders to date and now I can use it will all kinds of PC games that I wish to.
I can also combine it with 3dfx games, since 3dfx APIs such as nglide and dgvoodoo2 convert the calls to DirectX 11, which I then can combine with Reshade to add desired effects.
One interesting one, here are a couple of screenshots of POD Gold with dgvoodoo2, running with Reshade using CRT Guest Advanced. Menus are at 640x480 internal resolution with gameplay at 800x600.
I plan on testing this out with many different games I have on hand.
I just wanted to leave a big Thanks for this great Shader !!! All Retro systems like PS1, PS1, Dreamcast, Gamecube etc. as well as Arcade etc. look absolut great with this shader when configured properly. I can sell my 31 and 15 khz CRT’s now and play everything on my OLED as it look really CRT’ish now and doesn’t leave much to be desired. Thank you !!!