En ZX Spectrum Raytracer, I BASIC

En ZX Spectrum Raytracer, I BASIC

Kildeknude: 3085593

[Gabriel Gambetta] ved et par ting om ray tracers, idet han er forfatter til Tiny Raytracer, en raytracer skrevet i kun 912 bytes JavaScript. Som lang tid fyr lider af det UK-designede ZX Spectrum, kunne disse to kærlighedsforhold smeltes sammen? Kunne Tiny Raytracer passe på ZX Spectrum? I BASIC? Svaret er en bekræftende, dog med vores elskede arts mange begrænsninger.

<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-medium” src=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” alt width=”400″ height=”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”>

Strålesporing med kun 15 primærfarver

Historien starter med [Gabriel]s Computergrafik fra bunden (CGFS) raytracer-algoritmer og en eksisterende kodebase, der blev overført til ZX Spectrums meget begrænsede BASIC-dialekt, ved hjælp af VSCode til redigering, BAS2TAP at generere en båndbilledfil (i det væsentlige et lydspor) og udføres med FUSE. Med værktøjskæden sorteret tilføjer [Gabriel] lige nok kode til at håndtere stråleskæringsligningerne for en kugle og gengiver en scene med tre kugler til et 32×22 pixel farvebillede, hvilket tager kun 15 minutters kørselstid. Medlidende vil huske, at spektret havde en 32×22 blok attribut array (eller farve array) med to farveværdier for forgrunds- og baggrundspixel. Hver attributblok indeholder 8×8 pixels, som hver kunne være forgrund (til) eller baggrund (fra). Næste trin var så at udvide koden til at håndtere pixel såvel som blokke, ved blot at udvide raytracing til de fulde 256 ×176 opløsning, og for hver blok skal du blot bestemme de to mest almindelige farver og køre med dem for hele blokken. Det fungerer på en måde, på en meget spectrum-agtig 'attributclash'-måde.

Men nu er køretiden 17 timer! Dernæst en plet af ydelsesjusteringer, ved hjælp af en hel del spektrum BASIC hacks og nogle grafiske tilnærmelser, såsom at kaste stråler for hver hjørnepixel i blokken, og hvis de er identiske, farve alle de resterende 60 pixels ens og gå videre . Denne indsats reducerede køretiden til to timer.

Dernæst dropper [Gabriel] modigt den flade belysningsmodel, modellerer en enkelt lyskilde og trækker det eneste tilbageværende trick frem i den monokrome spektrumverden, nemlig at vibrere intensitetsværdier for hver blok ved hjælp af en simpel 8×8 bestilt dither mønster, det ser ikke så slemt ud, alt taget i betragtning. Et hurtigt stop på vej til færdiggørelse, til tilføje skygger og køretiden er tilbage til 17 timer, men det er det værd. Det er klart, at dette er optimeret til en enkelt scenetype, en hvor sfærer overvejende optræder, men principperne er der, og kuber er kun et par linjer mere kode væk. Nogle aftagere?

Raytracing er en af ​​de sjove, men komplekse opgaver, som folk bare elsker at kile ind i upassende hardware, som denne TI-84Plus CE grafregner, og hvis det er lidt svært at få adgang til, er her noget lige så galt kører i almindelig gammel Excel.

Tidsstempel:

Mere fra Hack A Day