ZX Spectrum Raytracer, BASIC

ZX Spectrum Raytracer, BASIC

Вихідний вузол: 3085593

[Габріель Гамбетта] знає дещо про трасувальники променів, будучи автором Tiny Raytracer, трасувальника променів, написаного лише на 912 байтах JavaScript. Як давно fellow страждає від 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 розмір- середній” 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 250 Вт, 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 основними кольорами

Історія починається з [Габріеля]. Алгоритми трасування променів комп’ютерної графіки з нуля (CGFS). і існуюча база коду, яка була перенесена на дуже обмежений діалект BASIC ZX Spectrum, використовуючи VSCode для редагування, BAS2TAP для створення файлу зображення стрічки (по суті звукової доріжки) і виконання за допомогою FUSE. Коли ланцюжок інструментів відсортовано, [Ґебріель] додає достатньо коду для роботи з рівняннями перетину променів сфери та рендерить сцену з трьома сферами до кольорового зображення 32 × 22 пікселя, займаючи лише 15 хвилин виконання. Люди, які страждають, пам’ятають, що спектр мав масив атрибутів блоків 32×22 (або масив кольорів) із двома значеннями кольорів для пікселів переднього плану та фону. Кожен блок атрибутів містить 8×8 пікселів, кожен з яких може бути переднім планом (увімкнено) або фоном (вимкнено). Наступним етапом було розширити код для обробки пікселів, а також блоків, просто розширивши трасування променів до повних 256 ×176, і для кожного блоку просто визначте два найпоширеніші кольори та запустіть їх для всього блоку. Це начебто працює, у дуже схожому на спектрі стилі «зіткнення атрибутів».

Але тепер час роботи становить 17 годин! Далі — крапка налаштування продуктивності, використовуючи чимало базових прийомів спектру та деякі графічні наближення, як-от відкидання променів для кожного кутового пікселя блоку, а якщо вони ідентичні, фарбування всіх 60 пікселів, що залишилися, однаковим кольором і рух далі . Це зусилля скоротило час роботи до двох годин.

Далі [Ґабріель] сміливо відмовляється від моделі плоского освітлення, моделює одне джерело світла та витягує єдиний трюк, що залишився у світі монохромного спектру, а саме змішування значень інтенсивності для кожного блоку за допомогою простого 8×8 впорядкована схема дизерінгу, з огляду на все це виглядає непогано. Швидка зупинка на шляху до завершення, до додати тіні і час роботи повернувся до 17 годин, але воно того варте. Зрозуміло, що це оптимізовано для одного типу сцени, де переважно представлені сфери, але принципи є, а куби – лише кілька рядків коду. Хтось бере?

Трасування променів — одне з тих веселих, але складних завдань, які люди просто люблять вклиняти в невідповідне обладнання, як цей графічний калькулятор TI-84Plus CE, і якщо це трохи важко отримати доступ, ось щось не менш божевільне працює в звичайному старому Excel.

Часова мітка:

Більше від Рубати день