Why Diffuse Light use max(N · H, 0) instead of just letting it be negative?












3














In Cg tuts, Diffuse Section




Surfaces that face away from the light will produce negative dot-product values, so the max(N · L, 0) in the equation ensures that these surfaces show no diffuse lighting.




My question is why not just leave it be negative? IMO, both the negative and zero will make the color be black.










share|improve this question



























    3














    In Cg tuts, Diffuse Section




    Surfaces that face away from the light will produce negative dot-product values, so the max(N · L, 0) in the equation ensures that these surfaces show no diffuse lighting.




    My question is why not just leave it be negative? IMO, both the negative and zero will make the color be black.










    share|improve this question

























      3












      3








      3







      In Cg tuts, Diffuse Section




      Surfaces that face away from the light will produce negative dot-product values, so the max(N · L, 0) in the equation ensures that these surfaces show no diffuse lighting.




      My question is why not just leave it be negative? IMO, both the negative and zero will make the color be black.










      share|improve this question













      In Cg tuts, Diffuse Section




      Surfaces that face away from the light will produce negative dot-product values, so the max(N · L, 0) in the equation ensures that these surfaces show no diffuse lighting.




      My question is why not just leave it be negative? IMO, both the negative and zero will make the color be black.







      lighting cg






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 2 days ago









      AlexWeiAlexWei

      1674




      1674






















          3 Answers
          3






          active

          oldest

          votes


















          10














          If lighting with multiple lights, they add together to make the final lighting value. A negative light would darken other lights, which is incorrect. This is also true if you add in specular reflections, emissive lighting, or other sources of lighting. The negative lighting from one source of lighting would darken some other source of non negative lighting.






          share|improve this answer





















          • If only one direction light is taken into account, no further processing such as half-lambert, is there any need to use the max func?
            – AlexWei
            2 days ago






          • 3




            If your application does indeed not rely on this value not being negative (only a single light source, just rendering straight to a color target in a way that will lead to the output being clamped to black anyways, etc.) then, by all means, go ahead and skip the max() if it makes you feel better. But do so, knowing that this will merely produce a result indistinguishable from the correct result in the most narrow circumstances and incorrect results in any other case. Meanwhile, any useful explanation of how shading works will continue to present the formula that is correct in general… 😉
            – Michael Kenzel
            2 days ago










          • @MichaelKenzel Actually, it will makes me feel better :) knowing it could be safely skipped. Because I am afraid there is sth beyond my knowledge happens under the hood. Thanks.
            – AlexWei
            2 days ago



















          2














          Because negative shading values are undefined and don't play well with tonemapping. It is preferable to use values in $[0,1]$ for low-dynamic-range or $[0,+infty)$ for high-dynamic-range images.






          share|improve this answer





























            1














            $N cdot L < 0$ implies that the light is directed in the direction opposite the normal to the visible surface of the polygon. This means that the light is coming from behind and striking the back face of the polygon. In the analogous situation in real life, light striking one face of an opaque surface does not affect the illumination of a second face. Shining light on the back of a book (or other opaque object) does make the front of the book darker (that is it does not apply negative lighting): it simply has no effect on the front face of the book. This is the reason for the max() function.



            Applying negative illumination to a surface where $N cdot L < 0$ doesn't make sense physically. In geometric optics with incoherent light sources there is no such thing as negative illumination.






            share|improve this answer








            New contributor




            WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.


















              Your Answer





              StackExchange.ifUsing("editor", function () {
              return StackExchange.using("mathjaxEditing", function () {
              StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
              StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
              });
              });
              }, "mathjax-editing");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "633"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcomputergraphics.stackexchange.com%2fquestions%2f8451%2fwhy-diffuse-light-use-maxn-h-0-instead-of-just-letting-it-be-negative%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              10














              If lighting with multiple lights, they add together to make the final lighting value. A negative light would darken other lights, which is incorrect. This is also true if you add in specular reflections, emissive lighting, or other sources of lighting. The negative lighting from one source of lighting would darken some other source of non negative lighting.






              share|improve this answer





















              • If only one direction light is taken into account, no further processing such as half-lambert, is there any need to use the max func?
                – AlexWei
                2 days ago






              • 3




                If your application does indeed not rely on this value not being negative (only a single light source, just rendering straight to a color target in a way that will lead to the output being clamped to black anyways, etc.) then, by all means, go ahead and skip the max() if it makes you feel better. But do so, knowing that this will merely produce a result indistinguishable from the correct result in the most narrow circumstances and incorrect results in any other case. Meanwhile, any useful explanation of how shading works will continue to present the formula that is correct in general… 😉
                – Michael Kenzel
                2 days ago










              • @MichaelKenzel Actually, it will makes me feel better :) knowing it could be safely skipped. Because I am afraid there is sth beyond my knowledge happens under the hood. Thanks.
                – AlexWei
                2 days ago
















              10














              If lighting with multiple lights, they add together to make the final lighting value. A negative light would darken other lights, which is incorrect. This is also true if you add in specular reflections, emissive lighting, or other sources of lighting. The negative lighting from one source of lighting would darken some other source of non negative lighting.






              share|improve this answer





















              • If only one direction light is taken into account, no further processing such as half-lambert, is there any need to use the max func?
                – AlexWei
                2 days ago






              • 3




                If your application does indeed not rely on this value not being negative (only a single light source, just rendering straight to a color target in a way that will lead to the output being clamped to black anyways, etc.) then, by all means, go ahead and skip the max() if it makes you feel better. But do so, knowing that this will merely produce a result indistinguishable from the correct result in the most narrow circumstances and incorrect results in any other case. Meanwhile, any useful explanation of how shading works will continue to present the formula that is correct in general… 😉
                – Michael Kenzel
                2 days ago










              • @MichaelKenzel Actually, it will makes me feel better :) knowing it could be safely skipped. Because I am afraid there is sth beyond my knowledge happens under the hood. Thanks.
                – AlexWei
                2 days ago














              10












              10








              10






              If lighting with multiple lights, they add together to make the final lighting value. A negative light would darken other lights, which is incorrect. This is also true if you add in specular reflections, emissive lighting, or other sources of lighting. The negative lighting from one source of lighting would darken some other source of non negative lighting.






              share|improve this answer












              If lighting with multiple lights, they add together to make the final lighting value. A negative light would darken other lights, which is incorrect. This is also true if you add in specular reflections, emissive lighting, or other sources of lighting. The negative lighting from one source of lighting would darken some other source of non negative lighting.







              share|improve this answer












              share|improve this answer



              share|improve this answer










              answered 2 days ago









              Alan WolfeAlan Wolfe

              4,85121249




              4,85121249












              • If only one direction light is taken into account, no further processing such as half-lambert, is there any need to use the max func?
                – AlexWei
                2 days ago






              • 3




                If your application does indeed not rely on this value not being negative (only a single light source, just rendering straight to a color target in a way that will lead to the output being clamped to black anyways, etc.) then, by all means, go ahead and skip the max() if it makes you feel better. But do so, knowing that this will merely produce a result indistinguishable from the correct result in the most narrow circumstances and incorrect results in any other case. Meanwhile, any useful explanation of how shading works will continue to present the formula that is correct in general… 😉
                – Michael Kenzel
                2 days ago










              • @MichaelKenzel Actually, it will makes me feel better :) knowing it could be safely skipped. Because I am afraid there is sth beyond my knowledge happens under the hood. Thanks.
                – AlexWei
                2 days ago


















              • If only one direction light is taken into account, no further processing such as half-lambert, is there any need to use the max func?
                – AlexWei
                2 days ago






              • 3




                If your application does indeed not rely on this value not being negative (only a single light source, just rendering straight to a color target in a way that will lead to the output being clamped to black anyways, etc.) then, by all means, go ahead and skip the max() if it makes you feel better. But do so, knowing that this will merely produce a result indistinguishable from the correct result in the most narrow circumstances and incorrect results in any other case. Meanwhile, any useful explanation of how shading works will continue to present the formula that is correct in general… 😉
                – Michael Kenzel
                2 days ago










              • @MichaelKenzel Actually, it will makes me feel better :) knowing it could be safely skipped. Because I am afraid there is sth beyond my knowledge happens under the hood. Thanks.
                – AlexWei
                2 days ago
















              If only one direction light is taken into account, no further processing such as half-lambert, is there any need to use the max func?
              – AlexWei
              2 days ago




              If only one direction light is taken into account, no further processing such as half-lambert, is there any need to use the max func?
              – AlexWei
              2 days ago




              3




              3




              If your application does indeed not rely on this value not being negative (only a single light source, just rendering straight to a color target in a way that will lead to the output being clamped to black anyways, etc.) then, by all means, go ahead and skip the max() if it makes you feel better. But do so, knowing that this will merely produce a result indistinguishable from the correct result in the most narrow circumstances and incorrect results in any other case. Meanwhile, any useful explanation of how shading works will continue to present the formula that is correct in general… 😉
              – Michael Kenzel
              2 days ago




              If your application does indeed not rely on this value not being negative (only a single light source, just rendering straight to a color target in a way that will lead to the output being clamped to black anyways, etc.) then, by all means, go ahead and skip the max() if it makes you feel better. But do so, knowing that this will merely produce a result indistinguishable from the correct result in the most narrow circumstances and incorrect results in any other case. Meanwhile, any useful explanation of how shading works will continue to present the formula that is correct in general… 😉
              – Michael Kenzel
              2 days ago












              @MichaelKenzel Actually, it will makes me feel better :) knowing it could be safely skipped. Because I am afraid there is sth beyond my knowledge happens under the hood. Thanks.
              – AlexWei
              2 days ago




              @MichaelKenzel Actually, it will makes me feel better :) knowing it could be safely skipped. Because I am afraid there is sth beyond my knowledge happens under the hood. Thanks.
              – AlexWei
              2 days ago











              2














              Because negative shading values are undefined and don't play well with tonemapping. It is preferable to use values in $[0,1]$ for low-dynamic-range or $[0,+infty)$ for high-dynamic-range images.






              share|improve this answer


























                2














                Because negative shading values are undefined and don't play well with tonemapping. It is preferable to use values in $[0,1]$ for low-dynamic-range or $[0,+infty)$ for high-dynamic-range images.






                share|improve this answer
























                  2












                  2








                  2






                  Because negative shading values are undefined and don't play well with tonemapping. It is preferable to use values in $[0,1]$ for low-dynamic-range or $[0,+infty)$ for high-dynamic-range images.






                  share|improve this answer












                  Because negative shading values are undefined and don't play well with tonemapping. It is preferable to use values in $[0,1]$ for low-dynamic-range or $[0,+infty)$ for high-dynamic-range images.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 2 days ago









                  HubbleHubble

                  1515




                  1515























                      1














                      $N cdot L < 0$ implies that the light is directed in the direction opposite the normal to the visible surface of the polygon. This means that the light is coming from behind and striking the back face of the polygon. In the analogous situation in real life, light striking one face of an opaque surface does not affect the illumination of a second face. Shining light on the back of a book (or other opaque object) does make the front of the book darker (that is it does not apply negative lighting): it simply has no effect on the front face of the book. This is the reason for the max() function.



                      Applying negative illumination to a surface where $N cdot L < 0$ doesn't make sense physically. In geometric optics with incoherent light sources there is no such thing as negative illumination.






                      share|improve this answer








                      New contributor




                      WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.























                        1














                        $N cdot L < 0$ implies that the light is directed in the direction opposite the normal to the visible surface of the polygon. This means that the light is coming from behind and striking the back face of the polygon. In the analogous situation in real life, light striking one face of an opaque surface does not affect the illumination of a second face. Shining light on the back of a book (or other opaque object) does make the front of the book darker (that is it does not apply negative lighting): it simply has no effect on the front face of the book. This is the reason for the max() function.



                        Applying negative illumination to a surface where $N cdot L < 0$ doesn't make sense physically. In geometric optics with incoherent light sources there is no such thing as negative illumination.






                        share|improve this answer








                        New contributor




                        WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.





















                          1












                          1








                          1






                          $N cdot L < 0$ implies that the light is directed in the direction opposite the normal to the visible surface of the polygon. This means that the light is coming from behind and striking the back face of the polygon. In the analogous situation in real life, light striking one face of an opaque surface does not affect the illumination of a second face. Shining light on the back of a book (or other opaque object) does make the front of the book darker (that is it does not apply negative lighting): it simply has no effect on the front face of the book. This is the reason for the max() function.



                          Applying negative illumination to a surface where $N cdot L < 0$ doesn't make sense physically. In geometric optics with incoherent light sources there is no such thing as negative illumination.






                          share|improve this answer








                          New contributor




                          WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          $N cdot L < 0$ implies that the light is directed in the direction opposite the normal to the visible surface of the polygon. This means that the light is coming from behind and striking the back face of the polygon. In the analogous situation in real life, light striking one face of an opaque surface does not affect the illumination of a second face. Shining light on the back of a book (or other opaque object) does make the front of the book darker (that is it does not apply negative lighting): it simply has no effect on the front face of the book. This is the reason for the max() function.



                          Applying negative illumination to a surface where $N cdot L < 0$ doesn't make sense physically. In geometric optics with incoherent light sources there is no such thing as negative illumination.







                          share|improve this answer








                          New contributor




                          WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          share|improve this answer



                          share|improve this answer






                          New contributor




                          WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          answered 2 days ago









                          WaterMoleculeWaterMolecule

                          1112




                          1112




                          New contributor




                          WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.





                          New contributor





                          WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.






                          WaterMolecule is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Computer Graphics Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              Use MathJax to format equations. MathJax reference.


                              To learn more, see our tips on writing great answers.





                              Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                              Please pay close attention to the following guidance:


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcomputergraphics.stackexchange.com%2fquestions%2f8451%2fwhy-diffuse-light-use-maxn-h-0-instead-of-just-letting-it-be-negative%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

                              Alcedinidae

                              Origin of the phrase “under your belt”?