novideo_srgb icon indicating copy to clipboard operation
novideo_srgb copied to clipboard

Fantastic piece of sofware!

Open James-F2 opened this issue 2 years ago • 69 comments

This allowed me to use all the picture settings in my monitor that are typically locked in sRGB Picture Mode. The Dithering option eliminated all banding issues I saw in v1.0, and the custom gamma curve is great.

Even though I have an i1 Display Pro, for simplicity I create a "Synthetic ICC" in DisplayCAL with my EDID xy coordinates and custom gamma curve so I can tweak it further in Novideo sRGB, or I can measure my actual xy coordinates with the i1 and then create a Synthetic ICC. Now I have control over my monitor without being limited by the sRGB Picture Mode that does not allow me to change anything, AND have accurate REC.709 gamut in games, browsing, etc.

Thank you again for this amazing software.

PS. An icon for the software will be great, it looks like a virus without an icon. haha

James-F2 avatar Mar 06 '22 12:03 James-F2

Another thing that would help me update the software is an "About" button with a link to this Github page, and remind me that LeDoge created this awesome tool.

James-F2 avatar Mar 06 '22 12:03 James-F2

Thank you for the feedback! An "About" window seems like a good idea – I'll add that in the next release. Also, an icon would indeed be nice to have, but I lack the artistic ability to make a decent one...

ledoge avatar Mar 06 '22 15:03 ledoge

Same icon as DWM LUT, just so it doesn't look suspicious.

James-F2 avatar Mar 06 '22 15:03 James-F2

@ledoge If I do a full greyscale calibration in DisplayCAL, will novideo_srgb take all 256 steps from the ICC for the gamma curve calculation or will it only use the 0,0,0 black point? In other words, will it 'fix' a poorly behaved display that clips several black shades?

James-F2 avatar Mar 08 '22 06:03 James-F2

The tone response curves are used in two ways: the black point of the display is calculated using them, and the re-gamma LUT is populated with the inverse of the curves. So I think there shouldn't be any issues?

ledoge avatar Mar 08 '22 08:03 ledoge

No issue, I just wanted to know if there is any benefit of Calibrating+Profiling or just Profiling is enough to get the black value. I'll rephrase, is the calculated gamma curve using ONLY the black point, or is it using all measured greyscale values?

James-F2 avatar Mar 08 '22 08:03 James-F2

if there is any benefit of Calibrating+Profiling or just Profiling is enough to get the black value

Calibrating just adds vcgt data to the profile (which might result in a more accurate profile?), but novideo_srgb works perfectly fine with or without vcgt data. It's not relevant for the calculation of the black point.

is the calculated gamma curve using ONLY the black point, or is it using all measured greyscale values

There are two stages in the color side space conversion pipeline that affect gamma: The first 1D LUT is used to convert the pixel values to linear light. Its values are calculated only from the selected gamma (e.g. sRGB) and the black point. The second 1D LUT is used to convert from linear light to the right values for the display - this is where all of the measured grayscale values and, if present, the vcgt data come in.

ledoge avatar Mar 08 '22 08:03 ledoge

I see, so there is a benefit in Profiling with a large amount of measured greyscale patches. Thank you!

James-F2 avatar Mar 08 '22 08:03 James-F2

One last thing for people who are using DisplayCAL and a calibration device. If you are using DisplayCAL to create an ICC make sure you select "XYZ LUT+Matrix" in the Profiling tab because Matrix only profiles will not produce a correct gamma curve in novideo_srgb. I use a custom Testchart with 256 grey patches (neutral patches) for maximum greyscale accuracy, and at least 400 color patches. Also, there is no need for Calibration, so leave everything there in "As Measured" like you would with MadVR calibration, except Interactive white point adjustment so you can bring your display closer to 6500K manually with R,G,B controls in your monitor OSD before Profiling.

I've attached a REC.709 Calibration Verification with the ICC applied in novideo_srgb, my monitor is in Standard wide gamut mode. Mind blowing results that compare to MadVR with its advanced 16bit processing and dithering, and it runs natively on the Nvidia GPU. Novideo_srgb deserves a lot more recognition.

Measurement Report 3.8.9.3 — Gigabyte M32Q @ 0, 0, 2560x1440 — 2022-03-08 13-19.html.zip

James-F2 avatar Mar 08 '22 11:03 James-F2

Wow, those results are awesome! Thanks for sharing.

Matrix only profiles will not produce a correct gamma curve in novideo_srgb

They should work fine as long as you disable black point compensation.

ledoge avatar Mar 08 '22 12:03 ledoge

Yeah, amazing that this level of accuracy can be applied natively at the GPU level (including advanced dithering), without the need of external hardware, expensive grading monitors, or specialized software.

It is my greatest pleasure using your software and software by people like Graeme Gill and Florian Höch. I am very grateful for this.

James

EDIT: I shamelessly forgot Madshi. ;facepalm;

James-F2 avatar Mar 08 '22 13:03 James-F2

@James-F2 Would you mind sharing your testchart for DisplayCal? :)

aufkrawall avatar Mar 08 '22 19:03 aufkrawall

Not at all.

It's nothing special. 256 neutral patches, and 7 for Single and Multidimensional color patches. I think 7 is way to much, 5 is more than enough, but I always do 256 neutral patches so there is minimal interpolation, especially in the dark region.

256greyscale testchart.zip

testchart

James-F2 avatar Mar 08 '22 20:03 James-F2

Thanks, I'll give it a try and report back!

aufkrawall avatar Mar 08 '22 21:03 aufkrawall

Curious if custom testcharts improve verification scores in this application. Before using novideo_rgb on my consumer grade WLED display I got the best scores with the default 175 patch set, somewhere on DisplayCAl forums Florian mentioned that testchart had some special optimization, I don't remember the details.

I create a "Synthetic ICC" in DisplayCAL with my EDID xy coordinates

How do you gather those from an existing profile?

markanini avatar Mar 10 '22 11:03 markanini

Curious if custom testcharts improve verification scores in this application.

I don't really know much about how ArgyllCMS works internally, but what I'd expect is that if you're generating an XYZ LUT profile, adding more color patches won't help but adding grayscale ones will (since novideo_srgb samples the extreme points and the grayscale axis only). With a 3 curves + matrix profile (make sure to disable black point compensation!) I think adding more grayscale and color patches should improve the average delta e.

ledoge avatar Mar 10 '22 12:03 ledoge

since novideo_srgb samples the extreme points and the grayscale axis only

Ah, thank you, that clarified a lot. So there is no need for color patches at all, only greyscale and three 100% RGB values, I see.

I can confirm that when I added more neutral/grey patches to the Testchart it completely fixed all black crush I saw previously with default number of grey patches.

Thanks!

James-F2 avatar Mar 10 '22 14:03 James-F2

Yes, interesting! I get lower gamma curve deviations when using 1x curve + matrix format with calibration speed set to medium vs. your custom chart, so I'll be sticking to that. 3x curves seems to give me worse color and gamma deviation, at least when using novideo_rgb.

aufkrawall avatar Mar 10 '22 15:03 aufkrawall

I skip calibration and Profile only, it provides enough data and is much faster since there is no iterative calibration to minimize dE during measurement.

I just did a Curves+Matrix Profiling pass with 256 neutral patches and 10 RGB patches each, and the results are spectacular, might be even better than my previous XYZ LUT attempt.

Testchart and Verification.zip

James-F2 avatar Mar 10 '22 16:03 James-F2

I skip calibration and Profile only, it provides enough data and is much faster since there is no iterative calibration to minimize dE during measurement.

Yeah, maybe my Spyder 4 is too shitty and is more dependent on those extensive calibration tests. Just a wild guess though. novideo_srgb clamp result with default 1x curve chart + medium speed calibration probably still wipes the floor with almost any monitor internal sRGB clamp: Measurement Report 3.8.9.3 — G27q-20 @ 0, 0, 2560x1440 — 2022-03-08 22-57.zip

Of course a driver/OS API for full blown 3D LUT correction would be the nonplusultra. I guess you'd find higher deviations when just clamping the gamut volume when running a really extensive validation test chart. But that's probably hard/impossible to notice during everyday usage, depending on the display's linearity.

aufkrawall avatar Mar 10 '22 17:03 aufkrawall

I have to say that the ease of jumping between calibrated and accurate gamma curves without creating several different 3D LUTs for MadVR is absolutely delightful. I use sRGB, BT.1886 and Relative 2.35+0% Offset curves, and it has never been this easy with this level of accuracy before.

My collection of calibration test images confirm that everything is working perfectly and the resulting gamma curves are accurate, smooth (+dithering), and without black crush. Calibration Pictures.zip For me, the key was 256 neutral patches (all 8bit steps) with Curves+Matrix profiling.

I'm still mind blown by how quick, accurate, easy, and bug free this is, can't bother with 3D LUTs anymore.

James-F2 avatar Mar 11 '22 19:03 James-F2

hey james, do you mind making a make a step by step on how you did this, Im having hard time understanding the process. I have a calibrated before using XYZ Lut + Matrix.

erusyns avatar Mar 11 '22 19:03 erusyns

Here's a summary;

Skip calibration by setting everything to 'as measured' only do 'interactive display adjustment' for 6500K white point. Profile Curves+Matrix (black point compensation disabled) with 256 neutral patches and 2 single channel (color) patches or use this test chart. 256 Neutral Testchart.zip

For verification I use these settings, with novideo_srgb clamped to sRGB; verification

That's it, this is exactly what I did.

James-F2 avatar Mar 11 '22 20:03 James-F2

I am not sure how novideo_srgb is using color patches from the Matrix profile though, and whether there is a benefit of using more than just three 100% primary RGB patches.

James-F2 avatar Mar 11 '22 20:03 James-F2

thank you james

erusyns avatar Mar 11 '22 22:03 erusyns

I am not sure how novideo_srgb is using color patches from the Matrix profile though, and whether there is a benefit of using more than just three 100% primary RGB patches.

AFAICT ArgyllCMS will use the color patches to generate an optimized matrix, so there might be a slight benefit for average delta Es at least.

Also, I made some experimental changes that should (assuming I did it properly) result in slightly better 8-bit gamma tracking. Please try this build and see if you get lower grayscale errors compared to the current version. The differences might be very minor though, so I'd suggest comparing it to a regular DisplayCAL verification without "Use simulation profile as display profile" as well to make sure the ICC profile is still accurate (or make a new one).

ledoge avatar Mar 11 '22 23:03 ledoge

I Profiled a new ICC with 256 neutral and 3x25 color patches. Leaving the i1 Display Pro on screen after profiling, I see no difference in verification between release and test build, I made sure to refresh the "Clamped" button between .exe swaps.

James-F2 avatar Mar 12 '22 07:03 James-F2

Depending on the profile with the test version average Delta E dropped .1 - .05. I made the profiles last night.

Independently I compared the average delta E for the different profile types in DisplayCal: XYZLUT+matrix, Curves+matrix Single curve+matrix, Gamma+matrix, Single gamma+matrix. Going down the list the average Delta E increases, but the first two are very close. So far the test used Tone curve:As measured.

Setting Tone Curve to Gamma 2.2 and going from Calibration Speed:Vary fast to Slow the average Delta E increases! So my chosen profile uses Tone curve:As measured and Profile type:XYZLUT+matrix for the lowest Average delta E. My measurment device is a i1Display Pro.

I ran out of time to make a comparison were DisplayCal loads the profile instead, or using James-F2's test chart so one of you guys can help answer that one.

EDIT: Black point compensation was unchecked at all times.

markanini avatar Mar 12 '22 11:03 markanini

I see an improvement in the smoothness of the greyscale with v2.7. There was a small 'kink' in the "16Bit Gradient.png" test pattern (I shared it above) with 2.6 and the test build (dithering enabled), now it's gone with 2.7 and greyscale is smooth as eggs.

James-F2 avatar Mar 12 '22 18:03 James-F2

Very interesting – I thought that test build should have perfectly accurate grayscale, and with v2.7 I removed part of that to get better color accuracy with slightly worse grayscale accuracy, so I'm not sure why it would be even better now, but it's very nice that it is!

ledoge avatar Mar 12 '22 19:03 ledoge