feat add model loading diagnostics

This commit is contained in:
Tom Boullay
2026-05-02 00:14:47 +02:00
parent 4d7d2efdcc
commit 1d64582383
13 changed files with 218 additions and 29 deletions
+68
View File
@@ -0,0 +1,68 @@
import { logger } from "@/utils/core/logger";
import type { Vector3Tuple } from "@/types/three/three";
export interface ModelLoadLogContext {
modelPath: string;
scope: string;
position?: Vector3Tuple | undefined;
rotation?: Vector3Tuple | undefined;
scale?: Vector3Tuple | number | undefined;
}
interface LoadedModelInfo {
scene: {
name: string;
};
animations: Array<{
name: string;
}>;
}
function getModelLoadHint(error: Error): string | undefined {
const message = error.message.toLowerCase();
if (
message.includes("unexpected token 'v'") ||
message.includes("version https://git-lfs") ||
message.includes("git-lfs")
) {
return "This file looks like a Git LFS pointer instead of a real GLTF asset. Run `git lfs pull` or replace the asset.";
}
if (message.includes("couldn't load texture")) {
return "A texture referenced by the GLTF could not be loaded. Check file names, casing, and paths next to the model.";
}
return undefined;
}
export function logModelLoadSuccess(
context: ModelLoadLogContext,
gltf: LoadedModelInfo,
): void {
logger.debug("ModelLoader", "Model loaded", {
modelPath: context.modelPath,
scope: context.scope,
position: context.position,
rotation: context.rotation,
scale: context.scale,
sceneName: gltf.scene.name || null,
animations: gltf.animations.map((animation) => animation.name),
animationCount: gltf.animations.length,
});
}
export function logModelLoadError(
context: ModelLoadLogContext,
error: Error,
): void {
logger.error("ModelLoader", "Model failed to load", {
modelPath: context.modelPath,
scope: context.scope,
position: context.position,
rotation: context.rotation,
scale: context.scale,
reason: error.message,
hint: getModelLoadHint(error),
});
}