Un raytracer ZX Spectrum, in BASIC

Un raytracer ZX Spectrum, in BASIC

Nodo di origine: 3085593

[Gabriel Gambetta] sa alcune cose sui ray tracer, essendo l'autore di Tiny Raytracer, un raytracer scritto in soli 912 byte di JavaScript. Da molto tempo compagno malato dello ZX Spectrum progettato nel Regno Unito, queste due storie d'amore potrebbero essere unite? Il Tiny Raytracer potrebbe adattarsi allo ZX Spectrum? Nel BASE? La risposta è un affermativo, anche se con le numerose limitazioni del nostro amato speccy.

<img decoding="async" data-attachment-id="661085" data-permalink="https://hackaday.com/2024/01/26/a-zx-spectrum-raytracer-in-basic/screenshot-from-2024-01-25-21-02-18/" data-orig-file="https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png" data-orig-size="940,648" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Screenshot from 2024-01-25 21-02-18" data-image-description="

https://gabrielgambetta.com/zx-raytracer.html

” data-image-caption data-medium-file=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” data-large-file ="https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?w=800″ class="wp-image-661085 dimensione- medio” src=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” alt larghezza=”400″ altezza=”276″ srcset= "https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png 940w, https://platoaistream.com/wp-content/uploads/ 2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize=250,172 250w, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer -in-basic-1.png?resize=400,276 400w, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize= 800,551 800w” dimensioni="(larghezza massima: 400px) 100vw, 400px">

Ray tracing con soli 15 colori primari

La storia inizia con quella di [Gabriel]. Algoritmi raytracer Computer Graphics From Scratch (CGFS). e una base di codice esistente che è stata trasferita nel dialetto BASIC molto limitato dello ZX Spectrum, utilizzando VSCode per la modifica, BAS2TAP per generare un file immagine nastro (essenzialmente una traccia audio) ed eseguito con FUSE. Una volta ordinata la toolchain, [Gabriel] aggiunge il codice appena sufficiente per gestire le equazioni di intersezione dei raggi di una sfera e renderizza una scena a tre sfere in un'immagine a colori di 32×22 pixel, impiegando solo 15 minuti di autonomia. Gli altri malati ricorderanno che lo spettro aveva un array di attributi di blocco 32×22 (o array di colori) con due valori di colore per i pixel di primo piano e di sfondo. Ogni blocco di attributi contiene 8×8 pixel, ognuno dei quali potrebbe essere in primo piano (acceso) o in sfondo (spento). La fase successiva è stata quindi quella di espandere il codice per gestire sia i pixel che i blocchi, semplicemente espandendo il raytracing al massimo livello. ×256 e per ciascun blocco determina semplicemente i due colori più comuni ed eseguili con quelli per l'intero blocco. In un certo senso funziona, in un certo senso di "scontro di attributi" molto spettro.

Ma ora l'autonomia è di 17 ore! Successivamente, un po' di modifica delle prestazioni, utilizzando alcuni hack BASIC dello spettro e alcune approssimazioni grafiche come la proiezione di raggi per ciascun pixel d'angolo del blocco e, se sono identici, colorando allo stesso modo tutti i restanti 60 pixel e andando avanti . Questo sforzo ha ridotto l'autonomia a due ore.

Successivamente [Gabriel] abbandona coraggiosamente il modello di illuminazione piatta, modella una singola sorgente luminosa e tira fuori l'unico trucco rimasto nel mondo dello spettro monocromatico, quello di dithering dei valori di intensità per ciascun blocco, utilizzando un semplice Modello dithering ordinato 8×8, non sembra poi così male, tutto sommato. Una breve sosta sulla strada verso il completamento, a aggiungere ombre e la durata è tornata a 17 ore, ma ne vale la pena. Chiaramente, questo è ottimizzato per un singolo tipo di scena, quella in cui le sfere sono predominanti, ma i principi ci sono e i cubi sono solo poche righe di codice in più. Qualche acquirente?

Il raytracing è uno di quei compiti divertenti ma complessi che le persone adorano inserire in hardware inappropriati, come questa calcolatrice grafica TI-84Plus CEe se è un po' difficile da raggiungere, ecco qualcosa di altrettanto folle in esecuzione nel vecchio Excel.

Timestamp:

Di più da Hackera un giorno