yaroslavsokolov/py_raytracing: Ray tracing engine (github.com)Кому лень читать - тут все есть ☝
Простейший трассировщик лучей на Python с Pygame
Для примера я взял объекты - сферы, т.к. с ними легче начать. Если коротко - мы берем условную точку камеры и считаем, что изображение проецируется на плоскость, расположенной в удалении от нее на единичный вектор. Потом через каждый пиксель пропускаем луч - т.е. берем от точки камеры до точки на проекции вида камеры (то бишь наш экран) условно вектор k и считаем где будет пересечение (проверяем пересечение с каждой сферой), если пересечение есть, то вычисляем длину до него через тот самый вектор k, умноженный на некоторое число (нам нужно именно это число). Далее следуют преломления света, рассеивание и тп тем же методом, в зависимости от псевдо шейдера сферы.