Дмитрий Павлов

Цифровое моделирование на C#


Скачать книгу

зависит не только от того, какие источники света ее освещают, но и от наличия атмосферных эффектов, в частности, тумана. Благодаря удачной настройке таких эффектов можно изменить эмоциональное восприятие сцены, сделать ее более реалистичной или добавить некий мистический налет.

      В этой части урока мы научимся моделировать присутствие тумана на сцене. Мы смоделируем туман, который равномерно скрывает объекты в направлении глубины сцены. Действие такого тумана легко объяснить следующими словами: чем ближе к нам объект, тем более четко мы его видим и тем меньшее значение оказывает туман на цвета объекта, и наоборот, чем дальше объект, тем менее четко мы его видим и тем большее значение оказывает туман (его цвет) на то, каким мы видим объект. Можно сказать, что корректирующее действие тумана является функцией расстояния от наблюдателя до объекта.

      Рассмотрим формулу, с помощью которой можно вычислять цвет 3D-модели в условиях тумана:

      X– цвет 3D-модели с учетом тумана.

      F – цвет тумана (в природе, как правило, это белый цвет, но можно использовать и другие цвета).

      R – расстояние от наблюдателя до объекта.

      X – исходный цвет объекта, вычисленный например, по методу Фонга.

      d – параметр тумана (плотность).

      Как работает эта формула? Если R=0, то есть объект находится перед наблюдателем, тогда XF равно исходному цвету объекта. Если же устремить R в бесконечность, XF устремится к цвету тумана. Не стоит рассматривать эту формулу как некоторую каноническую и единственно правильную. Она является искусственно сконструированной и хорошо показала себя на практике (см. дополнительные материалы). В данной формуле выражение R2 может быть заменено на любую другую монотонно-возрастающую функцию, зависящую от R. При этом туман будет как-то по-другому «растворять» объект.

      Отображение 3D-модели

      Поскольку мы определили трехмерную модель как совокупность полигонов (треугольников), то отображение модели сводится к отображению этой совокупности. Как отобразить эту совокупность чтобы модель выглядела корректно? Существует несколько подходов к решению этой задачи. Мы изложим один из наиболее простых методов. Итак, чтобы наша 3D-модель выглядела правдоподобно, нам нужно проделать следующее: необходимо отсортировать наши треугольники по оси Z в порядке удаленности от наблюдателя. В качестве Z-координаты можно взять минимум по Z для всех трех вершин. То есть отображаться треугольники должны по мере приближения к наблюдателю – от самых дальних к ближним. Этот подход называется алгоритмом художника. Он очень прост, нагляден и легко реализуем. Но он также имеет ряд недостатков. Например, алгоритм не позволяет получить корректную картину в случае взаимно перекрывающихся треугольников. В этом случае следует разбивать конфликтный треугольник на несколько меньших. Второй проблемой является то, что система прорисовывает области, которые впоследствии