For lazy people, here are some shaders I've converted from ReShade; LumaSharpen and film grain.
I should note that film grain has a particularly interesting application, as on the lowest intensity (0.01) it makes banding vanish while being nearly invisible. Example. I guess you could say it's meant to do that, but it works exceptionally well...
Also, LumaSharpen actually works pretty well with the TAA applied after. However, at high intensities distant objects acquire outlines.
No guarantees about the code quality. I'm no master.
Converting SweetFX Effects To ENB
- Author
- Message
-
Offline
- *master*
- Posts: 136
- Joined: 08 Nov 2012, 15:24
Re: Converting SweetFX Effects To ENB
Last edited by roxahris on 04 Dec 2015, 12:26, edited 2 times in total.
_________________
Try my mods! | Resonant ENB for Dragon's Dogma | IAXE2 for Fallout 4 | Luminous ENB for Skyrim SE
Try my mods! | Resonant ENB for Dragon's Dogma | IAXE2 for Fallout 4 | Luminous ENB for Skyrim SE
-
Offline
- Posts: 84
- Joined: 21 Nov 2015, 14:15
Re: Converting SweetFX Effects To ENB
Yup, it's one of the benefit of Grain in general picture application. =) It helps fight the banding by simulating a higher range of colors thanks to patterns made with a lower range of colors. It's quite necessary to visually exceed the technical limitation of 8bit monitors. The - more or less - same kind of technique exist in print, simulating various shades of grey with only black and white dots and using different sizes / gaps.roxahris wrote:I should note that film grain has a particularly interesting application, as on the lowest intensity (0.01) it makes banding vanish while being nearly invisible.
Thanks a lot for the shaders - I really need lumasharpen and I'm too busy and ignorant to do it myself !
-
Offline
- *blah-blah-blah maniac*
- Posts: 1938
- Joined: 05 Mar 2012, 02:08
Re: Converting SweetFX Effects To ENB
I guess no one has seen this;
http://www.nexusmods.com/fallout4/mods/4088/?
And I'm currently implementing effects into the enbeffectpostpass instead of the enbeffect.fx.
Two sharpening methods, one with depth based sharpening and the other without it (courtesy of Prod80). And then there is Vignette, Dither(3 methods), Interlace, animated Grain and Letterbox. Other additions will be made in the future.
http://www.nexusmods.com/fallout4/mods/4088/?
And I'm currently implementing effects into the enbeffectpostpass instead of the enbeffect.fx.
Two sharpening methods, one with depth based sharpening and the other without it (courtesy of Prod80). And then there is Vignette, Dither(3 methods), Interlace, animated Grain and Letterbox. Other additions will be made in the future.
-
Offline
- Posts: 84
- Joined: 21 Nov 2015, 14:15
Re: Converting SweetFX Effects To ENB
Yeah I totally did ! I just put it aside and switched back to classic ENB to try and follow the progress for now. I jumped on the Skyrim ENB train quite late and felt I was pushing buttons at random rather than actually knowing what I was doing :p--JawZ-- wrote:I guess no one has seen this;
http://www.nexusmods.com/fallout4/mods/4088/?
And I'm currently implementing effects into the enbeffectpostpass instead of the enbeffect.fx.
Two sharpening methods, one with depth based sharpening and the other without it (courtesy of Prod80). And then there is Vignette, Dither(3 methods), Interlace, animated Grain and Letterbox. Other additions will be made in the future.
-
Offline
- *sensei*
- Posts: 316
- Joined: 12 Aug 2013, 18:55
- Location: Scotland
Re: Converting SweetFX Effects To ENB
Been looking into making the effects time-dependent. Dear lord does it make my brain hurt.
So far, I've defined floats that pertain to the time.
But, uh, I've no clue how to make the an effect change depending on the time. Took a look at a Skyrim enbeffect.fx file, but it uses some odd _c3.w variable, that is provided by ENB. It then uses clamp() to change the value between day and night.
The resulting float is then used in some bizarre math that just makes my eyes sore. And it doesn't even account for dawn, sunrise, sunset and dusk.
Eeeeeergh.
Also, is there an interior/exterior boolean that we can use in the shaders? I've got a pretty good result for the exteriors, but interiors look...Not so great.
Or is that something we have to wait further down the line for due to Bethesda updating and releasing DLC?
So far, I've defined floats that pertain to the time.
Code: Select all
float4 PS_Draw(VS_OUTPUT_POST IN, float4 v0 : SV_Position0) : SV_Target
{
float4 res;
float4 color;
color=TextureColor.Sample(Sampler0, IN.txcoord0.xy); //hdr scene color
float fDawn = TimeOfDay1.x;
float fSunrise = TimeOfDay1.y;
float fDay = TimeOfDay1.z;
float fSunset = TimeOfDay1.w;
float fDusk = TimeOfDay2.x;
float fNight = TimeOfDay2.y;
The resulting float is then used in some bizarre math that just makes my eyes sore. And it doesn't even account for dawn, sunrise, sunset and dusk.
Eeeeeergh.
Also, is there an interior/exterior boolean that we can use in the shaders? I've got a pretty good result for the exteriors, but interiors look...Not so great.
Or is that something we have to wait further down the line for due to Bethesda updating and releasing DLC?
_________________
Intel i7 6700k | AMD Vega 56 8GB | 2x16GB DDR4 @ 3000mhz | Windows 7 64bit | Creative Soundblaster X-Fi Titanium Fatal1ty Pro | Asus z170 Pro Gaming
Intel i7 6700k | AMD Vega 56 8GB | 2x16GB DDR4 @ 3000mhz | Windows 7 64bit | Creative Soundblaster X-Fi Titanium Fatal1ty Pro | Asus z170 Pro Gaming
-
Offline
- *blah-blah-blah maniac*
- Posts: 1938
- Joined: 05 Mar 2012, 02:08
Re: Converting SweetFX Effects To ENB
TimeOfDay has yet to be implemented in the shader files. So you will have to wait for Boris to do so to have any use of that.
And what code did you look at that used clamp(Var, minVal, maxVal) to change between Day and Night? Better opt it for lerp(1stfloatVal, 2ndfloatVal, LinearInterpolateVar)
And what code did you look at that used clamp(Var, minVal, maxVal) to change between Day and Night? Better opt it for lerp(1stfloatVal, 2ndfloatVal, LinearInterpolateVar)
-
Offline
- *sensei*
- Posts: 316
- Joined: 12 Aug 2013, 18:55
- Location: Scotland
Re: Converting SweetFX Effects To ENB
--JawZ-- wrote:TimeOfDay has yet to be implemented in the shader files. So you will have to wait for Boris to do so to have any use of that.
And what code did you look at that used clamp(Var, minVal, maxVal) to change between Day and Night? Better opt it for lerp(1stfloatVal, 2ndfloatVal, LinearInterpolateVar)
TimeOfDay isn't there, but TimeofDay1 & TimeOfDay2 is.
//+++++++++++++++++++++++++++++
//external enb parameters, do not modify
//+++++++++++++++++++++++++++++
//x = generic timer in range 0..1, period of 16777216 ms (4.6 hours), y = average fps, w = frame time elapsed (in seconds)
float4 Timer;
//x = Width, y = 1/Width, z = aspect, w = 1/aspect, aspect is Width/Height
float4 ScreenSize;
//changes in range 0..1, 0 means full quality, 1 lowest dynamic quality (0.33, 0.66 are limits for quality levels)
float AdaptiveQuality;
//x = current weather index, y = outgoing weather index, z = weather transition, w = time of the day in 24 standart hours. Weather index is value from weather ini file, for example WEATHER002 means index==2, but index==0 means that weather not captured.
float4 Weather;
//x = dawn, y = sunrise, z = day, w = sunset. Interpolators range from 0..1
float4 TimeOfDay1;
//x = dusk, y = night. Interpolators range from 0..1
float4 TimeOfDay2;
I shoulda posted the code I was looking at; it was from the enbeffect.fx from that Natural Lighting And Atmospherics preset.
Code: Select all
float2 unwarpedTxCoord = _v0.xy;
// The _c3.w value is from the game needs to be manipulated as
// below to get a value from 0 (night eye off) to 1 (night eye on).
// The Day, Night, and Interior GUI controls can be used to tune this.
float3 nightEyeDayFactor = clamp(_c3.w + nightEyeDayOffset, 0.0, 1.0) * nightEyeDayMult;
float3 nightEyeNightFactor = clamp(_c3.w + nightEyeNightOffset, 0.0, 1.0) * nightEyeNightMult;
float3 nightEyeInteriorFactor = clamp(_c3.w + nightEyeInteriorOffset, 0.0, 1.0) * nightEyeInteriorMult;
// Interpolate night/day/interior
float nightEyeT;;
nightEyeT = nightEyeDayFactor * ENightDayFactor +
nightEyeNightFactor * (1.0 - ENightDayFactor);
nightEyeT = nightEyeInteriorFactor * EInteriorFactor +
nightEyeT * (1.0 - EInteriorFactor);
float aspectRatio = ScreenSize.z;
I guess there would have to be a bunch of if statements that check each lerp() combination:
Code: Select all
float fDawnToSunrise = lerp(Dawn, Sunrise, DaySunriseLerp);
float fSunriseToDay = lerp(Sunrise, Day, SunriseDayLerp);
float fDayToSunset = lerp(Day, Sunset, DaySunsetLerp);
float fSunsetToDusk = lerp(Sunset, Dusk, SunsetDuskLerp);
float fDuskToNight = lerp(Dusk, Night, DuskNightLerp);
float fNightToSunrise = lerp(Night, Sunrise, NightSunriseLerp);
_________________
Intel i7 6700k | AMD Vega 56 8GB | 2x16GB DDR4 @ 3000mhz | Windows 7 64bit | Creative Soundblaster X-Fi Titanium Fatal1ty Pro | Asus z170 Pro Gaming
Intel i7 6700k | AMD Vega 56 8GB | 2x16GB DDR4 @ 3000mhz | Windows 7 64bit | Creative Soundblaster X-Fi Titanium Fatal1ty Pro | Asus z170 Pro Gaming
-
Offline
- *blah-blah-blah maniac*
- Posts: 17562
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: Converting SweetFX Effects To ENB
Isn't it faster to compute time factors in vertex shader? And time of the day with weather index are not yet implemented.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- *sensei*
- Posts: 316
- Joined: 12 Aug 2013, 18:55
- Location: Scotland
Re: Converting SweetFX Effects To ENB
I've no clue. I just assumed that the vertex shader is for pros only. That, and I don't even know what I'd use it for, nor where it is in enbeffect.fxENBSeries wrote:Isn't it faster to compute time factors in vertex shader?
Why would it be faster in the vertex shader, might I ask? Latency or something?
Ah well. Turns out I was wrong. Saves me the effort, anyhow.And time of the day with weather index are not yet implemented.
_________________
Intel i7 6700k | AMD Vega 56 8GB | 2x16GB DDR4 @ 3000mhz | Windows 7 64bit | Creative Soundblaster X-Fi Titanium Fatal1ty Pro | Asus z170 Pro Gaming
Intel i7 6700k | AMD Vega 56 8GB | 2x16GB DDR4 @ 3000mhz | Windows 7 64bit | Creative Soundblaster X-Fi Titanium Fatal1ty Pro | Asus z170 Pro Gaming
-
Offline
- *blah-blah-blah maniac*
- Posts: 17562
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: Converting SweetFX Effects To ENB
Vertex shader is faster, because it have only 6 vertices of two triangles for computing anything, instead of each pixel on the screen for pixel shader. For example:
Code: Select all
struct VS_OUTPUT_POST
{
float4 pos : SV_POSITION;
float2 txcoord0 : TEXCOORD0;
float4 timefactors1 : TEXCOORD1;//added output vector
float4 timefactors2 : TEXCOORD2;//added output vector
};
VS_OUTPUT_POST VS_PostProcess(VS_INPUT_POST IN)
{
VS_OUTPUT_POST OUT;
float4 pos;
pos.xyz=IN.pos.xyz;
pos.w=1.0;
OUT.pos=pos;
OUT.txcoord0.xy=IN.txcoord.xy;
//added code
float fDawnToSunrise = lerp(Dawn, Sunrise, DaySunriseLerp);
float fSunriseToDay = lerp(Sunrise, Day, SunriseDayLerp);
float fDayToSunset = lerp(Day, Sunset, DaySunsetLerp);
float fSunsetToDusk = lerp(Sunset, Dusk, SunsetDuskLerp);
float fDuskToNight = lerp(Dusk, Night, DuskNightLerp);
float fNightToSunrise = lerp(Night, Sunrise, NightSunriseLerp);
OUT.timefactors1.x=fDawnToSunrise;
OUT.timefactors1.y=fSunriseToDay;
OUT.timefactors1.z=fDayToSunset;
OUT.timefactors1.w=fSunsetToDusk;
OUT.timefactors1.x=fDuskToNight;
OUT.timefactors1.y=fNightToSunrise;
OUT.timefactors1.z=0.0;
OUT.timefactors1.w=0.0;
return OUT;
}
float4 PS_PostProcess(VS_OUTPUT_POST IN, float4 v0 : SV_Position0) : SV_Target
{
float4 res;
res=TextureColor.Sample(Sampler0, IN.txcoord0.xy);
//added code
float fDawnToSunrise=IN.timefactors1.x;
//...
res.w=1.0;
return res;
}
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7