This commit is contained in:
Rodrigo Bertoldo de Sousa Martins committed 2026-09-08 13:14:44 -03:00
1 parent f6b132623c
commit 81342d834a
4 files changed
+34 -3

No files matched your search

+1
View File
@@ -16,6 +16,7 @@
"@gltf-transform/core": "^4.0.4",
"@gltf-transform/extensions": "^4.0.4",
"@gltf-transform/functions": "^4.0.4",
"meshoptimizer": "^0.22.0",
"pg": "^8.12.0"
}
}
+16 -2
View File
@@ -6,7 +6,8 @@
// - data-pipeline/seed/manifest-real.json (entradas para o seed do banco)
import { NodeIO } from "@gltf-transform/core";
import { ALL_EXTENSIONS } from "@gltf-transform/extensions";
import { prune, dedup } from "@gltf-transform/functions";
import { prune, dedup, weld, simplify } from "@gltf-transform/functions";
import { MeshoptSimplifier } from "meshoptimizer";
import { writeFileSync, mkdirSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
@@ -14,6 +15,8 @@ import { SOURCES, SOURCE_TARGETS, RESPIRATORY_KEYWORDS } from "./sources.mjs";
import { translateToPt } from "./translate-pt.mjs";
import { SYSTEMS } from "../seed/systems.mjs";
await MeshoptSimplifier.ready;
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const CONVERTED_DIR = path.resolve(__dirname, "../converted");
const MODELS_OUT_DIR = path.resolve(__dirname, "../seed/models");
@@ -121,7 +124,18 @@ for (const { fbx, key } of SOURCES) {
console.warn(` ⚠ nenhuma malha nomeada encontrada em ${fbx} — confira o log do assimp/conversão.`);
}
await doc.transform(prune(), dedup());
// Malhas do Z-Anatomy vêm pensadas para um app desktop (Unity), com
// densidade de polígonos bem maior do que um visualizador web aguenta
// com dezenas de estruturas na tela ao mesmo tempo — sem isso os .glb
// ficam grandes demais para transferir e derrubam o contexto WebGL
// (GPU sobrecarregada). Reduzimos para ~15% dos triângulos originais,
// que mantém a forma reconhecível para fins de estudo.
await doc.transform(
weld(),
simplify({ simplifier: MeshoptSimplifier, ratio: 0.15, error: 0.01 }),
prune(),
dedup(),
);
const outPath = path.join(MODELS_OUT_DIR, target.modelFile);
await io.write(outPath, doc);
+4
View File
@@ -80,5 +80,9 @@ server {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Arquivos .glb grandes (dezenas de MB) e o host com outras
# aplicações rodando podem passar do timeout padrão de 60s.
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
+13 -1
View File
@@ -44,6 +44,10 @@ http {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Consultas grandes (milhares de estruturas) ou o host sob carga de
# outras aplicações podem passar de 60s (default do nginx).
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location /models/ {
@@ -53,7 +57,15 @@ http {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Cache-Control "public, max-age=604800, immutable";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
# NÃO usar "immutable"/cache longo aqui: os arquivos .glb têm nome
# fixo por sistema (ex: muscular.glb) mas o CONTEÚDO muda toda vez
# que o pipeline roda de novo — com cache "immutable" o navegador
# nunca mais rebaixava a versão nova, mesmo com hard-refresh.
# "no-cache" ainda permite resposta 304 (rápida) quando o arquivo
# realmente não mudou, via ETag do @fastify/static.
add_header Cache-Control "no-cache";
}
# SPA fallback.