LG C8 Lut

Home Forums General Discussion LG C8 Lut

Viewing 15 posts - 76 through 90 (of 279 total)
  • Author
    Posts
  • #21356

    Florian Höch
    Administrator
    • Offline

    For 1d LUTS I’ve also added the option to read in directly the .cal files from DisplayCal/ArgyllCMS.

    Careful: 1D calibration needs to be applied after the 3D LUT. Is that the case?

    #21357

    Josh Bendavid
    Participant
    • Offline

    According to the info here: https://displaycalibrations.com/lg_2018_oled_profiling_using_lightspace.html under “LG Video Signal Processing Pipeline Info” the 1D LUT is applied after the 3D LUT.

    #21358

    chros
    Participant
    • Offline

    According to the info here: https://displaycalibrations.com/lg_2018_oled_profiling_using_lightspace.html under “LG Video Signal Processing Pipeline Info” the 1D LUT is applied after the 3D LUT.

    Err, than Ted writes this:
    According to that way the 1D LUT is implemented in the LG OLED TV, you must do the 1D LUT first, and then the 3D LUT profiling. If you change the 1D LUT you must re-do the 3D LUT. But if you change the 3D LUT only, you don’t need to re-do the 1D LUT.

    Maybe the diagram is wrong?

    #21359

    Josh Bendavid
    Participant
    • Offline

    I took this to mean that the diagram refers to the order in which the LUTs are applied in the image processing chain, whereas the text refers to the order in which the profiling steps should be done in Lightspace.

    #21360

    Florian Höch
    Administrator
    • Offline

    I took this to mean that the diagram refers to the order in which the LUTs are applied in the image processing chain, whereas the text refers to the order in which the profiling steps should be done in Lightspace.

    Yes. The one follows from the other.

    #21361

    chros
    Participant
    • Offline

    whereas the text refers to the order in which the profiling steps should be done in Lightspace.

    Yes, but does text makes sense at all in this case? I mean:

    • diagram: 3dlut -> 1dlut
    • text: “you must do the 1D LUT first, and then the 3D LUT profiling”

    I’d think the text exactly the opposite way based on the diagram.
    Or do I miss something?

    #21364

    János Tóth F.
    Participant
    • Offline

    I hope this helps:

    0: Set your PC to Full Range RGB output. Set the TV to HDMI Black Level: High. Set the Contrast to 100 (yes, 100 for SDR as well). (Optionally use YCC and Low if you want to try correcting any internal processing errors with the LUTs).

    0/b: Figure out the OLED Light values you want after calibration by measuring 100% white in the factory Warm2 white balance preset (or do a rough calibration with the remote controls and menu sliders if you want but it’s not neccessary). Write these numbers down (target white -> OLED Light) for SDR day/night, or even for HDR10 (if you plan to set the peak white to 700 nit for 2018 models – but that is not necessary for 2019 models). But never touch the OLED Light for DolbyVision (not even for 2018 models).

    Optionally you can record your OLED Light numbers for SDR with Contrast at 85, then calibrate with Contrast = 100 and restore Contrast to 85 as a final step. This recreates the factory state with the calibrated whiter-than-white / superwhite range left un-utilized. (And, ah well, you can leave the WTW un-calibrated if you want, that is: keep Contrast at 85 at all times.) I personally recommend keeping it at 100 at all times unless you want to fight the ABL in a bright SDR preset (it triggers sooner with C=100).

    1: Reset all LUTs you plan to reprogram or wish to keep in a neutral state afterwards (for normal use). You are free to keep the factory 1DLUT but you can’t keep the factory 3DLUT after you altered the 1DLUT.  You can reprogram the 3DLUT with any sane 1DLUT: the factory 1DLUT and a neutral (“unity”, reset) 1LDUT included, or custom 1D calibration (it’s your choice).

    I didn’t personally observe this but some people (TEDD included) claim that some LG TVs behave unexpectedly bad if you alter the factory 1DLUT (so you might want to keep it in factory state) or that it’s better to keep it in a neutral(/unity) state and use the 3DLUT instead because the latter provides better results (I assume they think the 3DLUT processing works better than the 1DLUT processing which could be a firmware bug or some crazy internal design from LG…). I personally think the 1DLUT is simply redundant because the 3DLUT should be sufficient alone (at least when it’s 33^3 and not 17^3) and it only increases the time required and complexity to create both (room for more errors and waste of time).

    2: put and keep the TV in calibration mode for profiling (this is mandatory for HDR10/HLG mode).

    3: optionally do the 1DLUT calibration with dispcal if you want (but feel free to skip this, especially for SDR) and upload the resulting .cal to the LG hardware if you chose to calibrate the 1DLUT (instead of keeping the factory one of leaving it filled with neutral/unity data).

    You targets are D65 white and gamma 2.2 for most modes (or 2.4 for “SDR dark room”, according to you preferences but always 2.2 for HDR10 and DV)

    4: do the 3D color volume profiling (use whatever patch set you prefer but I recommend starting with a minimalist approach like 65 fray + R,G,B at 100%), then create and upload the 3DLUT

    Your targets are Rec709 + gamma 2.2 (or 2.4) for SDR, Rec2020 + gamma 2.2 (strictly) for HDR10/HLG and DolbyVision is up to you (I would personally go for Rec2020 + gamma 2.2 to keep HDR10 and DV modes as close to each other as possible) but DV was meant to be calibrated with a 1DLUT only (leaving the 3DLUT in it’s factory/neutral state and letting the Dolby CMU do the LMS->panel color mapping).

    4/b: optionally validate the HDR calibration against Rec2020 + gamma 2.2 reference (since you won’t be able to validate the final result of DolbyVision with DisplayCAL and it’s tricky to validate HDR10 with the tone-mapping on) while in calibration mode.

    5: disable calibration mode and do a (final) validation

    You references should be a Rec709 + gamma 2.2 (or 2.4) synthetic ICC profile for SDR. For HDR10, create a synthetic profile with Rec2020 + PQ with hard-clip at the measured display peak white luminance and put together a validation test chart with sane test patch values (grays can be 0-100% but keep the saturated colors below ~50% -> this, you have to tweak for yourself) and ignore the outlier errors (where it’s obvious that some clipping occurred on bright colors). Edit the test chart in a simple text editor if you are willing (add more with the GUI and remove the bright colors, just don’t forget to fix the total patch count). Oh, and feed the display with 700 nit MDL/maxCCL meatadata if you can [from a hardware device], or something slightly higher otherwise [using a movie player in the background] (so that the internal tone-mapping does hard-clip at the hard-coded peak white of 700 and not roll-off -> or use the measured peak white if you were able to reprogram this parameter on a 2019 TV).

    #21365

    Josh Bendavid
    Participant
    • Offline

    I’ll post some plots later, but I did also observe some strange behaviour related to what Ted had observed, and which I’m trying to make sense of

    1. Different behaviour in SDR mode with calibration ON vs OFF around 5% grey (ie measuring the same testchart in calibration mode vs not gives slightly different results around 5% gray, even with unity 1D and 3D LUTs)
    2. Non-closure of applying calibration to testchart vs uploading to TV 1DLUT (with 3d LUT left at unity) -> this also seems to be most pronounced around 5% grey

    I have some suspicion that this behaviour is related to the 9 magic numbers which are being sent with the start_calibration command…

    • This reply was modified 4 years, 4 months ago by Josh Bendavid.
    #21370

    stama
    Participant
    • Offline

    @josh-2, Ted recommend to do the measurements while the TV calibration is disabled. This means: enable calibration -> reset the LUT you will upload later -> disable calibration -> take measurements & create LUT -> enable calibration -> upload LUT -> disable calibration -> take measurements for  verification.

    Regarding the different behavior near 5%, this might be due to the way the TV will handle differently the near-black whether the 1D LUT has been written to, or not. As Vincent says in one of his youtube videos (the one describing the 5.10.20 firmware), and then was confirmed on the Calman thread on avsforum, the TV will only apply the new dithering algorithm near black if the 1D LUT was left untouched. If the 1D LUT was reset to unity, or written to in any way, then the new dithering algorithm is not applied, and the near black handling is left entirely to the 1D LUT.

    Btw, I guess the results you get might depend on what firmware version you have on the C8. I still have the 04.10.15, which was the last version without black crush. 04.10.31 brought the black crush, that was only partially mitigated later by 05.10.20.

    From what I can see on my TV with this old firmware, there is still dithering on 04.10.15, but with a static pattern which does not change in time, only changes when the luminance changes. That’s what was visible in all those horror videos – a static pattern of large dark and slightly brighter rectangles  which remained on screen on the areas where the luminance was constant.

    #21371

    János Tóth F.
    Participant
    • Offline

    @josh-2, Ted recommend to do the measurements while the TV calibration is disabled. This means: enable calibration -> reset the LUT you will upload later -> disable calibration -> take measurements & create LUT -> enable calibration -> upload LUT -> disable calibration -> take measurements for  verification.

    You can’t do this in HDR10 though (and for that reason we don’t know if the HDR10 mode is affected or not).

    Regarding the different behavior near 5%, this might be due to the way the TV will handle differently the near-black whether the 1D LUT has been written to, or not.

    Somehow I seriously doubt this, yet I wonder if this calibration mode distortion is meant to compensate for that other distortion between ‘the 1DLUT applied to test patches by a PC software’ vs. ‘the 1DLUT loaded to the LG hardware’ (so, if these sort-of “cancel each other out”). But with access to a 3DLUT in all display modes (DolbyVision included) we don’t have to use the 1DLUT.

    As Vincent says in one of his youtube videos (the one describing the 5.10.20 firmware), and then was confirmed on the Calman thread on avsforum, the TV will only apply the new dithering algorithm near black if the 1D LUT was left untouched. If the 1D LUT was reset to unity, or written to in any way, then the new dithering algorithm is not applied, and the near black handling is left entirely to the 1D LUT.

    I am almost sure you get the new dithering method if you re-calibrate with the new firmware. I did a full factory reset and calibrated the TV again. There was clearly more dither noise on dark shades and the original flashing issue was further reduced. The factory Cinema mode looked very similar to the calibrated ISF mode in this regard.

    It’s possible that near-black response changes in calibration mode because that “flag” (which is meant to disable the new dithering mode for pre-existing calibrations) triggers incorrectly. But the you with the old firmware should see zero distortion with calibration mode enabled (thus, you can test this).

    #21374

    chros
    Participant
    • Offline

    I just quickly report back that I managed to create and upload my 1st HDR10 3dlut! 🙂
    Thank You, Josh! And thanks to Janos for pointers in DisplayCal!

    Measurement was taken in calibration mode and after uploading a unity 3dlut. As you can see by the commands: I left the factory 1dult as it is, and only created a 3dlut.

    Good news is: nothing is broken, image quality is on pair with the unprofiled mode (cinema), warmer colors overall in the profiled technicolor mode, but in some titles it’s like a small fog is on top of the image (San Andreas, 4000 nits MDL). But the latter can be cause by madvr HSTM and its desaturation option, I don’t know.

    Anyway, that’s really good news! Now we have to experiment, what the best approach is 🙂

    • This reply was modified 4 years, 4 months ago by chros.
    #21376

    stama
    Participant
    • Offline

    @janos-toth-f, Hmm, maybe,  I will try and see. Btw, if you just change the 3D LUT, then the new dithering is still used. Only writing the 1D LUT is supposed to disable the new dithering algorithm.


    @josh-2
    , I’m a bit worried of using linear interpolation for the 1D LUT. I’m worried by the discontinuities introduced by the 256 points. I’ve noticed numpy has a Polynomial.fit class. Maybe it can be used instead.

    Because the 1D LUT has 1024 entries, but you said the cal file has only 256 entries, you would define:

    x array = [0, 3, 7, .. 1023]
    y array = [cal(0), cal(1), cal(2)... cal(255)], where cal(x) is the 1D LUT value written in the cal file for x
    coefs = poly.polyfit(x, y, 4) // to get a 4th order polynomial
    fit_function = poly.Polynomial(coefs)
    x_full = [0 .. 1023]
    y_full = fit_function(x_full)

    Would this work?

    #21377

    János Tóth F.
    Participant
    • Offline

    @janos-toth-f,  Only writing the 1D LUT is supposed to disable the new dithering algorithm.

    The blocking flag should flip during the firmware update if you altered the 1DLUT before you updated the firmware (to a version with the new dithering from a version with old dithering) and it should be cleared if you re-calibrate with the new firmware. (That’s a lot of “should”, so one shant be surprised if it’s buggy but still…)

    @josh-2, I’m a bit worried of using linear interpolation for the 1D LUT. I’m worried by the discontinuities introduced by the 256 points. I’ve noticed numpy has a Polynomial.fit class. Maybe it can be used instead.

    Because the 1D LUT has 1024 entries, but you said the cal file has only 256 entries, you would define:

    x array = [0, 3, 7, .. 1023]
    y array = [cal(0), cal(1), cal(2)... cal(255)], where cal(x) is the 1D LUT value written in the cal file for x
    coefs = poly.polyfit(x, y, 4) // to get a 4th order polynomial
    fit_function = poly.Polynomial(coefs)
    x_full = [0 .. 1023]
    y_full = fit_function(x_full)

    Would this work?

    The native panel response is close to gamma 2.2 and the fine 1DLUT calibration usually targets gamma 2.2, so it would probably be best to interpolate on an f(y)=x^2.2 curve. But your polynom is probably probably also better than a line.

    I left the factory 1dult as it is, and only created a 3dlut.

    I would personally go for a neutral 1DLUT with later firmware versions (I know you stick to the old one) because the black-crush is probably introduced by the factory 1DLUT, so in that case the 3DLUT will need to counter-correct the 1DLUT adjustment (but I am not sure about that).

    But even with old firmwares, according to those flow charts on TEDD’s site, some de-gamma / re-gamma processing steps (which are probably there to allow for the user menu gray-scale calibration functions) are probably shut off after you altered the 1DLUT (and those legacy user menu controls got grayed out) in which case the image quality might be slightly better. (But this is only pure speculation, of course.)

    If I only had a 17^3 3LDUT and a black-crush firmware I would probably consider doing a quick dispcal calibration (Low or Medium but not High quality setting, something that gives you ~33 points and finishes within 10 minutes or so) and upload a 1DLUT to the hardware.

    Good news is: nothing is broken, image quality is on pair with the unprofiled mode (cinema), warmer colors overall in the profiled technicolor mode, but in some titles it’s like a small fog is on top of the image (San Andreas, 4000 nits MDL). But the latter can be cause by madvr HSTM and its desaturation option, I don’t know.

    Anyway, that’s really good news! Now we have to experiment, what the best approach is ????

    You can easily validate the grayscale (see my previous post), just ignore the saturation errors if you don’t edit the standard validation charts.

    Oh, and do check out the Lion Kinh hyena scene! If you still see magenta shadows there, then neutralize or calibrate that 1DLUT! I saw zero magenta with a neutral 1DLUT + a DisplayCAL 3DLUT.

    #21379

    Josh Bendavid
    Participant
    • Offline

    I’ll post some plots later, but I did also observe some strange behaviour related to what Ted had observed, and which I’m trying to make sense of

    1. Different behaviour in SDR mode with calibration ON vs OFF around 5% grey (ie measuring the same testchart in calibration mode vs not gives slightly different results around 5% gray, even with unity 1D and 3D LUTs)
    2. Non-closure of applying calibration to testchart vs uploading to TV 1DLUT (with 3d LUT left at unity) -> this also seems to be most pronounced around 5% grey

    I have some suspicion that this behaviour is related to the 9 magic numbers which are being sent with the start_calibration command…

    So firstly I have to retract this statement, what I saw with the unity LUTs was some combination of display drift+white drift compensation, plus some effect of rounding in the pattern generation.  With a 10bit accurate pattern generator, the closure is pretty good even near black.  (There is maybe some small issue/ambiguity with the definition of the unity 1D lut which I will investigate further, but this is a tiny issue if at all.)

    Now on the other hand, with factory 1D LUT, enabling calibration leads to a huge change in the behaviour, and I think it’s exactly what @stama was suggesting.  It looks like starting calibration on a mode with factory LUTs immediately switches it back to the old dithering/near black mode.  As long as the LUTs are untouched, disabling calibration puts it back into the new dithering mode.  If calibration is enabled and then a 1D LUT is uploaded (unity or otherwise), then the old dithering mode is kept even after disabling calibration.

    The new and old dithering modes also seem to have quite different grayscale tracking, so profiles are definitely not interchangeable between the two, as I think we already knew.

    (The above is tested with the C8 and 5.10.35 firmware.)

    So it looks like for SDR one should definitely do the profiling with calibration mode off if keeping the factory 1D LUTs (and this is required if you want to keep the new dithering behaviour.)  If the 1D LUT is reset one gets the old dithering, and then the profiling can be done in calibration mode or not, it shouldn’t matter.

    For HDR calibration this is a bigger problem, because one needs to enable calibration mode to bypass the tone mapping.  I haven’t tested it yet, but if the dithering (and corresponding greyscale tracking) behaves the same way as in SDR, then one is basically required to reset the 1D LUT in order to get a consistent calibration (and then go back to the old dithering behaviour).  One could try to calibrate in PQ mode with calibration off if one really wanted to keep the factory 1D LUT and dithering, but with just 33 points I think this would be problematic.

    If someone has a 2019 set it would be interesting to check if they behave the same way.

    I played around a bit with the parameters passed to the start calibration command, but they don’t seem to make any difference either way.  Further ideas on that front are welcome (I was actually hoping that they control the near black dithering behaviour, but this is probably wishful thinking.)

    #21384

    chros
    Participant
    • Offline

    I would personally go for a neutral 1DLUT with later firmware versions (I know you stick to the old one) because the black-crush is probably introduced by the factory 1DLUT … If I only had a 17^3 3LDUT and a black-crush firmware …

    Good point, but I have the old firmeware indeed, and the original panel without a black crush:
    that’s why I left the factory 1dlut untouched with HDR10 .

    After watching Cinderella HDR10 (maxCLL 1000) with the profiled technicolor preset:
    – sometimes it looked ok
    – but most of the times it looked worse then the uncalibrated cinema preset: the fog effect ruined it

    So maybe, I should only profile for the 3dlut with only RGB patches and nothing else (like Calman does).

    Oh, and do check out the Lion Kinh hyena scene! If you still see magenta shadows there, then neutralize or calibrate that 1DLUT! I saw zero magenta with a neutral 1DLUT + a DisplayCAL 3DLUT.

    🙂 Good news! I have to find a preset that I can sacrifice for this (I don’t *want* to do a factory reset 🙂 , it’d be just too much hassle.)

Viewing 15 posts - 76 through 90 (of 279 total)

You must be logged in to reply to this topic.

Log in or Register

Display Calibration and Characterization powered by ArgyllCMS