ZX Spectrum Raytracer, BASIC

ZX Spectrum Raytracer, BASIC

Allikasõlm: 3085593

[Gabriel Gambetta] teab mõnda asja kiirtejälgijate kohta, olles Tiny Raytraceri autor, raytracer, mis on kirjutatud vaid 912 baidises JavaScriptis. Nagu pikka aega mees Ühendkuningriigis disainitud ZX Spectrumi kannataja, kas need kaks armulugu saaks ühendada? Kas Tiny Raytracer sobiks ZX Spectrumile? Kas BASIC? Vastus on jaatav, kuigi meie armastatud liigi paljude piirangutega.

<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”>

Kiirte jälgimine ainult 15 põhivärviga

Lugu algab [Gabrieli] omaga Arvutigraafika nullist (CGFS) raytraceri algoritmid ja olemasolev koodibaas, mis porditi ZX Spectrumi väga piiratud BASIC dialekti, kasutades redigeerimiseks VSCode'i, BAS2TAP lindi pildifaili (põhimõtteliselt heliriba) genereerimiseks ja käivitamiseks FUSE. Kui tööriistakett on sorteeritud, lisab [Gabriel] täpselt nii palju koodi, et tulla toime sfääri kiirte ristumisvõrranditega, ja renderdab kolmest sfäärist koosneva stseeni 32 × 22 piksliga värviliseks pildiks, kulutades vaid 15 minutit. Kaaskannatajad mäletavad, et spektril oli 32 × 22 plokiatribuutide massiiv (või värvimassiivi) kahe värviväärtusega esiplaani ja tausta pikslite jaoks. Iga atribuudiplokk sisaldab 8 × 8 pikslit, millest igaüks võib olla esiplaanil (sees) või taustal (väljas). Järgmiseks etapiks oli koodi laiendamine nii pikslite kui ka plokkide käsitlemiseks, laiendades lihtsalt kiirjälgimist kuni 256 pikslini. Resolutsioon × 176 ja iga ploki jaoks määrake lihtsalt kaks kõige levinumat värvi ja käivitage koos kogu ploki värvidega. See omamoodi töötab väga spektri-esq "atribuutide kokkupõrkega" moel.

Aga nüüd on tööaeg 17 tundi! Järgmiseks koht jõudluse kohandamisest, kasutades üsna vähest spektri BASIC häkkimist ja mõningaid graafilisi lähendusi, näiteks kiirte andmist ploki iga nurgapiksli jaoks, ja kui need on identsed, värvides kõik ülejäänud 60 pikslit samaks ja liikudes edasi. . See pingutus vähendas tööaega kahele tunnile.

Järgmisena loobub [Gabriel] vapralt tasapinnalisest valgustusmudelist, modelleerib üht valgusallikat ja tõmbab lihtsa meetodi abil välja ainsa järelejäänud triki monokroomse spektrimaailmas – iga ploki intensiivsuse väärtuste muutmise. 8×8 tellitud muster, ei tundu see kõike arvestades väga halb. Kiire peatus teel lõpetamisele, poole lisada varje ja tööaeg on tagasi 17 tundi, kuid see on seda väärt. On selge, et see on optimeeritud ühe stseenitüübi jaoks, kus sfäärid on peamiselt esindatud, kuid põhimõtted on olemas ja kuubikud on vaid mõne koodirea kaugusel. Kas on vastuvõtjaid?

Kiirte jälgimine on üks neist lõbusatest, kuid keerukatest ülesannetest, mida inimesed lihtsalt armastavad sobimatusse riistvarasse kiiluda, nagu see TI-84Plus CE graafikakalkulaator, ja kui sellele on raske juurde pääseda, siis siin on midagi sama hullu töötab tavalises vanas Excelis.

Ajatempel:

Veel alates Hack A Day