Курсовая работа
по машинной графике
На тему: Построение реалистических изображений поверхности океана с 3хмерной лодки, которая плавает по поверхности океана
В настоящее время вопросы, связанные с отображением на экране дисплея разнообразных изображений, как никогда актуальны. Графика используется практически во всех областях деятельности человека, так или иначе связанных с использованием компьютера. Графическое представление информации может быть как всего лишь более удобным средством представления информации и организации взаимодействия пользователя с вычислительной машиной, так и неотъемлемой частью вычислительного комплекса, например, при моделировании сложных процессов, природных явлений, реалистичной графики в трехмерных компьютерных играх.
До недавнего времени основным критерием выбора способа отображения трехмерных объектом являлась скорость вычислений, в силу того, что мощности компьютеров не хватало для полноценной реализации существующих алгоритмов.
Примером таких «быстрых» алгоритмов являются алгоритмы, такие как z-буфер, использующие построчный просчет видимого изображения; эти методы давали вполне приемлемую скорость и до сих пор используются в ряде случаев, когда на первом месте стоит быстродействие. Однако они имеют один существенный недостаток, который в ряде случаев сводит на нет их преимущества: с их помощью невозможно построить высокореалистичные изображения с отображением таких оптических эффектов, как отражение, преломление, блики света от воды и т.д. Были попытки сымитировать подобные эффекты, накладывая на объекты, заранее просчитанные текстуры освещенности, что в совокупности с эффективными алгоритмами оптимизации несколько приближало изображение к реальности. Такой подход широко использовался в трехмерных компьютерных играх и был доведен разработчиками практически до совершенства. Однако того качества изображения, которое может быть получено с применением рекурсивных алгоритмов, таких как прямая и обратная трассировка лучей, а также алгоритм излучательности, им никогда не достичь.
Для получения действительно реалистичных изображений, сравнимых с фотографией, в настоящее время существует три алгоритма: алгоритм прямой трассировки лучей, алгоритм обратной трассировки лучей и алгоритм излучательности.
Алгоритм прямой трассировки лучей разработан уже давно, но, как и в момент его создания, в настоящее время он применяется очень мало в силу исключительно больших вычислительных затрат и существенной избыточности вычислений. Кроме того, очень трудно предсказать время вычисления, которое может оказаться неприемлемо большим. Однако алгоритм все же используется, поскольку качество и реалистичность получаемого изображения очень высоки.
Алгоритм обратной трассировки лучей в той или иной модификации является основным средством получения высокореалистичных изображений с большинством возможных оптических эффектов, наблюдаемых в реальной жизни. Результат работы алгоритма оказывается очень близким к реальности. В настоящее время обратная трассировка лучей становится все более популярной, и существует тенденция применения модификаций этого алгоритма в программах, требующих построения трехмерных изображений в реальном времени, например, в компьютерных играх. Это стало возможным благодаря тому, что данный алгоритм естественным образом распараллеливается и, таким образом, в полной мере может использоваться многопроцессорными системами.
Еще одним рекурсивным алгоритмом построения реалистических изображений, принципиально отличающимся от перечисленных, является алгоритм излучательности. В отличие от трассировки лучей, основанной на принципах геометрической оптики, данный метод использует законы сохранения энергии, что позволяет моделировать сцену физически соответствующую реальности. Алгоритм излучательности обычно используется в комбинации с обратной трассировкой лучей.
Данная программа предназначена для построения реалистических изображений поверхности воды с трехмерным объектом на ней. В ее основе лежит алгоритм обратной трассировки лучей, включающий в себя поддержку отражения и преломления лучей, а также учет таких оптических эффектов, как блики от солнца, и различных волнений водной поверхности. Дополнительно реализованы такие алгоритмы, как наложение текстуры, отображение фактуры поверхности, устранение «лестничного» эффекта по алгоритму стохастического суперсэмплинга.
Сцена состоит из водной поверхности, трехмерной лодки и солнца. Пользователь имеет возможность редактировать размеры лодки, ее положение в пространстве. Освещенность сцены и положение солнца рассчитываются в зависимости от введенных пользователем параметров: дата, время и географическое положение. Программа может, как строить один кадр сцены, так и последовательность кадров (мультипликация), когда лодка движется в зависимости от направления и скорости ветра.
Базовым алгоритмом при разработке данной программы был выбран алгоритм обратной трассировки лучей. Основным его преимуществом является получение намного более реалистичных изображений, чем при применении алгоритмов, таких как алгоритм z-буфера. Высокая реалистичность достигается потому, что алгоритм основан на законах оптики и может воспроизводить эффекты, недоступные другим алгоритмам – отражение, преломление и точные тени. Кроме того, алгоритм обратной трассировки учитывает специфику свойств материалов отображаемых объектов.
К преимуществам алгоритма можно отнести также невысокую потребность в памяти, потому что при построении изображения интенсивность каждого пиксела вычисляются автономно, и память расходуется только на хранение текущего дерева луча.
Основным недостатком алгоритма обратной трассировки лучей является его крайне низкая скорость, однако процесс вычисления очевидным образом распараллеливается, что делает возможным расчет различных участков изображения на отдельных процессорах или даже компьютерах в сети. Таким образом, можно достигнуть скорости прорисовки, близкой к реальному времени.
Для расчета интенсивности каждого пиксела используется глобальная модель освещения Уиттеда, как проверенная временем и позволяющая получить близкое к реальности изображение, в то же время, давая приемлемую скорость, в отличие, например, от глобальной модели Холла, учитывающей зависимость коэффициентов диффузного и френелевского отражения, а также коэффициента френелевского пропускания от длины волны и свойств вещества
Для моделирования водной поверхности взят алгоритм наложения фактуры (bump-mapping). Сама фактура генерируется с помощью шума Перлина, который затем интерполируется с помощью функции косинусов. Данный алгоритм позволяет достичь наибольшего быстродействия и дает приемлемые результаты для больших водных поверхностей (море, океан), в то время как другие алгоритмы (быстрые преобразования Фурье (FFT), дифференциальные уравнения движения водных потоков, фракталы) требуют, как больших вычислительных затрат при расчете, так и аппроксимации водной поверхности множеством примитивов, что приводит к огромным затратам по времени и неприемлемы для программной реализации.
Для повышения реалистичности изображаемых объектов используются алгоритмы текстурирования и фактурирования. Применяя их, можно добиться почти фотографической реалистичности прорисовки поверхности объекта.
Еще одним добавлением к базовому алгоритму трассировки является стохастический суперсэмплинг, позволяющий устранить неровности на границах объектов гораздо эффективнее, чем обыкновенно применяемый для устранения “лестничного” эффекта суперсэмплинг. Данный подход показывает неплохие результаты даже при пропускании всего одного луча на пиксел.