Введение 3
Глава 1. Обзор литературы 5
1.1. Обзор существующий методов 5
1.2. Обзор программных инструментов для работы с реалистичной компьютерной графикой 5
Глава 2. Теоретические аспекты работы с графическими объектами 6
2.1. Примитивные объекты 6
2.1.1 Сфера 7
2.1.2 Плоскость 7
2.1.3 Треугольник 8
2.1.4 Четырехугольник 10
2.2. Структура сцены 11
2.3. Материалы 13
2.3.1 Диффузный материал 13
2.3.2 Металлический материал 14
2.3.3 Прозрачный материал 15
2.4. Текстуры 17
2.4.1 Константная текстура 17
2.4.2 Шахматная текстура 18
2.4.3 Текстура изображения 19
2.5. Освещение 20
Глава 3. Построение алгоритма 21
3.1. Описание алгоритма 21
3.2. Стек технологий 23
3.3. Тестирование и результаты работы 24
Заключение 25
Список литературы 27
Актуальность
С развитием киноиндустрии, игровой индустрии и дизайна все больше растет потребность в реалистичной компьютерной графике. Долгое время вычислительные способности компьютеров позволяли использовать только метод растеризации треугольников [18, 15], что сказывалось на реалистичности получаемого результата, так как этот метод - очень грубая аппроксимация того, как свет на самом деле устроен. Однако компьютерная мощь растет с каждым годом, что позволяет использовать другие методы [16, 17], которые раньше использовать не представлялось возможным, ввиду вычислительной трудозатратности. Один из таких методов - метод трассировки лучей.
Метод трассировки лучей представляет собой метод генерации изображения путем отслеживания, или трассировки, пути света и моделирования эффектов его столкновения с объектами [20]. Он известен своей гибкостью, как правило, более достижимом реализмом и масштабируемостью, однако, как правило, достаточно трудозатратен [19].
В данной работе поставлена задача реализовать метод трассировки лучей, не акцентируя внимание на оптимизации данного метода, хотя некоторые вопросы оптимизации все же будут затронуты.
Цель работы
Целью данной работы является изучение и реализация метода трассировки лучей.
Задачи работы
Для достижения этой цели в рамках работы были поставлены следующие задачи:
• Определить и реализовать набор примитивных объектов, доступных для конструирования сцены.
• Определить и реализовать набор свойств поверхности примитивных объектов таких как:
• Рассеивание лучей и затухание света
• Текстуры
• Свойство излучать свет
• Получить изображение, сгенерированное данным методом
Практическая значимость
Одна из самых крупных потребителей реалистичной графики - индустрия развлечений, а именно игровая индустрия и киноиндустрия.
Реалистичность спецэффектов в кино помогают людям создавать такие кадры, какие раньше не представлялось возможным. Также графика в разы удешевила съемочный процесс, что сделало кино более доступным для производства.
В игровой индустрии графика все ближе приближается к реалистичной, что позволяет делать их более правдоподобными, стирая барьер между игроком и игрой.
Если отойти от индустрии развлечений, то реалистичная графика пользуется спросом у дизайна. От дизайна интерьера квартиры, до дизайнов крупных продуктов и целых зданий. Возможность посмотреть будущий интерьер еще не отремонтированной квартиры, посмотреть еще на не выпущенную марку автомобиля или устроить экскурсию по какому-либо еще недостроенному объекту позволяет многим людям экономить время и деньги.
Результаты работы
В ходе данной работы были получены следующие результаты:
• Определен и реализован набор примитивов, позволяющий собирать сцены для генерации изобрадений
• Определен и реализован набор свойств поверхности примитивов, таких как:
• Материалы - отвечают за рассеивание лучей и затухание света
• Текстуры
• Специальный тип материала, способный излучать свет
• Получены изображения с помощью данного метода.
• Разработан и реализован алгоритм трассировки лучей. Исходный код доступен по ссылке: https://github.com/Sphag/raytracer
Перспективы развития
Есть три вектора, по которому можно развивать данный метод:
1. Оптимизация алгоритма. Использование как дополнительных потоков центрального процессора, так и использование граффического. Рассмотреть возможность применения аппаратных ускорителей, как, например, ядра видеокарт семейства Nvidia RTX [25].
2. Работа в сторону улучшения самого алгоритма. Данная реализация делает достаточное количество допущений о том, как свет на самом деле устроен. Уже существуют модификации, которые моделируют поведение света намного точнее, что делает их результат намного ближе к реализму.
3. Удобство использования. В данной реализации метода достаточно трудно настроить сцену пользователю, который не знаком с данной реализацией. Нет просмотра результата в окне в реальном времени, нет интерактивного редактора сцен. Удобство использования экономит много времени, что имеет большую роль в некоторых областях.
[1] Roth S. «Ray Casting for Modeling Solids». DOI: 10.1016/0146- 664X(82)90169-1
[2] Premadi F. «Ray-Casting Tutorial For Game Development And Other Purposes». https://permadi.com/1996/05/ ray-casting-tutorial-table-of-contents/
[3] Nikodym T. «Ray Tracing Algorithm For Interactive Applications». https: //dip.felk.cvut.cz/browse/pdfcache/nikodtom_2010bach.pdf
[4] Kajiya J. T. «The rendering equation». DOI: 10.1.1.63.1402
[5] Lafortune E. «Mathematical Models and Monte Carlo Algorithms for Physically Based Rendering». http://www.graphics.cornell.edu/ ~eric/thesis/index.html
[6] Farnsworth M. «Biased vs Unbiased Rendering». http://renderspud. blogspot.com/2006/10/biased-vs-unbiased-rendering.html
[7] «OpenGL Mathematics (GLM)». https://glm.g-truc.net
[8] Moller T., Trumbore B. «Fast, Minimum Storage Ray/Triangle Intersecton». http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/ code/raytri_tam.pdf
[9] Ericson C. «Real-Time Collision Detection». p. 238. ISBN 1-55860-732-3.
[10] «Snell’s law». https://en.wikipedia.org/wiki/Snell%27s_law
[11] Schlick C. «An Inexpensive BRDF Model for Physically-based Rendering». http://www.cs.virginia.edu/~jdl/bib/appearance/analyticZ 20models/schlick94b.pdf
[12] Shirley P. «Ray Tracing in One Weekend». https://raytracing. github. io/books/RayTracingInOneWeekend.html
[13] Shirley P. «Ray Tracing the next week». https://raytracing.github.io/ books/RayTracingTheNextWeek.html
[14] «Cornellbox». https://en.wikipedia.org/wiki/Cornell_box
[15] Akeley K., Kirk D., Seiler L., Slusallek P., Grantham B.«When will raytracing replace rasterization?». DOI: 10.1145/1242073.1242120
...