понедельник, 30 марта 2015 г.

как я пишу свой рендер

Источниками воплощенных идей для меня были:
  • Dart Renderer от David Cline, создателя алгоритма ERPT(Energy redistribution path tracing). В исходниках этого рендера я нашёл воплощение Metropolis Light Transport и, экспериментируя со случайными последовательностями и находя в последовательностях закономерности, вывел возможность настраивать Metropolis Light Transport для скорости и точности. Написан на с++.
  • Progressive Path Tracer от Bacterius. Реализация алгоритма Progressive Path Tracer на Delphi. Исходный вариант программы я переделал, ускорив расчеты сфер, треугольников, плоскостей, изменил интерфейс, добавил тоновую коррекцию. Также добавил реализацию importance sampling. 
  • SmallVCM от Tomáš Davidovič. Реализация замечательного алгоритма Vertex connection and merging, который уже реализован в рендерах Corona и Vray. Я добавил вывод изображения в окне с помощью библиотеки fltk, оптимизировал алгоритмы пересечения луча и сфер, треугольников, сделал более частое обновление и более быстрое отображение изображения. Планирую ускорить с помощью реализации ускорителя пересечения луча с обьектами сцены Bounding interval hierarchy из следующего в списке рендера. Написан на с++.
  • SunFlow от Christopher Kulla. Хороший рендер с реализацией photon mapping, path tracing, множеством обьектов и материалов, ускорителями пересечения луча со сценой kd-tree и bounding interval hierarchy. Написан на java.
  • Реализация Stochastic progressive photon mapping для GPU с поддержкой glossy-материалов, спектральным рендерингом и Motion Blur. Написан на с++. http://www.bee-www.com/gpusppm2.zip
  • и остальные списком: Arauna, WinOsi, Pane, R.I.S.E., Mitsuba

На скриншоте - результат моей реализации SmallVCM после 1 часа 55 минуты. На фоне открыто окно браузера с сайтом www.bee-www.com с результатом Stochastic progressive photon mapping для GPU

Не сложно догадаться, что мой рендер будет включать в себя и GPU-версию и Vertex Connection and Merging с Metropolis Light Transport на этапе генерации лучей из источников света. И всё это с оптимизациями и удобствами!