Ray tracer en ClickHouse SQL: renderizado 3D sin código externo

Fuentes: RayTracer: a path tracer written in ClickHouse SQL

El repositorio ClickHouse/RayTracer es un trazador de rayos implementado íntegramente como consultas SQL de ClickHouse, capaz de generar imágenes PNG sin funciones definidas por el usuario ni código externo: un único SELECT calcula cada píxel y lo escribe mediante el formato de salida PNG del motor. La escena representa la palabra "ClickHouse" como letras de cristal y cromo —en homenaje al clásico trazador de rayos de Andrew Kensler para la tarjeta de visita de Pixar— flotando sobre un paisaje generado procedimentalmente, con reflejos del terreno y sombras proyectadas.

El motor aprovecha varias prestaciones del lenguaje: los píxeles se modelan como filas producidas por numbers_mt, con un muestreo por píxel promediado mediante GROUP BY; las operaciones 3D se realizan sobre tuplas (Float64, Float64, Float64) con funciones de álgebra lineal encapsuladas en lambdas; y el bucle de rebotes se implementa con arrayFold, lo que mantiene las filas independientes y permite paralelizar el renderizado entre todos los núcleos de CPU. Los enlaces de variables se simulan con arrayMap de un solo elemento, ya que las lambdas de WITH son call-by-name y re-expandirían las expresiones.

Las letras combinan primitivas CSG: cilindros para los trazos rectos, toros para los redondos (renderizados con ray-marching sobre su campo de distancia firmado), esferas para el punto de la i y un "planeta" cromo (esfera menos esfera), y cajas orientadas para los trazos planos. El terreno se genera con ruido fBm sobre una rejilla y se ilumina con una rampa de altura, un sol cálido, ambiente frío de cielo, sombras por ray-marching y niebla atmosférica. Cada archivo de la carpeta queries/ es autónomo y parametrizado: anchura, altura y muestras por píxel se controlan desde la línea de comandos, lo que permite reescribir cualquier resolución. El proyecto se completa con una animación llamada ClickBulb —una lámpara hecha solo de esferas— renderizada ejecutando la misma consulta por fotograma, y con pruebas comparativas en CedarDB (33 veces más lento) y DuckDB (no logra procesar ni la resolución más baja).