A ZX Spectrum Raytracer, σε BASIC

A ZX Spectrum Raytracer, σε BASIC

Κόμβος πηγής: 3085593

Ο [Gabriel Gambetta] γνωρίζει λίγα πράγματα για τους ανιχνευτές ακτίνων, καθώς είναι ο συγγραφέας του Tiny Raytracer, ενός raytracer που γράφτηκε σε μόλις 912 byte JavaScript. Ως μακροχρόνιος σύντροφος πάσχων από το σχεδιασμένο από το Ηνωμένο Βασίλειο ZX Spectrum, θα μπορούσαν να συγχωνευτούν αυτοί οι δύο έρωτες; Θα μπορούσε το Tiny Raytracer να χωρέσει στο ZX Spectrum; Στο BASIC; Η απάντηση είναι μια καταφατική, αν και με τους πολλούς περιορισμούς του αγαπημένου μας είδους.

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

Ανίχνευση ακτίνων με μόνο 15 βασικά χρώματα

Η ιστορία ξεκινά με του [Gabriel] Computer Graphics From Scratch (CGFS) αλγόριθμοι raytracer και μια υπάρχουσα βάση κώδικα που μεταφέρθηκε στην πολύ περιορισμένη BASIC διάλεκτο του ZX Spectrum, χρησιμοποιώντας VSCode για επεξεργασία, BAS2TAP για να δημιουργήσετε ένα αρχείο εικόνας ταινίας (ουσιαστικά ένα κομμάτι ήχου) και να εκτελεστεί με ΑΣΦΑΛΕΙΩΝ. Με ταξινομημένη την αλυσίδα εργαλείων, ο [Gabriel] προσθέτει ακριβώς αρκετό κώδικα για να αντιμετωπίσει τις εξισώσεις τομής ακτίνων μιας σφαίρας και αποδίδει μια σκηνή τριών σφαιρών σε έγχρωμη εικόνα 32×22 pixel, απαιτώντας μόλις 15 λεπτά χρόνου εκτέλεσης. Οι άλλοι πάσχοντες θα θυμούνται ότι το φάσμα είχε μια συστοιχία χαρακτηριστικών μπλοκ 32×22 (ή πίνακα χρωμάτων) με δύο τιμές χρώματος για τα εικονοστοιχεία προσκηνίου και φόντου. Κάθε μπλοκ χαρακτηριστικών περιέχει 8×8 εικονοστοιχεία, καθένα από τα οποία θα μπορούσε να είναι στο προσκήνιο (ενεργό) ή στο παρασκήνιο (απενεργοποιημένο). Το επόμενο στάδιο ήταν στη συνέχεια να επεκταθεί ο κώδικας για να χειριστεί pixel καθώς και μπλοκ, επεκτείνοντας απλώς το raytracing στο πλήρες 256 Ανάλυση ×176 και για κάθε μπλοκ απλώς καθορίστε τα δύο πιο κοινά χρώματα και εκτελέστε με αυτά για ολόκληρο το μπλοκ. Λειτουργεί κατά κάποιο τρόπο, με ένα είδος «σύγκρουσης χαρακτηριστικών» που μοιάζει πολύ με το φάσμα.

Τώρα όμως ο χρόνος εκτέλεσης είναι 17 ώρες! Στη συνέχεια, ένα σημείο προσαρμογής της απόδοσης, χρησιμοποιώντας αρκετά φάσμα BASIC hacks, και ορισμένες γραφικές προσεγγίσεις, όπως ρίψη ακτίνων για κάθε γωνιακό εικονοστοιχείο του μπλοκ, και αν είναι πανομοιότυπα, χρωματίζοντας όλα τα υπόλοιπα 60 pixel με τον ίδιο τρόπο και συνεχίζουμε . Αυτή η προσπάθεια μείωσε τον χρόνο εκτέλεσης σε δύο ώρες.

Στη συνέχεια, ο [Gabriel] εγκαταλείπει γενναία το μοντέλο του επίπεδου φωτισμού, διαμορφώνει μια ενιαία πηγή φωτός και βγάζει το μοναδικό κόλπο που απομένει στον κόσμο του μονόχρωμου φάσματος, αυτό της διαφοράς τιμών έντασης για κάθε μπλοκ, χρησιμοποιώντας ένα απλό 8×8 διατεταγμένο μοτίβο αναρρόφησης, δεν φαίνεται πολύ κακό, λαμβάνοντας υπόψη όλα τα πράγματα. Μια γρήγορη στάση στο δρόμο προς την ολοκλήρωση, προς προσθέστε σκιές και ο χρόνος εκτέλεσης είναι πίσω στις 17 ώρες, αλλά αξίζει τον κόπο. Σαφώς, αυτό είναι βελτιστοποιημένο για έναν μεμονωμένο τύπο σκηνής, όπου οι σφαίρες εμφανίζονται κυρίως, αλλά οι αρχές είναι εκεί και οι κύβοι απέχουν λίγες ακόμη γραμμές κώδικα. Κάποιοι λήπτες;

Το Raytracing είναι ένα από εκείνα τα διασκεδαστικά, αλλά πολύπλοκα καθήκοντα που οι άνθρωποι απλώς λατρεύουν να ενσωματώνουν σε ακατάλληλο υλικό, όπως αυτή η αριθμομηχανή γραφημάτων TI-84Plus CE, και αν είναι λίγο δύσκολο να προσπελάσετε, εδώ είναι κάτι εξίσου τρελό τρέχει σε απλό παλιό Excel.

Σφραγίδα ώρας:

Περισσότερα από Hack μια μέρα