Un trazador de rayos ZX Spectrum, en BÁSICO

Un trazador de rayos ZX Spectrum, en BÁSICO

Nodo de origen: 3085593

[Gabriel Gambetta] sabe algunas cosas sobre los trazadores de rayos, ya que es el autor de Tiny Raytracer, un trazador de rayos escrito en solo 912 bytes de JavaScript. Como desde hace mucho tiempo Compañero víctima del ZX Spectrum diseñado en el Reino Unido, ¿podrían fusionarse estas dos aventuras amorosas? ¿Podría el Tiny Raytracer caber en el ZX Spectrum? ¿En BÁSICO? La respuesta es una afirmación, aunque con las muchas limitaciones de nuestra querida especie.

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

Trazado de rayos con sólo 15 colores primarios

La historia comienza con [Gabriel] Algoritmos de trazador de rayos Computer Graphics From Scratch (CGFS) y una base de código existente que fue trasladada al muy limitado dialecto BASIC del ZX Spectrum, usando VSCode para editar, BAS2TAP para generar un archivo de imagen de cinta (esencialmente una pista de audio) y ejecutarlo con FUSIBLE. Con la cadena de herramientas ordenada, [Gabriel] agrega el código suficiente para manejar las ecuaciones de intersección de rayos de una esfera y representa una escena de tres esferas en una imagen en color de 32 × 22 píxeles, en solo 15 minutos de tiempo de ejecución. Los compañeros que sufren recordarán que el espectro tenía una matriz de atributos de bloque (o matriz de colores) de 32 × 22 con dos valores de color para los píxeles de primer plano y de fondo. Cada bloque de atributos contiene 8 × 8 píxeles, cada uno de los cuales podría estar en primer plano (activado) o en segundo plano (desactivado). La siguiente etapa fue expandir el código para manejar píxeles y bloques, simplemente expandiendo el trazado de rayos al máximo 256 Resolución de ×176, y para cada bloque simplemente determine los dos colores más comunes y ejecútelos para todo el bloque. En cierto modo funciona, en una especie de 'choque de atributos' muy espectral.

¡Pero ahora la duración es de 17 horas! A continuación, un poco de ajuste de rendimiento, utilizando bastantes trucos de espectro BASIC y algunas aproximaciones gráficas, como proyectar rayos para cada píxel de la esquina del bloque y, si son idénticos, colorear los 60 píxeles restantes de la misma manera y seguir adelante. . Este esfuerzo redujo el tiempo de ejecución a dos horas.

Siguiente [Gabriel] valientemente abandona el modelo de iluminación plana, modela una única fuente de luz y saca el único truco que queda en el mundo del espectro monocromático, el de oscilar los valores de intensidad para cada bloque, usando un simple Patrón de tramado ordenado de 8 × 8, eso no se ve tan mal, considerando todo. Una breve parada en el camino hacia la finalización, para agregar sombras y el tiempo de ejecución vuelve a ser de 17 horas, pero vale la pena. Claramente, esto está optimizado para un solo tipo de escena, una donde predominan las esferas, pero los principios están ahí y los cubos están a solo unas pocas líneas más de código de distancia. ¿Ningún arrendatario?

El trazado de rayos es una de esas tareas divertidas pero complejas que a la gente le encanta introducir en hardware inadecuado. como esta calculadora gráfica TI-84Plus CE, y si te resulta un poco difícil acceder, aquí tienes algo igualmente loco ejecutándose en el antiguo Excel.

Sello de tiempo:

Mas de Hackear un día