I often use a 2D Perlin noise texture to displace a grid in the vertex shader (e.g. terrain, ocean). However, every time I google the method to calculate post-displacement normals there is a slight difference. For example, the value to place in the Y-component varies depending on the source. In this example, they place a '1' in the Y-component prior to normalization:
Real-Time Parametric Shallow Wave Simulation | Intel® Software
Whereas in these codes, the value '2' is chosen:
Terrains, Normals, and a Heightmap | dian-xiang.com/blog
What gives? Is there a definitive source for calculating normals from a height map?
Might this be related to unprojecting mouse clicks? It always bothered me that you could throw a '0.5' in the Z-component, as mrdoob mentioned here:
Three.js Projector and Ray objects | Stack Overflow
Or use a '1' in the Z-component as Anton does here:
Mouse Picking with Ray Casting | Anton's OpenGL 4 Notes
Is there a connection between calculating normals from height maps and unprojecting mouse clicks?
The second part of my question concerns choosing an epsilon to sample the height map. Before I learned about height maps, I read about getting the normal from an implicit surface as in this link:
Fractals, computer graphics, mathematics, demoscene and more | Inigo Quilez Blog
It seems like the epsilon number is just made up though. In my projects, I typically just fudge the value until it looks good. Is there a definitive source, or at least a good rule of thumb?