ZX Spectrum Raytracer, v BASIC-u

ZX Spectrum Raytracer, v BASIC-u

Izvorno vozlišče: 3085593

[Gabriel Gambetta] ve nekaj stvari o sledilnikih žarkov, saj je avtor Tiny Raytracerja, sledilnika žarkov, napisanega v samo 912 bajtih JavaScripta. Kot dolgo časa kolega ki trpi za ZX Spectrumom, zasnovanim v Veliki Britaniji, bi lahko ti dve ljubezni združili? Bi lahko Tiny Raytracer ustrezal ZX Spectrumu? V BASIC-u? Odgovor je pritrdilno, čeprav s številnimi omejitvami naše ljubljene vrste.

<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 size- srednji” src=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” alt width=”400″ višina=”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” sizes=”(max-width: 400px) 100vw, 400px”>

Sledenje žarkom s samo 15 primarnimi barvami

Zgodba se začne z [Gabrielovo]. Algoritmi za sledenje žarkov računalniške grafike iz nič (CGFS). in obstoječo kodno osnovo, ki je bila prenesena v zelo omejeno narečje BASIC ZX Spectruma, z uporabo VSCode za urejanje, BAS2TAP za ustvarjanje slikovne datoteke traku (v bistvu zvočni posnetek) in izvedbo z FUSE. Ko je veriga orodij razvrščena, [Gabriel] doda ravno dovolj kode za obravnavo enačb presečišča žarkov krogle in upodablja prizor s tremi kroglami v barvno sliko 32 × 22 slikovnih pik, kar traja le 15 minut izvajanja. Sotrpini se bodo spomnili, da je imel spekter polje atributov blokov 32×22 (ali barvno polje) z dvema barvnima vrednostma za slikovne pike ospredja in ozadja. Vsak atributni blok vsebuje 8 × 8 slikovnih pik, od katerih je vsaka lahko v ospredju (vklopljeno) ali v ozadju (izklopljeno). Naslednja stopnja je bila razširitev kode za obdelavo slikovnih pik in blokov, tako da preprosto razširite sledenje žarkom na polnih 256 ×176 ločljivost in za vsak blok preprosto določite dve najpogostejši barvi in ​​zaženite s tistima za celoten blok. Nekako deluje, na zelo spekter-esq način 'spopada atributov'.

Toda zdaj je čas delovanja 17 ur! Sledi točka prilagajanja zmogljivosti z uporabo kar nekaj vdorov spektra BASIC in nekaj grafičnih približkov, kot je oddajanje žarkov za vsako kotno slikovno piko bloka, in če so enaki, enako barvanje vseh preostalih 60 slikovnih pik in nadaljevanje . Ta trud je zmanjšal čas delovanja na dve uri.

Nato [Gabriel] pogumno opusti model ravne osvetlitve, modelira en sam svetlobni vir in izvleče edini preostali trik v svetu monokromatskega spektra, to je umirjanje vrednosti intenzivnosti za vsak blok z uporabo preprostega 8×8 urejen vzorec drhtanja, to ne izgleda tako slabo, če upoštevamo vse. Hiter postanek poti do zaključka, do dodajte sence in čas delovanja se je vrnil na 17 ur, vendar je vredno. Jasno je, da je to optimizirano za eno samo vrsto prizora, kjer so pretežno predstavljene krogle, vendar so načela prisotna, kocke pa so oddaljene le še nekaj vrstic kode. Ali kdo prevzame?

Raytracing je ena tistih zabavnih, a zapletenih nalog, ki jih ljudje radi zagozdijo v neprimerno strojno opremo, kot je ta grafični kalkulator TI-84Plus CE, in če je to nekoliko težko dostopno, je tukaj nekaj enako norega teče v navadnem starem Excelu.

Časovni žig:

Več od Hack A Day