You can use gdaldem hillshade to create hillshades.
This command outputs an 8-bit raster with a nice shaded relief effect. It’s very useful for visualizing the terrain. You can optionally specify the azimuth and altitude of the light source, a vertical exaggeration factor and a scaling factor to account for differences between vertical and horizontal units.
The value 0 is used as the output nodata value.
The following specific options are available :
vertical exaggeration used to pre-multiply the elevations
ratio of vertical units to horizontal. If the horizontal unit of the source DEM is degrees (e.g Lat/Long WGS84 projection), you can use scale=111120 if the vertical units are meters (or scale=370400 if they are in feet)
azimuth of the light, in degrees. 0 if it comes from the top of the raster, 90 from the east, ... The default value, 315, should rarely be changed as it is the value generally used to generate shaded maps.
altitude of the light, in degrees. 90 if the light comes from above the DEM, 0 if it is raking light.
(starting with GDAL 1.10) combined shading, a combination of slope and oblique shading.
(starting with GDAL 2.2) multidirectional shading, a combination of hillshading illuminated from 225 deg, 270 deg, 315 deg, and 360 deg azimuth.
The result you show in your EDIT is an expected result.
However, the shade effect is very stark, which is probably not what you want for an overlay. To get a lighter/smoother result, make sure you have the correct -s factor set for your source height data, and then use the -z factor to tweak the vertical exaggeration.
Alternatively, you can use regular image manipulation to smoothen the image to produce an overlay that is pleasant for your usecase.