- Home /
GPU Procedural planets: How to convert grayscale highmap to normal map and use it as normal map on the GPU?
Hello. I am working on procedural generation of full scale planets.
I am already implemented GPU Perlin Noise and use it to generate diffuse texture of surface and displacement map.
But also, I need somehow to use this generated gray-scale high-map as normal map.
Is it possible to transform gray scale map into normal map right inside the shader?
Of course I can extract height map and convert it into normal map on CPU by using simple algorithm, but CPU is too slow for this task. I need to generate it right inside shader and not sure how it is possible, because in the shader I can't check neighbors of pixel. Or I can?
Or maybe I can use gray-scale map as "bump map" without converting to normal map? As far as I understand, "bump mapping" it is simpler technique of normal mapping which use only gray scale texture (single channel, not a 3 channel like for normal map). In result, I need to achieve a bump\normal maps for mountains like on this picture from "Outerra" using GPU noise I have (I already have height in each point).
Is the height-map static? If so, why do you need to compute the normal-map at runtime? Ins$$anonymous$$d, generate/bake it once from your height-map (where you CAN exa$$anonymous$$e neighbor pixels), and use the resultant normal-map in your shader?
Also, FYI: Good article on differences between these maps- http://blog.digitaltutors.com/bump-normal-and-displacement-maps/
Thanks for reply. Yes, seems like I understood how to calculate normal map on GPU.
If someone will encounter the same problem - write me an email.
Your answer
Follow this Question
Related Questions
Unity 5 Shader problems 2 Answers
Water shader for planet with animated foam on shores 0 Answers
Water foam shader that works on planet water 2 Answers
Optimizing noise-based pixelated shader. 0 Answers
Simple planet atmosphere 0 Answers