Трассировщик лучей ZX Spectrum на языке BASIC

Трассировщик лучей ZX Spectrum на языке BASIC

Исходный узел: 3085593

[Габриэль Гамбетта] знает кое-что о трассировщиках лучей, поскольку является автором Tiny Raytracer, трассировщика лучей, написанного всего на 912 байтах JavaScript. Как давно человек страдалец разработанного в Великобритании ZX Spectrum, можно ли объединить эти два любовных романа? Может ли Tiny Raytracer поместиться на ZX Spectrum? В БЕЙСИКЕ? Ответ утвердительный ответ, хотя и со многими ограничениями нашей любимой модели.

<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- средний» 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 400 Вт, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize= 800,551 Размеры 800 Вт = ”(макс. ширина: 400 пикселей) 100 ВВ, 400 пикселей”>

Трассировка лучей всего с 15 основными цветами

История начинается с [Габриэля] Алгоритмы трассировки лучей компьютерной графики с нуля (CGFS) и существующая база кода, которая была перенесена на очень ограниченный диалект BASIC ZX Spectrum с использованием VSCode для редактирования, БАС2ТАП для создания файла изображения ленты (по сути, звуковой дорожки) и выполнения с помощью FUSE. Отсортировав набор инструментов, [Габриэль] добавляет ровно столько кода, чтобы справиться с уравнениями пересечения лучей сферы, и рендерит сцену с тремя сферами в цветное изображение размером 32×22 пикселя, что занимает всего 15 минут работы. Товарищи по несчастью помнят, что спектр имел блочный массив атрибутов (или массив цветов) 32×22 с двумя значениями цвета для пикселей переднего и заднего плана. Каждый блок атрибутов содержит 8×8 пикселей, каждый из которых может быть передним планом (включен) или фоном (выключен). Следующим этапом было расширение кода для обработки пикселей, а также блоков, путем простого расширения трассировки лучей до полных 256 пикселей. Разрешение ×176, и для каждого блока просто определите два наиболее распространенных цвета и используйте их для всего блока. Это вроде как работает в духе спектрального «столкновения атрибутов».

Но теперь время работы составляет 17 часов! Далее, настройка производительности с использованием довольно большого количества хаков Spectrum BASIC и некоторых графических приближений, таких как отбрасывание лучей для каждого углового пикселя блока, и, если они идентичны, окрашивание всех оставшихся 60 пикселей в одинаковую окраску и движение дальше. . Благодаря этим усилиям время работы сократилось до двух часов.

Далее [Габриэль] смело отказывается от плоской модели освещения, моделирует один источник света и извлекает единственный оставшийся трюк в мире монохромного спектра — размывание значений интенсивности для каждого блока, используя простой Упорядоченный шаблон дизеринга 8×8, это выглядит не так уж и плохо, если принять во внимание все обстоятельства. Быстрая остановка на пути к завершению, к добавить тени и время работы вернулось к 17 часам, но оно того стоит. Очевидно, что это оптимизировано для одного типа сцены, в котором преобладают сферы, но принципы существуют, а кубы находятся всего в нескольких строках кода. Есть желающие?

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

Отметка времени:

Больше от Взломать день