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 frontendDir = path.resolve(scriptDir, '..');
|
||||||
const args = process.argv.slice(2);
|
const args = process.argv.slice(2);
|
||||||
const optionIndex = args.indexOf('--assets-dir');
|
const optionIndex = args.indexOf('--assets-dir');
|
||||||
|
const categoryIndex = args.indexOf('--category');
|
||||||
const assetsDir = path.resolve(optionIndex >= 0 && args[optionIndex + 1]
|
const assetsDir = path.resolve(optionIndex >= 0 && args[optionIndex + 1]
|
||||||
? args[optionIndex + 1]
|
? args[optionIndex + 1]
|
||||||
: path.join(frontendDir, '..', '..', 'YourPart3Assets'));
|
: path.join(frontendDir, '..', '..', 'YourPart3Assets'));
|
||||||
const sourceRoot = path.join(assetsDir, 'models-src', '3d', 'falukant');
|
const sourceRoot = path.join(assetsDir, 'models-src', '3d', 'falukant');
|
||||||
const outputRoot = path.join(assetsDir, 'public', 'models', '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 sourceDir = path.join(sourceRoot, category);
|
||||||
const outputDir = path.join(outputRoot, category);
|
const outputDir = path.join(outputRoot, category);
|
||||||
if (!fs.existsSync(sourceDir)) {
|
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`);
|
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) {
|
for (const f of models) {
|
||||||
const input = path.join(sourceDir, f);
|
const input = path.join(sourceDir, f);
|
||||||
@@ -71,7 +72,16 @@ function optimizeModelDirectory({ name, sourceDir, outputDir, required = false }
|
|||||||
try {
|
try {
|
||||||
const result = spawnSync(
|
const result = spawnSync(
|
||||||
'node',
|
'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',
|
stdio: 'inherit',
|
||||||
cwd: path.join(__dirname, '..'),
|
cwd: path.join(__dirname, '..'),
|
||||||
|
|||||||
Reference in New Issue
Block a user