Implement normal mapping and octahedron normal encoding

  • Add support for tangent space normal mapping across static and skinned meshes.
  • Update vertex layouts and Assimp import flags to calculate and include tangent data.
  • Implement octahedron normal encoding for G-buffer optimization, storing geometric normals in the metallic-roughness target and pixel normals in the normal target.
  • Refactor material system to use bitmasks for shader settings instead of individual floats, reducing uniform overhead.
  • Consolidate skinned mesh and static mesh fragment shaders to use a unified geom-fs.sc.
  • Integrate shaderlib.sh for shared decoding/encoding utility functions.
  • Add metallicRoughnessCombine sampler to the deferred combination pass to support new normal reconstruction logic.

Previous