Jump to content
Sign in to follow this  
jonklein

Custom Lambert - Problems with Light Position

Recommended Posts

Hello!

I'm working on a custom toon shader. As a basis I want to use the lambert lighting model as described in the tutorial embedded below. To test this I created a very simple scene with a sphere placed at the origin, a point light and a material with the material builder applied to the sphere (see image below).

Now, here's the problem: The shading of the sphere is incorrect as soon as the point light has negative coordinates. It seems as if the surface_global's P and N are expressed in a different space compared to the point light's position. This happend with Mantra as well as Redshift (where I used the same setup as in the video below, apart from getting the light's position through a constant and channel references). Am I wrong to assume that P is the world position of the current point being shaded and N is it's normalised normal? Is this the wrong way to get the light position into the shader? I spent some time testing and searching on the internet but I couldn't find anything that clarified these quesitons sufficiently for me.

custom_lambert.thumb.png.cdef538f4b4d587ea59646cb94588d6d.png

 

 

custom_lambert.hipnc

Share this post


Link to post
Share on other sites

Hi Jonas,

I attached a simple scene that does shading based on the dot product of the surface normal and the normalized light direction. It includes a SOP-variant in VEX and a VOP-shader. 

 

Also Yancy Lindquist recently published an extensive tutorial on shading concepts:

If all you want is a lambertian toon shader you can also watch mine:

 

light_angle.hip

Edited by konstantin magnus

Share this post


Link to post
Share on other sites

Thank's Konstantin, those ressources are incredibly helpful!

Now I got it to work. The basic problem was that I had to get the light's position into the material builder not via a constant but as a parameter. That is where your approach differed from what I was working with. However, to get it to work properly I also had to invert the z-coordinate.

Edited by jonklein

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×