I work on addon for UV box mapping. In my addon I need to check face normal to sort X,Y or Z oriented faces. By following this topic I found how to compensate object rotation by multiplying object matrix to face normal vector.
Now issue with object scale. On image - object scaled by Z to 0.1, face normal look almost straight to up to Z but mesh data still return normal as if object not scaled.
Question is - how to compensate object scale to get "true" face normals? Blender do it somehow under the hood when showing Normal Gizmo for selected face so how can I get same result.

nrm_fixedas above. – batFINGER Jul 29 '21 at 19:18matrix_world.to_3x3().normalized()( .to_3x3() - removed location .normalized() - removed scale) Not sure I get it right "I take it the quest here is to find the global space normal." I have checked your link... so u propose just usemw.inverted_safe().transposed().to_3x3()? Check this screenshot - my final vector look at (1.0000, 0.0009, 0.0006), your one at (0.8581, -0.3095, -0.4098) what looks wrong. – IIIFGIII Jul 31 '21 at 05:57.normalized()(so you get actually scaled normal vector) thisn.to_track_quat().to_euler()you use to set empties rotation take in to account that normal scale and set correct euler rotation. Interestingly... But still not work for me - I need clear normalized and correct face normal vector for my addon purpose. – IIIFGIII Jul 31 '21 at 06:20(object.matrix_world.inverted_safe().transposed().to_3x3() @ normal).normalized()return same (1.0000, 0.0009, 0.0006) normal vector. Thank you kindly for your help )) – IIIFGIII Jul 31 '21 at 07:16