Цикл Games в Maya, автор: Юрий Рогач (Ursus) Статьи взяты с сайта dlight.ru Данные туториалы актуальны для программы Maya 8.5
Наибольший объём работ 3D-художника при производстве игр связан с изготовлением игровых уровней. В данном уроке мною будет показан один из разработанных способов создания сложного террейна на примере небольшой реальной игровой локации. Представленный принцип моделирования подходит и для более масштабных игровых уровней, детализация и бюджет полигонов которых определяется как и возможностью игрового движка, так и требованиями дизайн-документа.
Перед этапом создания лучше всего иметь скетч, план, или хотя бы просто набросок создаваемого уровня:
Возьмем для примера часть морского скалистого побережья с заранее продуманным рельефом и планом расположения элементов сцены.
Зная размер и пропорции локации, изготавливаем Polygon Plane с нужной тесселяцией. Располагаем его на уровне, где примерно должно быть расположена видимая подводная часть острова, а затем, выделяя инструментом Paint Selection Tool и удаляя лишние полигоны, придаём плоскости нужный контур дна. Далее, снова выделив Paint Selection Tool нужные полигоны, чтобы форма выделения приняла вид необходимой конфигурации подводной части побережья, произведём Extrude этого выделения до 2/3 высоты к уровню линии моря, создав контур основания суши:
Используя инструмент Insert Edge Loop Tool[Polygons] Edit Mesh->Insert Edge Loop Tool одним кликом вставляем протяженный edge через всё основание острова, параллельно линии дна, а затем, используя инструмент Select Shortest Edge Path Tool[Polygons] Select->Select Shortest Edge Path Tool выделяем границу между плоским дном и отвесными полигонами. И, после того, нажав CTRL+F9, превращаем это выделение в выделенный массив вертексов:
К выделенному массиву вертексов применяем действие функции Average[Polygons] Mesh->Average Vertices, (настройки которой можно подобрать для достижения наиболее подходящего вам результата), делая видимое сглаживание границы перехода между плоским дном и отвесными полигонами. Причем, без добавления лишнего количества полигонов:
Выделив весь mesh будущего террейна, активизируем инструмент Sculpt Geometry Tool[Polygons] Mesh->Sculpt Geometry Tool вместе с вкладышем его настроек:
Экспериментируя со стандартными профилями кистей, и профилями, подгружаемыми через кнопку Browse[b], придаем "дну" нужную конфигурацию и рельеф:
Далее, снова выделив [b]Paint Selection Tool нужные полигоны, чтобы форма выделения приняла вид необходимой конфигурации уже надводной части побережья, произведём Extrude этого выделения до высоты уровня линии моря, создав контур кромки суши:
Дальше придется поимпровизировать побольше. Используя вышеописанные приемы с использованием Paint Selection Tool, Extrude и, в некоторых случаях, Average постараемся получить состоящую из четырехугольников форму надводной части берега и массива скал над берегом. Размеры квадратных элементов "поверхности" и степень (длину) Extrude желательно сохранять с одинаковыми пропорциями, и, желательно, выдерживая форму квадрата. Extrude делаем послойно, выделяя перед этим каждый раз [/b]Paint Selection Tool-ом[/b] только те участки, которые будут выдавлены:
На следующем этапе, поработав Sculpt Geometry Tool[Polygons] Mesh->Sculpt Geometry Tool закруглим острые участки, примяв их кистью, и сделаем более объемными некоторые участки скал, немного выдавив Sculpt Geometry Tool-ом одни места, и углубив кистью другие:
Далее на весь mesh делаем Smooth[Polygons] Mesh->Smooth с любым понравившимся вам значением, но с Division levels желательно не более 1. Сетка объекта приобретает более детальный вид, имея в виде компонентов поверхности четырёхугольники меньших значений. На этой поверхности уже можно более тонко работать Sculpt Geometry Tool-ом с разными профильными кистями (подгружаемыми через кнопку Browse), в том числе и собственных конфигураций. На данном этапе требуется завершить работу над формой и выдавленными элементами береговой локации:
Следующим этапом работы требуется установить в нужных местах mesh-а полигональные рёбра и поверхности с нужным значением жесткости нормалей, используя Soften Edge[Polygons] Normals->Soften Edge и Harden Edge[Polygons] Normals->Harden Edge. (В предыдущих версиях Maya эти функции находятся в другом месте). Также, в моем случае, внизу берегового дна потребовалось сделать "юбку", уходящую в темноту глубины моря в игровом движке. Чтобы сделать ее, достаточно выделить край (border) модели, щелкнув по одному из border edge с помощью инструмента Select Border Edge Tool[Polygons] Select->Select Border Edge Tool, используя затем Extrude:
Далее придется провести наиболее трудоемкую и тщательную работу по текстурированию модели. Раскладка UV-set-а (или UV-set-ов) - целая наука, поэтому подробности этого процесса придется здесь пропустить. Тем более, что у каждого 3D-художника есть свои наработки, а у каждого игрового проекта - технические требования. В моем случае можно было использовать колорные тайловые текстуры на первый UV-set и lightmap (или occlusion) на второй. Тайлы текстур требуется заготовить заранее (урок по их созданию я попытаюсь написать в следующий раз). После раскладки маппинга и укладки колорных тайлов часть берега приобретает вид:
При работе с маппингом и тайлами на ландшафтной локации приходится постараться, чтобы спрятать резкие переходы между разными типами текстур. Для этого можно воспользоваться специально подготовленными тайлами текстур, на которых переходы между рисунками уже заранее прорисованы. Поэтому и при раскладке их на mesh не будет больших проблем:
Для данной конкретной локации необходимо домоделлить определенное количество объектов ландшафта, о работе над которыми в этой статье не будет рассказано, однако остановимся на одном из способов неравномерной расстановки однотипных объектов на поверхности модели. В данном случае, на расстановке валунов по поверхности каменного берега:
Сперва замоделливаем, замапливаем и затекстуриваем валун нужного размера, клоны которого будут расставляться позже, помещаем его в центр мира, применяем к нему Freeze TransformationsModify->Freeze Transformations и переименовываем в Stone01. Далее делаем дубликат объекта, на котором будем расставлять валуны, и прячем оригинальный. Теперь будем расставлять валуны на дубликате, так как скрипт, поставляемый с пакетом Maya, работает на объектах, дефолтный UV-set которых расположен в координатах от 0 до 1. Поэтому на дубликате в дефолтном UV-set-е делаем Planar Mapping[Polygons] Create UVs->Planar Mapping, чтобы привести его к координатам от 0 до 1. А затем запускаем Paint Scripts ToolModify->Paint Scripts Tool, чтобы потом из него вызвать встроенный скрипт geometryPaint, который, в свою очередь, открывает окно с настройками. В окне Paint Scripts Tool-а находим раздел Setup, в котором в строку Tool setup cmd вводим команду geometryPaint и нажимаем на клавиатуре Enter. Сразу же разделы Setup автоматически заполняются и вызывают окно инструмента geometryPaint (Geometry Paint Settings), который способом выкрашивания цели (в нашем случае дубликата поверхности берега) может расставлять на ней заданные объекты путем копирования и модифицирования последних:
В поле Geometry вводим имя нашего объекта, который будем клонировать (в нашем случае, это Stone01), подбираем другие настройки и "красим" кистью по нашему дубликату поверхности, наблюдая "рост" на ней клонов валуна. Выкрашенные поверхности можно редактировать, выкрашивая снова, изменив настройки окна Geometry Paint Settings, пока оно не было закрыто.
Альтернативные способы запуска geometryPaint:
Через меню установленного комплекта бесплатного дополнения к Maya – Maya Bonus Tools, которое можно скачать с официального сайта http://area.autodesk.com/ (требуется обычная регистрация) - раздел меню: Paint Geometry Tool.
Через установленную на любой Shelf кнопку, содержащую команду: ScriptPaintTool; artUserPaintCtx -e -tsc "geometryPaint" `currentCtx`;
Выкраску поверхности можно проводить в несколько этапов, выбирая каждый раз разнообразные подготовленные для этого объекты клонирования.
На этапе завершения выделяем все отклонированные валуны и удаляем на них History Edit->Delete by Type->History, затем удаляем отдублированный берег и открываем скрытый оригинальный mesh берега.
На этом все.
Демонстрирую реальные игровые скриншоты террейна из этого урока (локация в режиме тестирования - временный интерфейс, отсутствие пены у берега, временная настройка погоды):
Данный урок посвящен текстурированию трёхмерных игровых локаций, а также даны некоторые советы и рекомендации подготовки непосредственно самой текстуры-тайла в программе Adobe Photoshop.
Определение текстурного Тайла имеет огромное множество значений, также, как и способов его применения. Данный урок посвящен в большей степени способу высокодетального текстурирования трёхмерных игровых локаций, создаваемых в Maya, с разделом, в котором даны некоторые советы и рекомендации подготовки непосредственно самой текстуры-тайла в программе Adobe Photoshop. Поэтому для конкретного случая воспользуемся определением: Тайл (Tile) - текстура изображения поверхности 3D-объекта, предназначенная для заполнения областей с помощью укладки способом "черепица", т. е. размещая копии текстуры бок о бок, как керамическую плитку. Текстура называется тайленной, если её края копий соединяются без видимых швов (левые с правыми и верхние с нижними) . Наиболее удобно иметь тайлы в виде квадратной текстуры. И, для игрового моделирования, обязательное условие: размер сторон Тайла в пикселях должен быть кратен степени два: 128, 256, 512, 1024, и д.р.
Tiles и Photoshop
Прежде, чем загрузить текстурный тайл в Maya, и продолжить работать там с ним в ней, попробуем расширить область данного урока, исследовав несколько способов подготовки его в Photoshop-е. Существует огромное множество библиотек готовых тайленных текстур, а также специальных сетевых ресурсов, обзоры которых можно найти и на данном сайте. Также, существуют специальные программы и приложения, которые могут алгоритмически генерить готовые тайлы. Но сейчас рассмотрим несколько способов создания тайла, используя в виде исходного материала растровое изображение нужной нам фактуры, изготовленное или с помощью цифровой аппаратуры, или же взятое из внешних источников.
Сперва опробуем несколько способов изготовления регулярных тайловых текстур, которые при наложении на объекты при удаленном просмотре не позволяют различить на их поверхности повторяющихся рисунков, рождённых фактурой тайла. Для примера возьмём фото страницы старой книги. В моем случае оно было размера 1716 х 2332 пикселей. Всегда работает правило - чем больше размер исходника, и чем выше его качество, тем лучше может быть качество самого конечного тайла, и тем больший размер его может быть изготовлен.
Поэтому можно было предположить, что из этого образца вполне неплохо может быть изготовлен тайл 1024 х 1024, а тайл размером 512 х 512 будет полностью соответствовать всем нормам.
С помощью рамки выделения Marquee Tool в режиме Fixed Aspect Ratio, Width: 1 Height: 1 выберем на фото участок бумаги, наименее отмеченный характерными пятнами или бросающимися в глаза деталями.
А затем, используя Crop(Image > Crop), удаляем всё не вошедшее в выделение. Полученный размер картинки после Crop имеем 1428 х 1428. Чтобы далее было удобнее работать с ней, округляем ее размер до 1400 х 1400. А затем, с помощью инструмента Healing Brush Tool замазываем наиболее заметные пятна на текстуре, чтобы при тайлинге они не повторялись синхронным рисунком. Ниже приведён пример до (слева) и после (справа) использования Healing Brush Tool-а:
Способ первый: применим к измененной текстуре "фильтр" Offset(Filter>Other>Offset...), не забывая про возможно созданные новые слои (Используя Healing Brush Tool, как и другие инструменты в Photoshop-е, желательно все изменения и добавления вносить в отдельный слой, сохраняя снизу орининальный). В окне Offset, зная размер текстуры (у нас он 1400 х 1400), вносим в строку Horizontal +700, оставляя остальные настройки по умолчанию. Получаем сдвиг текстуры ровно наполовину, который производит видимый вертикальны шов по центру, но с гарантией того, что левый и правый края совпадают своим рисунком абсолютно. Поэтому далее, используя Healing Brush Tool аккуратно замазываем центральный шов, добиваясь равномерности рисунка или фактуры по всему центральному полю текстуры. Всякие более темные или более светлые участки придётся разделить на неравномерные пятна, или же даже вообще сравнять с оттенком основной площади. Иногда для ускорения процесса приходится также воспользоваться и Clone Stamp Tool, но им надо работать довольно осторожно, чтобы не оставлять заметными границы работы кисти этого инструмента.
По завершении сокрытия шва, надо повторить работу "фильтра" Offset(Filter>Other>Offset...), но уже по вертикальному направлению, после чего также придется замазать образовавшийся шов, правда на сей раз горизонтальный.
В конце этой операции мы при определенной аккуратности уже сможем получить вполне пригодный для работы Тайл бумаги размером 1400 х 1400 пикселей. Теперь, уменьшив его размеры до технологически подходящего разрешения 1024 х 1024 пикселей, мы увеличим его качество, хотя бы частично убрав неизбежные искажения, полученные при фотографировании или же компрессии, если вы пользовались клипартами, или же фотографиями из какой-нибудь базы. Уменьшив же тайл до 512 х 512 пикселей, вы еще больше усилите качество вашей текстуры. Для последующего сохранения его стоит пользоваться только форматами, не приводящими к потерям достигнутого вами качества, избежав компрессию. Рекомендуется, например, формат TGA. В финале тайл будет выглядеть подобно ниже приведенной текстуре, края которой при соединении с её же копиями не должны образовывать видимых швов:
Способ второй: выделим всю область первоначальной заготовки тайла (без заметных пятен) и применим к ней "фильтр" Pattern Maker(Filter > Pattern Maker...). В открывшемся окне настроек можно долго экспериментировать со значениями, и пробовать заново генерацию тайла. Причем, даже при одинаковых значениях новые генерации дают новые рисунки тайла. Для данного примера я воспользовался настройками:
Получившийся при данном быстром способе тайл выглядит следующим образом:
Его также можно отредактировать Healing Brush Tool, при условии, что не будут затронуты полученные границы рисунка. Теперь, и его уменьшив до технологически подходящего разрешения 1024 х 1024 пикселей, мы снова увеличим его качество. Ничто не мешает и этот тайл уменьшить до 512 х 512 пикселей.
Изготовление нерегулярных тайловых текстур выглядит несколько сложнее, хотя при определенном навыке также не должно вызывать каких-то особых затруднений. Для примера возьмём фото скальной породы, при изготовлении тайла которой важно сохранить детали и формы минеральных вкраплений и выпуклостей. Размер исходника был 3591 х 2426 пикселей:
Сперва с помощью рамки выделения Marquee Tool в режиме Fixed Aspect Ratio, Width: 1 Height: 1 выберем на фото наиболее подходящий участок с наименьшей потерей площади. Из выделения с последующим изменением размера получаем первую заготовку с размером, который должен быть кратный цифре 1,5, при последующем делении на которую, мы бы могли потом для удобства получить округленное значение размера текстуры, из которой потом придётся делать тайл. В нашем случае получилась заготовка 2400 х 2400 пикселей. При делении значения 2400 на 1,5 впоследствии мы сможем получить текстуру 1600 х 1600 пикселей. Заготовку сохраняем новым слоем в формате PSD, так как нам придётся делать несколько слоев при изготовлении тайла:
Далее слой с заготовкой разделяем на два, причем один из них (основной) должен иметь размер по горизонтали такой, каким мы изначально предполагали размер конечной текстуры. В нашем примере: 1600 пикселей. Второй слой будет в размере по ширине в 1/2 от 1600: 800 пикселей:
Затем организуем наш PSD файл так, чтобы размер образа был выровнен под размер нижнего основного слоя (в нашем случае 1600 х 2400 пикселей), а верхний, дополнительный, был приснаплен к правому краю :
Далее, применим к нижнему основному слою "фильтр" Offset(Filter>Other>Offset...), с опцией Horizontal относительно 1/2 ширины этого слоя (1600 пикселей) в +800. А к верхнему применим маску Add layer mask, которую по правому краю наполовину ширины уже этого дополнительного слоя (в нашем случае на 200 пикселей в ширину) зальём черным цветом, получив на этом участке прозрачность верхнего слоя (Пользоваться Eraser Tool настоятельно не рекомендуется не только для данной цели, но для многих других при работе над текстурами в Photoshop-е, так как тогда всегда теряется возможность обратного редактирования удалённых зон):
Затем, редактируя маску, и используя топологию рисунка верхнего слоя, стараемся наиболее логично совместить рисунки верхнего и нижнего слоев:
В конце процедуры получаем подобное видимое совмещение верхнего слоя с нижним:
На данном этапе мы уже получим тайлинг этой текстуры по левому и правому краям. Теперь повторим все вышеописанные процедуры для того, чтобы сделать тайлинг по верхнему и нижнему краям, завершив, по сути, изготовление нормального четырёхстороннего тайла. На сей раз повторное описание я пропущу, ограничившись лишь картинками, иллюстрирующими последовательные шаги работы, очень похожие на те, что уже были описаны выше:
При редактировании маски на сей раз придется следить за тем, чтобы не изменились ее правая и левая границы, чтобы при составлении тайла они совпадали и не вызывали в дальнейшем видимого шва.
В финале получаем готовый тайл размером 1400 х 1400 пикселей. Теперь, уменьшив его размеры до технологически подходящего разрешения 1024 х 1024 пикселей, мы увеличим его качество, также убирая неизбежные искажения, полученные при фотографировании или же компрессии. Уменьшив же и этот тайл до 512 х 512 пикселей, мы еще больше усилим качество нашей текстуры:
Применение данного тайла бывает ограничено тем, что при частой его укладке довольно заметен рисунок (или вернее его повторение) фактуры самого тайла, особенно при удаленном просмотре объекта с этой текстурой. Возможности обхождения этой проблемы будут затронуты во второй части урока Tiles & Maya.
Вернёмся к нашей Maya, раз уж весь цикл уроков завязан на ней, и рассмотрим различные способы и приёмы использования Тайлов в Игростроении, опираясь на средства, предоставляемые этим 3D пакетом.
Возьмём для примера упрощённую часть замоделленной стены (для облегчения понимания в виде обычного параллелепипеда) и тайленную текстуру классической кирпичной кладки:
В Maya имеется два способа назначения ее на объект для достижения требуемого результата. Первый способ подходит в том случае, когда UV-координаты не должны выходить за пределы UV-поля от 0 до 1, или же ограничены другими условиями. При обычном назначении материала с тайлом модель и ее UV-раскладка будут выглядеть следующим образом:
Теперь, чтобы установить рисунок кирпичной кладки на модели в нужном соотношении количества кирпичей в кладке к их длине, устранив возникшие в данном примере искажения, в Maya есть способ управления наложения текстур без изменения UV-координат. Заходим с свойства материала, или же текстурной ноды через Attribute Editor, и находим вкладыш, относящийся к атрибутам 2d Texture Placement-а:
Атрибут RepeatUV как раз и отвечает за то, в каком соотношении в высоту и ширину ляжет текстура на предложенные ей UV-координаты без редактирования последних:
2d Texture Placement так же позволяет делать и другие модификации над наложением текстуры, не изменяя исходный UV-set. Достаточно поэкспериментировать над всеми атрибутами и понаблюдать за результатами отображения текстуры на модели непосредственно во вьюпорте.
К недостаткам этого способа относится то, что не все плагины выгрузок в игровые движки поддерживают данный способ наложения текстур, а также и то, что иногда приходится или подбирать, или вычислять заранее значения, вбиваемые в ноду 2d Texture Placement-а.
Вторым способом является обычное скалирование UV-координат объекта, которое надо производить, наблюдая за достижением необходимого результата непосредственно во вьюпорте:
Далее рассмотрим пару приёмов, как избежать слишком заметного повторения одинаковой затайленной текстуры на протяжении большого участка модели. Первый способ, если позволяют технологические требования на игровую сцену - это ввести несколько уникальных копий используемого тайла, в которые заранее внесены заметные, бросающиеся в глаза, отличия от основного тайла. В нашем примере, в дополнение к обычной кирпичной кладке (1), было изготовлено несколько копий её с внесенными заметными повреждениями кирпича (2), (3):
1. 2. 3.
Чтобы воспользоваться этими текстурами, естественно придется внести дополнительные разбиения объекта в тех местах, где будут назначены измененнные дубликаты тайла, если топология модели не позволяет прямого их назначения непосредственно на отдельные полигоны или полигональные участки. В Maya без проблем возможно назначать на модели любые дополнительные материалы, всего лишь выделив нужные полигоны, и присвоив на них требуемые текстуры, точно так же, как присваиваются материалы на выделения самих моделей.
На рисунке внизу слева показан наш участок стены с полем обычного тайла, а справа на эту модель уже добавлено два измененных тайла по рассечениям объекта, видимым на центральной картинке:
Чтобы нагляднее увидеть разницу, которая на этих картинках почти не заметна, ниже представляю две полоски текстур с тайлами: вверху - только с обычными, внизу с дополнительными вставками:
Следующим приёмом, прячущим видимую затайленность моделей, является создание многослойного материала, в котором на первый слой кладётся тайл с колором, а на второй можно или положить второй тайл, или же уточняющую (детальную) текстуру, или же, как будет показано ниже - грязевую текстуру. При всем этом должно будет выполняться условие, чтобы текстура второго слоя не совпадала по топологии или повторяемости с тайлом первого слоя, внося видимое рассогласование рисунка тайленной текстуры. Поэтому для этого необходимо создание второго UV-set-а, независимого от первого. Все современные движки должны поддерживать как и многослойные материалы, так и несколько UV-set-ов на полигон. Хотя есть и редкие исключения. Поэтому перед применением данного способа необходимо уточнить технологические требования на игровой движок. Для примера рассмотрим нанесение грязевой текстуры на нашу упрощенную модель стены:
Для этого на канал Color в материале, нанесенном на стену, вместо ноды File, ссылающейся на нашу тайленную текстуру, назначаем созданную ноду Layered Texture, на которую, в свою очередь, подаем две ноды File, одна из которых - наша с тайлом кирпичной кладки, а вторая - с текстурой загрязнения:
Внутри Layered Texture эти две текстуры будут смешиваться между собой, наподобие слоёв в Photoshop-е, причем ноды, находящиеся слева, будут соответствовать более верхним слоям при смешивании. Поэтому если слева будет нода грязевой текстуры и ей будет назначен Blend Mode - Multiply, то в результате на выходе мы получим материал с тайлом загрязненной кирпичной кладки, где грязевая текстура, в свою очередь, может также быть затайлена:
Способы смешивания текстур в Maya и в игровом движке могут не совпадать, поэтому тип использования Blend Mode и характеристики текстур для второго слоя уточняйте у людей, владеющих спецификациями игрового движка. Не исключено, что можно будет использовать количество слоёв, более чем два. С ними принципы работы в Maya те же, что и с двумя слоями.
Теперь, чтобы получить нужный нам рисунок загрязнения относительно тайла кирпичной кладки, да и вообще, чтобы это всё работало, необходимо на модели создать новый UV-set (в нашем примере мы обзовём его map2), относительно которого будет наложена грязевая текстура. Этот UV-set можно на данном этапе сделать или пустым, не содержащим UV-вершин, или можно просто скопировать имеющийся map1 в новый map2. Затем его необходимо связать с той текстурой, для которой он будет предназначен, так как Maya, имея на полигонах несколько слоёв текстур и несколько разных UV-set-ов, не в состоянии определить замысел 3D-художника относительно того, какой слой предназначен для какого UV-set-а. Поэтому до этой процедуры придется наблюдать на модели полную неразбериху с рисунком текстур и их наложением. Чтобы устранить это, выделяем нашу модель и вызываем необходимый нам Relationship Editor (Window->Relationship Editors->UV Linking->UV-Centric) и связываем map1 с нодой текстуры кирпичной кладки (у нас она имеет имя bricksFort2_1), а map2 связываем с нодой грязевой текстуры (у нас она имеет имя dirt1_1), просто выбирая слева и потом справа нужные строки с нужными именами:
Теперь мы увидим, что отображение текстур на нашей модели приобрело логический вид, и мы можем без проблем зайти в созданный нами UV-set map2 и отредактировать его так, как нам надо. В случае с использованием затайленной грязевой текстуры необходимо следить за тем, чтобы границы тайла грязи наименее совпадали с границами тайла кирпичной кладки, тогда мы вместо повторения рисунка будем видеть его неоднородность:
Если же комбинировать и дополнительные вставки тайлов, и использование грязевых и уточняющих текстур, то можно будет получать не только более разнообразные поверхности моделей, но и более реалистичные.
При работе с текстурными тайлами иногда приходится сталкиваться с оптимизацией загрузки или работы сцены в игровом движке. При этом возникает необходимость укладывать игровые тайлы в текстурные наборы, наподобие приведенного ниже:
При таком классическом и очень распространённом подходе возникают две проблемы: маленькая и большая. Маленькая проблема заключается в том, что моделлеру при точном позиционировании UV-координат при работе в UV Texture Editor-е часто очень тяжело установить окончание одного тайла и начало другого:
Большая проблема возникает тогда, когда и модель, и текстурный набор тайлов выгружены в движок с использованием DXT-компрессии (это практикуется почти повсеместно), и игроку предоставляется возможность наблюдать объект с тайлами на некотором расстоянии. При этом на полигональных моделях текстуры переключаются на последующие mip-ы, с более низким разрешением, и, из-за того, что антиальясинг в видеокарте строится с учетом соседних от UV-координат пикселей на текстурном листе, мы можем наблюдать хорошо заметные швы разного цвета между тайлами:
Это происходит оттого, что границы текстурных координат захватывают соседние тайлы, отличающиеся по цвету. И чем дальше от виртуального зрителя расположена модель, тем более крупные участки соседних тайлов будут попадать на тайлы, которые мы должны видеть. Чтобы этого избежать, во-первых, следует придерживаться правила составлять текстурные листы из тайлов, подобных по цвету и интенсивности, а, во-вторых, можно воспользоваться технологией разделения тайлов текстурными границами. При составлении листов из тайлов необходимо делать зазоры между ними и между тайлами и краями текстуры. Причём размер зазоров между тайлами должен быть ровно в два раза больше размера зазоров между тайлами и границами текстурного листа:
Потом уже по этим текстурам с разграниченными тайлами размаппить полигональные модели. Из-за наличия хорошо видимых швов делать это можно будет во многие разы легче:
Особенных проблем у моделлера с позиционированием UV-координат не должно быть еще и при использовани в окне UV Texture Editor-а функции Pixel Shap (Image > Pixel Shap, в меню UV Texture Editor-а), которой, впрочем, надо пользоваться осторожно, чтобы не схлопнуть все координаты в одну точку.
Но при таком способе, в игровой движок эти текстуры выгружать нельзя, так как границы между тайлами будут заметны уже с любого, даже довольно близкого расстояния. Для этого придется подготавливать два комплекта: и для моделлинга, и для движка. Для последнего надо будет заполнять швы между тайлами полосками, вырезанными с тех краёв тайла, которые примыкают к месту образования шва. Зато текстурные координаты модели на этих листах после переназначения, будут лежать не только по правильным границам тайлов, но и разделенные нужным цветом, интенсивностью и фактурой от соседних тайлов. И при антиальясинге видеокарта будет брать такие же пиксели на границах, как и на оригинальном тайле:
На этом раздел "Tiles & Maya" позвольте завершить.
Цикл же "Games в Maya", надеюсь, будет продолжен...
Сейчас посмотрел, нету на модели альфы, aguraan вышел из ситуации порезов полигоны, но в итоге не плохо вышло. Цитатами пользуются те, кто не в состоянии формулировать собственные мысли.
NikK, полигоны это конечно хорошо, но не всегда кстати, пробовал на днях запихнуть модельку Эдварда Кенуэя в ГПК (анимация man2, полигонаж ~32000) - игра дала стабильный вылет Что толку, если не можешь сделать мир лучше.
Видео-то хорошее, да вот только ничего не понятно постороннему зрителю. Ну, башенка и башенка на пляже... Ты бы хоть написал, что конкретно пытался показать там. Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Это, как я понимаю, текстуры подгружаются по мере приближения к объекту. Как следствие, экономия ресурсов движка и увеличение размеров локаций. Цитатами пользуются те, кто не в состоянии формулировать собственные мысли.
NikK, нет, это смена детализированной модели на низкополигональную, когда персонаж достаточно отходит от модели в случае с этим видео там расстояние в 30 метров для переключения моделек Что толку, если не можешь сделать мир лучше.
Осталось найти ивесторов и можно начинать делать на шторме игру нового поколения ))) А. Ну и поддержку карт нормалей добавить Цитатами пользуются те, кто не в состоянии формулировать собственные мысли.
кстати, сейчас тоже немного уделяю этому внимание, но не очень активно) возможно и до нормал мапы доберусь, как время будет) Что толку, если не можешь сделать мир лучше.
Статья взята с сайта artnotes.ru Туториал показан на программе Maya 8
1. Настройка шейдерной иерархии
Для начала откройте окно «hypershade» и из списка нодов Maya и средней кнопкой мыши перетяните узел «Surface Shader» в рабочую область.
Теперь щёлкните по кнопке «Create Maya Nodes» в верхней части списка нодов и выберите «Create MentalRay Nodes».
Средней кнопкой мыши перетяните узел 'mib_amb_occlusion' из таблицы текстур в рабочую область.
Теперь присоедините выход «OutValue» узла Occlusion к «OutColor» шейдера поверхности. Для этих узлов такое соединение является соединением по умолчанию, так что вы можете просто перетянуть узел Occlusion на узел шейдера средней кнопкой мыши при зажатом Ctrl.
2. Настройка сцены
Для того чтобы добиться хороших результатов с Ambient Occlusion, окружение (фон) сцены должен быть белым. Для настройки цвета нужно открыть окно Outliner и выбрать камеру Persp. В редакторе атрибутов, во вкладке «Environment» сдвигаем ползунок цвета фона (Background Color) в значение 100% белый.
Теперь откройте окно Render Globals и выберите MentalRay в настройках в production и quality рендера. Замените фильтр multi-pixel на Lanczos (настройки качества автоматически изменятся на «Custom», как на картинке).
Закройте окно «Render Globals» и назначьте настроенный вами шейдер поверхности «Surface Shader» вашей модели. Модель должна стать полностью чёрной.
3. Тонкая подстройка
Вставьте свою модель и запустите визуализацию. На этом этапе рендер будет быстрым, а модель будет иметь зернистую поверхность, как здесь...
Теперь нужно немного подстроить параметры. Откройте редактор атрибутов и в окне Hypershade щёлкните на узел Ambient Occlusion. Атрибуты узла Occlusion отобразятся в редакторе атрибутов. Это настройки, которые я использую для большинства объектов...
Первый показатель для подстройки — Samples. Увеличение этого параметра снизит зернистость, попутно значительно увеличив время визуализации. Для большинства объектов будет достаточно 256 сэмплов.
Не трогайте параметры «Bright» и «Dark». Они влияют на то, насколько тёмной или светлой будет величина Occlusion. Однако лучше будет использовать значения по умолчанию и при необходимости подправить использовать Photoshop на более поздних стадиях.
Настройки разброса (spread setting) влияют на то, как далеко распространяется occlusion-тень по поверхности. Значение по умолчанию (0.800) подойдёт для большинства объектов. Любое более низкое значение будет чрезмерным, а более высокое может привести к проблеме чрезмерного затенения в режиме наложения на цветные слои в Photoshop.
4. Запекание текстуры
Как только occlusion будет выглядеть хорошо в рендере, можно переходить к запеканию его в текстуру.
Для начала убедитесь, что вы указали папку проекта. Для этого выберите файл в меню File → Project → Set. В этот файл будет автоматически сохранена запечённая текстура. Если вы забудете указать папку проекта, запечённая текстура будет сохранена в файл проекта по умолчанию, в папке «Мои Документы».
Убедитесь, что вы сделали UV-развёртку для вашей модели Убедитесь, что все нормали вашей модели смотрят в правильном направлении, иначе результатом запекания будет чёрная картинка Убедитесь, что вы смягчили грани вашей модели и наоборот, сделали твёрдыми грани там, где это нужно Сохраните копию вашей сцены на этом этапе, поскольку Maya может «вылететь» во время запекания текстуры
Теперь зайдите в меню «Rendering» и выберите Lighting/Shading → Batch Bake (Mental Ray) → Options.
Вот настройки, которые я использую и никогда не меняю, поскольку они подходят для большинства объектов:
Выберите ваш объект во вьюпорте и нажмите кнопку ''Convert and Close", чтобы запустить запекание Occlusion. После этого Maya не будет реагировать на любые действия, периодически экран будет пустым, а всё происходящее будет напоминать «вылет» программы. Не волнуйтесь, так и должно быть. Всё это действие будет продолжаться от нескольких минут до нескольких часов, в зависимости от сложности сцены.
Крута конечно, но чем нам это поможет, ведь в игру надо конверить через пятую майку, а на сколько я знаю если модель сделана в редакторе выше версии (например 3Dредактор v8) то в блее низкой версии (3Dредактор v5) уже не открывается модель. Не первый раз просто с этим сталкивался.
остров 7. откр. блонкнотом именяем везде 8.5 на 5.0 (что бы пятая майка открыла, а не ругалась) 8. экспорт пункт №8 не совсем понял, через кнопку экспорт чтоли или просто как открыть фаил?
Сообщение отредактировал Джин-Бейн - Воскресенье, 04.01.2015, 21:48
проблема перегона из 8 в 5 1. присутствие в 8 мае шейдеров которых нет в 5 2. в файле с расширением .ma прописана вервия 8 и потому не открывается более старой версий
надо 1. сохранить в формате .ma а не .mb 2. файл сохраненный в формате .ma открыть не майкой а текстовым файлом везде в 1 строке меняем в моём случае 8.5 на 5.0 3. сохраняем и открываем 5
Сообщение отредактировал остров - Воскресенье, 04.01.2015, 23:02
и да, на счет запекания текстур не рекомендую запекать текстуры выше 1024на1024 если у вас не проф. ПК для графики я на своем ПК по 40 минут жду пока запечется текстура.. утомительно немного ожидать, но ИМХО, результат того стоит Что толку, если не можешь сделать мир лучше.
Ну хорошо, а наглядный пример увидеть можно?.. Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
п.с.с. по теме импорта сцен из майки старшей в майку младшую: такая ситуация - майка 8.5 предел, из более высоких версий майки в 5-ую даже через .ma на загрузишь сцену я это проверял на 2012 майке, в пятую не грузилась - пустая сцена, так же при прогоне через 2012->8.5->5.0 тоже пустая сцена сделал для себя вывод, что моделить для Шторма нужно в 8.5, ибо 5.0 на вин7 дико лагает Что толку, если не можешь сделать мир лучше.