Raytracer ZX Spectrum w wersji PODSTAWOWEJ

Raytracer ZX Spectrum w wersji PODSTAWOWEJ

Węzeł źródłowy: 3085593

[Gabriel Gambetta] wie kilka rzeczy o ray tracingach, będąc autorem Tiny Raytracer, raytracera napisanego w zaledwie 912 bajtach JavaScript. Jako długoletni facet cierpiącym na zaprojektowany w Wielkiej Brytanii ZX Spectrum, czy można połączyć te dwa romanse? Czy Tiny Raytracer zmieści się na ZX Spectrum? W PODSTAWIE? Odpowiedź to odpowiedź twierdząca, aczkolwiek z wieloma ograniczeniami naszego ukochanego gatunku.

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

Śledzenie promieni przy użyciu tylko 15 kolorów podstawowych

Historia zaczyna się od [Gabriela]. Algorytmy raytracera grafiki komputerowej od podstaw (CGFS). oraz istniejącą bazę kodu, która została przeniesiona do bardzo ograniczonego dialektu BASIC ZX Spectrum, przy użyciu VSCode do edycji, BAS2TAP wygenerować plik obrazu taśmy (w zasadzie ścieżkę dźwiękową) i wykonać go FUSE. Po posortowaniu zestawu narzędzi [Gabriel] dodaje tylko tyle kodu, aby poradzić sobie z równaniami przecięcia promieni kuli i renderuje scenę składającą się z trzech sfer do kolorowego obrazu o wymiarach 32 × 22 pikseli, co zajmuje zaledwie 15 minut działania. Inni cierpiący pamiętają, że widmo miało tablicę atrybutów blokowych 32×22 (lub tablicę kolorów) z dwiema wartościami kolorów dla pikseli pierwszego planu i tła. Każdy blok atrybutów zawiera 8×8 pikseli, z których każdy może znajdować się na pierwszym planie (włączony) lub w tle (wyłączony). Następnym etapem było rozszerzenie kodu tak, aby obsługiwał zarówno piksele, jak i bloki, po prostu rozszerzając śledzenie promieni do pełnego 256 ×176 i dla każdego bloku po prostu określ dwa najpopularniejsze kolory i użyj kolorów dla całego bloku. To w pewnym sensie działa, w sposób przypominający „zderzenie atrybutów” w widmie.

Ale teraz czas działania wynosi 17 godzin! Następnie mała poprawka wydajności, przy użyciu kilku hacków widma w BASIC-u i pewnych przybliżeń graficznych, takich jak rzucanie promieni dla każdego narożnego piksela bloku, a jeśli są identyczne, pokolorowanie wszystkich pozostałych 60 pikseli w ten sam sposób i ruszamy dalej . Wysiłek ten skrócił czas pracy do dwóch godzin.

Następnie [Gabriel] odważnie porzuca płaski model oświetlenia, modeluje pojedyncze źródło światła i wyciąga jedyną pozostałą sztuczkę w świecie widma monochromatycznego, czyli dithering wartości intensywności dla każdego bloku, używając prostego Uporządkowany wzór ditheringu 8×8, biorąc pod uwagę wszystko, nie wygląda to tak źle. Szybki przystanek w drodze do realizacji, do dodaj cienie a czas pracy wrócił do 17 godzin, ale warto. Oczywiście jest to zoptymalizowane pod kątem pojedynczego typu sceny, w której dominują kule, ale zasady są tam obecne, a kostki są tylko o kilka linijek kodu więcej. Są chętni?

Raytracing to jedno z tych zabawnych, ale złożonych zadań, które ludzie uwielbiają wciskać w nieodpowiedni sprzęt, jak ten kalkulator graficzny TI-84Plus CE, a jeśli dostęp do tego jest trochę trudny, oto coś równie szalonego działa w zwykłym, starym Excelu.

Znak czasu:

Więcej z Zhakuj dzień