feat: integrate Draco compression for 3D models in backoffice
- Added support for uploading and compressing GLB models using Draco in the backoffice. - Implemented commands for importing and re-compressing 3D models. - Updated model resource to handle 3D model uploads and validations. - Introduced a new script for compressing GLB files with Draco. - Modified Vite configuration to remove GLB files from the build output. - Updated package dependencies to include GLTF-transform libraries for handling 3D models. - Added tests to ensure proper functionality of 3D model handling and compression.
This commit is contained in:
+27
-6
@@ -2,10 +2,33 @@ import { defineConfig } from 'vite';
|
||||
import path from 'path';
|
||||
import { viteStaticCopy } from 'vite-plugin-static-copy';
|
||||
import { ViteMinifyPlugin } from 'vite-plugin-minify'
|
||||
import dracoModels from './vite-plugins/draco-models.js';
|
||||
import fs from 'node:fs/promises';
|
||||
// Cifratura dei modelli, pronta ma non attiva: vedi vite-plugins/encrypt-models.js.
|
||||
// import encryptModels from './vite-plugins/encrypt-models.js';
|
||||
|
||||
// Nessun .glb va online dalla build (es. i file archiviati in assets/data): i modelli 3D li serve il
|
||||
// backoffice, già compressi con Draco. Parte dopo il writeBundle di vite-plugin-static-copy.
|
||||
function rimuoviGlb() {
|
||||
let outDir;
|
||||
return {
|
||||
name: 'kreios-rimuovi-glb',
|
||||
apply: 'build',
|
||||
configResolved(config) {
|
||||
outDir = config.build.outDir;
|
||||
},
|
||||
writeBundle: {
|
||||
sequential: true,
|
||||
order: 'post',
|
||||
async handler() {
|
||||
const files = await fs.readdir(path.join(outDir, 'assets'), { recursive: true }).catch(() => []);
|
||||
await Promise.all(files
|
||||
.filter((file) => file.toLowerCase().endsWith('.glb'))
|
||||
.map((file) => fs.rm(path.join(outDir, 'assets', file))));
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
// Il configuratore è servito da Laravel sotto /configuratore/ (stessa origine dell'API):
|
||||
// la build finisce direttamente in backoffice/public/configuratore.
|
||||
@@ -29,16 +52,14 @@ export default defineConfig({
|
||||
viteStaticCopy({
|
||||
targets: [
|
||||
{
|
||||
// I modelli 3D non vengono copiati così come sono: li comprime dracoModels.
|
||||
// I modelli 3D sono gestiti dal backoffice (caricati e compressi con Draco):
|
||||
// quelli in src/assets/models servono solo a `php artisan modelli3d:importa`.
|
||||
src: ['assets/*', '!assets/models'],
|
||||
dest: 'assets'
|
||||
}
|
||||
]
|
||||
}),
|
||||
dracoModels({
|
||||
modelsDir: path.resolve(__dirname, 'src/assets/models'),
|
||||
cacheDir: path.resolve(__dirname, 'node_modules/.cache/draco-models'),
|
||||
}),
|
||||
rimuoviGlb(),
|
||||
ViteMinifyPlugin({
|
||||
minify: {
|
||||
removeComments: true,
|
||||
|
||||
Reference in New Issue
Block a user