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.shfor shared decoding/encoding utility functions. - Add
metallicRoughnessCombinesampler to the deferred combination pass to support new normal reconstruction logic.