Для реализации был выбран алгоритм Z - буфера. Он широко применяется в современных 3D движках. Алгоритм очень эффективен и практически не имеет недостатков, если реализуется аппаратно. Данный алгоритм позволяет получить представление об особенностях современных аппаратных компонентов компьютеров. Одновременно с неоценимым опытом он позволяет достичь необходимой скорости в условиях данного проекта. В дальнейшем, путем переноса некоторых вычислений с программного на аппаратный уровень можно добиться значительно увеличения производительности. Особенно с учетом особенностей современного развития компьютерных вычислений, нацеленного на перенос некоторых операций с CPU на GPU. Видеокарты от ATI серии выше Xx00 и Nvidia 8х00 позволяют реализовать данный перенос.
Анализ и выбор алгоритма определения освещенности
Алгоритм трассировки лучей.
Трассировка лучей - это метод, применяемый для создания реалистичных образов на компьютере, используя полные модели трехмерного мира. Трассировка лучей решает
|
|
множество проблем. Этот алгоритм может выполнять следующие действия:
Удаление невидимых поверхностей;
Перемещение;
Отражение;
Рассеяние;
Окружающее освещение;
Точечное освещение;
Наложение теней.
Изначально этот алгоритм разрабатывался для решения проблемы удаления невидимых поверхностей. Трассировка лучей создает образ, исходя из тех же законов, что и наше зрение. Есть несколько объектов: источник света, наблюдатель и план наблюдения.
Чтобы воспользоваться трассировкой лучей для создания натуральных образов, нам придется использовать миллиарды световых лучей из источника света, а затем рассматривать каждый из них, надеясь, что он попадет в план наблюдения и примет участие в создании образа. Возникает вопрос - а зачем трассировать каждый возможный луч? На самом деле, нас интересуют только те лучи, которые достигают плана просмотра. Что же будет, если трассировать лучи в обратном направлении? Проследим движение лучей для каждого из пикселей на экране, а затем посмотрим, где эти лучи пересекаются с планом просмотра. Отметив пересечение, мы останавливаемся и окрашиваем соответствующий пиксель в нужный цвет. Это называется первичной трассировкой лучей.
Данная техника позволяет создавать трехмерные образы, но при этом не видны такие эффекты, как тени, рефракция и рефлексия. Чтобы воссоздать перечисленные эффекты, мы должны принять в рассмотрение специальные вторичные лучи, которые
исходят из точек пересечения. Это все делается рекурсивно до достижения некоторого уровня детализации. Затем полученные по всем лучам результаты складываются, и соответствующему пикселю присваивается вычисленный цвет.
|
|
Трассировка лучей - это один из наиболее насыщенных вычислениями методов расчета трехмерных изображений, но зато и результаты получаются впечатляющими. Есть, правда, и одна проблема: для решения этой задачи в реальном времени не хватает
мощности даже самого быстродействующего компьютера. Потому нам придется учесть данное обстоятельство и применить идею трассировки лучей для создания другого метода. Он будет более ограничен, но позволит нормально работать с трехмерными мирами на обычном ПК. Исходя из этого, был реализован упрощенный вариант трассировки лучей, использующий только первичные лучи для генерации изображения. С последующими оптимизациями возможно достижение производительности для рендеринга изображения в режиме реального времени.