Для зарегистрированных пользователей |
|
Текстурирование автомобиля
Владимир Верстак
Текстурирование не менее сложная и увлекательная задача в 3D графике, нежели само моделирование. По этому вопросу написано много статей и уроков. Я же попробую высказать свою точку зрения на текстурирование модели и в частности такой сложной модели как, авто. Чтобы было проще, я решил разделить урок на несколько частей. В первой части я собираюсь описать основы текстурирования, во второй более подробно остановиться на деталях.
Так как текстурирование неразрывно связано с рендером, то и говорить мы будем и о том и о другом. Почему именно в связи с рендером? Да очень просто, Вы когда-нибудь обращали внимание на то, как на современных компьютерах даже сложная геометрия без текстур рендерится достаточно быстро. Но стоит нам ввести в сцену материалы с рейтрейс отражениями (а без них в нашей работе никак), GI или мягкие тени, как тут же время рендера увеличивается в разы или даже десятки раз.
Как обычно, прежде чем что-то делать, нужно определиться для каких целей нам нужна отекстуренная модель. Если это для игр или Интернета, то нужна низкополигональная модель с хорошими текстурами. Если же нам не принципиален размер модели (я имею в виду кол-во полигонов) и время рендера, то стоит больше внимания уделить качественной модели, материалам и, конечно же, текстурам (которые в такой модели могут занимать весьма незначительную часть). Дело в том, что я придерживаюсь той точки зрения, что все, что можно сгенерировать при помощи процедурных карт и окрасить при помощи материалов именно так и нужно делать (просто такие материалы дадут максимальное качество, возможность на ходу менять параметры и не занимают дисковое пространство). Естественно все в разумных пределах. Например, я не стал бы делать номерной знак на машине при помощи моделирования с последующим наложением материалов, если только он не будет основной деталью изображения :-). Опять же не следует уделять слишком пристальное внимание материалам, находящимся в салоне, который кроме как через лобовое стекло и виден-то не будет. Очень часто, пытаясь сделать реалистичные материалы, мы так нагружаем процессор, что тестовый рендер длится часами. Хочу предостеречь Вас на этот счет. Если хорошенько подумать, то всегда найдется то, при помощи чего можно оптимизировать сцену. К примеру, выключить из рендера колеса, которые не видны за кузовом авто, но у которых протектор на покрышке сделан геометрией, а материал диска использует рейтрейс отражения и т.д.
Прежде чем приступить к непосредственному выполнению самой задачи, давайте обратимся к теории. Что делает модель автомобиля реалистичной (я не имею в виду геометрию, коль скоро мы начали говорить о текстурировании)? В первую очередь это отражения, затем свет и тени, которые помогают ощутить объем и, конечно же, окружение. На рис. 1 и 2 две фотографии различных автомобилей.
рис.1 рис.2
На первой фотографии отражения очень жесткие, что с одной стороны привносит в фото некоторый хаос, но позволяет лучше ощутить пространство. На фрагменте фотографии (рис. 3) хорошо видно как отражаются в капоте деревья, небо, а на крыле трава. Такие отражения могут появиться, только если краска покрыта толстым слоем лака и отполирована. Пытаясь построить такие отражения на Вашей модели нужно иметь в виду, что с точки зрения моделирования вся геометрия должна быть построена безукоризненно, иначе в отражениях Вы увидите все неровности кузова. Блики не имеют жестких границ - они более размыты, чем в авто на рис.2. У желтого автомобиля более мягкие очертания, видна глубина цвета и отражения не такие жесткие (рис. 4), но вместе с тем он выглядит ни чуть не хуже.
рис.3 рис.4
Естественно, что в зависимости от той обстановки в которой Вы моделируете; будь то выставочный павильон с искусственным освещением, улица солнечного дня или наоборот пасмурного, по разному нужно подходить и к материалам.
Рассмотрим общий случай. В качестве исходной модели я возьму сделанную специально по этому случаю модель BMW 5 серии. Итак, вот исходное изображение пятерки без текстур (рис. 5).
рис.5
Для начала установим в сцену 3 светильника (хотя можно и больше), один из которых будет ключевым и он же будет тенеобразующим источником света. О том, как это сделать вы можете прочитать в моем предыдущем уроке по освещению. Настроим свет так, чтобы он в большей степени нас устраивал и не требовал коренных изменений. Дальнейшие изменения освещения должны быть незначительными, т.к. освещение влияет на восприятие материалов и текстур и может потребовать настройку этих компонентов повторно. Прежде чем заняться материалом для кузова присвоим какую-нибудь текстуру для плоскости, на которой стоит машина. А сейчас попробуем создать простой материал для кузова (а если разобраться, то очень сложный материал нам и не понадобится). Идем в редактор материалов и здесь выбираем стандартный материал, а в качестве шейдера выбираем Multi-Layer. Конечно же, можно воспользоваться и другим, например Phong, но тогда пришлось бы в качестве диффузного цвета использовать карту Falloff, а у Multi-Layer эта возможность заложена в основных настройках. Именно этот шейдер лучше всего позволяет управлять двумя независимыми подсветками и создавать вид окрашенной поверхности, покрытой воском или лаком. Настройки моего материала Вы можете увидеть на рис. 6.
рис. 6
Сразу же хочу Вас предупредить о том, что навряд ли вид отрендеренного вами авто будет в точности соответствовать моему. Я сам никогда не копирую старых настроек материалов, т.к. в другой сцене они обычно выглядят иначе и тому ряд причин, не только освещение. А посему попробуем разобраться с настройками этого материала. Начнем с диффузного (Diffuse) цвета. Это основной цвет, определяющий цвет материала. Именно от него зависит то, какого цвета будет Ваш автомобиль. Далее цвет окружающей среды (Ambient), обычно это цвет совпадающий с диффузным, но я предпочитаю использовать более темные тона (чаще всего черный). По сути своей параметры этого цвета не критичны. Далее, если говорить о цвете, то цвет первого слоя отражения (First Specular Leyer) - это цвет, который определяет глянцевитость Вашей поверхности. Именно он создает впечатление окрашенной поверхности, находящейся под слоем лака. По тону это должен быть близкий к диффузному цвет и значительно ярче него. Цвет второго слоя отражения (Second Specular Leyer) задает цвет в местах бликов и естественно, что он должен в себе содержать диффузный цвет, но "стремиться" к белому. Настройки, связанные с Level, Glossiness, Anisotropy и Orientation могут быть различными в зависимости от геометрии и источников света. В основном они контролируют положение и размер бликов на поверхности объекта. Счетчик уровня диффузного рассеивания (Diffuse Level), который расположен под диффузным цветом позволяет дополнительно контролировать уровень яркости основного, диффузного цвета. Кроме этого я использовал в качестве отражения карту Fallof (рис.7) использующую в качестве подматериала рейтрейс карту.
рис. 7
Конечно же, можно было и не усложнять материал картой Fallof, но с ее помощью можно получить некоторый контроль интенсивности отражений на поверхности. Настройки этой карты представлены на рис. 8.
рис. 8
Ну а в рейтрейс карте нет почти никаких изменений по отношению к установкам по-умолчанию, кроме цвета окружающей среды, который я сделал светло-голубым (рис. 9)
рис. 9
Применив сейчас этот материал к кузову нашего авто, можно сделать тестовый рендер (рис. 10)
рис. 10
Что ж, по-моему, неплохо. Вполне возможно, что Вы обратили внимание на то, что на изображении отсутствуют блики; пусть это Вас не смущает, просто я отключил их генерацию у источников света. Я предпочитаю ставить их отдельно, когда можно управлять их местоположением и интенсивностью вне зависимости от основных источников света. Сейчас попробуем разобраться в том, что мы получили при рендере. Что касается бликов, то я уже сказал о них. Цвет покрытия вроде соответствует задуманному, а вот отражений по-прежнему не хватает. Мы видим, что появились отражения на боковых дверках, бампере и совсем немного на капоте. Чтобы усилить ощущение пространства, нам нужно добавить к автомобилю отражения. Тут есть несколько путей: ну, во-первых, можно создать окружение, т.е. построить дополнительно геометрию (деревья, здания, людей и т.д.), которые будут отражаться в кузове и стеклах автомобиля. Метод хороший, но таит в себе опасность долгого и мучительного рендера (ведь процессору придется дополнительно обсчитывать все эти объекты), кроме того, Вам придется создавать все эти объекты, если у Вас нет готовых. Во-вторых, можно построить полусферу, накрывающую наш автомобиль на значительном расстоянии (чтобы внутрь вместился не только автомобиль, но и камеры со светильниками), а затем на внутреннюю сторону этой полусферы наложить текстуру с панорамным изображением того, что должно отражаться в автомобиле. Кстати, не забудьте при этом у сферы повернуть нормали внутрь. Так, пожалуй, будет проще, вот только придется, повозится с панорамной текстурой и ее местоположением на сфере. Я не стану подробно описывать, как это делается т.к. здесь нет никаких сложностей, а как это выгладит во вьюпорте, смотрите на рис. 11.
рис. 11
Я все еще не настраивал бликов, специально не готовил панорамное изображение для сферы, но то, что получилось на рис. 12 вне сомнения лучше предыдущего.
рис. 12
Здесь уже можно заметить новые отражения не только на капоте, но и на крыше, крыльях и дверях. И все же большую свободу в управлении бликами можно получить, если использовать несколько отдельных плоскостей, расположенных вокруг машины. Но прежде чем мы займемся этими построениями, давайте создадим еще один материал - стекло. Это позволит нам настраивать отражения не только на кузове, но и на стеклах автомобиля, которые также являются отражающей поверхностью в нашей сцене и занимают значительное место в модели. Можно использовать прозрачное стекло, но я предпочитаю немного тонировать, для того, чтобы скрыть недостатки моделирования салона (чтобы не перегружать сцену там я использую низкополигональные объекты). Итак, материал стекла. Так, как и лобовое и заднее стекло имеет темную обводку по периметру, то там придется начать с наложения текстурных координат. Для этого, выделив лобовое стекло, добавляем в стек модификаторов Unwrap UVW, затем нажимаем большую кнопочку Edit , в результате чего откроется окно редактирования, где и выберем Mapping > Flatten Mapping (рис. 13)
рис. 13
В настройках маппинга ничего менять не нужно, просто жмем OK и получаем нечто похожее на рис. 14.
рис. 14
Это развертка нашего лобового стекла. Ее нужно скопировать в любую программу, работающую с растровыми изображениями, где Вы сможете сделать карту маски (например в Фотошоп). Если Вы не пользуетесь программами захвата изображения с экрана, то копирование можно провести через буфер обмена; клавиша Print Screen (справа вверху на клавиатуре), с последующей вставкой в файл при помощи Ctrl + v (стандартная операция). Сделав отступы внутрь я, используя в качестве бэкграунда скопированное изображение, получил вот такую маску для моего стекла (рис. 15).
рис. 15
Итак, сам материал. Для этих целей я использую материал Blend (рис. 16), где GlassFront.jpg и есть наша маска.
рис. 16
А сейчас познакомимся поближе с материалом стекла. Материал 1 - это наша окантовка. Здесь используется стандартный материал с прозрачностью, равной 80 и цветом, соответствующим тому цвету, который мы хотим видеть на краях стекла (рис. 17).
рис. 17
В качестве карты отражения я использовал карту Fallof, настройки которой идентичны настройкам такой же карты, использованной при создании материала кузова (рис. 7), с той лишь разницей, что величина отражения у меня составила 45 вместо 60. Материал 2 (рис. 16) - это материал средней части лобового стекла. Материал сделан по тому же принципу, что и окантовка с той лишь разницей, что я использовал немного другой цвет и величина прозрачности здесь составляет уже 35, а отражений 80 (рис. 18).
рис. 18
Кроме того, я использую 2-х сторонний материал и шейдер Phong, хотя большой разницы нет, но Phong дает более мягкое сглаживание. Если Вы обратили внимание, то, наверное, заметили отсутствие карты преломления в слоте Refraction. Хотя стекло и является материалом с преломлениями, но при незначительной его толщине и, учитывая расстояние, с которого это все рендерится, считаю нецелесообразным использовать в данном случае преломления. Эффект от этого получается почти незаметный, а процессор получает дополнительную нагрузку. Но при желании Вы можете поэкспериментировать, используя карту Raytrase или Reflect/Refract. Аналогично описанному выше, создается материал заднего стекла, точнее это будет тот же материал с той лишь разницей, что там используется другая карта в качестве маски.
Ну а сейчас пришло время продолжить разговор об организации сцены, т.е. займемся нашими отражениями. Для этого поместим в сцену 5 примитивов Plane, один из которых будет сверху (имитировать небо), а остальные 4 по сторонам автомобиля. На рис. 19 плоскости пронумерованы. Пятая плоскость находится вслед за четвертой по правую сторону от камеры. Все плоскости расположены на небольшом расстоянии от автомобиля.
рис.19
Не забудьте проследить, чтобы нормали этих плоскостей были обращены к автомобилю. После этого на плоскостях 2-5 накладываем текстуры с изображениями, которые будут отражаться в нашем авто. Для всех своих плоскостей я воспользовался одной фотографией, хотя можно использовать разные - дело вкуса. Плоскость под № 1 не имеет текстуры, она просто белая с уровнем самосвечения (Self-Illumination) равным 100. У всех пяти плоскостей в настройках (кликнем правой кнопкой по плоскости и в выпадающем меню выбираем Properties) выставляем параметры как на рис. 20.
рис. 20
После того, как все сделаете можно провести тестовый рендер. Возможно, понадобится подкорректировать положение текстур, поменять значение уровня самосвечения (если использованы темные фотографии). Иногда приходится менять положение плоскости имитирующей небо для того, чтобы найти оптимальные отражение. После того, как я добавил плоскости, поместил в сцену один светильник, который на бампере и передней части капота генерирует блик, а так же дополнил автомобиль некоторыми деталями, получил вот такое изображение (рис. 21)
рис. 21
Итак, подведем итоги первой части нашего урока. В этой части я попытался объяснить Вам принцип текстурирования кузова автомобиля, создание материалов стекла и покраски, а также два способа создания окружающей среды для отражений. К сожалению, каждая сцена требует индивидуального подхода, поэтому не следует бездумно повторять мои шаги - надо пытаться анализировать все действия, только тогда Вы сможете получить достойный результат. В следующей части этого урока я расскажу о создании материала для хромированных поверхностей, опишу текстурирование стекла фар и поворотников, логотипа и прочих мелочей, из которых складывается добротное изображение модели автомобиля.
|