novolis-governance / imports-todo/gameengine-assets-mesh-import.md
Import: `Frank.GameEngine.Assets` → Novolis
Policies that keep the org coherent
dotnetgovernancenovolis
Source: D:\frankrepos\Frank.GameEngine\src\Frank.GameEngine.Assets
Also: tools\Frank.GameEngine.Generators.AssetsGenerator
What
| Frank API | Role |
|---|---|
| `SceneMeshImporter` | AssimpNet: FBX/OBJ/glTF/… → `TriangleMesh` |
| `ObjParser`, `ObjHelper` | Lightweight OBJ without Assimp |
| `IAssetsProvider<T>`, embedded models | Sample/test meshes |
| `Frank.GameEngine.Generators.AssetsGenerator` | Roslyn analyzer: `AdditionalFiles` → typed path helpers |
Frank.GameEngine.Assets.csproj references AssimpNet and the analyzer; depends only on Primitives (→ use Novolis.Math.Geometry.TriangleMesh after port).
Why
Novolis.Math.Geometry.TriangleMeshhas no loader; rendering dogfood and simulation builders hand-roll geometry.- wave-7b-raylib-obj.md is deferred; this repo is the concrete source on disk.
- Path tracing (
novolis-rendering) and BVH tests need real meshes without copying vertices into apps.
How
Target home (recommended)
`novolis-avalonia` — packable Novolis.3D.Import (AssimpNet → TriangleMesh / EditableMesh).
Also: `novolis-raylib` Novolis.Raylib.Loaders remains OBJ-only (no Assimp).
Status
- Done:
Novolis.3D.Import(AssimpMeshImporter,MeshImportOptions), SceneLabimportmesh+ Import…, CorellianFreighterBuilder--importuses the package. - Publish
2026.1.*to GPR before single-repo consumers without ProjectReference mode.
Port steps
- Copy
ObjParser/ObjHelper; retarget output toTriangleMesh/Vector3(BCL). - Port
SceneMeshImporterbehindIMeshImporterinterface; document supported formats. - Move analyzer to
novolis-raylib/codegenornovolis-analyzersif shared — keepPrivateAssets="all"analyzer pattern. - TUnit: cube.obj, quad.obj, one Assimp sample (skip in CI if native DLL flaky — use OBJ gate).
- Wire one dogfood app (
RaytraceHelloor SilkTrace) to load via package API. - Publish
2026.1.*; add registry entry.
Do not port
Frank.GameEngine.Primitivestypes already in math.- GameEngine
Scene/GameObjectgraph — stay in apps.
Dependencies
- Complete math BCL naming on GPR (internal-novolis-audit/math-bcl-refactor-publish-wave.md).
- gameengine-reference-policy.md: no
Frank.*package refs in production.
Acceptance
dotnet add package Novolis.Raylib.Loaders(name TBD) loads OBJ intoTriangleMesh.- No
ProjectReferencetoD:\frankrepos. - Assimp optional package documented separately if split.