Tutorialы
Вам интересны такие пошаговые туториалы? Можете скинуть ваши любимые?)
Вам интересны такие пошаговые туториалы? Можете скинуть ваши любимые?)
Добрый день! Меня зовут Александр. В этом посте я хотел бы рассказать о том, как в Unreal Engine 4 создать простую область видимости для AI или персонажа. Пример такой области Вы можете видеть на картинке выше. Если кому-то удобнее смотреть видео или какие-то детали разобраны недостаточно подробно, то в конце поста есть ссылка на видеоурок.
Создание проекта
За основу возьмем "Blueprint" шаблон ThirdPerson со стартовым набором.
Создание материала
Создаем базовый материал и называем его "M_VisionArea". Параметр "Blend Mode" устанавливаем на "Translucent" и создаем параметр "BaseColor".
Затем используем узел "RadialGradientExponential" и создаем параметры "ExternalRadius" и "Density", которые будут отвечать за внешний радиус и размытость границ нашей области видимости. Устанавливаем значение "ExternalRadius" равным "0,5", а значение "Density" равным "1000".
В результате у нас получается белый круг, вписанный в черный квадрат (белый цвет соответствует "1", а черный "0") Это именно то, что нам нужно, так как после мы будем применять наш материал к квадратной плоскости.
Для того чтобы у нас была возможность регулировать внутренний радиус области видимости мы копируем узлы представленные на предыдущей картинке, меняем параметр "ExternalRadius" на "InternalRadius", устанавливаем его значение равным "0,05" (это значение не играет особой роли, так как в дальнейшем мы будем его задавать в настройках персонажа) и добавляем узел "1-x".
Перемножаем наши выражения и получаем белое кольцо у которого мы можем регулировать внутренний и внешний радиусы, а также размытость границ.
Теперь создаем узел "VectorToRadialValue" и используем выход "VectorConvertedToAngle"
В данном случае градиент меняется в зависимости от угла.
Для того чтобы вырезать интересующий нас угол, мы воспользуемся узлом "if" и создадим параметр "HalfAngle", отвечающий за половинный угол обзора. Устанавливаем значение "HalfAngle" равным "0,25", а значения входов "A>B" и "A<B" равными "0" и "1" соответственно.
Из картинки видно, что значению "HalfAngle" равному "0,25" соответствует четверть круга.
Поскольку мне удобнее работать с градусами, а "HalfAngle" - это половинный угол, то устанавливаем значение "HalfAngle" равным "45" градусам (это значение может быть любым) и добавляем узел "Divide", где знаменатель равен "180".
Теперь полный угол (светлая область) равняется "90" градусам (2*"HalfAngle"), как и должно быть.
На следующем этапе добавляем узел "CustomRotator", который позволит расположить светлую область симметрично относительно горизонтальной оси. Поскольку я не представляю как кратко показать настройку этого узла, то ниже привожу картинку с уже выставленными параметрами.
Перемножаем наши два выражения ("Ring" и "Angle"). Для того чтобы у нас была возможность менять прозрачность материала перемножаем получившийся результат с выходом параметра "BaseColor", отвечающим за прозрачность, и соединяем со входом "Opacity".
В дальнейшем нам понадобится DecalMaterial, поэтому создадим копию нашего материала и назовем ее M_DecalVisionArea. Откроем этот материал и изменим "Material Domain" с "Surface" на "Deferred Decal".
На этом с материалами все и мы переходим к персонажу.
Добавление области видимости к персонажу
Переходим в папку Content/ThirdPersonBP/Blueprints и открываем Blueprint Class ThirdPersonCharacter. Добавляем плоскость "Plane" и задаем "Location" равным (0, 0, -90), "Scale" (10, 10, 10) и применяем материал "M_VisionArea" к этой плоскости.
После этого нужно установить значение "Collision Presets" на "NoCollision", чтобы наша плоскость не взаимодействовала с другими объектами.
Теперь создадим переменные, которые позволят нам менять размеры и цвет области. Поместим их в категорию "VisionArea" и поставим галочку напротив "InstanceEditable", что позволит нам менять их в редакторе для каждого персонажа отдельно.
Переходим на вкладку "ConstructionScript" и создаем следующие узлы:
Узел 1. Создаем "DynamicMaterialInstance" из материала "M_VisionArea", записываем результат в переменную DMI и применяем этот материал к плоскости "Plane".
Узел 2. Масштабируем плоскость так, чтобы внешняя граница соответствовала значению, записанному в переменной "ExternalRadius". Делим на 50, так как используем стандартную плоскость из стартового набора.
В узлах 3, 4 и 5 мы связываем наши переменные с параметрами материала. Имя параметра ("ParameterName") должно соответствовать имени, указанному в материале.
Перейдем в окно редактора и добавим еще одного персонажа.
На картинке видно какие параметры в разделе "VisionArea" заданы у одного из персонажей и что область видимости скрывается внутри объектов, даже если высота этих объектов достаточно маленькая. Чтобы решить эту проблему, мы будем использовать материал "M_DecalVisionArea" и добавим возможность переключаться между двумя материалами в зависимости от ситуации. Логическая переменна "UseDecal" под эту задачу у нас уже добавлена.
Также нужно обратить внимание на зоны 1 и 2 - области в которых персонаж не может видеть объекты, но эти области все равно подсвечены зеленым. Этот недостаток наряду с простотой создания такой области и послужил причиной для появления слова "простой" в названии поста.
Добавим к нашему персонажу компонент "decal" и задаем "Rotation" равным (0, -90, 0). В "ConstructionScript" создадим узлы, аналогичные тем, что мы делали для обычного материала и компонента "Plane".
Видно, что отличия коснулись только верхних узлов. Так "DynamicMaterialInstance" мы создаем из материала "M_DecalVisionArea", вместо узла "Set Material" появился узел "Set Decal Material", а внешний радиус делится на 256 вместо 50 и результат подается на вход "y" и "z". Последние отличия связаны с тем, что "Decal" материал проецируется по направлению оси "x" на поверхности попадающие в его область действия и поэтому расположение осей отличается от расположения осей у плоскости.
Посмотрим какие изменения произошли в окне редактора.
Теперь область видимости показывается поверх невысоких объектов, кнопка "UseDecal" по-прежнему не работает и проблемы с зонами 1 и 2 никуда не делись.
Давайте настроим переключение материалов.
И добавим высоту, начиная с которой область видимости не будет отображаться.
Добавлена переменная "DecalHeight", "Set Relative Scale 3D" по оси "x" равен "1", добавлен узел "AddLocalOffset" и смещение подобрано таким образом, чтобы высота равная "170" соответствовала уровню глаз персонажа.
Заключение
Это мой первый опыт написания подобных статей, поэтому я не очень представляю насколько удачно изложен материал и уместна ли здесь такая тематика. Буду рад вопросам, конструктивным замечаниям и советам. Если тема данного урока кого-то заинтересует, то в следующий раз мы добавим затенение от объектов. Спасибо за внимание.
Ссылка на видеоурок:
Пост для тех кто давно хотел научиться снимать.
Сегодня ты узнаешь, как работают эти инструменты в Z-Brush:
1.Extract
2.ZRemesher
3.ZModeller
4.Полигруппы
5.Divide
6.DinaMesh
7.Слои
8.Кризы
9.Dynamic Subdivision
1. Extract
Эта функция находится здесь: Tool → Subtool →Extract
Ты выделяешь область, которая тебе нужна.
И просто вытягиваешь её. Таким образом создаётся новый меш, который повторяет топологию родительского элемента.
Z-brush: функция Subtool → Extract
Что делает функция Extract
Это самая простая и очень часто используемся функция.
2. ZRemesher
Делает сетку более удобной для редактирования и уменьшает количество полигонов.
Сетка оптимизирована. Теперь с ней удобнее работать.
Вот ещё один пример использования этой функции.
Z-remesher делает сетку равномерной.
3. Z-Modeller
Это кисть, которая содержит в себе набор инструментов, которые позволяют редактировать модель как в классическом моделировании.
Но этот инструмент неполный, поэтому не может являться полной заменой моделингу. Тем не менее он очень полезен.
Находится этот интрумент вот здесь:
У нас всё-таки не тутор по кнопкам, а именно описание технологий, поэтому если не можешь найти какую-то из функций — просто загугли :)
Например, ты можешь убрать лишние эджи, тогда 2 полигона объединятся в один.
4. Полигруппы
Они позволяют объеденить один или несколько полигонов в группу (полигруппу), с которой в дальнейшем удобно работать. На модели может быть сразу несколько полигрупп, для удобства они подкрашиваются случайным цветом.
Без использования полигрупп, при любой манипуляции с геометрией, функция применяется сразу ко всем элементам.
Вот пример функции ___ без использования полигрупп. Функция применилась ко всем полигонам сразу.
Теперь давай сделаем из нашего «ремня» 3 разных полигруппы.
Одна красного цвета, вторая — жёлтая, третья — зелёная (это не цвета самих элементов, а цвета полигруппы).
Теперь, если мы выделим только одну полигруппу и начнём её вытягивать, то элементы из других полигрупп не будут задействованы.
Создаём 3 полигруппы, вытягиваем только красную полигруппу.
Можно также менять видимость объектов.
Например, отобразить только красную полигруппу, или только жёлтую.
Меняем отображение полигрупп. Другие полигруппы не удаляются — они просто скрыты.
5. Divide
Эта функция при каждой итерации делит геометрию на 4 части.
Таким образом, модель начинает скругляться.
Ты можешь создать несколько, например, 3 или 7 дивайдов и переключаться между ними.
Переключение между дивайдами — очень важный момент.
Давай его рассмотрим на примере нашего «ремня».
Сначала давай просто закинем его в дивайд:.
Давай добавим на него деталей, например, вырежем небольшие дырки в геометрии:
Лепим новые элементы
Допустим, мы хотим изменить геометрию нашего «ремня».
Если ты не знаешь про переключение между дивайдами и сразу начнёшь менять геометрию, произойдёт следующее:
Как видишь, это не то, что нам нужно. Круги стали ужасно кривыми. Мы не можем изменить форму «ремня».
Но, как ты помнишь, этот объект изначально лежал в divide.
Поэтому у нас есть возможность переключиться на самый первый уровень дивайда, изменить наш ремень, а затем опять вернуться к последнему дивайду.
В таком случае, все наши «вырезы» пересчитаются автоматически.
И тогда вырезы будут такими же круглыми, как мы и планировали.
Переключаемся на первый уровень дивайда, меняем геометрию, а потом возвращаемся на самый последний дивайд. И видим, что геометрия пересчиталась.
Этот очень важный приём, обязательно запомни его!
Он очень часто используется при скульпте с персонажамей.
6. DynaMesh
Как только мы начинаем вытягивать из родительского меша новые элементы, сетка начинает растягиваться.
Функция DynaMesh позволяет сделать сетку равномерной.
Функция DynaMesh
Ещё у этой функции есть такая особенность — если ты лепишь что-то, и геометрия входит одна в другую, то после нажатия кнопки DynaMesh геометрия объединится в единую:
Геометрия объединяется на местах стыков при использовании функции DynaMesh
7. Слои
Очень часто мы хотим добавить детали, но так, чтобы с геометрией впоследствии было удобно работать.
Одно из решений — это использование слоёв.
Например, если мы хотим сделать обводку у ремешка с небольшим вырезом, то на начальном этапе мы просто рисуем её кистью внутри слоя. А уже в любой момент времени можем менять, например, глубину выреза в настройках этого слоя.
Слои в Z-Brush
То есть, мы не вырезаем геометрию, вычитая одну из другой, а получаем более гибкий инструмент для работы. Даже при изменении родительской геометрии, всё, что мы сейчас делаем, повторит эти изменения.
Более того, можно добавлять сразу несколько слоёв.
8. Кризы (Crease)
Позволяют настраивать жёсткость граней у геометрии.
Их можно назначить на любые эджи, а при помощи полигрупп это можно сделать быстрее, о которых ты уже знаешь, или можно вручную выбирать на какие грани назначать, используя Z-Modeller.
Если начать дивайдить модель (про дивайды ты уже тоже знаешь), то модель начнёт скругляться, но в местах где есть кризы, она скругляться не будет.
Мы назначаем кризы на внешние грани этой геометрии. И при дивайдах, вся внутренняя часть скругляется, а грани остаются жёсткими, как мы и хотели изначально.
9. Dynamic Subdivision
Помогает ещё более гибко настроить кризы.
У нас появляется возможность создавать фаски, жёсткость кризов, добавить радиус скругления и многое другое.
Примеры использования
Скругляем грани, на которых есть кризы:
Слева исходная модель — справа динамический сабдив.
Можем также добавить фаски:
Слева исходная модель — справа динамический сабдив.
Сегодня мы рассмотрели несколько самых часто используемых нами инструментов для скульпта.
Как ты уже мог заметить, работа кроется в правильных комбинациях этих инструментов. Например, дивайды + кризы и так далее.
Горячие клавиши Premiere Pro 2020
На создание этого видео меня подтолкнули работы Daniel Schiffer, Peter Lindgren, и подобных контентмейкеров.
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.
Урок по монтажу в Premiere Pro