Does playcanvas support object-spaced normal maps?

The previous engine I used had Object-spaced support for normal maps with their StandardMaterial, so I could avoid having to calculate normals/tangents ( particularly for planar-like objects like my terrain LOD quadtree grid i am porting to playcanvas ) and thus save on vertex data memory. But it seems playcanvas does not support this ? Any advice on how i may add this into the current pc.Standardmaterial?

I have 2 versions at the moment for my project at

  1. Using generalised orthogonal vertex tangents/normals-facing-straight up + normal map textures for my chunked LOD terrain system port ( for minimal visual LOD popping since all the vertex normals/tangents are kept equal and orthogonal throughout, only the Normal Map is applied in the fragment shader, albeit over (0,1,0) vertex normals so the lighting effect isn’t as accurate/strong/prominent, lacking in directional facing bias ).


  1. Use the highest LOD terrain chunk’s vertex normal/tangent samples ( at the cost of added visual lighting popping issues due to vertex geometry blending switches during terrain LOD changes…No way around this to avoid popping when vertex count changes once LOD switches to different level?)

Prefably, I would want to use object-spaced normal maps for my terrain to avoid popping issues with vertex-blended normals/tangents. (or modify the fragment shader to determine tangents/bitangents on the fly from an object-spaced Normal map sample itself (2 cross products and 1 normalize) from tex2D normal-map sample, rather than depend on vertex passed varying normals/tangents).

Anyway to modify shader chunk for getNormal.frag to suit my own terrain Object-spaced normal conventions without relying on passeed TBN from vertex shader?

this.material.resource.chunks[“normalMapFloatPS”] = “…my custom shader” might do the trick.

But if i want to forego the check for standard material to allow for object-spaced normal maps without requirements for normal+tangents, i might need to modify the core standard.js in program-lib though, to allow for a chunk case without supplied Normal + Tangent (assumed to use object-space).