ZX Spectrum Raytracer, BASIC:ssa

ZX Spectrum Raytracer, BASIC:ssa

Lähdesolmu: 3085593

[Gabriel Gambetta] tietää muutamia asioita sädejäljityksistä, koska hän on kirjoittanut Tiny Raytracerin, raytracerin, joka on kirjoitettu vain 912 tavulla JavaScriptiä. Pitkästä aikaa kaveri Iso-Britannian suunnittelemasta ZX Spectrumista kärsivänä, voitaisiinko nämä kaksi rakkaussuhdetta yhdistää? Voisiko Tiny Raytracer sopia ZX Spectrumiin? BASICissa? Vastaus on myönteinen, vaikkakin rakkaan lajimme monien rajoitusten kanssa.

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

Säteenseuranta vain 15 päävärillä

Tarina alkaa [Gabrielista] Computer Graphics From Scratch (CGFS) raytracer-algoritmit ja olemassa oleva koodikanta, joka on siirretty ZX Spectrumin erittäin rajoitettuun BASIC-murteeseen käyttämällä VSCodea editointiin, BAS2TAP luodaksesi nauhakuvatiedoston (lähinnä ääniraidan) ja suorittaaksesi sen kanssa FUSE. Kun työkaluketju on lajiteltu, [Gabriel] lisää juuri sen verran koodia, että se käsittelee pallon säteen leikkausyhtälöitä, ja tekee kolmen pallon kohtauksen 32 × 22 pikselin värikuvaksi, mikä kestää vain 15 minuuttia. Muut sairastuneet muistavat, että spektrillä oli 32 × 22 lohkoattribuuttiryhmä (tai väritaulukko), jossa oli kaksi väriarvoa etu- ja taustapikseleille. Jokainen attribuuttilohko sisältää 8 × 8 pikseliä, joista jokainen voi olla etualalla (päällä) tai taustalla (pois). Seuraava vaihe oli sitten laajentaa koodia käsittelemään pikseleitä sekä lohkoja yksinkertaisesti laajentamalla säteenseuranta koko 256 pikseliin. ×176 resoluutio ja määritä jokaiselle lohkolle kaksi yleisintä väriä ja suorita koko lohkon värit. Se tavallaan toimii, hyvin spektri-esq "attribuuttien yhteentörmäys" tavalla.

Mutta nyt ajoaika on 17 tuntia! Seuraavaksi suorituskyvyn säätämistä käyttäen melko vähän spektrin BASIC-hakkerointia ja joitain graafisia approksimaatioita, kuten säteiden lähettäminen lohkon jokaiselle kulmapikselille, ja jos ne ovat identtisiä, kaikki loput 60 pikseliä värjätään samoin ja siirrytään eteenpäin. . Tämä ponnistus lyhensi käyttöaikaa kahteen tuntiin.

Seuraavaksi [Gabriel] luopuu urheasti litteän valaistuksen mallista, mallintaa yhden valonlähteen ja vetää esiin ainoan jäljellä olevan tempun yksivärisen spektrin maailmassa, joka on kunkin lohkon intensiteettiarvojen häivytys käyttämällä yksinkertaista 8×8 tilattu dither-kuvio, se ei näytä kovin pahalta, kaikki huomioon ottaen. Nopea pysähdys matkalla valmistumiseen, kohti lisää varjoja ja ajoaika on palannut 17 tuntiin, mutta se on sen arvoista. On selvää, että tämä on optimoitu yhdelle kohtaustyypille, jossa pallot esiintyvät pääasiassa, mutta periaatteet ovat olemassa, ja kuutiot ovat vain muutaman koodirivin päässä. Onko ottajia?

Säteenseuranta on yksi niistä hauskoista, mutta monimutkaisista tehtävistä, joita ihmiset vain rakastavat kiilauttaa sopimattomaan laitteistoon, kuten tämä TI-84Plus CE graafinen laskin, ja jos sitä on vähän vaikea saada, tässä on jotain yhtä hullua toimii tavallisella vanhalla Excelillä.

Aikaleima:

Lisää aiheesta Hack päivä