- Home /
[Solved]Simple shader - light only faces.
Hello, I ran into a problem when trying to light a mesh with very distinct sharp shapes, which I need to keep. I checked every shader that Unity has to offer, and nothing suits my needs. Unity shaders try to round up the sharp edges of the mesh which is really great at most situations but not in particular.
I am using a directional light btw, and the material on the mesh is plain red, no textures. I'm really stuck here, any help would be appreciated, thanks in advance.
Answer by Jeff-Kesselman · May 11, 2014 at 09:23 PM
In general, you don't do this in the shader, you do it in your normals.
In a rounded object, the normal at a vertex is the average of the surface normals meeting at that vertex.
In a non-rounded object, all the normals of a poly's vertices are the same as the surface normal of the poly.
Whether you could fake this in a shader I don't know, but I tend to doubt it as I believe that, by the time you get down to the shader program, you no longer have the knowledge of which vertices belong to a common poly...
You could use a shader that "flat shaded" the poly but then you would lose the lighting which it looks to me like you want.
Thanks, I actually searched deeper and found the answer myself. What I did is selected my mesh, and in the inspector view under the "Normals & Tangents" set the Normals to "Calculate" and then turned the Smoothing Angle to zero. Now I have perfectly what I needed.
This shall be a lesson for me to search harder before asking, but yet I hope someone finds this helpful too.
Your answer
Follow this Question
Related Questions
How to export a tessellated mesh? 0 Answers
Shader reflection only in hilights 0 Answers
Transparency / depth problem 0 Answers
Change Z offset of lines 1 Answer
Objects Not Visible In Low End Computer. (Shader Error) 1 Answer