Задание 100. RayTracing, примитивы (добровольное, задание не готово)
Это задание не является обязательным. Пока что задания как такового тут нет, только набросок для экспериментов.
RayTracing - техника компьютерной графики, которая обсчитывает луч пущенный через каждый пиксель экрана и двигающийся по шагам (трассирует или марширует луч). Общая идея такова, что имея направление луча, текущую позицию, и функцию дистанции до каждого объекта со сцены - можно сделать шаг по данному направлению такой длины, что никакую поверхность объектов сцены мы не проскочим.
Откройте набросок, справа код, слева результат. Чтобы обновить результат после редактирования - нажмите Alt+Enter
. Обратите внимание на комментарии. В первую очередь вас должны интересовать функции opU
и map
.
Примеры экспериментов:
- добавить примитив
- добавить плоскость
- затекстурировать плоскость шахматной раскраской
- расставить один примитив (например куб) на бесконечности (в центре ячейки бесконечной регулярной двухмерной сетки)
- свернуть этот примитив в завиток (twist)
- сделать сворачивание динамическим от времени
- сделать плоскость зеркальной
- сделать камеру крутящейся вокруг
- добавить сглаживание
- добавить motion blur
Полезные ссылки
Некоторые функции дистанций до примитивов: функции дистанций.
Полезный пример: несколько примитивов.
Любопытные применения: cubes, Menger Sponge, Menger Journey, Tiny Earth.