- Home /
Run-time loaded Normal Map Lighting problem
Hello everyone!
I've tried to find an answer to this but without luck. I thought I'll try it here:
I load a Normal map in run-time, all is fine, but the point light I'm using, it lits the surface only in a cone shape. Without the normal map loaded all is fine. If I assign the normal map in the editor, it is also fine. It behaves this strangely only when I load the map in run-time.
And yes, I tried with both Forward and Deferred Lighting renderers.
See the attached images with and without the normal map.
Without the normal map:
With the normal map:
And the image I'm using for this map: Normal Map Image
Thanks a lot in advance!
Answer by yuanxing_cai · Oct 07, 2014 at 02:37 PM
My answer is based on my assumptions of how you actually load and use the normal texture. So it could be totally irrelevant if the assumptions are false :-P
When you import the normal texture in the editor, I guess you set its Texture Type to 'Normal map'. This is necessary as Unity's built-in shaders expect that the normal data in the normal map is packed in a particular way (see the UnpackNormal function in UnityCG.cginc for detail). Setting the Texture Type to 'Normal map' makes sure the packing happens at import time (thus you don't have to do anything at runtime).
However, if you load a image file at runtime by using WWW or Texture2D.LoadImage(), Unity has no way to know if it's going to be used as a normal map and you have to do the packing by yourself. Here is how to do it.
And also if you can load the normal map asset (which is already nicely packed) by using Resources.Load() or an AssentBundle, there should be no such problem.
Hopefully this helps!
Your answer
Follow this Question
Related Questions
Problem importing normal map texture at runtime 0 Answers
Strange normal map on Android 0 Answers
Normal map messed up on android 1 Answer
a shader or decal that only renders the normal map 0 Answers
"Fading in" a Normal Map 2 Answers