Вопросы к 37 - p1xelse/CG GitHub Wiki

1) Что предложил Гуро? С чем связана проблема сглаживания?

В простой закраске всю грань закрашиваем одним уровнем интенсивности и зачастую получается не высокое качество. Простая модель плоха тем, что возникают рёбра. Гуро предложил биполярную интерполяции интенсивности. Рассматриваем отдельную грань, вычисляем нормали вершины грани. Зная нормаль, вычисляем интенсивность каждой вершины, выполняем первую линейную интерполяцию вдоль рёбер.

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

Вторая интерполяция (тоже линейная) выполняется, когда мы вычисляем интенсивности пикселей, расположенных на сканирующей строке. Качество изображения улучшится.

2) В каком случае нас не удовлетворит простая закраска?

Простая закраска используется при выполнении трех условий:

  1. Самое главное требование. Грань реально существующая, а не полученной в результате аппроксимации поверхности. Если мы (например, сферу) аппроксимировали гранями, и каждую грань закрашивали своим уровнем интенсивности, то одна грань одним цветом, а соседняя другим. Глаз видит резкий переход, который будет выглядеть, как ребро. Какие ребра могут быть у сферической поверхности? Использование простого подхода модели закрашивания приведет к тому, что изображение в корне не будет соответствовать исходному изображению. Исходное изображение - гладкая поверхность, а мы получаем многогранник.
  2. Источник находится в бесконечности. Падающие лучи параллельны друг другу. Это повлияет на расчёт диффузной составляющей, так как она зависит от угла падения. Для всех точек угол падения одинаков, значит диффузная составляющая одинакова. Всё прекрасно.
  3. Наблюдатель находится в бесконечности. Вектор, образованный вектором наблюдения взгляда и вектора зеркального отражения будет для всех точек одинаков, значит везде будет одинаковая зеркальная составляющая (интенсивность). Закрашиваемая грань является реально существующей, а не полученной в результате аппроксимации поверхности.

3) Отличие метода Гуро от простой закраски и Фонга

Простая закраска: каждая грань закрашивается с константной интенсивностью, соответствующей нормали к грани. Из-за этого видны границы между областями константной интенсивности - визуальная "ребристость".

Закраска методом Гуро: для грани вычисляется интенсивность ее вершин (предварительно вычисляются нормали в вершинах грани). Интенсивность грани интерполируется по интенсивностям ее вершин. Это позволяет визуально сгладить ребристость.

  • Не учитывает кривизну поверхности.
  • Хорошо работает на матовых поверхностях (диффузная составляющая).

Закраска методом Фонга: для грани вычисляются нормали ее вершин - и интерполируются для каждой точки грани. Так, для каждой точки грани вычислена нормаль к ней - соответственно, может быть вычислена ее интенсивность.

  • Учитывает кривизну поверхности.
  • Хорошо работает на зеркальных поверхностях (зеркальная составляющая).

4) Преимущества и недостатки метода

(+) Улучшение визуальных характеристик по сравнению с простой закраской - нет ребристости
(+) Быстродейственный по сравнению с методом Фонга
(-) Можем потерять рёбра и получить плоское изображение, когда мы каждую смежную грань закрасим одним уровнем интенсивность - когда углы, образованные гранями, одинаковые.

5) Для каких поверхностей подходит метод

Идеально для матовых поверхностей, для которых не подходит простая закраска.

6) Всегда ли нужно сглаживать?
Достаточно простой закраски и сглаживание не нужно, если весь объект состоит из реальных плоских граней, а если они аппроксимированы, то необходимо сглаживание, чтобы он выглядел более гладким.