|
|
@@ -1,6 +1,6 @@
|
|
|
/**
|
|
|
* Pass 0 horizontal blur, pass 1 vertical, pass 2 median
|
|
|
- * The offset of the bluring depends on the luminance of the current fragment
|
|
|
+ * The offset of the blurring depends on the luminance of the current fragment
|
|
|
*/
|
|
|
|
|
|
#pragma anki vertShaderBegins
|
|
|
@@ -26,10 +26,39 @@ void main()
|
|
|
return;*/
|
|
|
|
|
|
#if defined( _PPS_HDR_PASS_0_ ) || defined( _PPS_HDR_PASS_1_ )
|
|
|
- /*vec3 color = texture2D( fai, texCoords ).rgb
|
|
|
- float luminance = dot( vec3(0.30, 0.59, 0.11) * color );
|
|
|
-
|
|
|
- const float maxAdditionalOffset = 2.0;
|
|
|
+ vec3 color = texture2D( fai, texCoords ).rgb;
|
|
|
+ //float luminance = dot( vec3(0.30, 0.59, 0.11), color );
|
|
|
+
|
|
|
+ const float additionalOffset = 2.0;
|
|
|
+
|
|
|
+ #if defined( _PPS_HDR_PASS_0_ )
|
|
|
+ const float offset = 1.0 / IS_FAI_WIDTH * additionalOffset;
|
|
|
+ #else
|
|
|
+ const float offset = 1.0 / PASS0_HEIGHT * additionalOffset;
|
|
|
+ #endif
|
|
|
+
|
|
|
+ const int SAMPLES_NUM = 6;
|
|
|
+ const float kernel[] = float[]( -1.0 * offset, 1.0 * offset, -2.0 * offset, 2.0 * offset,
|
|
|
+ -3.0 * offset, 3.0 * offset, -4.0 * offset, 4.0 * offset,
|
|
|
+ -5.0 * offset, 5.0 * offset, -6.0 * offset, 6.0 * offset );
|
|
|
+
|
|
|
+ for( int i=0; i<SAMPLES_NUM; i++ )
|
|
|
+ {
|
|
|
+ #if defined( _PPS_HDR_PASS_0_ )
|
|
|
+ color += texture2D( fai, texCoords + vec2(kernel[i], 0.0) ).rgb;
|
|
|
+ #else // _PPS_HDR_PASS_1_
|
|
|
+ color += texture2D( fai, texCoords + vec2(0.0, kernel[i]) ).rgb;
|
|
|
+ #endif
|
|
|
+ }
|
|
|
+
|
|
|
+ const float denominator = 1.0 / (SAMPLES_NUM + 1); // Opt to make sure its const
|
|
|
+ gl_FragData[0].rgb = color * denominator;
|
|
|
+
|
|
|
+
|
|
|
+ /*vec3 color = texture2D( fai, texCoords ).rgb;
|
|
|
+ float luminance = dot( vec3(0.30, 0.59, 0.11), color );
|
|
|
+
|
|
|
+ const float maxAdditionalOffset = 1.0;
|
|
|
float additionalOffset = luminance * maxAdditionalOffset;
|
|
|
|
|
|
#if defined( _PPS_HDR_PASS_0_ )
|
|
|
@@ -38,11 +67,11 @@ void main()
|
|
|
float offset = 1.0 / PASS0_HEIGHT * additionalOffset;
|
|
|
#endif
|
|
|
|
|
|
- const int KERNEL_SIZE = 8;
|
|
|
- float kernel[KERNEL_SIZE] = float[]( -3.0 * offset, -2.0 * offset, -1.0 * offset, 1.0 * offset, 2.0 * offset,
|
|
|
+ const int SAMPLES_NUM = 8;
|
|
|
+ float kernel[SAMPLES_NUM] = float[]( -3.0 * offset, -2.0 * offset, -1.0 * offset, 1.0 * offset, 2.0 * offset,
|
|
|
3.0 * offset, -4.0 * offset, 4.0 * offset );
|
|
|
|
|
|
- for( int i=0; i<KERNEL_SIZE; i++ )
|
|
|
+ for( int i=0; i<SAMPLES_NUM; i++ )
|
|
|
{
|
|
|
#if defined( _PPS_HDR_PASS_0_ )
|
|
|
color += texture2D( fai, texCoords + vec2(kernel[i], 0.0) ).rgb;
|
|
|
@@ -51,32 +80,38 @@ void main()
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
- const float denominator = 1.0 / (KERNEL_SIZE + 1); // Opt to make sure its const
|
|
|
+ const float denominator = 1.0 / (SAMPLES_NUM + 1); // Opt to make sure its const
|
|
|
gl_FragData[0].rgb = color * denominator;*/
|
|
|
-
|
|
|
- vec3 color = texture2D( fai, texCoords ).rgb
|
|
|
- float luminance = dot( vec3(0.30, 0.59, 0.11) * color );
|
|
|
-
|
|
|
+
|
|
|
+ /* vec3 color = texture2D( fai, texCoords ).rgb;
|
|
|
+ float luminance = dot( vec3(0.30, 0.59, 0.11), color );
|
|
|
+
|
|
|
#if defined( _PPS_HDR_PASS_0_ )
|
|
|
const float OFFSET = 1.0 / IS_FAI_WIDTH;
|
|
|
#else
|
|
|
const float OFFSET = 1.0 / PASS0_HEIGHT;
|
|
|
#endif
|
|
|
|
|
|
- const float MAX_SAMPLES_NUM = 12.0;
|
|
|
+ const float MAX_SAMPLES_NUM = 50.0;
|
|
|
float samplesNum = MAX_SAMPLES_NUM * luminance;
|
|
|
float samplesNumDiv2 = samplesNum/2.0;
|
|
|
|
|
|
+ int i = 0;
|
|
|
for( float s=-samplesNumDiv2; s<=samplesNumDiv2; s += 1.0 )
|
|
|
{
|
|
|
+ ++ i;
|
|
|
#if defined( _PPS_HDR_PASS_0_ )
|
|
|
color += texture2D( fai, texCoords + vec2( s * OFFSET, 0.0 ) ).rgb;
|
|
|
#else // _PPS_HDR_PASS_1_
|
|
|
- color += texture2D( fai, texCoords + vec2( 0.0, OFFSET * offset ) ).rgb;
|
|
|
+ color += texture2D( fai, texCoords + vec2( 0.0, s * OFFSET ) ).rgb;
|
|
|
#endif
|
|
|
}
|
|
|
-
|
|
|
- gl_FragData[0].rgb = color / ( floor(samplesNum) + 1.0 );
|
|
|
+
|
|
|
+ gl_FragData[0].rgb = color / ( i + 1.0 );*/
|
|
|
+
|
|
|
+
|
|
|
+ //gl_FragData[0].rgb = vec3( dot( vec3(0.30, 0.59, 0.11), gl_FragData[0].rgb ) );
|
|
|
+
|
|
|
|
|
|
#else // _PPS_HDR_PASS_2_
|
|
|
//vec3 color = MedianFilterRGB( fai, texCoords );
|