пятница, 8 октября 2010 г.

Проблемы антиализинга.

   В этой статье я хочу рассказать о нюансах антиализинга, а точнее его подвида - суперсемплинга, который используют большинство рейтрейсеров, таких как Mental Ray, Vray, Final Render, Brazil.
Проблемма состоит в том, что для того чтобы визуализировать мелкие детали, нужно большое кол-во семплов на пиксель. Поясню наглядно.
   Я буду использовать 3d max 2011 и Mental Ray. Создадим конусы с соотношением диаметра основания к высоте, равным 250. Расположим их в ряд, удаляющийся от камеры. Разрешение я специально поставил не большое, т.к. чем меньше разрешение, тем сложнее суперсемплерам проработать мелкие детали.
   Фильтр антиализинга я использую, в основном, по Гауссу, с ширинои и высотой в 2 пиксела. И вот почему:
1. Быстрее Митчелла (с другими не сравниваю, т.к. считаю Митчелл самым достойным аппонентом).
2. По кач-ву практически не уступает. Митчелл немного резче.
3. Не даёт затемнения пикселов на краях, в следствии небольшого эффекта шарпа, которым обладает Митчелл. Это важно на композе.
4. Ланчоз имеет ещё более выраженный шарп и он немного медленнее Митчелла.

   Результаты рендеров, с разными настройками:








     Почему мы имеем такую картину? Суперсемплинг выстреливает луч из пиксела, используя настройку "Minimum", не попадает по самому узкому месту конуса, а это ближе к верхушкам, и с чистой совестью переходит к другому пикселю. Т.е. до следующего уровня семплинга, ограниченного настройкой "Maximum" дело не доходит. Так же, уменьшение настройки "Spatial Contrast" не поможет. Остаётся тупо увеличивать минимальное кол-во лучей, что увеличивает время просчёта. Так же, это относится к предметам любого размера, если они удалены от камеры на столько, что становятся меньше пикселя. Например, объекты уходящие к горизонту (трава, деревья, мелкие ветки и т.д.). Вот такая расплата, за кач-венный рендер.

   Другие результаты показывают сканлайны.

1. Максовский "Scanline".
2. Режим "Fast Rasterizer" в ментале (я не уверен что это настоящий сканлайн, но геометрию он шурует очень быстро).
Вообще Mental Ray заявляет себя как гибридный рендер, Scanline + Raytrace. Но почему включая у него режим "Scanline", у него использует простой суперсемплинг, мне не понятно. Наверно, его сканлайн где-то в другом месте себя проявляет.
3. Maya Software.
4. Renderman.

   Результаты рендеров:





   У них другой алгоритм отрисовки геометрии. И они намного быстрее справились с задачей, это их большой плюс. Но у сканлайнов есть и недостатки, один из них - они не любят рейтрейсинг. Хотя Renderman, например, быстро развивается и рейтрейсинг там имеет хорошие показатели по скорости.
   Итого.
1. Перед финальным рендером, вам надо оценить необходимость в детализации.
2. Если вы используете рейтрейсеры и вам нужна хорошая детализация, мало поднять максимальное значение. Чаще всего надо поднять минимальное. В большинстве случаев, достаточно 16, а максимальными настройками можно считать 64 семплов, для минимума и максимума. В Vray это значение 3. Т.к. в нём 0 = 1 семпл, 1 = 4 семплов, 2 = 16 семплов, 3 = 64 семплов. Также, по идее, очень хорошая опция Anti-aliasing Sampling Override в Maya. Она позволяет по объектно регулировать суперсемплинг. Но к сожалению у меня она не заработала. Подобная опция есть для ментала, если подключить шейдер от фирмы "Ctrl.Studio". Я его не пробовал ещё. Как попробую - напишу.
3. Final Render R3: Вроде внедрили алгоритм гибридного рендеринга, позволяющего отрабатывать мелкие объекты, которые не берут обычные настройки суперсемплинга. Я ещё не тестил. Подробнее тут.
http://www.cebasstation.com/index.php?pid=product&prd_id=75&feature=960
4. Если используете 3дмаксовский сканлайн: Ничего настраивать для антиализинга не надо. Он даёт максимально кач-венную геометрию. Про текстуры разговор отдельный. Я как раз готовлю статью про это.
5. Maya Software: настройка антиализинга "Highest quality" является максимальной и даёт хороший результат, без доп. настройки.
6. Renderman: настройка антиализинга "Pixel Samples", влияет ещё и на кач-во моушен блюра. Как правило, больше 15х15 не требуется.

   Вот такой расклад.  Я надеюсь что знания особенностей рендеров, помогут вам достичь лучших результатов. Спасибо за проявленный интерес, к данному вопросу. До свидания.

P.S. На текущий момент (2012 г.) в ментал рее имеются и другие алгоритмы антиализинга - это "unified sampling" (что-то наподобие вреевского DMC) и "progressive rendering" (рендерится вся картинка с 1 семплом, и постепенно проявляется по мере добавлении семплов в нужные части изображения). Они лучше по соотношению скорость/кач-во, чем стандартный алгоритм. Чтобы воспользоваться ими в 3д максе, нужно скачать и подключить к максу бесплатный скрипт, вот от сюда: http://www.infinity-vision.de/page/ro_menue . Т.к. в 3д максе не реализованы эти фичи, в отличии от майи и софтимиджа.

Начиная с 3д макс 2014 "unified sampling" встроен.