diff --git a/public/assets/models/air_fryer.glb b/public/assets/models/air_fryer.glb index 183930a..01ccdd4 100644 Binary files a/public/assets/models/air_fryer.glb and b/public/assets/models/air_fryer.glb differ diff --git a/public/assets/models/basil_sprig.glb b/public/assets/models/basil_sprig.glb index 37ce0d8..c224d0b 100644 Binary files a/public/assets/models/basil_sprig.glb and b/public/assets/models/basil_sprig.glb differ diff --git a/public/assets/models/batard_loaf.glb b/public/assets/models/batard_loaf.glb index ebba671..b9cd56a 100644 Binary files a/public/assets/models/batard_loaf.glb and b/public/assets/models/batard_loaf.glb differ diff --git a/public/assets/models/bell_pepper.glb b/public/assets/models/bell_pepper.glb index cf0dbeb..b33d5ac 100644 Binary files a/public/assets/models/bell_pepper.glb and b/public/assets/models/bell_pepper.glb differ diff --git a/public/assets/models/box_grater.glb b/public/assets/models/box_grater.glb index 07b7540..6dc96d3 100644 Binary files a/public/assets/models/box_grater.glb and b/public/assets/models/box_grater.glb differ diff --git a/public/assets/models/butter_dish.glb b/public/assets/models/butter_dish.glb index 4e3b3b0..b43ea70 100644 Binary files a/public/assets/models/butter_dish.glb and b/public/assets/models/butter_dish.glb differ diff --git a/public/assets/models/button_mushroom.glb b/public/assets/models/button_mushroom.glb index ddf9f8e..e1a04dd 100644 Binary files a/public/assets/models/button_mushroom.glb and b/public/assets/models/button_mushroom.glb differ diff --git a/public/assets/models/camp_stove.glb b/public/assets/models/camp_stove.glb index 8d7c5a8..23c0534 100644 Binary files a/public/assets/models/camp_stove.glb and b/public/assets/models/camp_stove.glb differ diff --git a/public/assets/models/cast_iron_pan.glb b/public/assets/models/cast_iron_pan.glb index e46f81c..b4cba67 100644 Binary files a/public/assets/models/cast_iron_pan.glb and b/public/assets/models/cast_iron_pan.glb differ diff --git a/public/assets/models/cheese_hard.glb b/public/assets/models/cheese_hard.glb index f5a3339..a690bb1 100644 Binary files a/public/assets/models/cheese_hard.glb and b/public/assets/models/cheese_hard.glb differ diff --git a/public/assets/models/cheese_soft.glb b/public/assets/models/cheese_soft.glb index 4392c66..c2ca674 100644 Binary files a/public/assets/models/cheese_soft.glb and b/public/assets/models/cheese_soft.glb differ diff --git a/public/assets/models/cutting_board.glb b/public/assets/models/cutting_board.glb index e2c9795..096c11d 100644 Binary files a/public/assets/models/cutting_board.glb and b/public/assets/models/cutting_board.glb differ diff --git a/public/assets/models/drain_rack.glb b/public/assets/models/drain_rack.glb index 6274ab6..c646d63 100644 Binary files a/public/assets/models/drain_rack.glb and b/public/assets/models/drain_rack.glb differ diff --git a/public/assets/models/egg_carton_empty.glb b/public/assets/models/egg_carton_empty.glb index 73190b7..4c4ac08 100644 Binary files a/public/assets/models/egg_carton_empty.glb and b/public/assets/models/egg_carton_empty.glb differ diff --git a/public/assets/models/electric_hob.glb b/public/assets/models/electric_hob.glb index 4f756bd..c709c2f 100644 Binary files a/public/assets/models/electric_hob.glb and b/public/assets/models/electric_hob.glb differ diff --git a/public/assets/models/fryer_basket.glb b/public/assets/models/fryer_basket.glb index aca0e35..4a1d318 100644 Binary files a/public/assets/models/fryer_basket.glb and b/public/assets/models/fryer_basket.glb differ diff --git a/public/assets/models/fryer_pot.glb b/public/assets/models/fryer_pot.glb index 39907dd..4e1a055 100644 Binary files a/public/assets/models/fryer_pot.glb and b/public/assets/models/fryer_pot.glb differ diff --git a/public/assets/models/frying_pan.glb b/public/assets/models/frying_pan.glb index 222105f..22d7eef 100644 Binary files a/public/assets/models/frying_pan.glb and b/public/assets/models/frying_pan.glb differ diff --git a/public/assets/models/garlic_bulb.glb b/public/assets/models/garlic_bulb.glb index 57f4c66..164e6e2 100644 Binary files a/public/assets/models/garlic_bulb.glb and b/public/assets/models/garlic_bulb.glb differ diff --git a/public/assets/models/gas_bbq.glb b/public/assets/models/gas_bbq.glb index c9eff1b..4f8cd29 100644 Binary files a/public/assets/models/gas_bbq.glb and b/public/assets/models/gas_bbq.glb differ diff --git a/public/assets/models/gas_hob.glb b/public/assets/models/gas_hob.glb index 4fb0dde..9ad89a9 100644 Binary files a/public/assets/models/gas_hob.glb and b/public/assets/models/gas_hob.glb differ diff --git a/public/assets/models/induction_hob.glb b/public/assets/models/induction_hob.glb index 298266e..cc3a5b6 100644 Binary files a/public/assets/models/induction_hob.glb and b/public/assets/models/induction_hob.glb differ diff --git a/public/assets/models/juice_glass.glb b/public/assets/models/juice_glass.glb index 06038c6..9c4168f 100644 Binary files a/public/assets/models/juice_glass.glb and b/public/assets/models/juice_glass.glb differ diff --git a/public/assets/models/juicer_deluxe.glb b/public/assets/models/juicer_deluxe.glb index d66acb2..38ac021 100644 Binary files a/public/assets/models/juicer_deluxe.glb and b/public/assets/models/juicer_deluxe.glb differ diff --git a/public/assets/models/juicer_pyramid.glb b/public/assets/models/juicer_pyramid.glb index 578b3aa..74b127b 100644 Binary files a/public/assets/models/juicer_pyramid.glb and b/public/assets/models/juicer_pyramid.glb differ diff --git a/public/assets/models/juicernaut.glb b/public/assets/models/juicernaut.glb index 8612999..f04c83b 100644 Binary files a/public/assets/models/juicernaut.glb and b/public/assets/models/juicernaut.glb differ diff --git a/public/assets/models/kettle_bbq.glb b/public/assets/models/kettle_bbq.glb index 5e955a3..c88d0ce 100644 Binary files a/public/assets/models/kettle_bbq.glb and b/public/assets/models/kettle_bbq.glb differ diff --git a/public/assets/models/king_oyster.glb b/public/assets/models/king_oyster.glb index 71e5f1d..fbb61ad 100644 Binary files a/public/assets/models/king_oyster.glb and b/public/assets/models/king_oyster.glb differ diff --git a/public/assets/models/ladle.glb b/public/assets/models/ladle.glb index d3dffba..d9415de 100644 Binary files a/public/assets/models/ladle.glb and b/public/assets/models/ladle.glb differ diff --git a/public/assets/models/marmalade_jar.glb b/public/assets/models/marmalade_jar.glb index 6ab7e66..634c094 100644 Binary files a/public/assets/models/marmalade_jar.glb and b/public/assets/models/marmalade_jar.glb differ diff --git a/public/assets/models/mitey_jar.glb b/public/assets/models/mitey_jar.glb index 030ef76..6a0f593 100644 Binary files a/public/assets/models/mitey_jar.glb and b/public/assets/models/mitey_jar.glb differ diff --git a/public/assets/models/mixing_bowl.glb b/public/assets/models/mixing_bowl.glb index f020a90..d217a04 100644 Binary files a/public/assets/models/mixing_bowl.glb and b/public/assets/models/mixing_bowl.glb differ diff --git a/public/assets/models/oil_bottle.glb b/public/assets/models/oil_bottle.glb index 622f1b4..b85c6e7 100644 Binary files a/public/assets/models/oil_bottle.glb and b/public/assets/models/oil_bottle.glb differ diff --git a/public/assets/models/onion_brown.glb b/public/assets/models/onion_brown.glb index ec54539..c18a47b 100644 Binary files a/public/assets/models/onion_brown.glb and b/public/assets/models/onion_brown.glb differ diff --git a/public/assets/models/orange_half.glb b/public/assets/models/orange_half.glb index 3336c24..d3df07a 100644 Binary files a/public/assets/models/orange_half.glb and b/public/assets/models/orange_half.glb differ diff --git a/public/assets/models/orange_whole.glb b/public/assets/models/orange_whole.glb index 24c2929..2d300a1 100644 Binary files a/public/assets/models/orange_whole.glb and b/public/assets/models/orange_whole.glb differ diff --git a/public/assets/models/oven_tray.glb b/public/assets/models/oven_tray.glb index 7f48382..a29dd97 100644 Binary files a/public/assets/models/oven_tray.glb and b/public/assets/models/oven_tray.glb differ diff --git a/public/assets/models/pb_jar.glb b/public/assets/models/pb_jar.glb index f759dd0..149dded 100644 Binary files a/public/assets/models/pb_jar.glb and b/public/assets/models/pb_jar.glb differ diff --git a/public/assets/models/plate.glb b/public/assets/models/plate.glb index 8c0a067..1b5515f 100644 Binary files a/public/assets/models/plate.glb and b/public/assets/models/plate.glb differ diff --git a/public/assets/models/portobello.glb b/public/assets/models/portobello.glb index 533ec74..c91d6a0 100644 Binary files a/public/assets/models/portobello.glb and b/public/assets/models/portobello.glb differ diff --git a/public/assets/models/roast_tomatoes.glb b/public/assets/models/roast_tomatoes.glb index e791768..23002ae 100644 Binary files a/public/assets/models/roast_tomatoes.glb and b/public/assets/models/roast_tomatoes.glb differ diff --git a/public/assets/models/saucepan.glb b/public/assets/models/saucepan.glb index 12908d1..f91e894 100644 Binary files a/public/assets/models/saucepan.glb and b/public/assets/models/saucepan.glb differ diff --git a/public/assets/models/slotted_spoon.glb b/public/assets/models/slotted_spoon.glb index ad5942f..ecd9673 100644 Binary files a/public/assets/models/slotted_spoon.glb and b/public/assets/models/slotted_spoon.glb differ diff --git a/public/assets/models/sourdough_loaf.glb b/public/assets/models/sourdough_loaf.glb index 2868c00..e62e507 100644 Binary files a/public/assets/models/sourdough_loaf.glb and b/public/assets/models/sourdough_loaf.glb differ diff --git a/public/assets/models/spatula.glb b/public/assets/models/spatula.glb index 91c5aed..1ce3727 100644 Binary files a/public/assets/models/spatula.glb and b/public/assets/models/spatula.glb differ diff --git a/public/assets/models/stock_pot.glb b/public/assets/models/stock_pot.glb index ceba2cf..5080ffc 100644 Binary files a/public/assets/models/stock_pot.glb and b/public/assets/models/stock_pot.glb differ diff --git a/public/assets/models/tall_glass.glb b/public/assets/models/tall_glass.glb index 682d5d7..c970315 100644 Binary files a/public/assets/models/tall_glass.glb and b/public/assets/models/tall_glass.glb differ diff --git a/public/assets/models/toaster.glb b/public/assets/models/toaster.glb index fb366ab..d119d25 100644 Binary files a/public/assets/models/toaster.glb and b/public/assets/models/toaster.glb differ diff --git a/public/assets/models/tomato_vine.glb b/public/assets/models/tomato_vine.glb index c66e242..0e333a0 100644 Binary files a/public/assets/models/tomato_vine.glb and b/public/assets/models/tomato_vine.glb differ diff --git a/public/assets/models/tongs.glb b/public/assets/models/tongs.glb index 2549279..8769421 100644 Binary files a/public/assets/models/tongs.glb and b/public/assets/models/tongs.glb differ diff --git a/public/assets/models/wok.glb b/public/assets/models/wok.glb index 032b709..34f766c 100644 Binary files a/public/assets/models/wok.glb and b/public/assets/models/wok.glb differ diff --git a/public/assets/models/wooden_spoon.glb b/public/assets/models/wooden_spoon.glb index 2c7e662..64b7bc6 100644 Binary files a/public/assets/models/wooden_spoon.glb and b/public/assets/models/wooden_spoon.glb differ diff --git a/scripts/optimise-models.sh b/scripts/optimise-models.sh new file mode 100755 index 0000000..2c8f497 --- /dev/null +++ b/scripts/optimise-models.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# optimise-models.sh — shrink the generated GLBs for the web. +# +# hunyuan3d hands back ~120k triangles and 1024px textures per prop, which is +# ~4MB of download for a cooking pot. Simplified to 10% of the triangles with a +# 0.002 error bound and 512px textures, the same pot is ~800KB and looks +# identical at the distances this game shows it from. The fryer bench alone +# went from a 13MB download to under 3MB. +# +# Idempotence guard: anything already under the threshold is skipped, so a +# second run cannot simplify an already-simplified mesh into mush. Delete the +# file and re-run gen-assets.sh to start from the original. +set -uo pipefail +cd "$(dirname "$0")/.." +MODELS=public/assets/models +SKIP_UNDER=${SKIP_UNDER:-1200000} # bytes; optimised props land well under this +RATIO=${RATIO:-0.1} +ERROR=${ERROR:-0.002} +TEX=${TEX:-512} +GT="npx --yes @gltf-transform/cli@4.4.2" +TMP=$(mktemp -d) +trap 'rm -rf "$TMP"' EXIT + +before=0; after=0; done_n=0; skip_n=0 +for f in "$MODELS"/*.glb; do + [ -e "$f" ] || continue + name=$(basename "$f") + sz=$(stat -f%z "$f" 2>/dev/null || stat -c%s "$f") + before=$((before + sz)) + if [ "$sz" -lt "$SKIP_UNDER" ]; then + echo " = $name already lean ($((sz/1024))KB)" + after=$((after + sz)); skip_n=$((skip_n + 1)); continue + fi + if $GT simplify "$f" "$TMP/a.glb" --ratio "$RATIO" --error "$ERROR" >/dev/null 2>&1 \ + && $GT resize "$TMP/a.glb" "$TMP/b.glb" --width "$TEX" --height "$TEX" >/dev/null 2>&1; then + mv "$TMP/b.glb" "$f" + nsz=$(stat -f%z "$f" 2>/dev/null || stat -c%s "$f") + after=$((after + nsz)); done_n=$((done_n + 1)) + echo " + $name $((sz/1024))KB → $((nsz/1024))KB" + else + echo " ! $name FAILED — left untouched" + after=$((after + sz)) + fi +done +echo "----" +echo "optimised $done_n, skipped $skip_n" +echo "total $((before/1048576))MB → $((after/1048576))MB"