perf(falukant): simplify house runtime geometry
All checks were successful
Deploy to production / deploy (push) Successful in 1m54s

This commit is contained in:
Torsten Schulz (local)
2026-09-29 11:56:53 +02:00
parent 8b06896b44
commit 2ebd8216fa
2 changed files with 19 additions and 2 deletions

View File

@@ -16,13 +16,20 @@ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
const frontendDir = path.resolve(scriptDir, '..');
const args = process.argv.slice(2);
const optionIndex = args.indexOf('--assets-dir');
const categoryIndex = args.indexOf('--category');
const assetsDir = path.resolve(optionIndex >= 0 && args[optionIndex + 1]
? args[optionIndex + 1]
: path.join(frontendDir, '..', '..', 'YourPart3Assets'));
const sourceRoot = path.join(assetsDir, 'models-src', '3d', 'falukant');
const outputRoot = path.join(assetsDir, 'public', 'models', '3d', 'falukant');
for (const category of ['characters', 'houses']) {
const selectedCategory = categoryIndex >= 0 ? args[categoryIndex + 1] : null;
const categories = selectedCategory ? [selectedCategory] : ['characters', 'houses'];
if (categories.some((category) => !['characters', 'houses'].includes(category))) {
throw new Error('Use --category characters or --category houses.');
}
for (const category of categories) {
const sourceDir = path.join(sourceRoot, category);
const outputDir = path.join(outputRoot, category);
if (!fs.existsSync(sourceDir)) {

View File

@@ -62,6 +62,7 @@ function optimizeModelDirectory({ name, sourceDir, outputDir, required = false }
}
console.log(`Optimize Falukant ${name} GLBs (Draco + texture 1024)\n`);
const isHouse = name === 'house' || name === 'houses' || path.basename(sourceDir) === 'houses';
for (const f of models) {
const input = path.join(sourceDir, f);
@@ -71,7 +72,16 @@ function optimizeModelDirectory({ name, sourceDir, outputDir, required = false }
try {
const result = spawnSync(
'node',
[cli, 'optimize', input, output, '--compress', 'draco', '--texture-size', '1024'],
[
cli, 'optimize', input, output,
'--compress', 'draco',
'--texture-size', '1024',
// Draco reduces download size, while simplify prevents high-poly
// scans from exhausting browser GPU memory. Houses are small
// previews, so they get a deliberately stronger reduction.
'--simplify-ratio', isHouse ? '0.05' : '0.35',
'--simplify-error', isHouse ? '0.02' : '0.01',
],
{
stdio: 'inherit',
cwd: path.join(__dirname, '..'),