Thanks alot, i can see that now. I guess it was a bit too inconvenient to show the full equation in the node's help info.
On Sat, Jan 10, 2015 at 4:38 PM, Joe Laude <[email protected]> wrote: > Well I learned something new today, because I didn't actually know that > the grade node did this. The grade node is not telling the whole truth > about the expression in its info. > > I laid out pretty much the same thing (I don't have access to Nuke 8, so I > set up virtually the same thing as yours but using an expression node), and > I discovered that the Grade node doesn't do a straight pow() function for > the gamma above 1 or below 0. It does what you'd expect from 0 to 1, but > above 1, it's not a power curve, but a flat line, with the slope of > whatever the gamma exponent is. > > Below is what I was playing with in nuke. It has the expression node which > does the same as your blinkscript did, and the grade node you had, as well > as an expression node that visualizes the color curve (just view it, you'll > see what I mean. View the "GammaCurve" node, and then connect that to the > other nodes to see what's going on), and finally an expression node that > includes the corrected expression, which uses different expressions for > above 1 and below 0. > > set cut_paste_input [stack 0] > version 7.0 v9 > push $cut_paste_input > Ramp { > p0 {0 0} > p1 {2048 0} > color {100 100 100 1} > name Ramp2 > selected true > xpos -73 > ypos -78 > } > Grade { > blackpoint 0.25 > black_clamp false > name Grade2 > selected true > xpos -73 > ypos -40 > } > set N3b094970 [stack 0] > Expression { > temp_name0 A > temp_expr0 > Grade6.multiply*(Grade6.white-Grade6.black)/(Grade6.whitepoint-Grade6.blackpoint) > temp_name1 B > temp_expr1 Grade6.add+Grade6.lift-A*Grade6.blackpoint > temp_name2 exp > temp_expr2 1/Grade6.gamma > expr0 r<0?A*r+B:r>1?(r-1)*exp+1:pow(A*r+B,exp) > expr1 r<0?A*r+B:r>1?(r-1)*exp+1:pow(A*r+B,exp) > expr2 r<0?A*r+B:r>1?(r-1)*exp+1:pow(A*r+B,exp) > name CorrectedGradeExpression > selected true > xpos 152 > ypos 24 > } > push $N3b094970 > Expression { > temp_name0 A > temp_expr0 > Grade6.multiply*(Grade6.white-Grade6.black)/(Grade6.whitepoint-Grade6.blackpoint) > temp_name1 B > temp_expr1 Grade6.add+Grade6.lift-A*Grade6.blackpoint > temp_name2 exp > temp_expr2 1/Grade6.gamma > expr0 pow(A*r+B,exp) > expr1 pow(A*g+B,exp) > expr2 pow(A*b+B,exp) > name UncorrectedGradeExpression > selected true > xpos 20 > ypos 23 > } > set N3b115410 [stack 0] > Expression { > expr0 floor(r*20)==y-20?1:0 > expr1 floor(g*20)==y-20?1:0 > expr2 floor(b*20)==y-20?1:0 > name GammaCurve > label "Illustrates gamma curve" > selected true > xpos 90 > ypos 153 > } > push $N3b115410 > push $N3b094970 > Grade { > gamma 2.3 > black_clamp false > name Grade6 > selected true > xpos -202 > ypos 22 > } > Difference { > inputs 2 > output rgba.red > name Difference1 > selected true > xpos -101 > ypos 166 > } > > > On Sat, Jan 10, 2015 at 6:04 AM, Mads Lund <[email protected]> wrote: > >> Hey Guys. >> >> I find it super convenient that some of the node actually explains how >> they operate, so that you can re-create them in your expressions and blink >> scripts. >> However the equation descriped in the Gradenode does not match the >> actuall output of the node >> >> A = multiply*(gain-lift)/(whitepoint-blackpoint) >> >> B = offset + lift - A*blackpoint >> >> output = pow(A*input+B,1/gamma) >> >> >> Here is a little comparison: >> >> >> >> set cut_paste_input [stack 0] >> >> version 8.0 v4 >> >> push $cut_paste_input >> >> Ramp { >> >> p0 {0 408} >> >> p1 {1924 426} >> >> color 10000 >> >> name Ramp2 >> >> selected true >> >> xpos -2 >> >> ypos 379 >> >> } >> >> set Ne890edf0 [stack 0] >> >> BlinkScript { >> >> ProgramGroup 1 >> >> KernelDescription "1 \"Grade\" iterate componentWise >> 3aed9d965918ead671ab9383439b4816a7772727775caa4b995181fa06c4c03e 2 \"src\" >> Read Point \"dst\" Write Point 0" >> >> kernelSource "kernel Grade : >> ImageComputationKernel<eComponentWise>\n\{\n Image<eRead, eAccessPoint, >> eEdgeClamped> src;\n Image<eWrite> dst;\n void process() \{\n float4 >> Colors = src();\n float input = Colors.x;\n float blackpoint = >> 0.0f;\n float whitepoint = 1.0f;\n float lift = 0.0f;\n float gain >> = 0.01f;\n float multiply = 1.0f;\n float offset = 0.0f;\n float >> gamma = 2.0f;\n float A = >> multiply*(gain-lift)/(whitepoint-blackpoint);\n float B = offset + lift >> - A*blackpoint;\n float output = pow(A*input+B,1/gamma);\n dst() = >> output;\n \}\n\};" >> >> rebuild "" >> >> name BlinkScript1 >> >> selected true >> >> xpos -86 >> >> ypos 423 >> >> } >> >> push $Ne890edf0 >> >> Grade { >> >> white 0.01 >> >> gamma 2 >> >> black_clamp false >> >> enable_mix_luminance false >> >> name Grade6 >> >> selected true >> >> xpos 78 >> >> ypos 431 >> >> } >> >> Difference { >> >> inputs 2 >> >> output rgba.red >> >> name Difference1 >> >> selected true >> >> xpos -12 >> >> ypos 494 >> >> } >> >> >> >> Am i missing something, and or do you guys know what is missing? >> >> >> _______________________________________________ >> Nuke-users mailing list >> [email protected], http://forums.thefoundry.co.uk/ >> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users >> > > > > -- > Joe Laude > > _______________________________________________ > Nuke-users mailing list > [email protected], http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users >
_______________________________________________ Nuke-users mailing list [email protected], http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users
