Converting SweetFX Effects To ENB
- Author
- Message
-
Offline
- *blah-blah-blah maniac*
- Posts: 17560
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: Converting SweetFX Effects To ENB
Actually ssil is not computed separately, it's tied to ssao in same computation cycle. Don't know the code, but for sure they are same, because ssgi cannot be computed without deferred rendering at all, see old demos for that, they where made much earlier than first ssao. I choosed ssil name for effect, because it do exactly what it says, while ssdo and ssgi are not. Anyway, it's the author choice how to name anything, unless it's not foolish people. And porting such complex algorithms to external shaders is very bad idea, impossible to optimize code even twice slower than best internal processing with various stages. Making them open for editing means no more room for new ideas and optimizations. So please leave the code where it works the best.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- *blah-blah-blah maniac*
- Posts: 3137
- Joined: 27 Jan 2012, 13:42
Re: Converting SweetFX Effects To ENB
Check where the function is called, that 'x' is the input. Most likely it's something like 'color.xyz = HaarmPeterDuikerFilmicToneMapping(color.xyz);' or whatever.The first line can usually be removed, but that's the first time I've seen it have (in float3 x) instead of (float3 ColorInput), with ColorInput being equivalent to ENB's "color" float3.
In other words, that 'x' can be anything, but it's a good coding principle to name it something little more descriptive than 'x'.
-
Offline
- *sensei*
- Posts: 267
- Joined: 12 Oct 2012, 19:14
Re: Converting SweetFX Effects To ENB
i have to agree with Boris at the moment. Such performance-heavy shader as any kind of AO or even depth of field require decent understanding what are you doing. I've ported ssdo bcos there's no enb - AO, Skylightning (yet i had an idea that skylightning is same AO but for LOD texture with high sampling radius... or it could be approximated that way - i've tested SSDO with huge radius on downscaled texture - looked promising)
1st small radius AO with bounce souce scale texture
2nd large (sever times bigger then previous) radius AO with bounce on 1/4 scale texture
3rd multiply them to look like that (but it doesnt look gorgeous as skyrim ao + skylighning to my eye)
saturation and bleeding amount were forced high for demonstration purposes
another problem - game "god rays", for and light sprites. Reshade AO draws on top of them, which results in some ugly shadowing over fog-covered or "god-rayed" objects. Grass...
well hell of a tonn problems appear
1st small radius AO with bounce souce scale texture
2nd large (sever times bigger then previous) radius AO with bounce on 1/4 scale texture
3rd multiply them to look like that (but it doesnt look gorgeous as skyrim ao + skylighning to my eye)
saturation and bleeding amount were forced high for demonstration purposes
another problem - game "god rays", for and light sprites. Reshade AO draws on top of them, which results in some ugly shadowing over fog-covered or "god-rayed" objects. Grass...
well hell of a tonn problems appear
-
Offline
- *blah-blah-blah maniac*
- Posts: 565
- Joined: 05 Apr 2014, 10:29
- Location: Taiwan
Re: Converting SweetFX Effects To ENB
Marty, I'm sorry if it feels that way.
I just don't want to make ppl confuse the Screen Space Global Illumination approximation to actually computing GI in screen space, which is probably why non of the proposed SSGI approximation goes by the plain SSGI as aberration.
I just don't want to make ppl confuse the Screen Space Global Illumination approximation to actually computing GI in screen space, which is probably why non of the proposed SSGI approximation goes by the plain SSGI as aberration.
-
Offline
- *sensei*
- Posts: 316
- Joined: 12 Aug 2013, 18:55
- Location: Scotland
Re: Converting SweetFX Effects To ENB
Aye, you were right.mindflux wrote: Check where the function is called, that 'x' is the input. Most likely it's something like 'color.xyz = HaarmPeterDuikerFilmicToneMapping(color.xyz);' or whatever.
In other words, that 'x' can be anything, but it's a good coding principle to name it something little more descriptive than 'x'.
Code: Select all
color.xyz = HaarmPeterDuikerFilmicToneMapping(color.xyz);
Tried changing the code to this:
Code: Select all
if(bFiftyTiftyHPDTonemapping)
{
float3 xColor = color.xyz;
float3 HPDColor = color.xyz;
xColor = max((HPDColor)0.0f, xColor - 0.004f );
color.xyz = pow(abs((xColor * (6.2f * xColor + 0.5f )) / (xColor * (6.2f * x + 1.7f) + 0.06 )), 2.2f);
}
(720, 25): Error x3000: syntax error: unexpected float constant
The float causing the error is HPDColor in the "xColor = max" function. That line of code looks really...Not-working, because max is supposed to take two values, resulting in a single float, no? https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
And the max function is doing max((float3)float), float3 - float), which would return a float3, but max results in a float.
Ergh. This is complicated.
_________________
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: 17560
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: Converting SweetFX Effects To ENB
Code: Select all
xColor = max((HPDColor)0.0f, xColor - 0.004f );
Code: Select all
xColor = max(xColor, 0.004f);
_________________
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
Did some more digging, and found that x is a float defined in this piece of code:
Did a bit of googling, and supposedly this goes into the vertex shader? Sounds bollocks, as far as performance is concerned.
I guess it's possible that the x variable is derived from that Smootherstep code.
Not too sure how to add that in to ENB. I know that this piece of code designates the Pixel Shader:
I take it that I should make this:
Look like this:
But I don't really want to edit something as low level as the vertex shader; that sounds like something I shouldnae touch. Is it alright to edit it, or is that ill-advised?
Code: Select all
float smootherstep(float edge0, float edge1, float x)
{
x = clamp((x - edge0)/(edge1 - edge0), 0.0, 1.0);
return x*x*x*(x*(x*6 - 15) + 10);
}
I guess it's possible that the x variable is derived from that Smootherstep code.
Not too sure how to add that in to ENB. I know that this piece of code designates the Pixel Shader:
Code: Select all
float4 PS_Draw(VS_OUTPUT_POST IN, float4 v0 : SV_Position0) : SV_Target
Code: Select all
VS_OUTPUT_POST VS_Draw(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;
return OUT;
}
Code: Select all
VS_OUTPUT_POST VS_Draw(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;
return OUT;
float edge0;
float edge1;
float x;
x = clamp((x - edge0)/(edge1 - edge0), 0.0, 1.0);
float SmootherStep = x*x*x*(x*(x*6 - 15) + 10);
return SmootherStep;
return x;
}
_________________
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
- *sensei*
- Posts: 316
- Joined: 12 Aug 2013, 18:55
- Location: Scotland
Re: Converting SweetFX Effects To ENB
Ya glorious bastard, Boris. It works!ENBSeries wrote:It's error in the code, but i don't understand what is it supposed to do. May be this this code to clip very low values:Code: Select all
xColor = max((HPDColor)0.0f, xColor - 0.004f );
Output of max/min functions can be vector or scalar, each component computed separately.Code: Select all
xColor = max(xColor, 0.004f);
Before:
After:
Now I need to figure out how to add adjustable variables to it. Eeeeergh.
_________________
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
- *sensei*
- Posts: 316
- Joined: 12 Aug 2013, 18:55
- Location: Scotland
Re: Converting SweetFX Effects To ENB
Alrighty. Been fuddling about with the tonemapping, and here's what I got:
Boris was right; that xColor = max function was to deal with clipping.
The last float in the float3 HPDcolor function controls the exposure (proper term?).
And, correct me if I'm wrong, but it also seems that the "lerp" function can be used to control the intensity of the effect. It's in reverse, though. "HPTonemappingLerp = 1.000" renders the effect meaningless (looks the same as without the effect). Setting it to 0.0001 renders the tonemapping in all it's glory.
Is it acceptable to do or should you use 'practically zero', like: ?
Edit: Figured I would show how I've got the game to look. A bit washed out, but better than vanilla if ya ask me. Could do with some darker shadows. The sky is also fairly dark, but that's a vanilla issue.
The vanilla bloom is rearing it's ugly head as well. Totally need that depth bloom effect.
Code: Select all
if(bFiftyTiftyHPDTonemapping)
{
float3 xColor = color.xyz;
xColor = max(xColor, HPDTonemappingClipping);
float3 HPDcolor = pow(abs((xColor * (6.2f * xColor + 0.5f )) / (xColor * (6.2f * xColor + 1.7f) + 0.06 )), HPDTonemappingExposure);
if(bFiftyTiftyHPDTonemappingMethod)
{
color.xyz = lerp(pow(HPDcolor.xyz, 1.0/2.2), color.xyz, HPDTonemappingLerp);
}
else
{
color.xyz = lerp(HPDcolor.xyz, color.xyz, HPDTonemappingLerp);
}
}
The last float in the float3 HPDcolor function controls the exposure (proper term?).
And, correct me if I'm wrong, but it also seems that the "lerp" function can be used to control the intensity of the effect. It's in reverse, though. "HPTonemappingLerp = 1.000" renders the effect meaningless (looks the same as without the effect). Setting it to 0.0001 renders the tonemapping in all it's glory.
Is it acceptable to do
Code: Select all
Lerp(float,float,0);
Code: Select all
Lerp(float,float,0.0001);
Edit: Figured I would show how I've got the game to look. A bit washed out, but better than vanilla if ya ask me. Could do with some darker shadows. The sky is also fairly dark, but that's a vanilla issue.
The vanilla bloom is rearing it's ugly head as well. Totally need that depth bloom effect.
_________________
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
This is what I did to that Filmic ALU
OR
Or something like that.
Code: Select all
return pow( abs( ( x * ( 6.2f * x + 0.5f ) ) / ( x * ( 6.2f * x + 1.7f ) + 0.06 ) ), 2.2f );
Code: Select all
return pow( abs( ( x * ( fUpperTone * x + fGreyTone ) ) / ( x * ( fUpperTone * x + fMiddleTone ) + fLowerTone ) ), 2.2f );
Code: Select all
color.rgb = (color.rgb * (fUpperTone * color.rgb + fGreyPoint)) / (color.rgb * (fUpperTone + fMiddleTone) + fLowerTone);