Log in

View Full Version : Video pixel shader pack


Pages : [1] 2 3 4 5 6 7 8 9 10 11

JanWillem32
26th October 2010, 05:58
Video pixel shader pack v1.4
Direct download link: http://www.mediafire.com/?025vsef8ads6t5x

YCbCr-type sharpen complex test 2
Direct download link: http://www.mediafire.com/?7vec9jyc8y861s9


For quite some time now, I've been developing pixel shaders for usage as image filters in video players.
Pixel shaders are basically small programs for the video card to transform images.
These pixel shaders are currently known to be compatible with KMPlayer, PotPlayer and MPC-HC.
If there are any flaws in the comments or code of the pixel shaders, please tell me. I'll happily correct items.
I intend to add new functions over time, so please suggest new filter types.


To make a pixel shader work in MPC-HC:
Depending on your OS and synchronization needs, select "VMR-9", "EVR Custom Pres." or "EVR Sync" in the "View">"Options">"Playback">"Output" menu. You can hover the mouse pointer over the different renderer options to get a description. Make sure that D3D fullscreen is disabled for the time being, you can activate it later on, when you've successfully enabled a shader.
Next, to enable a shader, right-click somewhere near the middle of a playing video, select "Shaders" and click on "invert" or some other shader that is really easy to test.
You might need to switch "Toggle Pixel Shaders" before a shader will work.
You can use multiple shaders in the "Combine Shaders..." or "Combine Screen Space Shaders..." menu. Not all shaders can be used in screen space mode.
Some shaders can't be used if your video card is old. View the comment about the pixel shader revisions in my shader to see wich video cards can use that shader.
Some shaders benefit greatly from enabling the the three "10-bit color" and "full floating point processing" options in "View">"Rendering Settings">"Presentation".

To add a new shader:
Tick "View">"Shader Editor".
Type in the name of a new shader in the long top left bar of the Shader Editor, to make the compiler write out a small, but useless script. Next, set the highest version pixel shader that your graphics card supports in the drop-down menu of the top right bar, avoid the software (sw) modes.
Remove all text from the main text box.
Copy the full text of a new shader and paste the text in the main text box.
If there's an error, the compiler will output an error code inside of the bottom message box. If all went well you will get a success message, the calculation chain will be displayed and the number of instructions used will be at the end of the text.
You can also use the drop-down menu from the top left bar to select and edit an already existing shader.

Tip: because I like to switch between shaders, but don't want to disable D3D Fullscreen I made a basic text batch file (.bat) to enable a certain shader. An example for activating "invert":
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "Shaders List" /D "invert|" /F
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "ShaderListScreenSpace" /D "" /F

To disable all active shaders:
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "Shaders List" /D "" /F
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "ShaderListScreenSpace" /D "" /F

To activate multiple shaders, separate the names by "|" (pipe), but also keep the one on the end.

Note: MPC-HC can't save larger shaders to the .INI settings files. Saving settings to the registry solves that problem.
If you want to make a copy of your settings from the registry:
- run regedit
- expand the tree to "HKEY_CURRENT_USER\Software\Gabest\Media Player Classic"
- right-click the "Media Player Classic" key
- click the export option
It produces an executable .REG file that you can use as a back-up or to transfer settings to another PC.

Directory listing:chroma interpolation
color controls
COPYING.txt
development
effect
gamma conversion for linear RGB
readme - how to properly chain shaders.txt
releaselog Video pixel shader pack v1.3.txt
resizer
sharpen
sharpen complex, deband and denoise
chroma interpolation\4÷2÷0 bilinear chroma filter and color controls for SD&HD video input.txt
chroma interpolation\4÷2÷2 bilinear chroma filter and color controls for SD&HD video input.txt
chroma interpolation\multi-pass
chroma interpolation\multi-pass\~4÷2÷0 content is up-sampled by a sequence of 1, 2 and 3
chroma interpolation\multi-pass\~4÷2÷2 content is up-sampled by a sequence of 1 and 3
chroma interpolation\multi-pass\1. RGB to Y'CbCr for SD&HD video input for floating point surfaces.txt
chroma interpolation\multi-pass\1. RGB to Y'CbCr for SD&HD video input for integer surfaces.txt
chroma interpolation\multi-pass\2. special 4÷2÷0 to 4÷2÷2 intermediate Catmull-Rom spline5 chroma up-sampling.txt
chroma interpolation\multi-pass\2. special 4÷2÷0 to 4÷2÷2 intermediate cubic B-spline5 chroma up-sampling.txt
chroma interpolation\multi-pass\2. special 4÷2÷0 to 4÷2÷2 intermediate Mitchell-Netravali cubic5 chroma up-sampling.txt
chroma interpolation\multi-pass\3. special 4÷2÷2 Catmull-Rom spline5 chroma up-sampling and color controls for floating point surfaces.txt
chroma interpolation\multi-pass\3. special 4÷2÷2 Catmull-Rom spline5 chroma up-sampling and color controls for integer surfaces.txt
chroma interpolation\multi-pass\3. special 4÷2÷2 cubic B-spline5 chroma up-sampling and color controls for floating point surfaces.txt
chroma interpolation\multi-pass\3. special 4÷2÷2 cubic B-spline5 chroma up-sampling and color controls for integer surfaces.txt
chroma interpolation\multi-pass\3. special 4÷2÷2 Mitchell-Netravali cubic5 chroma up-sampling and color controls for floating point surfaces.txt
chroma interpolation\multi-pass\3. special 4÷2÷2 Mitchell-Netravali cubic5 chroma up-sampling and color controls for integer surfaces.txt
color controls\[16, 235], [16, 240], [16, 240] to full range for SD&HD video input.txt
color controls\brightness, contrast and gamma controls for RGB.txt
color controls\brightness, contrast, grayscale gamma, colorfulness gamma, hue and saturation controls for SD&HD video input.txt
color controls\full range to [16, 235], [16, 240], [16, 240] for SD&HD video output.txt
development\~interpolation methods, Catmull-Rom spline.txt
development\~interpolation methods, cubic B-spline.txt
development\~interpolation methods, Mitchell-Netravali cubic.txt
development\~standard Y'CbCr and RGB conversion codes.txt
development\3LCD panel horizontal software alignment, Catmull-Rom spline6 interpolated.txt
development\3LCD panel vertical software alignment, Catmull-Rom spline6 interpolated.txt
development\Catmull-Rom spline4×4 resizer (inefficient one-pass).txt
development\color gradients.txt
development\correct video colorspace BT.601 [SD] to BT.709 [HD] for HD video input.txt
development\correct video colorspace BT.709 [HD] to BT.601 [SD] for SD video input.txt
development\cubic B-spline4×4 resizer (inefficient one-pass).txt
development\deinterlace (blend).txt
development\detect BT.601 [SD] or BT.709 [HD].txt
development\detect even or odd coordinates, alternative.txt
development\detect even or odd coordinates.txt
development\draw grid coordinates.txt
development\flash every frame.txt
development\flash every second.txt
development\letterbox.txt
development\Mitchell-Netravali cubic4×4 resizer (inefficient one-pass).txt
development\pillarbox.txt
development\RGB to Y'CbCr for SD&HD video input for floating point surfaces.txt
development\RGB to Y'CbCr for SD&HD video input for integer surfaces.txt
development\Y'CbCr to HD&SD video RGB output for floating point surfaces.txt
development\Y'CbCr to HD&SD video RGB output for integer surfaces.txt
effect\chroma for SD&HD video input.txt
effect\color gate for RGB.txt
effect\color gate for SD&HD video input.txt
effect\color gate inverse for RGB.txt
effect\color gate inverse for SD&HD video input.txt
effect\contour color expose banding.txt
effect\contour color.txt
effect\contour monochrome.txt
effect\emboss.txt
effect\flip and rotate sampling direction for RGB.txt
effect\grayscale for RGB.txt
effect\grayscale for SD&HD video input.txt
effect\invert.txt
effect\nightvision.txt
effect\projector film drive scratches.txt
effect\projector film dust.txt
effect\projector film lamp vignette.txt
effect\projector film sepia toning for SD&HD video input.txt
effect\projector film shaking.txt
effect\semi-random colored surface noise.txt
effect\semi-random grayscale noise.txt
effect\sphere, Catmull-Rom spline4×4 interpolated.txt
effect\spotlight.txt
effect\wave, Catmull-Rom spline4×4 interpolated.txt
gamma conversion for linear RGB\gamma conversion of linear RGB to video RGB for floating point surfaces.txt
gamma conversion for linear RGB\gamma conversion of linear RGB to video RGB for integer surfaces.txt
gamma conversion for linear RGB\gamma conversion of linear RGB to wide gamut RGB for floating point surfaces.txt
gamma conversion for linear RGB\gamma conversion of linear RGB to wide gamut RGB for integer surfaces.txt
gamma conversion for linear RGB\gamma conversion of video RGB to linear RGB for floating point surfaces.txt
gamma conversion for linear RGB\gamma conversion of video RGB to linear RGB for integer surfaces.txt
resizer\Catmull-Rom spline4 height resizer.txt
resizer\Catmull-Rom spline4 width resizer.txt
resizer\Catmull-Rom spline5 height doubler.txt
resizer\Catmull-Rom spline5 width doubler.txt
resizer\Catmull-Rom spline6 height resizer.txt
resizer\Catmull-Rom spline6 width resizer.txt
resizer\cubic B-spline4 height resizer.txt
resizer\cubic B-spline4 width resizer.txt
resizer\cubic B-spline5 height doubler.txt
resizer\cubic B-spline5 width doubler.txt
resizer\cubic B-spline6 height resizer.txt
resizer\cubic B-spline6 width resizer.txt
resizer\Mitchell-Netravali cubic4 height resizer.txt
resizer\Mitchell-Netravali cubic4 width resizer.txt
resizer\Mitchell-Netravali cubic5 height doubler.txt
resizer\Mitchell-Netravali cubic5 width doubler.txt
resizer\Mitchell-Netravali cubic6 height resizer.txt
resizer\Mitchell-Netravali cubic6 width resizer.txt
resizer\Perlin Smootherstep2×2 resizer.txt
sharpen\sharpen.txt
sharpen\unsharp luma mask for SD&HD video.txt
sharpen complex, deband and denoise\~the r=6 types are the most complex, the r=1 types the least
sharpen complex, deband and denoise\r=1 blur.txt
sharpen complex, deband and denoise\r=1, sharpen complex, deband and extreme denoise.txt
sharpen complex, deband and denoise\r=1, sharpen complex, deband and heavy denoise.txt
sharpen complex, deband and denoise\r=1, sharpen complex, deband and medium denoise.txt
sharpen complex, deband and denoise\r=1, sharpen complex, deband and mild denoise.txt
sharpen complex, deband and denoise\r=1, sharpen complex, deband and minimal denoise.txt
sharpen complex, deband and denoise\r=1, sharpen edge complex, deband and extreme denoise.txt
sharpen complex, deband and denoise\r=1, sharpen edge complex, deband and heavy denoise.txt
sharpen complex, deband and denoise\r=1, sharpen edge complex, deband and medium denoise.txt
sharpen complex, deband and denoise\r=1, sharpen edge complex, deband and mild denoise.txt
sharpen complex, deband and denoise\r=1, sharpen edge complex, deband and minimal denoise.txt
sharpen complex, deband and denoise\r=2 blur.txt
sharpen complex, deband and denoise\r=2, sharpen complex, deband and extreme denoise.txt
sharpen complex, deband and denoise\r=2, sharpen complex, deband and heavy denoise.txt
sharpen complex, deband and denoise\r=2, sharpen complex, deband and medium denoise.txt
sharpen complex, deband and denoise\r=2, sharpen complex, deband and mild denoise.txt
sharpen complex, deband and denoise\r=2, sharpen complex, deband and minimal denoise.txt
sharpen complex, deband and denoise\r=3 blur.txt
sharpen complex, deband and denoise\r=3, sharpen complex, deband and extreme denoise.txt
sharpen complex, deband and denoise\r=3, sharpen complex, deband and heavy denoise.txt
sharpen complex, deband and denoise\r=3, sharpen complex, deband and medium denoise.txt
sharpen complex, deband and denoise\r=3, sharpen complex, deband and mild denoise.txt
sharpen complex, deband and denoise\r=3, sharpen complex, deband and minimal denoise.txt
sharpen complex, deband and denoise\r=4 blur.txt
sharpen complex, deband and denoise\r=4, sharpen complex, deband and extreme denoise.txt
sharpen complex, deband and denoise\r=4, sharpen complex, deband and heavy denoise.txt
sharpen complex, deband and denoise\r=4, sharpen complex, deband and medium denoise.txt
sharpen complex, deband and denoise\r=4, sharpen complex, deband and mild denoise.txt
sharpen complex, deband and denoise\r=4, sharpen complex, deband and minimal denoise.txt
sharpen complex, deband and denoise\r=5 blur.txt
sharpen complex, deband and denoise\r=5, sharpen complex, deband and extreme denoise.txt
sharpen complex, deband and denoise\r=5, sharpen complex, deband and heavy denoise.txt
sharpen complex, deband and denoise\r=5, sharpen complex, deband and medium denoise.txt
sharpen complex, deband and denoise\r=5, sharpen complex, deband and mild denoise.txt
sharpen complex, deband and denoise\r=5, sharpen complex, deband and minimal denoise.txt
sharpen complex, deband and denoise\r=6 blur.txt
sharpen complex, deband and denoise\r=6, sharpen complex, deband and extreme denoise.txt
sharpen complex, deband and denoise\r=6, sharpen complex, deband and heavy denoise.txt
sharpen complex, deband and denoise\r=6, sharpen complex, deband and medium denoise.txt
sharpen complex, deband and denoise\r=6, sharpen complex, deband and mild denoise.txt
sharpen complex, deband and denoise\r=6, sharpen complex, deband and minimal denoise.txt

toniash
2nd November 2010, 17:19
I'm interested in trying new shaders, could you send me them?
Thanks, toni

burfadel
2nd November 2010, 19:19
I'd be interested in having a look at them too. The upsampling shaders demonstrated in the attached images look interesting, I'd like to see how they'd look on a more detailed scene. I think when combined with a nice sharpening effect like 'sharpen complex 2' they'd look especially good...

Here's a question though...
How is the work distributed on the shaders? Does it use few shaders but intensely, or divide up the image into areas and distribute the work to the shaders that way (and hence use them lightly)?

tetsuo55
3rd November 2010, 11:57
Hello and thanks for sharing this.

I will try to answer your questions:

1. All the code and comments should be in english, since most of our stuff is hosted in the US their english probably works best.

2. The Shaders should use GPU as efficiently as possible, but those that are very heavy might be marked as such.
Don't compromise quality over speed unless you have to.

leeperry
3rd November 2010, 15:26
the PS scripts also work in KMPlayer and PotPlayer btw ;)

english seems the best choice indeed.

JanWillem32
4th November 2010, 01:05
Thank you for your input, I've been busy improving my shaders (including procamp). It took a lot of effort to get the two "4÷2÷0 Chroma Up-sampling&16-235 To 0-255" shaders to work with the 64 instructions limit for ps_2_0.

@toniash; Very well, I attached almost everything I currently have.
@burfadel; Pixel shaders work by taking one pixel of a new, empty frame and construct it pixel-by-pixel by sampling and processing pixels from an original frame. An output frame size of 1920×1080 pixels will execute the same pixel shader 1920×1080 = 2,073,600 times. It is even more times if your pixel shader samples multiple pixels per execution, when stacked with another pixel shader, see my little test at the end of this post. Secondly, I added chroma sharpen to the pixel shader and I made a hybrid that combines chroma 4:2:0 up-sampling, chroma sharpen, sharpen complex and deband. The attached screenshot is not the best representation of what the hybrid shader usually does, but indeed, sharpening does work. I will search for a better example.
@tetsuo55; I commented everything in US English and increased efficiency quite a bit for a few shaders.
@leeperry; Nice to know that other programs can use this type of shaders too, I will see to it that the comments will not be program-specific.


These shaders should really be deleted.

0-255 -> 16-235; The chroma values are not compressed properly and it can not be used with input bitdepths higher than 8-bit.
16-235 -> 0-255; [SD] Applying expansion only to BT.601 [SD] material is wrong, as BT.709 [HD] is limited to "16-235" as well, the only full range YUV colorspaces are: JPEG (most variants), Digital Cinema (JPEG2000 variant), FRAPS video and many studio formats.
16-235 -> 0-255 [SD][HD]; The chroma values are not expanded properly and it can not be used with input bitdepths higher than 8-bit.
BT.601 -> BT.709; The colorspaces are calculated with truncated decimal fractions, the SD/HD detection rule is wrong for video with a resolution of 1280×533, aspect ratio 1/2.40.
grayscale; Uses a BT.601 [SD] colorspace, so the name is wrong.
procamp; Uses a BT.601 [SD] colorspace with truncated decimal fractions.
YV12 Chroma Upsampling; Uses a BT.601 [SD] colorspace with truncated decimal fractions, even worse, the method is wrong, see images for reference.

Note: ">" can not be used for filenames in NTFS, FAT32 or exFAT filesystems. When saving a shader in a text file, it is often preferred to name the file the same way as the title of the shader, so avoid using the "forbidden" characters in the titles for shaders.


I measured the GPU usage for video playback with two of my shaders and compared it to other modes.

Video card: ATi Radeon HD4890 at 600 MHz GPU clock and 975 MHz memory clock (forced clockspeeds in ATi Tray Tools)
Display: Compaq P1220 CRT, D-Sub analog, 2048×1536, 80Hz
Software: Windows 7 Home Premium x64, ATi Catalyst 10.5a (the last version capable of 10-bit RGB output from DXVA, the driver does not up-sample down-sampled chroma in 10-bit RGB mode), ATi Tray Tools v1.6.9.1486 (for measuring), MPC-HC x64 v1.4.2667.0
Rendering: Aero enabled, internal H264/AVC DXVA decoder, EVR-CP, no advanced features of ATi Catalyst (they do not work in 10-bit RGB mode anyway, exept for Denoise)
EVR-CP rendering options: Output Range 0-255, 10-bit RGB Output, Force 10-bit RGB Input, Full Floating Point Processsing, Enable Frame Time Correction, color Management Enabled (with a recently made system-wide color profile), VSync disabled, Flush GPU after Present.
Video source: Blu-ray of the movie "Avatar" (without subtitles), H.264/AVC/MPEG 4 part 10 codec, 4:2:0 chroma subsampling, 8-bit per component YUV. (Quite a shame, the main feature file almost fills up the entire 50 GB of the disk, but it does not use 4:4:4 (no subsampling of chroma) with at least 10-bit per component YUV, like the Digital Cinema version.)

Measurement of peak GPU usage after 5 seconds of video (when the frame rate remains stable)
87.65%; render with "4÷2÷0 Chroma Up-sampling BT.709 [HD]" and "Sharpen Complex v3 + Deband"
54.08%; render with "Sharpen Complex v3 + Deband"
10.04%; render with "4÷2÷0 Chroma Up-sampling BT.709 [HD]"
08.71%; render without shaders
02.20%; MPC-HC not loaded, system almost idle
86.03%; render with "4÷2÷0 Chroma Up-sampling BT.709 [HD]" and "Sharpen Complex v3 + Deband" in D3D Fullscreen Mode
67.86%; render with an experimental hybrid shader of "4÷2÷0 Chroma Up-sampling BT.709 [HD]" and "Sharpen Complex v3 + Deband" in D3D Fullscreen Mode

Processing pixel shaders in ps_3_sw or ps_2_sw (CPU software mode) failed.
I could not detect any changes in peak or average GPU usage between rendering in ps_2_0 and in ps_3_0 modes for the "4÷2÷0 Chroma Up-sampling BT.709 [HD]" shader.
When stacking any pixel before "Sharpen Complex v3 + Deband", that pixel shader is used on all 177 input pixels, for every pixel the "Sharpen Complex v3 + Deband" shader is used on. This method is rather inefficient when combining heavy shaders. Does anyone know a solution to this problem? (Like using a buffer frame in-between shaders or something, if possible.)
The experimental hybrid shader does not output the same thing as the two shaders combined. It only up-samples the current pixel it is working on, not the surrounding pixels, unfortunately.

clsid
4th November 2010, 01:22
16-235 -> 0-255; [SD] Applying expansion only to BT.601 [SD] material is wrong, as BT.709 [HD] is limited to "16-235" as well, the only full range YUV colorspaces are: JPEG (most variants), Digital Cinema (JPEG2000 variant), FRAPS video and many studio formats.This shader is intended for situations were the decoder/renderer/driver doesn't do the correct expansion. They are not for general use with a properly functioning playback chain. For example, some ATI drivers mess up, but only at SD resolutions. Hence, the "[SD]" part, which simply means the shader only operates on videos with SD resolution.

leeperry
4th November 2010, 08:59
YV12 Chroma Upsampling; Uses a BT.601 [SD] colorspace with truncated decimal fractions, even worse, the method is wrong, see images for reference.

OK, interesting! That might give some more room for comparisons against madVR :)

JanWillem32
4th November 2010, 14:20
@clsid How old are the drivers that only mess up luma/chroma expansion of SD content (without messing up de-blocking, de-ringing, chroma up-sampling, colorspace, etcetera)? I Know that 10.4, 10.5 and 10.5a totally mess up SD playback, but I never noticed wrong output levels on SD content even with older drivers. Enabling "16-235 To 0-255 BT.601 [SD]" will provide proper expansion by the way, but I did not include an auto-detect function for SD/HD. If there are more problems than only luma/chroma expansion, I can make a hybrid of a few shaders to correct all of those problems.
@leeperry I certainly hope so.

clsid
4th November 2010, 20:43
The problem only occurs with some of the video renderers. Most notably with VMR-9 (renderless).

CiNcH
6th November 2010, 12:55
Can some mod approve those downloads please?

Virtual_ManPL
6th November 2010, 13:10
Or simply upload it to MediaFire (http://www.mediafire.com/)

burfadel
6th November 2010, 19:21
Particularly 'Sharpen Complex v3 + Deband' and 4÷2÷2 Chroma Up-sampling BT.601 [SD] :)

What difference would using the shader editor and setting them as PS 3.0 instead of PS 2.0? If they fairly intensive and require a non-ancient GPU, then PS 3.0 should be fine... Even PS 3.0 is ancient by todays standards.

JanWillem32
6th November 2010, 22:19
@clsid I could not find a more recent entry than 2008, when a few driver versions had the "UseBT601CSC" registry entry on "0", instead of "1". The correct solution is to install a recent driver (even the legacy hardware driver is at 10.2), or switch "UseBT601CSC" on (with DXVA checker or regedit). Unless a new driver comes out with this problem, it would be best to get rid of the "16-235 -> 0-255 [SD]" shader. It is inaccurate too by the way: The chroma values are not expanded properly, it can not be used with input bitdepths higher than 8-bit and the SD/HD detection rule is wrong for video with a resolution of 1280×533, aspect ratio 1/2.40.

@burfadel compiler message at the end of compiling: 4÷2÷2 Chroma Up-sampling&16-235 To 0-255 BT.601 [SD]:
ps_2_0: error X5608: Compiled shader code uses too many arithmetic instruction slots (86). Max. allowed by the target (ps_2_0) is 64.
ps_2_a: // approximately 62 instruction slots used (6 texture, 56 arithmetic)
ps_3_0: // approximately 55 instruction slots used (6 texture, 49 arithmetic)

For some reason PS 2.0 is really inefficient when dealing with this code (it's about the same with all other shaders, too).
Sharpen Complex v3 + Deband is very demanding (the hybrid shader is even more complex):
ps_2_0: error X5426: Shader uses texture addressing operations in a dependency chain that is too complex for the target shader model (ps_2_0) to handle. & error X4505: maximum temp register index exceeded
ps_2_a: error X4505: maximum temp register index exceeded
ps_3_0: // approximately 917 instruction slots used (177 texture, 740 arithmetic)

I'm not even going to try to fit that into a PS 2.0a version. I did make the "4÷2÷0 Chroma Up-sampling&16-235 To 0-255" shaders simple enough to be run by PS 2.0 (for ancient hardware).
To answer your question: shader code is handled more more efficiently by newer versions because the compiler can use more kinds of instructions to feed to the processor.
Secondly, PS 2.0 has an arithmetic instruction limit of only 64. As you can see with my first example, a simple shader like this only needs 49, if compiled with reasonably modern processing code. I can look up what a DX11 compiler does with the code, by the way. It will probably use even less instructions. I wonder if picture scaling with PS 3.0 could be implemented besides the PS 2.0 versions, it would probably be more efficient.

I added a newer version of Sharpen Complex v3 + Deband that doesn't produce as much staircase artifacts as my first test version. It looks okay on 1080p scenes even with extremely sharp contrasts, but artifacts are still too visible on lower input video resolutions. The power factor to balance the sharpening on extremely sharp contrasts is not perfect yet, maybe someone can think of something to balance it a bit better.
Running the shader in screen space isn't possible for my setup, my GPU can't execute this shader at 80 Hz (and it would be inefficient to do that with 24 fps input video). I would like to know if it's possible to execute a shader on textures that are scaled to the display resolution, but are not locked to the screen refresh rate.

@CiNcH This topic really needs to draw a bit more attention, indeed. It has been days since I posted those shaders and a picture. What kind of vulgar ASCII art do members of this forum put inside textfiles to demand that a mod has to approve attached textfiles of 13 KB or less?

nurbs
6th November 2010, 22:36
What does Sharpen Complex actually do? I mean it obviously sharpens, but what about the complex part of the name? Since your version is v3 how is that different from what comes with MPC-HC now?

CiNcH
6th November 2010, 22:39
What does "UseBT601CSC" actually do? Does it transform SD to BT.709? Or HD to BT.601?

JanWillem32
7th November 2010, 04:54
@nurbs I wanted a shader that can deband. The approach was easy: analyze if the surrounding areas are nearly the same and then blur the pixel with the surrounding areas. Because that analysis also tells you if the pixel is on a contour or in a detailed area, it is very easy to implement sharpen too. I re-used a lot of code from sharpen complex v2 for the sharpen part. They were easy to combine, and the sharpen part can be disabled by setting the amount of sharpen coefficients to 0. That doesn't lower the processing requirements a lot however.
The complex part is that it first analyses the surrounding pixels, and then uses a mechanism that increases (or decreases) the contrast of the pixel that the shader is working on. My shader uses 6 different methods to either blur or sharpen, depending on the contrast with the surrounding zones.
I know that this shader is a bit "future orientated", but with the very fast increase in GPU power over the years, I don't mind making a heavy shader.
The shader is still beta, it could use some more blur and sharpen methods and it really needs some fine-tuning of the sharpening adaptation to the relative contrast. At the moment it is okay for 1080p, but only so-so for 720p, unless I upscale it to the display resolution first.

@CiNcH "UseBT601CSC" tells the GPU driver to convert limited range YUV <16,235> for Y (luma), <16,240> for U and V (chroma), to full-range YUV when enabled (<0,255> in 8-bit or normalized <0,256> for higher bitdepths), or to do no conversion when disabled. When luma is not expanded, a converted full-range RGB picture will have a dark gray tint instead of black, and a light gray tint instead of white. When Chroma is not expanded, colors can not become saturated, and the whole picture will be dull.

nurbs
7th November 2010, 08:31
Thank you for the explanation.

tetsuo55
7th November 2010, 19:31
hey JanWillem32 could you explain why we need all the different, nearly the same name shaders?

don't we all just want to:

Chroma upscale, luma upscale, expand(or compress), deband, denoise and sharpen?

burfadel
7th November 2010, 22:11
I add noise through ffdshow, not remove it! lol. Not on default settings though, no chroma and reduce the luma noise down, deprending on resolution. Since the noise is fine and non-chroma, it actually seems to improve picture quality when you're not too close to the screen :)

I'm guessing you mean encoded noise though, which is different as noise doesn't encode (and hence decode) too well and there's a lot more of it!

JanWillem32
7th November 2010, 22:38
@tetsuo55 I can give all shaders that are dependant on input of BT.709 [HD] or BT.601 [SD] YUV primary's an auto-detect function to combine the two. But that will add to the complexity, so many shaders will at least become PS 2.0a versions. If you switch them manually for SD or HD input, most of them will be PS 2.0 minimum. Secondly, some shaders are dependant on the display output calibration, if we assume a full-range display output with sRGB or BT.709 [HD] colors (their primary's are the same), some BT.601 [SD] shaders can be removed. Lastly, the combined shaders (exept for the hybrid) are for older machines with problems with both chroma up-sampling and luma/chroma expansion. The combination of both is quite common, and the shader functions are easy to combine with very little processing. It could be confusing for some people how to use them, however.
What do others think about reducing the number of shaders by: combining video input-type HD and SD versions, removing display output-type SD versions and removing chroma up-sampling & luma/chroma expansion combination-type shaders?

@burfadel Most GPU DXVA driver parts support denoise on output, else there's a denoise shader (which blurs a lot by the way). It's required to do sharpening and debanding effectively on VERY noisy pictures, else everything would be horribly sharpened.
The original reason I made a debanding shader is because I absolutely hate the almost-8-bit dithering and lossy compression artifacts that are present in all my videos. Having a noisy output is your personal preference, I personally hate it if they use a cheap tape to master a blu-ray release, instead of a digital master, or even a cleaned up version of an old tape. I always get the feeling that I'm looking at a rotten old TV, instead of what my projector is capable of (or even my CRT monitor, for that matter).
Sharpen Complex v3 + Deband is rendered in pure 1:1:1 RGB, by the way, so it's not very dependent on chroma and luma. I have tried to use YUV for this shader, but the outcome was ugly.

burfadel
8th November 2010, 00:25
I don't mean the levels of noise they put on some blu-rays, just a tiny amount of clean fine luma noise, set in ffdshow as 'mplayer noise', pattern, average, no chroma, and a little luma noise (say 8). The default settings give the completely wrong effect. The idea is so the noise isn't visible at the viewing distance (or barely perceptible), which seems to bring out some details better and seems to hide some small artifacts. If set incorrectly it definitely has the opposite effect!

JanWillem32
8th November 2010, 01:30
I really have to ask: is your display even capable of at least 10 bit output with at least the complete sRGB color range? The method you describe is quite close to the standard temporal dithering method, a common method to try to generate in-between colors by switching the somewhat slow LCD crystals constantly in between two shades.

CiNcH
8th November 2010, 09:40
Hi Jan,

Got two more questions. Hope you can answer them for me.

I am experiencing the bad chroma upsampling with my ATi/AMD. Is it really due to ATi? I am only seeing it with the Custom Presenter, but not with standard EVR for example. Is standard EVR performing a better chroma upsampling within shaders already? Or is the bad chroma upsampling solely a problem of the Custom Presenter implementation? It does not seem to affect nVIDIA though. *confused*

So if the source is 16..235 and the display is 16..235, why do we have to intermediary convert it to 0..255? Can renderers only work in full RGB?

tetsuo55
8th November 2010, 11:15
hi JanWillem32, anything that can be automated is a good thing imho, even if it bumps up the required shader version a bit.

But we should still support different output colorspaces etc..

@CiNcH, that is highly interesting.. maybe its a bug in mpc-hc then?

CiNcH
8th November 2010, 13:17
@CiNcH, that is highly interesting.. maybe its a bug in mpc-hc then?
I just did another test to verify my above statement as it was based on tests I conducted some time ago.

I now used MPC-HC 1.4.2703 and 'CyberLink Video/SP Decoder' (to take advantage of DXVA for MPEG-2). GPU is an ATi Radeon HD 3650 with up-to-date driver.

Standard EVR: proper chroma upsampling
http://data6.blog.de/media/127/5113127_584572f62c_l.jpeg

Custom Presenter for EVR: bad chroma upsampling
http://data6.blog.de/media/126/5113126_bf11674fec_l.jpeg

JanWillem32
8th November 2010, 19:03
@CiNcH I have the same problem, and it is a very common problem, too. The ATi drivers currently can output 10-bit color, but can't up-sample chroma while doing so. It's not a great loss, however. The driver only does a blurry bi-cubic up-sampling at best (you can test it using my chroma shaders). My up-sampling shader uses a different method based on 2× magnification, the output is less blurry and on top of that, it can sharpen the chroma with a basic unsharp mask filter (more advanced methods did not increase sharpening quality much).
YUV <16,235> to any RGB conversion is a bit lossy, so if the RGB range is only <16,235>, floating points get truncated more than with a range of <0,255>. When you go beyond the 8-bit problem and process in a good floating point format, this is less of a problem. Secondly there is a difference beween RGB with a range of <16,235> with expanded chroma and without, to make things even more difficult. Third, limited range YUV was made to handle old analog TV. Limited-range RGB is an odd format, even analog D-sub connections don't use it. Limited range YUV is a really old format, and in my opinion they should never accepted any compatibility between SD and HD colorspaces. HD only has a colorspace equal to sRGB. The odd thing is, The colorspace of the Digital Cinema format (that was made before BT.709 [HD]) covers the complete CIE 1931 color space, and uses a variant of full range YUV, that is in my opinion the proper way of handling things. The problem with Digital Cinema is that it's completely incompatible with BT.601 [SD] without some serious conversion work, that's why the format was rejected for HD, unfortunately.

@tetsuo55 I will write a complete new set of shaders, then.

For those that are wondering what the chroma up-sampling error is, the wikipedia article about it is quite good. http://en.wikipedia.org/wiki/Chroma_subsampling

clsid
9th November 2010, 17:39
Is there much performance difference when a shader supports multiple bitdepths compared to just one (8bits)? Since some people with slightly older cards already often have performance issues with some of the current shaders, it might be worthwhile to create separate shaders for the two bitdepths that MPC currently supports (8 and 10). Since you mentioned accuracy a few times, it might also be useful to have both accurate and faster less accurate versions of some of the shaders. Just an idea, since I don't know what the performance difference might be.

JanWillem32
10th November 2010, 03:56
The difference between full range (floating point <0,1>) and 8-bit (integers only <0,255>) is at its top white value a bit less than .4 %. It depends on how the display chain is configured, but it is hard to guess how a system compensates for the white levels that 8-bit color can't use, while the processing format allows full range. So, to be at least accurate for the floating point range, I made the shaders without compensation. I think that making separate shaders for various bit-depths can also be quite confusing for people, especially since there is a difference between how to handle 10-bit input, processing and output.
When it comes to accuracy, that comes for free. The compiler will convert any incoming floating-point number to a 64-bit floating point number, the native format. If you feed it a decimal number truncated to three digits after the point, it will not output the same thing as when you give the exact calculation to the compiler. As an example: .333 is not exactly the same as 1/3. Whichever number of the two you use does affect quality, but doesn't increase complexity in the execution stage (after the compiling is done). On the other hand, the "4÷2÷0 chroma up-sampling for SD&HD video input" shaders require PS 2.0a, while the versions without detection require PS 2.0. That's why I included those four versions for older machines that can't do PS 2.0a.
The automatic detection was very easy, because the compiler is very forgiving on having the same code with different numbers entered for SD and HD. All YUV shaders can't be used in screen space anymore, because the detection needs to sample the input resolution.

tetsuo55
10th November 2010, 09:59
According to wikipedia (http://en.wikipedia.org/wiki/Pixel_shader) PS2.0a is support is:

Nvidia: All cards since 2003
ATI: All cards since 2004
Intel: All cards since 2006 (i highly doubt it actually works correctly though)

Most people won't have an intel card in their HTPC, but the intel cards are very popular so there is a risk in supporting only PS2.0a.

I talked to someone in the past who said pixel shaders could be written to be shader version agnostic. The code in mpc-hc would be changed to support these kinds of shaders and automatically select the highest PS version available. At the cost of losing support for 1.4 and lower

CiNcH
10th November 2010, 12:39
I just created a ticket with the MPC-HC support system concerning the bad chroma upsampling with custom presenters + ATi.

clsid
10th November 2010, 14:55
@JanWillem32
Good to hear that performance is not an issue. That certainly makes life easier.

Would it be possible to do the following?
- Detect the highest shader model supported by the card.
- Use the detected version for all shaders. I assume they are backwards compatible, and that higher versions are at least as fast as lower ones.
- The version currently set for each shader serves as a minimum requirement for that shader. When the detected max version is lower than the minimum of a shader, that shader should be disabled (grayed out, or hidden) in the menu.

JanWillem32
10th November 2010, 16:32
@tetsuo55 Making the shaders shader version agnostic is not an option for the heavier shaders, because of the 64 instructions limit. That limit is very low, and even if some instructions are skipped, such as with the selector for SD/HD, they still count.
By the way, the YV12 upsampler that is currently present uses 9 texture, 56 arithmetic instructions on PS 2.0, 9 texture, 45 arithmetic instructions on PS 3.0.
"4÷2÷0 chroma up-sampling for SD video input on old PS 2.0 hardware" uses 4 texture, 63 arithmetic instructions on PS 2.0 with sharpening, 4 texture, 51 arithmetic instructions on PS 2.0 without sharpening (they are mostly simple calculations, the YUV-RGB conversion is much more complex), 4 texture, 33 arithmetic instructions on PS 3.0 with sharpening and 4 texture, 24 arithmetic instructions on PS 3.0 without sharpening.
This doesn't tell exactly how well a shader performs, but I did take the effort to make it scale well on different PS versions.

@clsid That sounds very good, indeed.

toniash
10th November 2010, 17:12
do you know this shader? ->

// SuperResolution720p - Beta3
// Emmanuel - 31/03/2010
// Filtre de super résolution adapté aux diffuseurs 720p
// Ce filtre est conçu comme un filtre de post-traitement d'un
// filtre de sharpen tel que le filtre "unsharp mask" de ffdshow

#define FinesseRendu 0 // 0: très fin, 1: fin, 2: moyen, 3: grossier

#define SeuilBruit 0.15 // pour éviter la remontée du bruit de fond et
// l'accentuation de petits détails dans les textures
// Entre 0.1 et 0.2

#define diff 0.49 // influe sur le rendu "3D-Like"
// Après unsharp mask à 19 dans ffdshow:
// 0.49 => 3D-Like + présent
// 0.50 => 3D-Like présent
// 0.51 => 3D-Like - présent

sampler s0 : register(s0);
float4 p1 : register(c1);

#define dx (p1[0])
#define dy (p1[1])

float4 main( float2 tex : TEXCOORD0 ) : COLOR
{
// pixels original, flouté, corrigé
float4 ori = tex2D(s0, tex);
float4 flou;
float4 cori;
float seuil = 0.82 + FinesseRendu/100;

// récupération de la matrice de 9 points
// [ 1, 2 , 3 ]
// [ 4,ori, 5 ]
// [ 6, 7 , 8 ]

float4 c1 = tex2D(s0, tex + float2(-dx,-dy));
float4 c2 = tex2D(s0, tex + float2(0,-dy));
float4 c3 = tex2D(s0, tex + float2(dx,-dy));
float4 c4 = tex2D(s0, tex + float2(-dx,0));
float4 c5 = tex2D(s0, tex + float2(dx,0));
float4 c6 = tex2D(s0, tex + float2(-dx,dy));
float4 c7 = tex2D(s0, tex + float2(0,dy));
float4 c8 = tex2D(s0, tex + float2(dx,dy));

// détection des contours
// par filtre de sobel
float delta1,delta2,value;

// Gradient horizontal
// [ -1, 0 ,1 ]
// [ -2, 0, 2 ]
// [ -1, 0 ,1 ]
delta1 = (c3 + 2*c5 + c8)-(c1 + 2*c4 + c6);

// Gradient vertical
// [ -1,- 2,-1 ]
// [ 0, 0, 0 ]
// [ 1, 2, 1 ]
delta2 = (c6 + 2*c7 + c8)-(c1 + 2*c2 + c3);

// calcul
value = sqrt(mul(delta1,delta1) + mul(delta2,delta2)) ;

// Gamma adaptatif à proximité d'une transition
cori = ori;
if ((value >= seuil-diff*1.15)&&(value <= seuil)) cori = pow(ori,1./(1-value/10));

// Masque flou pour renforcer les textures

// calcul image floue (filtre gaussien)
// pour normaliser les valeurs, il faut diviser par la somme des coef
// 1/(1+2+1+2+4+2+1+2+1) = 1/ 16 = .0625

flou = (c1+c3+c6+c8 + 2*(c2+c4+c5+c7)+ 4*cori)*0.0625;

// Accentuation des textures si on est loin d'un bord
if ((value > SeuilBruit) && (value < seuil-diff)) cori = 2*cori - flou;

return cori;
}

Virtual_ManPL
10th November 2010, 20:23
It's just me or MPC-HC didn't remember saved shaders like for example "test 3, sharpen complex v3 + deband.txt" ?
And nice will be creating standalone shaders instead of fusioned ones

JanWillem32
10th November 2010, 21:24
@toniash It looks like a variant on virtualdub's warp resize, maybe a bit heavier. Personally, I would have decomposed the float4 values completely, to avoid the "calcul" part. There are easier ways to determine the contrast between the current pixel and the surrounding ones. For "detection of primary contours" in "test 3, sharpen complex v3 + deband", 16 absolute contrast values and 7 derived minimum/maximum contrast values are determined without much processing. Else, it's a nice resizer, bit it will be very sensitive to over-sharpening on grainy images, because the sampling area is only 9 pixels.
@Virtual_ManPL MPC-HC can't save larger shaders to .INI files, I believe someone already made a bug report about it. Does saving to the registry solve your problem?
For the standalone shaders, I agree with you, If you don't watch either SD or HD, or if you don't mind switching them manually, you don't need a combined SD/HD shader. It saves two instructions per pixel when processing. For the less advanced user, the automatic switching functions are a lot easier.

Virtual_ManPL
10th November 2010, 21:53
It saves two instructions per pixel when processing.
Awww... nice :)
So I will rechange my shaders then

JanWillem32
11th November 2010, 04:38
I just analyzed the Windows Color System, my choice to not correct for the limitations of the <0,255> or <0,1023> range versus the floating-point range was right. The Windows color system reserves 1/256 and 1/1024 above the highest integer by default with 8-bit and 10-bit color systems respectively, unless the LUT in the monitor color profile tells it to do otherwise. Logo CalibrationTester tells me the same thing, too. Just to be sure, does MPC-HC input the unmodified floating-point output from the shaders to the LUT in the monitor color profile?
The sharpening settings for test 3, sharpen complex v3 + deband are high, .375&.1875 or even lower towards .25&.125, are less over-sharpening for images with at least decent quality. It's too bad that almost all improvements I tried to implement in the test 4 version makes it too complex for PS 3.0, it will only compile for DX10/11. It has a better fine gradient and border detection filter that makes it more accurate without sampling more pixels, so I will store it for the future. Right now I'm trying to find a good set of values and possibly a method of balancing for the optimal blur&sharpen coefficients in a "final" version of "sharpen complex v3 + deband" based on test 3. Does anyone have a good idea? :confused:

@Virtual_ManPL As long as you are happy with me keeping you busy. :)

Mercury_22
11th November 2010, 11:58
@JanWillem32

The fact that since Revision 1826 - Directory Listing
Modified Sun May 2 01:20:06 2010 UTC (4 months, 1 week ago) by kinddragon

DX7 presenters splitter to several files
Improved Reset() handling (ticket #12) 10-bit RGB mode (Display A2R10G10B10) it's NOT working anymore isn't affecting your shaders ?

JanWillem32
12th November 2010, 00:47
That really doesn't matter as long as the floating point range <0,1> is correctly mapped to 8-bit integer <0,256>, with the top value removed. In other words, the floating point 255/265 should be exactly mapped to the 8-bit integer 255. Of course, the LUT in the color profile may change that to a non-default output value. My projector is reporting 10-bit input by the way, but that could very well be just the driver converting 8-bit values with the color profile and outputting 10-bit. Even with a complete blur shader on a minimal transition gradient sky, I can easily see banding. I don't have ultra-sensitive eyes, so if that's 10-bit color, it isn't very good. It's the same problem on the CRT.
After closing a video with Aero and D3D fullscreen enabled, my desktop often returns with 1/4 contrast, that is also a good indication that 10-bit color is working at least a bit. I made the hotkey combination Alt+Q for the "reload display driver" command, to solve the problem of a dark or black screen (with Aero disabled) after closing videos.

TheElix
13th November 2010, 14:06
Hey, Jan! I can't get your shader to work here. Could you write a short instruction for newbies like myself on how to enable your shaders in MPC-HC?

JanWillem32
14th November 2010, 19:57
To make a pixel shader work in MPC-HC:
Depending on your OS and synchronization needs, select "VMR-9", "EVR Custom Pres." or "EVR Sync" in the "View">"Options">"Playback">"Output" menu. You can hover the mouse pointer over the different renderer options to get a discription. Make sure that D3D fullscreen is disabled for the time being, you can activate it later on, when you've successfully enabled a shader.
Next, to enable a shader, right-click somewhere near the middle of a playing video, select "Shaders" and click on "invert" or some other shader that is really easy to test.
You might need to switch "Toggle Pixel Shaders" before a shader will work.
You can use multiple shaders in the "Combine Shaders..." or "Combine Screen Space Shaders..." menu. Not all shaders can be used in screen space mode.
Some shaders can't be used if your video card is old. View the comment about the pixel shader revisions in my shader to see wich video cards can use that shader.
Some shaders benefit greatly from enabling the the three "10-bit color" and "full floating point processing" options in "View">"Rendering Settings">"Presentation".

To add a new shader:
Tick "View">"Shader Editor".
Type in the name of a new shader in the long top left bar of the Shader Editor, to make the compiler write out a small, but useless script. Next, set the highest version pixel shader that your graphics card supports in the drop-down menu of the top right bar, avoid the software (sw) modes.
Remove all text from the main text box.
Copy the full text of a new shader and paste the text in the main text box.
If there's an error, the compiler will output an error code inside of the bottom message box. If all went well you will get a succes message, the calculation chain will be displayed and the number of instructions used will be at the end of the text.
You can alse use the drop-down menu trom the top left bar to select and edit an already existing shader.

Tip: because I like to switch between shaders, but don't want to disable D3D Fullscreen I made a basic text batch file (.bat) to enable a certain shader. An example for activating "invert":
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "Shaders List" /D "invert|" /F
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "ShaderListScreenSpace" /D "" /F

To disable all active shaders:
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "Shaders List" /D "" /F
REG ADD "HKCU\Software\Gabest\Media Player Classic\Settings" /V "ShaderListScreenSpace" /D "" /F

To activate multiple shaders, separate the names by "|" (pipe), but also keep the one on the end.

TheElix
15th November 2010, 11:51
Thanks for your thorough walkthrough. I think it deserves being duplicated in the first post.

I experience some problems though. I meet all prerequisites and do as you suggested: open shader editing, write-in a name for a shader, choose ps_3_0 (the program however changes it to ps_2_0 automatically) copy the text from your shader .txt file and paste it into the empty area. And press enter to process the shader. It gives me the message "D3DXCompileShader succeeded" and it gives me a 19-line code:
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);
#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])
#define PI acos(-1)
float4 main(float2 tex : TEXCOORD0) : COLOR
{
float4 c0 = tex2D(s0, tex);
return c0;
}
But I don't see any visible changes to the picture with the resulting shader...

Also, might I note that your shader pack which you posted some time ago here in .7z format cannot be extracted because you use unacceptable symbols in my OS (like ":"). Can you post the latest versions of your shaders again? Looking forward to seeing the effect of your shaders! :)

burfadel
15th November 2010, 12:42
yeah that happens to me too, just set it to PS 3.0, try readding the code, and then clicking back on the new name and pressing enter. That seemed to work for me. I had to recheck it again after closing and reloading, but seems fine now.

TheElix
15th November 2010, 14:24
I tried this. This hangs my MPC-HC for good. What build do you use?

burfadel
15th November 2010, 20:19
Usually the latest one I can find, but currently using 2727.

JanWillem32
16th November 2010, 05:41
@TheElix I did certainly not use ":" (U+003A, Unicode), but I did use "÷" (U+0247, Unicode). (the version that that has a dash in-between the dots to prevent the problems with any modern file system, both my Linux computer and Windows computers accept it)
The code you added is the standard code to delete, because it doesn't do anything. Just delete all lines, and add any code you want to insert.
MPC-HC can indeed be a bit nasty about inserting a new code, it only allows updating one of the three fields at a time.
Indeed, the main post should be more inviting for people that are interested in the works of pixel shaders, even newbies.
At the moment I'm trying to make a good set of final shaders, but "sharpen complex v3 + deband" is very hard to find good coefficients for. It fails completely on any resolution below 1080p input on the standard setting, outside the screen space renderer. However, I will try to make a final version soon.

Please do keep me informed if anything can be improved with my shaders. The most prominent examples are "sharpen complex v3 + deband" and the hybrid, they are at the edge of the insruction limit of PS 3.0, a lot can be wrong with it.

TheElix
16th November 2010, 10:18
Wow, I managed to get it to work thanks to your advice. But... uuuh... Look at this:
Sharpen complex v3 + Deband test 2
http://rghost.ru/3271929/thumb.png (http://rghost.ru/3271929.view)
No shaders
http://rghost.ru/3271936/thumb.png (http://rghost.ru/3271936.view)

So, uh, waiting for your final release :thanks:

JanWillem32
16th November 2010, 10:54
Test 3 edition has a better smooth gradient detection method but the sharpen values are too high for most pictures. As I said before: "The sharpening settings for test 3, sharpen complex v3 + deband are high, .375&.1875 or even lower towards .25&.125, are less over-sharpening for images with at least decent quality." Test 2 only had proper support for gradients covering a larger surface, and with less contrast.

TheElix
16th November 2010, 11:01
Like I said, I was unable to open Test 3 in your archive because WinRar gives me an error at the attempt of extracting. You might want to avoid using "÷" because apparently not all languages in Windows support it.