Skip to content

Commit

Permalink
feat(nuke): add luminance compensation algorithm
Browse files Browse the repository at this point in the history
see issue #28
  • Loading branch information
MrLixm committed Jan 11, 2024
1 parent 2b8133a commit 4bb3567
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 2 deletions.
42 changes: 41 additions & 1 deletion nuke/AgXcDRT.nk
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Group {
use_gpu true
addUserKnob {26 "" +STARTLINE}
addUserKnob {26 txt_purity l "" +STARTLINE T "<h2> Purity </h2>"}
addUserKnob {6 use_luma_compensation l "Use Luminance Compensation." t "Affect very saturated colors on gamut boundaries." +STARTLINE}
use_luma_compensation true
addUserKnob {7 inset1 +STARTLINE l "inset" t "reduce chroma purity" R 0 1}
inset1 0.4
addUserKnob {7 purity_amount +STARTLINE l "purity amount" t "higher values restore chroma purity using an outset" R 0 1}
Expand Down Expand Up @@ -87,7 +89,7 @@ Group {
addUserKnob {20 endGroup n -1}
addUserKnob {20 About}
addUserKnob {26 toolName l name T AgXcDRT}
addUserKnob {26 toolVersion l version T 1.1.1}
addUserKnob {26 toolVersion l version T 1.2.0}
addUserKnob {26 toolAuthor l author T "<a style=\"color: rgb(200,200,200);\" href=\"https://mrlixm.github.io/\">Liam Collod</a>"}
addUserKnob {26 toolDescription l description T "AgX(custom) Display Rendering Transform."}
addUserKnob {26 toolUrl l url T "<a style=\"color: rgb(200,200,200);\" href=\"https://github.com/MrLixm/AgXc\">https://github.com/MrLixm/AgXc</a>"}
Expand Down Expand Up @@ -120,6 +122,44 @@ Group {
xpos 0
ypos 0
}
set Nd508a50 [stack 0]
# Under expression is:
# 1. extracting chroma by finding luma
# 2. applying offset
# 3. applying power
# 4. multiplying back chroma with luma, which have been compensated for chroma changes
# 5. lerping with luma to only apply changes on higher values
Expression {
name ExpressionLuminanceCompensation
xpos 100
ypos 50
temp_name0 L
temp_expr0 wR*r+wG*g+wB*b
expr0 "lerp(r, pow((L==0? 0: r / L) + Coffset, 1 / Cpower) * (L * Lgain), L)"
expr1 "lerp(g, pow((L==0? 0: g / L) + Coffset, 1 / Cpower) * (L * Lgain), L)"
expr2 "lerp(b, pow((L==0? 0: b / L) + Coffset, 1 / Cpower) * (L * Lgain), L)"
addUserKnob {20 User l "Parameters"}
addUserKnob {7 Cpower "chroma power"}
Cpower 0.5
addUserKnob {7 Coffset "chroma offset" R -2 2}
Coffset 1
addUserKnob {7 Lgain "luma gain"}
Lgain 0.25
addUserKnob {7 wR}
wR 0.26270021
addUserKnob {7 wG}
wG 0.67799807
addUserKnob {7 wB}
wB 0.05930171
}
push $Nd508a50
Switch {
name SwitchLuminanceCompensation
inputs 2
xpos 0
ypos 100
which {{parent.use_luma_compensation}}
}
# startfrom: https://github.com/MrLixm/Foundry_Nuke/raw/823438ebda0d92614355932a2ecb7264774e2562/src/primaries_inset/PrimariesInset.nk
Group {
name PrimariesInsetFirst
Expand Down
42 changes: 41 additions & 1 deletion nuke/src/AgXcDRT/AgXcDRT-template.nk
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Group {
use_gpu true
addUserKnob {26 "" +STARTLINE}
addUserKnob {26 txt_purity l "" +STARTLINE T "<h2> Purity </h2>"}
addUserKnob {6 use_luma_compensation l "Use Luminance Compensation." t "Affect very saturated colors on gamut boundaries." +STARTLINE}
use_luma_compensation true
addUserKnob {7 inset1 +STARTLINE l "inset" t "reduce chroma purity" R 0 1}
inset1 0.4
addUserKnob {7 purity_amount +STARTLINE l "purity amount" t "higher values restore chroma purity using an outset" R 0 1}
Expand Down Expand Up @@ -87,7 +89,7 @@ Group {
addUserKnob {20 endGroup n -1}
addUserKnob {20 About}
addUserKnob {26 toolName l name T AgXcDRT}
addUserKnob {26 toolVersion l version T 1.1.1}
addUserKnob {26 toolVersion l version T 1.2.0}
addUserKnob {26 toolAuthor l author T "<a style=\"color: rgb(200,200,200);\" href=\"https://mrlixm.github.io/\">Liam Collod</a>"}
addUserKnob {26 toolDescription l description T "AgX(custom) Display Rendering Transform."}
addUserKnob {26 toolUrl l url T "<a style=\"color: rgb(200,200,200);\" href=\"https://github.com/MrLixm/AgXc\">https://github.com/MrLixm/AgXc</a>"}
Expand Down Expand Up @@ -120,6 +122,44 @@ Group {
xpos 0
ypos 0
}
set Nd508a50 [stack 0]
# Under expression is:
# 1. extracting chroma by finding luma
# 2. applying offset
# 3. applying power
# 4. multiplying back chroma with luma, which have been compensated for chroma changes
# 5. lerping with luma to only apply changes on higher values
Expression {
name ExpressionLuminanceCompensation
xpos 100
ypos 50
temp_name0 L
temp_expr0 wR*r+wG*g+wB*b
expr0 "lerp(r, pow((L==0? 0: r / L) + Coffset, 1 / Cpower) * (L * Lgain), L)"
expr1 "lerp(g, pow((L==0? 0: g / L) + Coffset, 1 / Cpower) * (L * Lgain), L)"
expr2 "lerp(b, pow((L==0? 0: b / L) + Coffset, 1 / Cpower) * (L * Lgain), L)"
addUserKnob {20 User l "Parameters"}
addUserKnob {7 Cpower "chroma power"}
Cpower 0.5
addUserKnob {7 Coffset "chroma offset" R -2 2}
Coffset 1
addUserKnob {7 Lgain "luma gain"}
Lgain 0.25
addUserKnob {7 wR}
wR 0.26270021
addUserKnob {7 wG}
wG 0.67799807
addUserKnob {7 wB}
wB 0.05930171
}
push $Nd508a50
Switch {
name SwitchLuminanceCompensation
inputs 2
xpos 0
ypos 100
which {{parent.use_luma_compensation}}
}
%NODE_PrimariesInset:{"ypos": 200, "xpos": 0, "name": "PrimariesInsetFirst", "colorspace_preset": "\"ITU-R BT.2020\"", "primary_r": "{0.708 0.292}", "primary_g": "{0.17 0.797}", "primary_b": "{0.131 0.046}", "whitepoint": "{0.3127 0.329}", "inset": "{{parent.inset1}}", "u_inset_r": 0.125, "u_inset_b": 0.15, "rotate_r": 5, "rotate_b": -5, "use_gpu": "{{parent.use_gpu}}"}%
%NODE_Log2Shaper:{"ypos": 250, "xpos": 0, "name": "Log2ShaperTonescaleFirst", "min_exp": "{{parent.tonescale1_min_exposure}}", "max_exp": "{{parent.tonescale1_max_exposure}}"}%
set N543acf70 [stack 0]
Expand Down

0 comments on commit 4bb3567

Please sign in to comment.