perf(falukant): simplify house runtime geometry
All checks were successful
Deploy to production / deploy (push) Successful in 1m54s
All checks were successful
Deploy to production / deploy (push) Successful in 1m54s
This commit is contained in:
@@ -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)) {
|
||||
|
||||
@@ -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, '..'),
|
||||
|
||||
Reference in New Issue
Block a user