Меню сайта |
|
|
Вход на сайт |
|
|
Поиск |
|
|
Мини-чат |
|
|
Друзья сайта |
|
|
|
| | |
|
FAQ по Zmodeler 3
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 13:16 | Сообщение # 16 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| Видеоурок по наложению раскраски, а также использование light-mask для фонарей.
http://www.zmodeler3.com
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 13:17 | Сообщение # 17 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| Видеоурок по анимации ETS. Часть 1 из 2. Продолжительность: 9 минут Уровень сложности: средний
http://www.zmodeler3.com
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 13:18 | Сообщение # 18 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| Видеоурок по анимации ETS2. Часть 2 из 2. Создание гибких анимированных элементов салона с помощью скелета и костей. Продолжительность: 22 минуты Уровень сложности: Эксперт.
http://www.zmodeler3.com
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 13:20 | Сообщение # 19 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| Создаем анимацию в Занозе
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 16:04 | Сообщение # 20 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| Редактирование префабов ETS2: пути AI, сервисы и навигация.
ZModeler3 теперь позволяет редактировать и создавать свои новые префабы для ETS2. Поскольку для работы с префабами используются сплайны, необходимо предварительно настроить ZModeler. Открываем окно конфигурации Configuration, там General, и раскрываем ветку Splines. Там выключаем "Automatic detalization", чтобы при создании сплайнов у них была постоянная детализация (по умолчанию 8 и этого достаточно). Вообще детализация сплайнов не используется в префабах и лишь влияет на отображение в ZModeler. Также рекомендуется включить опцию "Always draw points" чтоб в ZModeler всегда отрисовывались точки сплайна, даже когда работаете на уровне объектов. В таком случае при создании сплайнов, к примеру, будет видно, к какой существующей точке другого сплайна можно примкнуть. Ну и заодно включаем опцию "Draw direction arrow". С ней ZModeler будет отрисовывать стрелку у сплайна, указывая направление. Размер стрелки в единицах измерения ZModeler, для префабов рекомендуется где-то 2.5, хотя для других целей это может быть слишком крупная стрелка. После смены значения перезапускать занозу не надо, так-что легко менять и подбирать размер стрелки в процессе работы.
Теперь самая важная опция которую надо включить это Compatibility. Выбрав там "SCS Compatibility" и перезапустив ZModeler, мы получаем ZModeler в режиме совместимости с ETS2. Грубо говоря, некоторые опции будут обозначаться и именоваться именно так, как и должны для ETS2. Не включив совместимость, некоторые опции вообще будут недоступны для редактирования. Также рекомендую включить опцию "Custom mesh colors", чтобы объекты (а в нашем случае сплайны) могли быть разных цветов. По умолчанию на импорте ZModeler дает разным группам спалйнов разные цвета для удобства. Сам цвет непосредственно для ипорта/экспорта смысла в себе не несет, но работать так будет удобнее.
Я загрузил префаб с небольшой заправкой на обе стороны трассы и на её примере объясню особенности работы с префабами. Вот визуальная модель заправки:
А вот тут префаб - т.е её "логическая" часть. Префаб у модели загружен в ветку prefab в иерархии и внутри у него еще несколько веток или групп элементов, содержащих сплайны и дамми объекты. Все названия веток и свойств которые будут упоминаться не чувствительны к регстру:
Группа lanes (дословно "дорожки") это пути AI траффика, и она может содержать только сплайны. Сплайны в этой группе взаимосвязаны через общие точки, что позволяет траффику переходить с одного пути на другой и вообще осуществляет ветвление траекторий на перекретсках. Вся эта группа как таковая может отсутствовать, если в префабе нет путей траффика - например, ферма или гараж. Эта группа будет рассмотрена подробно чуть ниже. Группа nodes ("узлы) - наиболее важная и в каждом префабе всегда должна быть эта группа и в ней как минимум "connector 0". Префаба без узлов быть не может, хотя бы один должен быть, чтоб префаб можно было пристыковать к дороге:
Узлы в этой группе прогумерованы начиная с нуля и до 5. всего 6, хотя в ETS я больше 4 не видел. Каждый узел состоит из коннектора connector (собсвтенно сама точка привязки, её ось Z смотрит внутрь префаба) и опционально к узлу может задаваться сплайн-граница border spline. Цифра после названия есть порядковый номер. Сплайн граница это последовательность точек на границе префаба, к которой игра примыкает ландшафт рядом с префабом. Точки должны идти на виде сверху против часовой стрелки. На рисунке этого не видно, но сплайн-граница идет против часовой стрелки:
В ZModeler border сплайн довольно хитрый. В самом начале к нему я добавляю несколько точек, которые склеены с вершинками AI путей (только с первой или последней). И только после этих склееных вершинок уже идут точки границы которые нужны игре. Склееные вершинки нужны только ZModeler на экспорте, чтоб достоверно установить, какие пути AI начинаются в соответсвующем узле (и в каком порядке), а какие заканчиваются (и тоже в каком порядке). Когда сплайна-границы для узла нет, то не только не будет границы ландшафта, но и пути траффика не смогут состыковаться с данным узлом - приходящий с дороги траффик будет просто пропадать. На рисунке вверху сплайн начинается с двух вершинок к которым подклеены уходящие сплайны (их хвостовые точки) - с этих путей трафик будет уходить на примыкающую дорогу, затем идут две вершики, к которым подклеены входящие пути (головные точки сплайнов) - на эти пути трафик будет попадать с путей примыкающей дороги. Ну и следо за этими четырьмя точками начинаются точки-границы сплайна, начало отмеченно как "actual in-game border will start here" ("реальная граница префаба для игры начинается лишь здесь"). Несклееные точки сплайна идут до конца префаба против часовой стрелки (до противоположного конца участка дороги), предполагая что игра создаст полигоны ландшафта на каждой последовательной паре точек (не частите, это лишнее). На картинке показано как именно примкнут полигоны ландшафта:
В общем, узлы и границы не слишком сложны и изучив десяток разнообразных префабов, их логика станет совершенно ясной. Следующая группа в префабах названа lights и включает дамми объекты для светофоров. В имени дамми объекта может (хотя и не обязательно) присутсвовать название (например, на всех перекрестках у светофоров прописано имя City), а затем идет порядковый номер в скобках. Номера начинаются с нуля и идут по порядку 0,1,2,3... так-что набор 0, 2, 3, 4 или 1, 4, 5 неправльный. Фактический порядок светофоров в группе значения не имеет, важны их номера в скобках.
На картинке показаны свойства одного из светофоров. Эти свойства надо самому вручную задвать и они могут включать следующие свойства: Mode: 0 (или вообще свойство отсутствует): обычный режим работы, зациклен. 1: светофор активируется вручную (например, на границе платного участка). 2: светофор активируется приближающимся mover-ом, например, шлагбаум при приближении поезда. Type: 0 (или вообще свойство отсутствует): обычный светофор 1: автоматический светофор (наиболее часто используется на перекрестках) 2: автоматическй барьер (помимо светофора еще есть коллизия-препятствие) - на платных участках такой стоит. 3: просто визуальная модель, не влияет на траффик. 4: маленький вариант (например шлагбаум - в одной анимационной модели может быть маленькая и большая версия - использовать маленькую/простую) 5: большой вариант (например шлагбаум - в одной анимационной модели может быть маленькая и большая версия - использовать большую/сложную) Timing с четырьмя значениями (в секундах) задают интеравал работы светофора (назначение каздого из значений не знаю), это свойство должно быть обязательно! Названия свойств не чувствительны к регистру. Следующие две группы похожи: services и zones. Сервисы это группа с дамми объектами, у которых имена в виде чисел. Каждое число это определенный сервис и игра на месте этого дамми поставит сервисную точку. Например, 3 это заправка, 10 это паркинг/зона отдыха.
Группа Zones содержит замкнутые spline с именами. Если не ошибаюсь, в сплайнах может быть не более четырех точек, хотя и не факт. Сплайн задает область, заезжая в которую, пользователь активирует какое-то действие. Настройки вот в этом файле: def\world\trigger_action.sii. На данный момент я видел чтобы использовались токлько Hud_parking (парковочная зона) и Cam7_on_off (включает вид из "киношной" камеры). Группа Locators содержит дамми объекты, которые в игре будут заменены моделями знаков и указателей. Модель задается числом в имени дамми и дополнительно может указываться имя геоментрии внутри модели (обычно Vis). Если имя не указано, именно "Vis" будет использоваться при экспорте. Для справки по числовым значениям смотрим номера в файле def\world\sign.sii. Пути трафика AI: Ну собственно самая интересная группа lanes содержит только сплайны для AI трафика. С ней надо быть предельно внимательным и следить за правильной раскладкйо и склейкой вершинок, а также за свойствами кажой вершинки сплайна. Ну прежде всего, направление сплайна задает направление движения трафика по нему. Каждая вершинка сплайна должна быть типа Bezier-corner или Bezier. Нельзя использовать типа вершинки Corner (без управляющих векторов), даже если прокладываете прямой участок - всегда должны быть управляющие векторв в вершинках. Также ненадо ставить слишком много вершинок (в префабах вы можете встретить пути с большим количеством вершинок - но это не для улучшения "кривизны" а для расстановки скоростных ограничений, чтоб траффик плавно снижал или набирал скорость на кривом участке). Так вот, игра сглаживает кривуб и движение трафика на путях, так-что несколько точек достаточно для плавного движения:
Вот чему следует уделить внимаени, так это склейки сплайнов в узловых точках. Когда несколько путей сходятся в одну общую точку, они должны быть склеены этой точкой (инструмент Modify\Submesh\Weld). Аналогично, если на какой-то точке пути расходятся в несколько - тоже склеенные сплайны. Склееные точки ZModeler отрисовывает розовым цветом (хотя это можно перенастроить в опциях). Ну и самое главное - не накладывайте дублирующиеся сегменты сплайнов. Сплайны могут пересекаться, сходиться в одну точку, расходиться из одной точки, но они не должны совпадать один поверх другого - даже на небольшом участке так делать не надо. Также заметьте, не нужно тянуть путь от начала прям до конца. Путь может прерваться и быть продолжен другим сплайном (склееным в этой вершине). Например, на картинке один из путей по заправке (а там два пути) начинается на вершинке другого пути и заканчивается, примыкая к этому пути обратно. Своего рода кусочек с альтернативным путем, отличным от основного. Вершинки сплайнов (доступны на уровне манипуляторов) содержат основную логику AI трафика и редактируются на закладке Properties. Следует отметить, что редактируете и задаете свойства точки, но для игры это будут свойства сегмента или куска кривой до следующей точки. Начнем со свойств "user-defined". Там можно задать свойство "speed" и указать ограничеие скорости для AI трафика на указанном сегменте. Ну а основные свойства доступны в ветке General->External State->SCS Compatibility т включают с десяток различных флагов, характеризующих поведение и предпочтения трафика на указанном сегменте. Я дам описание свойств чуть ниже, сначала обращу ваше внимание на очень важную особенность:
На картинке вы видите свойства точки на крайнем-правом сплайне. Эта точка розовая и склеена с другим сплайном (второй путь по заправке). Склеенные точки склеены только ПОЗИЦИЕЙ, но это всё равно разные точки и у каждой свои собственные свойства. Так, например, когда трафик подходит к такой точке, у него есть два пути по которым следовать далее - самый правый и тот что слева от него. На самом правом в точке (на картике вверху), включено свойтсво "No trucks allowed" (не для грузовиков), поэтому грузовик AI с трейлером по этому пути не поедет.
С другой стороны как бы "та же точка" но у другого сплайна имеет другие свойства - на ней указано "Trucks only" (только для грузовиков), так-что грузовик поедет именно по этому пути. Собственно вот описание и значение свойств: Give way (дай дорогу): AI трафик будет пропускать трафик идущий с других направлений. Эта опция идет только вместе с опцией "Intersection ahead". Trucks only (только для грузовиков): Последующий участок пути предназначен только для грузовиков с прицепами. Например, на перекрестке могут быть пути для грузовиков, чтоб они проходили перекресток чуть по другой траектории и не сносили столбы и другие машины. No trucks allowed (кроме грузовиков): Путь нельзя использовать грузовикам трафика с прицепами (более крутые траектории). Player only (только для игрока): Путь используется только игроком, AI трафик по нему не пойдет (видел такие на префабах с круговым движением). Right blinker и Left blinker (правый и левый поворотник): опция включает поворотники на трафике и дает ему преимущетсво в движении (в сочетании с опцией "Intersection ahead"). Заметьте, это немножко не по российским пдд. No blinker advantage (поворотник не дает преимущетсва): В сочетании с "Right blinker" или "Left blinker" не дает преимущетсва в движении (ближе к российским реалиям) Rare usage (использовать редко): уменьшает вероятность выбора этого пути трафиком (например, съезды назаправку). Intersection ahead (впереди пересечение): ставится на вершинках, если сегмент сплайна потом пересекается с каким-то сегментом или сходится в общую точку. Так, если два пути сходятся в точку, надо обоим выставить "intersection ahead". Если тракетории просто пересекаются, тоже надо выставить эту опцию, чтоб трафик был в курсе о возможно пересечении. Часто сочетается с "Give way", чтоб задать приоритет на пересечении, без этой опции вероятны столкновения AI. Traffic light control (управляется светофором): трафик AI по достижении конца участка будет руководствоваться светофором. Как ни странно, но сам светофор (его индекс) указывается лишь на следующей точке в user-defined свойсвте Light пишем индекс светофора. На обычных перекрестках эта опция не используется и просто указывается Light в свойствах. Непосредственно опция "Traffic light control" встрачется перед светофорами, активируемыми вручную (платные участки, на заправке). Как было сказано выше, помимо пользовательского свойсвта "Speed", можно задать свойство Light и указать индекс светофора, чтобы трафик при проезде этой точки руководствовался сигналом светофорам с данным индексом. Теперь покажу как сделать путь AI и задать свойства. Предположим, чтоб после заправки, некторый трафик разворачивался через все полосы в обратное направление (как это по-русски):
Для начала я добавляю точку в сплайн, к которум новая траектория примкнет. Так, при создании нового сплайна у меня уже будет готовая точка, с которой я его склею в конце - так проще и быстрее.
Используя инструмент Strip в группе Create\Spline, нажимаем примерно поверх вершинки-начала (на сущетсвующей траектории) и тянем вектор кривизны чуть всторону. отпускем левую кнопку и задаем Weld + new spline (склеить и начать новый сплайн). Заметьте, когда вы кликаете на сущетсвующих вершинках, ZModeler подсвечивает розовым кружком точку, с которой он может связать точку сплайна при построении.
Затем кликаем и тянем в промежуточной точке.
И нажимаем на точку сведения и тянем вектор-траекторию. Отпускаем и выбираем Weld and stop (склеить и закончить). Новый сплайн уже склеен в начальной и конечной вершинке и практически готов к работе:
Надо лишь перетащить его в группу "Lanes", чтобы на экспорте ZModeler его счел как путь AI тарфика. Небольшое пояснение про "нажмите и потяните" - при создании точек таким образом, точка автоматически создаётся типа "Bezie", т.е. с управляющим вектором, а как было сказано выше, на AI путях все точки должны быть с управляющими векторами! Прежде чем назначить свойства, я добавил точки на прямых путях, которые пересек вновь-созданный путь. Это сделано для того, чтоб на этих путях можно было выставить свойство "intersection ahead", чтоб трафик, идущий прямиком, был предупрежден о возможном столкновении (сейчас столкновения все еще возможны):
Затем выделил все эти точки, а также первую и среднюю точку нового сплайна. Назначил им свойство Intersection ahead. Трафик теперь предупрежден о возможном столкновении, но приоритеты не расставлены (трафик запрудит всю дорогу в пробке).
Я включаю свойство "Give way" на самой первой вершине нового сплайна - трафик будет пропускать машины, идущие мимо и потом пойдет на разворот. Я не указал "дай дорог" перед примыканием к пути на противоположной стороне, там возможны столкновения. Просто хочу показать, что небольшая опция, не поставленная на нужной вершинке может вызывать проблемы в движении трафика по префабу. Также заметьте я включил опции "Left blinker" и "No blinker advantage", так-что трафик включит поворотник перед разворотом, но все равно будет пропускать трафик и ждать свободного пути.
На скрине виден грузовик ушедший на разворот с заправки. да, он попер через ограждение, суть сейча не в этом конечно. Навигация: Карта и GPS: Последняя группа в префабе, которую обсудим, это navi - навигация. В этой группе расположены сплайны для GPS навигации и для карта. Правило простое - Замкнутый сплайн для отрисовки полигонов на карте, незамкнутый сплайн это путь для навигации. Замкнутые сплайны могут содержать только четыре точки, формируя тем самым четырёхугольник. Игра не триангулирует более сложные формы сплайнов, так-что если нужно нарисовать на карте полгион более сложной формы, делайте его из нескольких четырехугольных сплайнов. Замкнутые сплайны могут иметь следующие свойства в user-defined options:
Color: 0 (или свойство отсутствует): сцвет по умолчанию - рыжий, как цвет дороги на карте 1: светлый цвет (светло-серый для неисследованных дорог или песочный для исследованных) 2: темный цвет (темно-серый для неисследованных дорог или коричневый для исследованных) 3: зеленый цвет (обозначает озелененные участки на префабе) Over (для включение ставьте значение 1) - режим "поверх остальных". полигон на карте будет отрисован поверх остальных, часто истользуется для отрисовки форм строений на префабе. Border - включает отрисовку границы полигона (не проверял в действии). Не замкнутые сплайны считаются путями навигации, или груба "дорогой". На картинке выше я чуть сдвинул такой сплайн, чтоб его было видно. Пути навигации могут содержать следующие свойства:
Width - ширина дорогиа в "полосах": 0 (или свойство отсутствует) самая тонкая дорога, одна полоса в единственном направлении 1 - по одной полосе в каждом направлении 2 - по две полосы в каждом направлении 3 - по три полосы в каждом направлении 4 - по четыре полосы в каждом направлении Offset - расстояние до встречных полос (в метрах). Ноль или если на задано свойство - попутка и встречка примыкают вплотную. Можно задать значения: 1,2,5,10,15,20 и 25. Другие значения игнорируются. Гораздо важнее обсудить пользовательские свойства, задаваемые на вершинках сплайнов навигации. Их свойства такие же как и на спалйне (но подавляют значения выставленные на сплайне), а также несколько дополнительных важный свойств: link (связь) - точка навигации расположена на границе и привязана к узлу префаба с указанным индексом. Таким образом, если вы заезжаете на префаб с дороги, примыкающей к узлу 0, то GPS будет прокладывать путь по путям навигации, начиная с той вершинки (или вершинок) где был link 0. Если вы не указали привязки к узлам в свойствах граничных точек, вся сеть навигационных путей будет не удел - GPS вообще не сможет проложить путь через префаб. Естественно, только на граничных точках можно выставлять "link". route (путь к) - указывает, какие уззлы достижимы при движении через указанную точку. Это очень важное свойство и смысл и принцип его использования надо понимать, так-что я подробно на этом остановлюсь. Прежде всего, скажу что можно убрать это свойтсво со всех вершинок навигации и тогда ZModeler на экспорте будет руководствоваться направлением сплайнов навигации и свойствами "link" чтобы автоматически рассчитать правильную маршрутизацию по префабу. Это работает в большинтсве случаев, кроме круговых развязок, где можно получить закольцованные пути. С ними тоже маршрутизация пропишется, но будет работать в игре неправильно. Давайте разберем перекресток с круговым движением:
Пути навика очень похожи на пути трафика AI, они связаны общими точками между собой. Но каждый отрезок навигационной сети воспринимается GPS как двусторонний. GPS просто игнорирует направление сплайнов ZModeler и прокладывает маршрут кратчайшим образом. Естественно, на круговом движении он может дать необычную рекомендацию. Для корректной прокладки маршрута надо задать навику подсказки. Разберем детально навигацию на префабе с круговым движением. На нем вот такая конфигурация узлов:
Предположим, я хочу переделать его в левосторонний (вариант UK), чтоб путь из узла #1 в узел #0 прокладывался по часовой стрелке. Для начала я выбрал все пути, в них выбрал все точки, открыл их свойства и удалил свойтсво route. Затем Apply. Все, свойства "route" теперь нет, будет расставлять его заново.
GPS идет от вершинки с которой мы приехали ("link" 1) по всем возможным направлением в попытке выйти на вершинку с "link" 0). Собственно, ему надо лишь задать подсказки, как проходить точки с несколькими возможными направлениями. Он встретит такую почти сразу, посмотрите на картинку. Дойдя до точки на круге, возможны три направления - налево к вершинке Node #2, по часовой стрелке и против часовой стрелки.
Я задаю свойтва вершинки которая от смежной точки в направлении по часовой стрелки - и задаю там свойство route со значением 0,1. Это означаем, что "выбрав направлением через эту точку, достижимы Node #0 и Node #2". Я не выставляю никакого свойства на точке, которая против часовой стрелки - я не могу "запретить" идти в том или ином направлении - я могу лишь подсказать, куда идти "лучше" для выхода на тот или иной узел. Естественно, в вершинке влево я задам посказку "route 2". Таким образом, в нашей точке с несколькими вариантами GPS уже будет однозначно знать, куда идти к вершинами 0,1 и куда к вершине 2. при этом напраление против часовой стрелки остаётся невостребованным и GPS туда не пойдет. Собсвтенно, вот так разбираются все точки с несколькми связями.
Это может быть несколько сложно для понимания, но изучте внимательно полную картинку маршрутизации с подсказками. Тут отображено каким вершинкам какое свойство я указал (красное) и почему именно эти точки я взял (зеленая индикация). Вот пример как этот префаб работает в игре:
Как видите это участок карты в европе с правосторонинм движением, но GPS рисует мне развязку как с левосторонним движением. Ну и напоследок несколько слов о навигационных путях "низкой детализации". Эти пути после импорта скрыты и они своего рода простейшая развязка через префаб, которую будет отображать карта на большом отдалегнии. Вместо кругового движения что мы разбирали вверху, вот такое примитивное сочленение дорог будет использоваться::
Я подкрасил сверзу линии, чтоб было видно, как они идут. На этих путях навигации в вершинках тоже должны быть привязки к узлам (свойства "link"), а на самих сплайнах дополнительно указывается свойство lowres со значением 1. Следует отметить, пути низкой детализации должны быть в группе "navi" в самом низу списка. В противном случае, GPS найдет их первыми и построит по ним кратчайшую навигацию через префаб даже на увеличенной крате - это будет смотреться неверно в игре. Как видите на картинке, это пути с номерами #1, #2, #3, но при этом они в самом низу списка, чтобы экспортировались в правильном порядке.
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 16:10 | Сообщение # 21 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| Добавил к траку/салону свои модели и тюнинг, но в игре они светятся, хотя используют те же материалы. Когда трак заезжает в тень, то объекты становятся "плоскими", объем геометрии не читается, что можно сделать? Обе проблемы связаны с рассчетом "общего освещения" (Ambient Occlusion), которое сделано на всех родных моделях в ETS2. Данные освещения нанесены на текстуры модели (прорисованы в виде теней на самих текстурах) и внесены в цвет вершинок на модели. Если нет возможности создать качественные текстуры с тенями (так называемое "запекание"/baking), то можно сделать приблизительный рассчет теней в ZModeler используя инструмент Self Shadows. Для этого надо включить опцию "Diffuse Color" в свойствах "Mesh\Vertices\Format" на объектах сцены и выполнить поэтапный рассчет освещения. Данная тема показана в двух видеоуроках. Первый видеоурок показывает рассчет освещения на модели трака. используется стандартный трак и для всей модели обновляется освещение. В случае добавления лишь нескольких деталей к модели, можно делать рассчет лишь для новых деталей, подгоняя результат под основную модель:
Второй видеоурок раскрывает технику освещения для "замкнутых пространств" на примере салона трака:
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 16:16 | Сообщение # 22 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
|
Skinning the steering wheel with UV Unwrap (Eng + Rus)
This guide will illustrate the benefit and an overal usage of UV Unwrap method for complex models like steering wheels and dashboard. The guide applies when small texture fragment needs to be wrapped multiple times on a 3D surface, so you need a correct uniform UV mapping to prevent stretching. Planar mapping gives distortion that can be clearly seen in game, so Unwrap is the best choice here.
В данном руководстве представлен механизм использования метода автоматической разверкти UV, её преимущества при мэппинге сложных поверхностей наподобии рулевого колеса и панели приборов. Данное руководство применимо при мэппинге небольшой текстуры, оборачивающей поверхность несколько раз повторяющимется фрагментами. Для такого подхода необходимо создать равномерный мэппинг без растяжений и сжатий. Мэппинг с видовой проекции даст искажения, которые будут отчетливо видны на объекте в игре, так-что автоматическая развертка в таком случае - оптимальный выбор.
original steering wheel
I use the steering wheel from Scania model as an example. This is a ready-to-use model, you might need to apply some modification to your models, I'll mention it here in a guide what exactly should be done to get proper result. The model is loaded with "Merge models" toggled off, so it's currently split by objects. This is a standard variant with look1 visual appearence. I would like entire wheel to be using the biege skin material. Here it is in materials browser:
Я использовал рулевое колесо от Скании в качетсве примера. Это модель готовая к мэппингу, но ваша собственная модель, вероятно, потребует некоторых изменений, о которых будет упомянуто ниже, чтобы получить такой же результат как и в этом руководстве. Модель загружена с выключенной опцией "Merge Models", так-что она разбита на объекты. На скрине показан вариант "standard" с раскраской "look1". Я сделаю всё рулевое колесо в бежевой коже, создав при этом новый UV мэппинг. Материал бежевой кожи в браузере:
biege materialuvunwrap02.jpg (28.36 KiB) Viewed 3292 times
I select (By Material) all polygons that will use this material, then assign biege material onto selected polygons. They use proper material now:
Я выбрал все полигоны которые будут в бежевой коже (инструментом Select\By Material) и назначил им материал бежевой кожи. Теперь они все бежевые (хотя старый мэппинг присутсвует, он будет полностью переделан):
skin wheel selected
I invert selection and hide unneccesary parts. then invert selection again, so only "ready to skin" polygons of the wheel are visible and selected. Use Surface\Mapping\Reset UV tool to delete current mapping:
Я инвертировал выделение на полигонах и скрыл полигоны с другими материалами (они не нужны) и снова инвертировал, так-что теперь выбраны только полигоны с бежевой кожей. Затем применил инструмент Surface\Mapping\Reset UV для удаления старого мэппинга:
hidden and selected
Switch to objects level and turn on outline wireframe to see open-edges outine in viewport. The rim has an open edges seam on an inner side. If you don't have such a continuouse open edge on a rim, create it from point-to point with Modify\Kinfe tool:
Переключился на уровень объектов и включил Outine wireframe в окне, чтобы видеть острые грани на объектах. Обод колеса уже имеет разрез модели на внутреннем радиусе. Если у вас такого нет, сделайте его на уровне вершинок инструментом Modify\Knife, кликая последоватльено на вершинках от верхнего края к нижнему:
Use Select\Separated tool to select connected charts of polygons on the top area of the rim. Then use Surface\Mapping\Edit UV tool to create UV mapping for them. You should toggle on Generate New and toggle off options Continuouse mesh surface and Pin border points. The tool will consider each fragment bounded by open edges as a single UV chart and will create new UV mapping for each chart it finds. No pinning is given and chart is placed on texture wherever tool decides:
Инструментом Select\Separated я выбрал связанные фрагменты полигонов в верхней части обода. Затем применил инструмент Surface\Mapping\Edit UV, чтобы создать им мэппинг. Надо включить опцию "Generate New" и выключить опции "Continuouse mesh surface" (связанная поверхность) и "Pin border points" (закрепить точки на краях). Инструмент будет искать фрагменты, ограниченные открытыми ребрами и каждый такой фрагмент будет отдельным лоскутком в UV мэппере. Поскольку не указано закрепление точек, лоскутки инструмент набросает на текстуру по своему усмотрению:
Then hide selected polygons (mapping for them was created and we shall edit it later)
Далее я прячу выбранные полигоны (для которых только-что был создан мэппинг). Сам мэппинг буду редактировать позже.
The left (and right) areas of the rim are bridged to central part of the wheel, so proper seaming here is a must. Create a straight top to bottom seam on inner side like this:
Левая и правая части обода соединены с центральной частью рулевого колеса спицами. Эти части должны быть с разрезом на модели на внутренней части обода. Если такого нет, сделайте разрез на всех частях (может быть несколько разрезов, не обязательно один длинный) сверху донизу как показано на картинке:
And Edit-UV it with the same options as before. Then hide selected fragments too.
И примените Edit UV с теми же настройками как и ранее. Затем скройте выбранные полигоны.
Now the central part. I've selected four fragments (with Select\Separated tool). These fragments are "separated" from each other, so the tool does not pick them as a single mesh. Since I want them to be mapped as a single mesh fragment, I toggle on Continuouse mesh surface. The option will force Edit UV tool to deal with mesh like it has no sharp edges. This option in particular supresses availability of seams on the mesh and considers points to be interconnected. Press Ok to unwrap:
Теперь центральная часть колеса. Я бырал четыре фрагмента инструментом Select\Separated. Данные фрагменты физически отделены друг от друга - на картинке видно, что модель там разрезана, так-что инструмент Separated прав, не выделяя их как единое целое. Но поскольку я хочу чтобы мэппинг на них был непрерывный, как на едином фрагменте, я включаю опцию Continuouse mesh surface в инструменте Edit UV, когда применяю его к выбранным полигонам. С этой опцией инструмент будет рассматривать указанную модель как будто все вершинки у нее склеены. В частности, с данной опцией инструмент просто игнорирует все разрезы, если вы их создавали. Нажмите Ok для разверки:
Hide selected polygons.
A pair of central fragments (the left one is shown on a screenshot below) should be unwrapped as "continuouse mesh" too. They will produce a pair of UV charts - the left one and the right one:
Скройте выделенные полигоны. Теперь пара фрагментов на центральной части (на картинке показан левый), которые тоже надо мэпить с опцией "Continuouse mesh". Из них получатся два независимых лоскутка, левый и парвый:
And the bottom fragment of central part is "continuouse" too:
Ну и кусочек из нижней части центра рулевого колеса тоже с опцией "continuose" мапим:
The rest should be unwrapped with no "continuouse mesh surface". So we get a fully unwrapped and skin-textured steering wheel:
Скрываем выделенные полики и мапим всё остальное с выключенной опцией "continuouse mesh surface". Таким образом, мы создали автоматическую развертку для шкурки рулевого колеса:
The detailization of skin texture is too big for the wheel. Not a big deal, we shall adjust it quickly. Open UV Mapper, press "Material..." button, locate material we were mapping to and pick the desired texture in it. UV Mapper will show all UV charts one over another in a view:
Детализация "кожи" на руле слишком крупная. Но не беда, это исправляется довольно быстро. Открываем UV Mapper, нажимаем кнопку "Material" и выбираем материал с нашей текстурой. В окне UV мэппера появятся наши UV лоскутки один поверх другого:
I switch to objects level, zoom out, select all charts and press "Rescale" button in UV Mapper toolbox. This tool rescales charts to reflect the size of respective 3D surface. Notice the overal "size of skin texture" in 3D viewport is about the same on entire wheel, so each fragment has proper stretching across the object:
Я переключаюсь на уровень объектов, отдаляю вид, выбираю все лоскурки и нажимаю кнопку "Rescale" (перемасштабировать) в панельке инструментов мэппера. Этот инструмент перемасштабирует лоскутки, чтобы их размер примерно соответствовал размеру подконтрольных им объектов (фрагментов) в 3D окне. Сразу после нажатия, заметте, что детализация "кожи" на рулевом колесе стала примерно одинаковая по всей поверхности объекта. Никаких растяжений и сжатий, объект обернут равномерно, хотя и крупно:
I select all charts and scale them bigger, so skin on target wheel model is wrapped multiple times to produce smaller detail. Most of surface has the same detalization level, except the central fragment of the wheel. It has a bigger details in a middle and higher details on a sides. Since it is mapped with a single UV chart, this chart have to be located. Notice, the chart is stretched on sides and compacted in a middle:
Выберите все фрагменты и увеличте их инструментом Modify\Scale таким образом, чтобы текстура "кожи" на руле получила приблизительно нужную детализацию. Лоскутки при этом выходят за границы текстуры в мэппере, за счет чего текстура на объекте повторяется несколько раз, оборачивая объект. Большая часть поверхности получилась достаточно равномерной, кроме нижнего фрагмента в центре колеса. Более того, у него крупная детализация в серединке и мелкая детализация по краям. Поскольку данный кусок мэпился как единый фрагмент, за него в мэппере отвечает всего один лоскуток, так-что мы не можем просто отмасштабировать для достижения результата. его придется изменить. найдите его в UV мэппере (другие лоскутки можно просто раскидать встороны):
Pick Manipulators level, hover and click on a chart to switch it to manipulators level. You will see two bold points. These are pin-point manipulators:
Выберите вверху режим Manipulators (манипуляторы) и кликните на лоскутке, который собираетесь редактировать. Увидите две жирные точки. Это кнопки-манипуляторы (по умолчанию, инструмент создает всего две). Для удобства я эти "кнопки" буду называть пины, чтоб не было путаницы:
Using Pin tool from toolbox, create additional pin points as shown on the image. This tool is an alternative to Modify\Insert tool, so you can use Insert (hotkey 'Ins') if you like. Also, you can delete pin points with Modify\Delete tool:
Используя инструмент Pin из тулбокса мэппера (кстати, это то же самое что инструмент Modify\Insert, так-что можно пользоваться горячими клавишами от инструмента Insert), создайте дополнительные пины. Если поставили лишний, удалите его инструментом Delete. В общем, добавьте пины как на картинке внизу (приблизительно, точность тут не нужна)
Adjust pin points locations with Modify\Move tool. In general, you need to make central fragment bigger and striaghter, and side fragments smaller:
Теперь достаточно инструментом Modify\Move подвигать пины, чтоб лоскуток по форме был примерно похож на поверхность, за которую он отвечает. Грубо, центральную часть надо расправить и сделать больше, а края-"крылья" сделать меньше:
As you can see, the skin detalization on wheel model on respective area is now matching the skin detalization on a neigbour fragments. The result might look like this:
Как видите, детализация "кожи" на рулевом колесе в проблемном участке теперь соответсвует общей детализации на руле и на соседних фрагментах в частности. Результат будет примерно такой:
That's it. Вот и вся наука.
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 16:18 | Сообщение # 23 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| Material states settings guide.
This guide will describe the set of steps you have to perform to create custom "Paintjob" or "Company look" for ETS/GTS scene. This applies to general PMD export too (including truck interior models export and scenery exterior prefabs).
The idea behind states. In most of modern games it's a good practice to reuse shared resources as much as possible. If it's possible to have one geometry model to be textured in different ways depending on certain in-game conditions, it's very preferable to have the same geometry using different materials for rendering. For example, the daylight and nighttime buildings use completely different textures set, but the overal model is exactly the same. To reduce mix of materials and their assigment, the commonly used consideration taken is to adjust materials properties or replace their textures instead of assigning completely different materials set for the model.
This is the basic idea behind material states: ZModeler will change settings of materials (or textures) when certain states are toggled on/off. In case of ETS model this could be considered as "toggling company look #1 would switch skin #1 on trailer, while toggling company look #2 would switch skin #2 and so on".
Prepare scene and materials.
In this guide, I'll show material states on torus object just for simplicity. It will have two materials: a plain color (this will be used as for a set of polygons that will not change when states are toggled) and a textured material that will be affected by states. Both materials should be Shader materials assigned to torus object. Just in sase you don't know how to do it, drag and drop "shader material" label onto material sample, then drag and drop desired shader onto material sample. Then assign material to polygons:
Double-click on textured material to bring it's properties window, scroll down to DETAIL sampler page (this is a diffuse texture sampler settings page) and press wide button next to "Texture map:" label. This will bring textures browser window. Load three textures (skins) into textures browser. I've loaded ETS container textures: plain.dds, euroacres.dds and transinet.dds:
I've selected "plain.dds" and pressed Ok. Now this is a textured used by my "textured" material:
We are ready to create custom material states now.
Creating custom material states.
On the scenes nodes browser in Structure tab, press the "New state" button. A dialog box for new state will appear. Specify there a name for the first state (I've used "EURO" for euroacres), tick "Affect Materials" and "Exclusive" options. Then press OK:
Option name Affect materials is self-explaining. Option Exclusive means that this option can not be combined with other exclusive options at a time. Consider exclusive states as mutualy exclusive options. For example, the trailer can not belong to several companies at a time and can not show dirrent paint skins at a time.
Create the second state the same way. I've created "TRANS" for transinet paint look. Notice, both states are under a drop-down combo now. This means that you can select only one of them at a time:
An option selected in drop-down list will be shown on drop-button after selecting, but this state is not active unless you push the button itself. So, select the first entry in drop-down list then push the button. This state is active now and affects materials:
Nothing has changed in scene or viewports since our materials are not yet set up to be affected by newly-created states.
Setting up material to reflect state changes.
Open material browser and double-click on textured material to bring it's properties. Scroll down to "Material States" page. Notice it shows current material states in the bottom ("EURO" on screenshot below). This is a currently-selected materials-affecting state. Press "Add current" button to add this state into the list:
As soon as you press "Add current" button, current state will be added to the list of states that this material can reflect. If a certain state in a list matches currently selected set of states, this state has bold text. Also, notice that "DETAIL" sampler page became completely blank:
This means that settings for this sampler on current state are not changed and kept the same as on material in it's default state. When you deal with complex shaders, most of their samplers will be left unaffected, while "DETAIL" sampler is the most commonly affected sampler.
Since we need custom texture to be used for state "EURO", tick the Overload sampler for current material state checkmark and sampler dialog will become active as usual. Note that you edit sampler settings for current state as selected in Structure tab, but NOT a state of currently selected entry in a list of materials state.
Replace sampler texture to the one that matches current state. "euroacres.dds" in my case for state "EURO":
Once you picked texture for "overloaded" sampler, a torus in viewport has changed. That's because we've done setting up material for current state.
Pick the second state from states drop-down combo in scene nodes browser and notice your material has reverted to default state (since material does not reflect this state). Make sure the drop-down combo is pushed (state is active), and repeat the assignment for this state too ("Add current", "Overload sampler for current material state", load desired texture). Do the same for the second state ("TRANS" in my case that will use "transinet.dds" texture):
You can close material browser now and simply toggle on/off state in scene nodes browser and see changes in 3D viewport instantly.
Export specific.
Exclusive material states are automatically converted to painjobs or company looks on export to PMD. Note, that missing exclusive material states will force filter to create one state named "Default". In my case when no states are selected, my material shows "plain.dds" texture on it, considered this is a "default" state of my textured material. This will not be exported when you have any material states defined (only "EURO" and "TRANS" will be exported). To make a proper export in such a case, I would need to create a state for initial setup too (probably named "Plain") but I would not need to set up material sampler to "Overload sampler for current material state" for that state.
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 16:19 | Сообщение # 24 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
|
Assign material to an object or polygons
Assign material to an object or polygons. ZModeler3 allows you to assign material interactively with more control than you had in ZModeler2. You don't longer have "Assign to selection" button in materials browser, but the overal assignment idea is still the same: you have to select objects or polygons first. When you do, a left-side of materials browser will show current selection's set of assigned materials in Scene selection branch:
On the image above I've selected objects in scene, they use two materials "sidewalk" and "kerb_tile". Once I click on any of material names listed in "Scene selection" branch, according material is selected in materials samples list on the right.
In order to assign desired material to selected objects (or polygons), you should drag and drop desired material onto "Scene selection" branch. Desired material will be assigned instead of all materials listed there. If you wish to assign certain material instead of only one material listed there, drop onto that material name. For example, to replace "sidewalk" material assignment with "asphalt", I drag and drop "asphalt" tile onto "sidewalk" entry in "Scene selection":
The image below shows that "Scene selection" has changed and it shows assignment of "asphalt" material now, as well as 3D viewport renders asphalt instead of sidewalk bricks material now:
Materials assignment can be undone like the rest of other actions with Edit -> Undo.
Note, you can assign polygons material in their properties:
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 16:22 | Сообщение # 25 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
|
Basic Animation Guide.
ZModeler3 basic animation guide. This guide will describe basic steps to create your own animation. We shall create wipers animation with two animated objects: Left wiper arm, Right wiper arm, and one static object: windscreen.
Preparing scene, creating objects and blank animation template. I consider you know ZModeler basics and can create some boxes while preparing to this guide. There should be an object Windscreen, L Arm and R Arm. Wiper arms objects are expected to be rotated slighly, so they lay exactly on windsceen. Also, notice that I've decided to user "Z" axis (blue) as a rotation axis. This is just for this example, you might chose any:
This is an initial layout of objects I would like you to create prior to moving further. Now, open tracks editor (a button on animation playback bar, next to play/stop buttons set) and press "Animation" button. It will act as "New animation" by default and will create new animation:
Select (click) new animation in a set of animations and press "Track" button in top toolbar:
This will create a track inside new animation. Press this button again to create second track. Then expand animation branch and rename tracks and animation. I suggest to rename animation to "wipers" and tracks to "Left Arm" and "Right Arm":
Now you need to bind scene object with animation track. Animation track will affect binded object(s) during playback, so until you bind anything, no animation will be played. You might noticed that if you ever loaded animations and tried to run playback - nothing happend. So, to bind the object and track, you should drag and drop object onto according track. When you click on a track in Tracks editor, the bottom-left options box will show you a Controls branch - this is the set of object(s) that track controls. You can drag and drop object onto that branch too, it doesn't matter. Note, you can select an object listed under Controls branch and press 'Delete' key to unbind track and according object. The image belows show where you can drag an object:
Do the same with "R Arm" object and "Right Arm" track. Once you dragged and dropt an object onto according track, an object will be listed in "Controls" branch of this track:
Now you have each object binded to according track.
Drag and drop animation label from the top-left animations set into the right panel of track editor (track sheet):
This will create a wide group-button "wipers" (animation rollup) in track sheet. Click on it to expand, two track sheets will appear (the one for "Left Arm" track and the one for "Right Arm" track. Expand them both by clicking on Collapse/Expand button:
Now, untick the first (from top) checkmark in each track sheet - this is a track for movements, while we shall apply only rotation animation. Then drag the first (from top) gripper up to make the center sheet fragment bigger. This is a rotation track that we will care about. The last sheet fragment is for Scale not used in ZModeler (and barely used in games). The image below shows what you need to click and what to drag; on the right side an example of layout you should get:
Adjust layout of "Right Arm" track sheet the same way. This is how it should look when set up properly:
We have prepared the scene and created blank animation.
Animating wiper arms.
Once everything is set up properly, you can create animation keys. First of all, when object is binded to the animation track, this track controls object position and rotation. Thus, you can't move or rotate binded objects by default. In order to create animation, you need a freedom to adjust object position and rotation when creating key frames. The button "Free mode" does this for you. When this button is pressed, the track does not affect an object and you are free to modify object in scene. Press this button now:
Now in Tracks editor, hover the top ruler bar next to zero time (0:00.00) and double-click to create keys at this time:
Then double-click at time 2.00 to create keys there too.
These are initial and final keys of animation.
Notice that track sheet now shows keys as green dots and draws lines in rotation tracks. Click on time 1.00 (in the middle) on the ruler bar of Track Editor (or move animation slider in the ruler to the time 0:01.00:
We shall create a middle key-frame of animation in "one second" time frame. At this frame both wiper arms should be in nearly vertical (a top position of their animation). First of all, pick Rotate tool and make sure it will Rotate Axes and Rotate Geometry:
Then toggle "Local Z" axes constrains mode:
Rotate wiper arms objects and make sure axes are rotating too:
Press Set Key button in animation controls bar. This will create frame in current time (1.00 second) using object's position and rotation:
Animation is ready. You can disable "Free mode" by clicking on that button and make sure it's not red anymore:
You can now press playback button or drag animation slider left/right to see animation playback in perspective view:
That's all. Your first animation is ready.
Saving animation.
You can save your animation or export it into PMA file for ETS/GTS. Since ETS/GTS pma file does not directly bind track to objects, it refers to animateable objects by their ID. If you ever imported anim.pmd model (with "merge models" off) you have seen a lot of separate objects that can be animated. Each object has an ID in External State -> ID in it's properties. This is an ID value you have to set on track to bind this track to an object (for proper export only; does not affect ZModeler) :
I don't mind setting value here, just shown where you set ID on each track. Then you press a drop-down arrow on "Animation" button:
And pick "Save as file" in menu to save an animation:
Type the file "wipers.pma" and press Save to save animation.
Your pma animation is ready. Of cause, this is a sample guide and it will not work properly in game. At least it will not animate wipers, while it could animate something else (it's up to an ID values on animation tracks and according objects in anim.pmd scene), but you are free to practice and create your own animations.
Note, some animation require to animate objects that has parent-child relation in scene. While ZModeler can animate only parent object and child will be affected instantly, this will not work when you deal with PMA animation files. You need to create tracks for each object involved in animation. Evenmore, you have to set up animation tracks relation exactly the same as respective scene objects. For example, original wipers animation contains four tracks for two wipers: (track for wiper arm and a track for wiper blade) x 2times. Since wiper blade is a child of wiper arm in scene, animation tracks should be drag and dropt to create parent-child relation in Track editor too. Otherwise, an animation will be incorrect. Unfortunally, PMA file does not label tracks, and we don't know which track should be parent, which should be child. However, track's ID value is given, you can check scene object IDs to set up tracks respectively.
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
Valera_t | Дата: Воскресенье, 26.02.2017, 16:24 | Сообщение # 26 |
Администратор
Группа: Администраторы
Сообщений: 2576
Статус: Offline
| UV unwrap + AO backing (video)
Не ошибается тот , кто ничего не делает своими руками.
|
|
| |
| |
| | |
|