<< к оглавлению...

Эффект ржавчины (используя Ambient Occlusion)

В этом уроке (в общих чертах) излагается техника использования Ambient Occlusion при создании проржавевших участков на ваших объектах. Для начала, можете прочитать что такое Ambient Occlusion здесь.
Если вы посмотрите на фото поржавевших объектов, одна особенность, которую вы сразу можете заметить, это – как бóльшая часть ржавчины появляется в местах, которые напрямую не подвержены влиянию природных стихий (ветер, дождь, и тд): области, где части объектов пересекаются и состыковываются. Труднодоступные участки, в которых сохраняется влажность, поскольку туда не попадает солнечный свет, который мог бы их просушивать. Ambient Occlusion – это технический приём, при котором определяется насколько отдельные части поверхности "видны со стороны неба" (т.е. достижимы для небесного света), и хотя эта техника обычно используется для расчёта освещения (как при воспроизведении теней от небесного источника света, в противоположность "чистому прямому свету": от солнца, без учёта облачности и цвета неба или от лампы светильника), Ambient Occlusion также превосходно подходит для определения участков на вашем объекте, которые естественным образом могут покрыться ржавчиной.

pic1

pic1b

Сначала, давайте возьмём чайник и поверхность (на которой его расположим) и воспользуемся картой mentalray "Ambient/Reflection Occlusion" (заметьте, что почти у всех рейтрейсовых рендер-движков есть похожий вид карты, например, в Brazil 2 это карта "Brazil2 Occlusion", которая выполняет ту же функцию, поэтому для этого урока можете свободно использовать наиболее удобный для вас рендер-движок). Мы будем использовать карту, с помощью которой получим переход между ржавой поверхностью и поверхностью, окрашенной в жёлтый цвет.

Вот объект, окрашенный в жёлтый цвет:

pic2

Вот отдельно материал ржавчины, смоделированный с помощью фрактального шума (fractal noise) для bump-а, цветность – обработанная фотография настоящей ржавчины:

pic3

А вот результат просчитанной карты АО (ambient occlusion map):

pic4

Теперь, используем карту ambient occlusion для маски (как часть Blend Material) при смешивании двух других материалов между собой. В результате получим следующее:

pic5

Всё хорошо: ржавчина проявляется в нужных (частично перекрытых или заслонённых) местах объектов. Но ржавчина видна слишком чётко. Это потому, что слишком чётко видна карта АО. В идеале, нам бы нужно сделать эти чёткие края более размытыми. Моей первой мыслью было воспользоваться плагином Warp Texture plugin (автор: John Burnett). Warp Texture (дословно: деформация текстуры) делает следующее: берёт любую карту и деформирует её, используя другую карту. Но, деформ-карта не только не работает с mentalray-ем, но также не будет работать с ambient occlusion, поскольку warp texture не может деформировать рейтрейс-эффекты.
Следующей логичной попыткой была такая: почему бы не использовать карту ambient occlusion для того, чтобы определить область, в которой будет проявляться шум (noise)? Это можно сделать поместив фрактальный шум (fractal noise) в первый слот карты Mix (внутри исходного Blend-материала), сделать второй слот белым, а затем поместить в mix-слот карту АО.

pic6

Вот получившаяся маска:

pic8

Этот вариант – лучше, и достаточно хорош для некоторых видов ржавчины (в особенности, ржавчины, которая слегка "размыта").

pic7a

Но если вы посмотрите на второе фото, у такой ржавчины намного более чёткие границы по краям. Как нам получить эффект такого рода?
Один способ, который можно попробовать: попытаться "ужать" АО, что сделает края более не столь размытыми. Вы можете сделать это, изменив значение Spread (для этого примера, я задал значение Spread = 0.05 вместо 0.5 по умолчанию). Но это лишь делает форму АО более отчётливой, и мы получаем такие "безобразно-чёткие" края границ.

pic8

Также можете попробовать ужать фрактальный шум, но это тоже не решает проблему, края АО-карты всё ещё видны (хотя, немного слабее).

pic9

После множества дискуссий на cgtalk, Master Zap пришёл к неплохому решению проблемы. Вместо раздельного сжатия краёв у шума и АО и их последующего смешивания, сперва смешать шум и АО, а затем ужать получившийся результат.
Итак, возьмите вашу карту Mix, ту, которая смешивает (не "ужатую") карту шума и (не "ужатую") карту АО, и установите величину кривой Output в подходящее значение сжатия:

pic10

Вот получившаяся маска:

pic11

И конечный результат:

pic12

Это выглядит намного лучше.

Несколько заметок... Используйте различные типы процедурного шума (procedural noise). В плагинах Darktree компании DarkSim или Essential Textures от Digimation существуют некоторые виды шумов, которые имеют более сложную структуру, чем у стандартного фрактального шума. Также для получения разнообразия, вместо одного шума, вы можете попробовать смешать вместе несколько различных шумов разных размеров. Вот один из подобных примеров:

pic13

Ещё обратите внимание на следующее: хотя данная техника хорошо подходит как заготовка для последующего создания ржавчины, или для объектов (с подобного рода эффектами), расположенных на определённом расстоянии, я не рекомендовал бы использовать этот способ для центральных фигур в сцене, поскольку результаты не всегда легко контролировать и могут не отражать нужную степень точности и разнообразия (ржавого узора), который должен иметь объект, находящийся в фокусе.
Также, вы можете попробовать воспользоваться функцией max-а "Render To Texture", чтобы отрендерить АО-ржавчину в карты, которые потом можете отредактировать в Photoshop-е. Это довольно хороший способ, для получения смешанной возможности создания процедурных карт и их последующего редактирования и добавления необходимых деталей вручную. Но если у вас много объектов, то этот подход для таких случаев тоже навряд ли можно порекомендовать, поскольку вам придётся накладывать UV-карты на все эти объекты, а потом при необходимости сортировать и редактировать такое количество карт, назначенных на объекты. Также, если вам нужно будет перемоделировать объекты после того, как карты уже настроены, можно очень легко запутаться в наборах карт после из «запекания», (хотя если позаботиться о структуре размещения наборов карт отчасти этого можно избежать, но только отчасти). Другая причина, по которой вы можете захотеть использовать функцию "Render To Texture" в том, что АО относительно медленный в плане просчёта процесс, и будет намного быстрее загрузить просчитанную bitmap-карту, чем выполнять её расчёт "на лету".

Вот max-файл, для приведённого выше изображения. max2008, mentalray: ambient_occlusion_rust.zip (Кстати, учитывайте то, что настройки для предыдущих версий мах-а могут немного отличаться).

Если хотите узнать, как сделать подобный эффект, используя mental ray в Maya, здесь ветка форума на эту тему (на англ.).


оригинал статьи : http://www.neilblevins.com/cg_education/ambient_occlusion_rust/ambient_occlusion_rust.htm
перевод и адаптация: Александр Ергашов /© 2009-2012/
<< к оглавлению...