Give ModelData a Result-based path to rewrite vertex normals (including radial-from-center) and bake them into an RGBA8 tangent or object-space map.
Co-authored-by: Cursor <cursoragent@cursor.com>
ModelData gains material accessors (base color, metallic/roughness, opacity, two-sided), texture queries by type name (base_color/diffuse/normals/height/...), and embedded texture decode to RGBA8 ImageData. New model3d::buildRenderable(s) helpers assemble Renderable3D from a decoded model (node transform baked, material/PBR/textures applied), bound to Squirrel as Model3D::createRenderable.
Normals for assets missing authored normals now default to smooth generation: CMake applies an idempotent configure-time patch to medialoader switching aiProcess_GenNormals -> aiProcess_GenSmoothNormals.
* feat(animation): CPU skinning + CesiumMan download test
Add AnimSkin linear-blend skinning, ModelData bone/weight APIs, and a
network download script for Khronos CesiumMan used by animation.skinned
integration tests during unit_test builds.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(test): mount CesiumMan via physfs for skinned animation tests
Model3D loads through the VFS; use allowMountingForPath + mount like
ClassicScenes so CesiumMan.gltf resolves with its .bin sidecar.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>