the unofficial normalmap/heightmap solution for Affinity Photo is now available. more information about the available functions is on the gumroad page; https://gum.co/NP-AP
This looks like it could be a really interesting concept, but it's kind of hard to offer any feedback without context (form and function, and all that). Is he for a game or an animation?
The instructions to get world normal in a surface Shaffer are in the documentation. Input struct needs... float3 workdNormal; INTERNAL_DATA Then in the surf function... float3 wNormal = WorldNormalVector(IN, o.Normal);