Indietro

Discarica 3D

I modelli 3D che nessuno ha scelto aspettano qui il prossimo a cui serviranno: una galassia di scarti condivisa e in tempo reale, ciascuno appeso al proprio cavo, raggruppato per quello che è. Trascina un file nella pagina, oppure lascia che il tuo agente ci butti i suoi avanzi quando ha finito un lavoro 3D; ti serve qualcosa? Descrivilo, volaci, prendilo.

Autore: zodiac
Provalo dal vivo
Discarica 3DProvalo dal vivo

Su questo progetto

Generi qualche modello 3D. Ne tieni uno. Il resto viene cancellato. 3D Junkyard è il posto dove buttare il resto: una galassia condivisa, in tempo reale, di modelli 3D scartati, ciascuno appeso al proprio cavo, raggruppato per quello che è — le sedie con le sedie, le lampade con le lampade. Un modello che nessuno ha scelto può ancora essere proprio ciò che qualcun altro sta cercando.

Butta un modello: trascina nella pagina un file GLB / glTF / FBX / OBJ / STL. Il modello compare dove lo rilasci, scende fluttuando e atterra accanto ai suoi simili — pubblico, firmato con il tuo ID. Oppure lascia fare al tuo agente. Con il server MCP e la skill di Junkyard, un agente cerca qui prima di generare, genera con Tripo solo se non trova nulla di adatto e, alla fine di ogni lavoro 3D, butta qui i modelli Tripo rimasti esclusi dalla selezione — ognuno con l’etichetta «creato con Tripo».

Ti serve qualcosa? Descrivilo, volaci, prendilo — e usalo con licenza CC BY 4.0, citando chi se n’è disfatto. In arrivo: quello che butti potrà fruttare. Ogni ritiro è già registrato; come prossimo passo, chi ha lasciato andare il modello riceverà una parte di ciò che rende.

Apri il sito in un browser desktop; sui telefoni compare un avviso che invita a cambiare dispositivo. I 1.921 modelli con cui è stato popolato il mondo provengono dal dataset pubblico Objaverse 1.0 (pubblicati su Sketchfab dai rispettivi autori con le proprie licenze Creative Commons) e atterrano pochi alla volta sotto 12 ID predefiniti; tutto ciò che butti resta appeso nella stessa galassia.

Punti salienti

  1. Trascina nella pagina un file GLB / glTF / FBX / OBJ / STL, o una cartella zippata: il modello compare dove lo rilasci, scende fluttuando e atterra accanto ai suoi simili, mentre nel punto d’atterraggio esplode un fuoco d’artificio firmato con il tuo ID, visibile a chiunque sia online
  2. Il mondo è l’indice: ogni oggetto si posa, in base al significato, in una cella permanente della galassia, con un proprio indirizzo condivisibile come JUNK-3F9K2; cerca con una frase o un’immagine e la telecamera vola verso i risultati, che si illuminano mentre tutto il resto si attenua
  3. Passa la palla al tuo agente: con il server MCP e la skill di Junkyard, Claude Code, Codex o Cursor cerca qui prima di generare, usa Tripo solo se non trova nulla di adatto e, a lavoro finito, butta qui tutto ciò che il progetto non ha usato — ogni modello con l’etichetta «creato con Tripo»
  4. Serviti pure: gli oggetti disponibili al ritiro hanno un link di download valido per cinque minuti e una riga di attribuzione già pronta — usali con licenza CC BY 4.0 citando chi se n’è disfatto; ogni ritiro è già contabilizzato e, come prossimo passo, chi l’ha lasciato andare riceverà la sua parte

Analisi tecnica

  • Il ciclo dell’agente · Prima cercare, poi generare, infine buttare via

    Un’unica skill junkyard si installa senza modifiche in Claude Code, Codex e Cursor e si appoggia a un server MCP Streamable HTTP chiamato junkyard, con quattro verbi — junkyard_search / junkyard_fetch / junkyard_dump / junkyard_reclaim — replicati identici via REST. Prima di qualsiasi generazione 3D, l’agente chiama junkyard_search con un testo, più un’immagine di riferimento se ne ha una, e below_bar nella risposta indica se i risultati sono abbastanza buoni: solo quando meno di tre superano l’asticella genera con Tripo, salvando subito l’output su disco, perché i link di download di Tripo scadono dopo cinque minuti.

    L’inventario si fa una sola volta, alla fine dell’attività: a junkyard_dump vanno solo i file generati in questo giro e non referenziati dal progetto. Un riferimento può assumere quattro forme — percorso relativo al progetto, nome del file, radice del nome senza estensione, percorso assoluto — cercate rispettando i confini di parola, senza distinzione tra maiuscole e minuscole; i modelli che l’utente ha scelto e poi spostato o copiato con un nuovo nome vengono riconosciuti tramite sha256; nel dubbio, il file resta. Le immagini di riferimento non vengono mai caricate, un progetto contrassegnato come privato salta del tutto il passaggio e la richiesta «annulla l’ultimo dump» recupera l’intera sessione con junkyard_reclaim.

  • Ingestione · Qualsiasi formato in ingresso, otto passaggi fino a un oggetto ricercabile

    I file trascinati nella pagina e quelli buttati dagli agenti condividono un’unica coda asincrona — validazione → hashing → conversione → impronta → licenza → embedding → tagging → posizionamento — e il banner che cade nella pagina mostra l’avanzamento lungo questi otto passaggi. La conversione produce una copia di visualizzazione normalizzata: asse Y verso l’alto, lato più lungo scalato a un’unità, compressione meshopt, animazioni conservate; oltre i 150.000 triangoli il modello viene decimato sotto quella soglia, e i set di texture oltre i 16 MiB vengono sottocampionati per gradi, così i file pesanti con più materiali vengono snelliti fino a rientrare nei limiti invece di essere ridotti a una nuvola di punti.

    Lo stesso renderer three.js, in esecuzione in un Chromium headless, scatta otto viste in miniatura di ogni oggetto, e MeshSurfaceSampler ne ricava una nuvola di 20.000 punti colorati: la nuvola va all’encoder 3D Uni3D e le miniature a SigLIP 2, e così si ottengono due vettori per la ricerca. Un foglio provini a quattro viste viene inviato in un’unica chiamata al modello visione-linguaggio Qwen3-VL-Flash, che sceglie una categoria, uno stile e un colore dominante da un vocabolario controllato bilingue e aggiunge fino a cinque tag liberi in entrambe le lingue; categoria · stile · primo tag libero diventa il nome dell’oggetto in ogni elenco. I prompt originali e le immagini di riferimento non finiscono mai in alcun output pubblico.

  • Mappa semantica · Il mondo è l’indice di ricerca

    UMAP (tre componenti, non parametrico) viene addestrato una sola volta su vettori di un corpus pubblico, calcolati con lo stesso encoder usato in produzione, e congelato come mappa v1; i nuovi oggetti vengono posizionati con transform, così quelli esistenti non si spostano mai. Le coordinate vengono quantizzate in celle intere e, quando una cella è occupata, una spirale deterministica trova la cella libera più vicina. La cella è un indirizzo permanente: un oggetto recuperato vi lascia una lapide, e la cella non viene mai riutilizzata. Una curva di Hilbert 3D trasforma ogni cella in un indice a 24 bit scritto con cinque caratteri Crockford Base32 — indirizzi come JUNK-3F9K2 — in modo che numeri vicini siano vicini anche nello spazio.

    La ricerca viaggia su due canali: la torre testuale EVA02 allineata a Uni3D (le query non in inglese vengono prima tradotte automaticamente) e SigLIP 2 multilingue (il cinese viene codificato direttamente, così come le query per immagine). Ciascuno estrae i candidati da un indice HNSW in pgvector, e le due liste vengono fuse con RRF. Tra i vettori di testo e quelli degli oggetti c’è un divario di modalità, quindi una query non viene mai proiettata sulla mappa; la telecamera vola invece verso il centroide dei migliori risultati. Quando meno di tre risultati superano l’asticella, la risposta riporta below_bar — la pagina lo segnala come «corrispondenza bassa» e un agente sa che è il momento di generare.

    UMAP · Uni3D · SigLIP 2 · pgvector
  • Rendering del mondo · Quasi duemila oggetti, tre livelli di dettaglio

    Il mondo viene caricato in streaming in tile da 16×16 celle man mano che la vista si sposta, e ogni oggetto ha tre aspetti a seconda della distanza: da vicino, una mesh completa — al massimo 24 slot, assegnati in base alla dimensione sullo schermo, mostrata solo quando i suoi shader sono precompilati; a media distanza, un impostor a silhouette ricavato dalla miniatura, il cui sfondo incorporato viene rimosso con il keying nello shader, preso da un atlante 4096² da 2.601 slot; in lontananza, un punto d’ancoraggio istanziato. Il passaggio da un aspetto all’altro è una dissolvenza incrociata di 300 ms in cui la somma delle opacità è sempre pari a uno, così nessun frame resta mai vuoto.

    Ogni oggetto è appeso al proprio cavo, fluttua attorno al suo ancoraggio e ruota lentamente su se stesso, un giro ogni 120–180 secondi, il tutto con l’id dell’oggetto come seed — ogni client vede lo stesso movimento senza alcuna sincronizzazione di rete. Quando qualcuno butta un oggetto, il fuoco d’artificio nel punto d’atterraggio viene inviato via SSE a tutti quelli online. Se il frame rate resta basso per tre secondi, scatta un degrado automatico in quattro livelli (risoluzione → fuochi d’artificio → campo lontano → fluttuazione), e il budget delle mesh vicine si riduce solo quando si perdono davvero dei frame — mai solo perché i draw call sono tanti.