[Gabriel Gambetta] știe câteva lucruri despre ray tracers, fiind autorul Tiny Raytracer, un raytracer scris în doar 912 de octeți de JavaScript. Ca o lungă perioadă de timp membru suferind de ZX Spectrum proiectat în Marea Britanie, s-ar putea îmbina aceste două aventuri amoroase? Ar putea Tiny Raytracer să se potrivească pe ZX Spectrum? În BASIC? Raspunsul este un afirmativ, deși cu multele limitări ale iubitei noastre specii.
Povestea începe cu a lui [Gabriel]. Algoritmi de trazator de raze Computer Graphics From Scratch (CGFS). și o bază de cod existentă care a fost portată în dialectul BASIC foarte limitat al ZX Spectrum, folosind VSCode pentru editare, BAS2TAP pentru a genera un fișier imagine pe bandă (în esență o pistă audio) și executat cu FUSE. Cu lanțul de instrumente sortat, [Gabriel] adaugă suficient cod pentru a face față ecuațiilor de intersecție a razelor unei sfere și redă o scenă cu trei sfere la o imagine color de 32×22 pixeli, luând doar 15 minute de rulare. Cei care suferă își vor aminti că spectrul avea o matrice de atribute de bloc de 32×22 (sau matrice de culori) cu două valori de culoare pentru pixelii din prim-plan și de fundal. Fiecare bloc de atribute conține 8×8 pixeli, fiecare dintre acestea putând fi în prim-plan (activat) sau în fundal (dezactivat). Următoarea etapă a fost apoi extinderea codului pentru a gestiona pixeli, precum și blocuri, prin simpla extindere a urmăririi razelor la 256 complet. Rezoluție ×176, iar pentru fiecare bloc determină pur și simplu cele două culori cele mai comune și rulează cu cele pentru întregul bloc. Funcționează într-un fel de „conflict de atribute” foarte spectru-esq.
Dar acum timpul de rulare este de 17 ore! Apoi, un punct de ajustare a performanței, folosind destul de multe hack-uri de spectru BASIC și câteva aproximări grafice, cum ar fi proiectarea de raze pentru fiecare pixel de colț al blocului și, dacă sunt identice, colorați toți cei 60 de pixeli rămași la fel și mergeți mai departe. . Acest efort a redus timpul de rulare la două ore.
În continuare, [Gabriel] renunță la modelul de iluminat plat, modelează o singură sursă de lumină și scoate la iveală singurul truc rămas în lumea spectrului monocrom, acela de a dithera valorile intensității pentru fiecare bloc, folosind un simplu Model de dither comandat 8×8, asta nu arată prea rău, luând în considerare toate lucrurile. O oprire rapidă pe drumul spre finalizare, spre adăugați umbre iar timpul de rulare a revenit la 17 ore, dar merită. În mod clar, acesta este optimizat pentru un singur tip de scenă, unul în care sferele sunt predominant, dar principiile sunt acolo, iar cuburile sunt la doar câteva linii de cod mai departe. Vreun primitor?
Raytracing-ul este una dintre acele sarcini distractive, dar complexe, pe care oamenilor le place să le pună într-un hardware neadecvat, ca acest calculator grafic TI-84Plus CE, iar dacă este puțin greu de accesat, iată ceva la fel de nebun rulează în vechiul Excel simplu.
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- PlatoData.Network Vertical Generative Ai. Împuterniciți-vă. Accesați Aici.
- PlatoAiStream. Web3 Intelligence. Cunoștințe amplificate. Accesați Aici.
- PlatoESG. carbon, CleanTech, Energie, Mediu inconjurator, Solar, Managementul deșeurilor. Accesați Aici.
- PlatoHealth. Biotehnologie și Inteligență pentru studii clinice. Accesați Aici.
- Sursa: https://hackaday.com/2024/01/26/a-zx-spectrum-raytracer-in-basic/
- :este
- :Unde
- 1
- 15%
- 17
- 400
- 60
- a
- Despre Noi
- acces
- Adaugă
- afaceri
- TOATE
- an
- și
- răspunde
- Orice
- SUNT
- Mulțime
- AS
- audio
- autor
- departe
- înapoi
- fundal
- Rău
- de bază
- de bază
- BE
- fiind
- iubit
- Pic
- Bloca
- Blocuri
- dar
- by
- aruncare
- clar
- cod
- baza codului
- Comun
- completare
- complex
- luate în considerare
- conține
- Colț
- ar putea
- afacere
- Determina
- şanţuri
- Nu
- fiecare
- editare
- efort
- suficient de
- la fel de
- ecuații
- În esență,
- Eter (ETH)
- executat
- existent
- Extinde
- extinderea
- Modă
- Caracteristică
- membru
- puțini
- Fișier
- potrivi
- plat
- Pentru
- din
- Complet
- distracţie
- genera
- grafică
- hacks
- HAD
- manipula
- Greu
- Piese metalice
- ORE
- HTML
- HTTPS
- identic
- if
- imagine
- in
- intersecție
- în
- IT
- JavaScript
- doar
- Copil
- știe
- ușoară
- Iluminat
- Limitat
- linii
- Uite
- dragoste
- multe
- max-width
- Mers
- minute
- model
- Modele
- monocrom
- mai mult
- cele mai multe
- în mişcare
- net
- următor
- acum
- of
- de pe
- Vechi
- on
- ONE
- afară
- Optimizat
- or
- al nostru
- afară
- oameni
- performanță
- Pixel
- Simplu
- Plato
- Informații despre date Platon
- PlatoData
- predominant
- primar
- Principiile
- Trage
- Rapid
- cu totul
- RAY
- raytracing
- Redus
- rămas
- minte
- face
- Rezoluţie
- Alerga
- acelaşi
- scenă
- zgâria
- simplu
- pur şi simplu
- singur
- unele
- ceva
- Sursă
- Spectru
- sferă
- Loc
- Etapă
- începe
- Stop
- Poveste
- astfel de
- factorii
- luare
- bandă
- sarcini
- acea
- Blocul
- apoi
- Acolo.
- Acestea
- lucruri
- acest
- aceste
- timp
- la
- de asemenea
- calc
- urmări
- optimizări
- Două
- tip
- folosind
- Valori
- foarte
- a fost
- Cale..
- BINE
- care
- întreg
- Wikipedia
- voi
- cu
- fabrică
- lume
- valoare
- scris
- zephyrnet