Developer от Бога

DV
Показаны сообщения с ярлыком 3D. Показать все сообщения
Показаны сообщения с ярлыком 3D. Показать все сообщения

воскресенье, 9 июля 2017 г.

3D Моделирование

Художники компьютерной графики, особенно направления в 3D, делятся на два типа: те кто умеют рисовать руками, и те кто не умеет. Тем кто рисует реально, намного проще, так как 90% у них уже есть то что надо для этого, а половину функций редакторов графики даже знать не нужно, остальные 10% нужных качеств занимает зависимость от аппаратных средств и знание самого редактора 3D графики.
Мы будем изучать 3D моделирование в редакторе Autodesk Maya , скачать последнюю версию Maya можно на официальном сайте, бесплатной 30-ти дневной версии вполне хватит чтоб пройти небольшой курс и создавать - любые 3D сцены: от дизайна интерьеров, архитектуры, и до работы в игровой индустрии, а перейти на любой другой редактор можно будет в любой момент, так как все 3D редакторы работают по одним и тем же принципам.
Мы не будем рассматривать средства выделения, перемещения и т.д, так как с этим не бывает проблем. Рассмотрим основные методы, которых достаточно чтоб сделать любую задачу быстро и качественно.
Объекты в 3D графике состоят из полигонов (плоскостей), ребер, и вершин которыми можно манипулировать - выделять, перемещать, изменять размеры, резать по полам. В основном, процесс моделирования (возьмем персонажа) происходит так: берется примитив - плоскость, из граней которой выдавливают новые грани и полигоны по образу "из головы". Есть методы для тех кто не обладает художественным обьемным мышлением : загружая в редактор фотографии человека или предмета с разных сторон,"наращивая" поверх них полигоны.
Но даже и этот метод устаревает, так как есть программы ( той же Autodesk) которые прямо по фотографиям с разных ракурсов создают модели в 3D, а остается только подправить несовершенство 3D сканеров.
Несмотря на тяжелые 3D редакторы с тысячами функций, для создания сцен любого уровня нужно всего с десяток, рассмотренных в этом курсе.

четверг, 6 июля 2017 г.

Maya. Освещение

Освещение в Maya есть как свое, так и интегрированное в Mental Ray плагине. Как и в случае с материалами, лучше и качественнее освещение использовать в Mental Ray. Многим тема освещения кажется трудной в настройке, но благо в Mental Ray присутствует глобальное освещение симулирующее поведение лучей солнца и небесного освещения. Достаточно перейти в режим рендеринга Mental Ray и создать солнце нажав всего лишь кнопку Create , дальше все программа просчитает сама. Поэтапно это будет выглядеть так:
1) Нажмем на значок Open Render View.
2) Выберем режим Mental Ray и откроем его настройки Open Render Setting.
3) В настройках рендера откроем вкладку Indirect Lighting и нажмем кнопку Create в Physical Sun and Sky.


Достаточно пока, солнце с небом создано. Однако не спешите визуализировать сцену, нужно еще помнить о композиции и взаимоотношения свет/тень. По умолчанию солнце светит перпендикулярно земле, что равно свету солнца в разгар дня. Как фотографы так и художники избегают этой поры. Лучше и эффектнее кадры появляются или утром, или вечером, когда солнце находится под острым углом . Поэтому нужно сменить угол падения луча. Но стоит помнить о том что Mental Ray максимально реалистично моделирует поведение солнца и неба, при смене угла меняется и цвет лучей ближе к вечернему солнцу.

Maya. Альфа канал и UV координаты

В больших сценах, например - природных ландшафтов, не любой компьютер способен выдержать нагрузку от рендера лесов и деревьев. Качественное дерево может иметь около 300 тыс. полигонов, как показывает практика после 5 - 6 таких деревьев в сцене компьютер может выбить ошибку, кроме того, сама навигация по такой сцене очень затруднительна.
Есть несколько способов устранить проблему:
Расставить деревья в разных сценах, потом импортировав их с минимальными действиями, во избежании фатальных ошибок программы, в новой сцене - начать рендер.
Другой способ - передний план сделать с 3D деревьями, а на задний план поставить их картинки в альфа режиме. Альфа режим - это управление прозрачностью материала. Простейший способ добиться его - вырезать картинку в фоторедакторе, и сохранить ее на прозрачном фоне, в формате который поддерживает прозрачность, например PNG.
Технически ничего нового тут нет, кроме самого формата картинки PNG с прозрачностью которую обычным образом загружают в материал. В этом примере использовано дерево созданное мной в 3D но отрендерено и сохранено в формате PNG с разных ракурсов. Если использовать реальные фото деревьев, то нужно будет гораздо больше времени подготовить картинку, удалив с нее все лишнее, оставив только нужный предмет или растение:



Как видим после применения текстура не совсем как нам хотелось бы, легла на плоскость. Можно исправить это , как обсуждалось в прошлой статье, спроецировав картинку на объект, а можно и пройти: Window->UV Texture Editor открыв редактор UV координат, и там методом поворота, масштаба, перемещения, отрегулировать положение картинки на форме. Больше всего нас интересует кнопка Separate the selected UV into one fore each connected edge, выбрав в общих настройках кнопку перемещения, масштабирования или вращения, нажатие этой кнопки переносит все перечисленные действия только на UV координаты (рис. 1).
Также , зажав правую кнопку мышки , как и в случае с формой, можно управлять UV координатами через вершины, плоскости (рис. 2)


После отрегулирования отображения картинки на плоскости, можно смело их копировать и ставить на задний фон, где виртуальная камера особо снимать не будет.

Maya. Карта рельефа Bump

Рельефное текстурирование или BUMP имеет большое значение в моделировании, так как оно помогает при минимальном количестве полигонов добиться максимальной передачи детализации, и значительно оживить сцену, придав ей существенно реализма. BUMP является некоторого рода картой теней на поверхности формы, некоторой формой иллюзии, чем темнее/светлее в зависимости от настроек пятно на текстуре - тем она больше пускает тень. Картинок для bump достаточно черно-белых, выбираются они обычным образом в Attribute Editor как и для color, но в настройках Bump Mapping.
После выбора картинки с bump , в Hypershade выделив материал, следует нажать на кнопку Input and Output Connections(на рисунке выделено красной рамкой), для лучшей визуальной подачи построения зависимостей нодовой системы:


Нодовая система чем-то напоминает - поезд с вагонами, которым управляет хвост. Последний нод управляет всем тем что находится перед ним на его ветке. Каждая ветка эффекта (например bump, color, карты отражений и др.) имеет свою линию влияния над конечным материалом, в котором стекаются другие ветки эффектов.
 

Maya. Текстуры

Текстурирование занимает не менее важную роль чем моделирование, и часто по времени может занять больше. По умолчанию каждый материал имеет некоторый цвет, но к ним возможно применять и свои текстуры различных форматов, самые простые из них JPEG и PNG. Перед тем как текстурировать некоторую фигуру, нужно детально продумать в каком месте какая картинка должна ложиться на форму, прорисовав отдельно каждый момент. В прошлой статье были рассмотрены виды и свойства материалов, и попробуем применить их к фигурам.
1)Выбрав нужный материал - дважды кликнем по нему, и в Attribute Editor(2) левой части экрана откроются его свойства. Прежде всего нас интересует свойство Color, нажмем на него и откроется окно Create Render Node(3), ищем в нем File и открываем File Attributes, в нем же указываем путь и название картинки которую хотим применить в качестве текстуры(4):



Выделим объект к которому хотим применить текстуру, перейдем в Hypershade зажмем правую кнопку мышки над нужным материалом пока не появятся варианты дальнейшей работы с материалом, не отпуская кнопку мышки выберем Assign Material To Selection. Материал с текстурой применится к объекту:

Как видим, после обработки объекта (добавление полигонов, ребер, вершин) текстурная карта ломается, если объект имеет простую форму (как в нашем случае - прямоугольник) исправить ситуацию можно довольно просто:
Выделив объект, зажав над ним правую кнопку мышки - выберем полигональный режим отображения, указав нужные нам полигоны (нужной стороны) перейдем в вкладку Create UVs, и спроецируем картинку текстуры на форму с стороны виртуальной камеры. Применим этот же способ для всех сторон, максимально выровняв нужную сторону параллельно к нашему зрению:

Maya. Сглаживание Smooth и по нормалям

После разработки грубой формы, есть несколько способов произвести сглаживание формы, и придать ей более обтекаемый вид. Первый способ более ресурсоемкий, сглаживает форму путем повышения полигональной сетки, соответственно объект становится тяжелее и в случае необходимости рендера - просчет сцены будет происходить намного дольше. При количестве полигонов в сцене около 1 млн. компьютер может просто не выдержать нагрузки и закроет программу, поэтому важно не переусердствовать повышая детализацию полигональной сетки.
Второй способ сглаживания формы - сглаживание по нормалям, в этом случае программа просто сделает визуальный плавный переход между гранями не повышая количество полигонов. Этот метод особенно полезен при разработке персонажей или обтекаемых деталей для компьютерных игр, где иногда каждый полигон на счету.


Лучше всего это комбинация этих двух методов. Функцией Smooth сделать легкое полигональное сглаживание, и применить нормальное сглаживание (если оно не применилось автоматически после Smooth).

Maya. Операция Fill Hole

Часто при объединении высокополигональных моделей по вершинам, особенно когда топология и направление граней двух форм совершенно разное, очень бывает нужно "залатать" дыры которые образуются в таких формах. Нередки случаи когда и по ошибке в процессе работы удаляются полигоны на поверхности формы. В данной ситуации проблему можно решить несколькими способами. Конечно более всего надежнее использовать операцию Extrude, выдавить полигон из нужной грани, подкорректировать вершины друг к другу и использовать операцию Merge to Center, зашить таким образом форму.
Но есть еще автоматический способ образовать полигон на замкнутых гранях. Для этого выберем внутренние грани, пройдем во вкладку Mesh и выберем операцию Fill Hole, в итоге у нас образуется полигон на выбранных гранях. дальше его останется просто выделить и повторно применить ему нужный материал. Минус этого способа в том, если грани не находятся в одной плоскости, данная функция может не сработать.

Maya. Операции Booleans

Бывают ситуации когдаважно вырезать по форме один обьект - внутри другого, или наоборот, обьединить два обьекта в один. Функция Combine во вкладке Mesh , не совсем подходит, так как тут формы не сливаются воедино, а просто привязываются друг к другу продолжая быть по своей форме независимы.
В даной статье рассмотрим Булевые операции, которые способны из двух обьектов создавать монолитный один обьект.
Создадим куб произвольного размера, и цилиндр который разместим таким образом, чтоб он пересекал форму куба. Для булевых операций первый выбираем обьект который хотим сохранить, воторой обьект - вспомагательный , который соединится с основной формой, см. Рисунок.



Во вкладке Mesh выберем Booleans и операцию Union. В итоге у нас выходит один монолитный обьект.
Вторая по важности булевая операция имеет название Difference. Суть ее в том, чтоб из основного обьекта - вырезать по форме другой вспомагательный обьект, точнее создать в основном обьекте пустоту по форме вспомагательного обьекта.




Также функцией Difference можно например обрезать нужные обьекты по нужной форме или под нужным углом: 




Maya. Sculpt Geometry Tool

Sculpt Geometry Tool не так часто используется, в силу того что для него нужно высокополигональную сетку в форме, взамен используя более простой и менее затратный способ добиться детализации разной поверхности - используя bump map. Однако при анимации ландшафтов или скульптуры, лучше использовать - полигональный способ изменения формы. Sculpt Geometry Tool имеет разные кисти для наращивания , сглаживания, вдавливания формы, а также всевозможные регулировки кистей чтоб добиться желаемого эффекта.

Maya. Extrude по кривой

Еще один более сложный но интересный способ выдавливания Extrude: по кривой линии. Часто применяется в архитектурном дизайне, интерьере или в каких-либо предметах.
1) Создадим для начала прямоугольник.
2) Разделим его по высоте на 5, функцией - Insert Edge Loop Tool из вкладки Edit Mesh.
3) Выберем три средние полигона и выдавим их методом Extrude.
4) Повторим аналогично с центральным полигоном.
5)У нас получилось что то типа зеркальных ступенек. Выберем образованные грани и применим функцию Bevel, которая сглаживает углы.
6) В итоге после удаления на торцах ненужных делений ( ребер) у нас выйдет нечто похоже на калёвку.

7)В вкладке Create создадим нужную нам кривую методом CV Curve Tool которая ведет свое начало от торца детали. Зажимая правой кнопкой мыши, отобразим полигональный вид детали, выберем нужный полигон на торце детали, а также удерживая клавишу Shift выберем и кривую.
8) Выделив линию и нужный полигон нажимаем Extrude, после чего выделенный полигон выдавится по линии к концу кривой.
Как видно с рис.8 вышло не очень симпатично, все потому что по умолчанию количество делений Extrude равно 1. С правой стороны находятся настройки Extrude, и в ползунке, по мере повышения значений Division, деталь будет все точнее повторять кривую линию.

Maya. Loft и Revolve

Метод моделирования сплайнами прекрасно подходит для визуализации обтекающих, каких-нибудь аэродинамичных форм. Суть его в том, чтоб отобразить нужную форму контурами по воображаемом покрытии, а потом функция loft автоматически "натянет" на линии поверхность ( полигоны ). Это уже новый вид задания форм - Surfaces, перейти в него можно выбрав Surfaces в списке левого верхнего угла, под File, Edit, Modify, и потом уже в сам список функций с таким-же названием Surfaces
Не менее интересная функция Revolve, которая создает форму , оборачивая кривую вокруг заданного центра. Также не следует забывать в настройках указывать визуализацию формы в - полигонах.

Maya. Insert Edge Loop Tool и Lattice

Еще несколько функций которые часто применяются , это Insert Edge Loop Tool который находится в вкладке Edit Mesh, и Lattice из режима анимации, в вкладке Create Deformers.
Insert Edge Loop Tool делит равномерно объект дополнительными гранями, количество которых указывается в настройках функции.
Lattice в свою очередь способен деформировать объект по вершинам контейнера, который задают в настройках Lattice Options.
Есть конечно альтернативный вариант изменения формы по вершинам, выбирая на объекте режим отображения по вершинам и их передвигая, но такой способ делает это более грубо, так как каждую вершину нужно перемещать отдельно, и это приносит трудности если в объекте множество вершин. Lattice же передвигает относительно выбранных вершин и другие вершины в соответствии с параметрами Lattice Options.


Отображение вершин деформирующего объект контейнера делается обычным способом как при выборе отображения для объектов - выбирается контейнер, и правой кнопкой мышки выбирается режим Lattice point. 

Java. Интерфейсы

С пониманием интерфейсов в Java уже бывают трудности. Интерфейс это не класс и не метод, интерфейс может объединять многое в себе, что нужно для какого-нибудь действия. Возьмем пример из программирования микроконтроллеров, их интерфейсы передачи данных SPI или USART. Разные производители называют эти интерфейсы по разному, но принцип действия у них один. Если вы хотите чтоб интерфейс передачи данных USART работал, в нем должны быть: стартовый бит, стоповый бит, регистры управления частотами передачи и другое. Это и есть - интерфейс. Микроконтроллеру все ровно кто ему посылает данные, или кому он их отсылает, тот кто хочет эти данные отправить или принять должен - следовать интерфейсу передачи/приема, и понимать что именно "прозвучал" стартовый бит, стоповый бит, и т.д.
В программировании Java, интерфейсы начинаются также, в тех местах, где нужно интерпретировать какие-то данные . Например "слушать" нажатие кнопки не имеет смысла если не указать что программе делать когда кнопка будет нажата, поэтому в интерфейсе событий прослушивания кнопки предусмотрен метод, который производит некоторые действия при нажатии, и если такой метод не объявить, произойдет ошибка.


public interface SPI
{

public function baudrate (int arg){}//Обязательный метод

//... Другие разные нужные методы


}

Maya. bend, sine, squash, twist, wave, flare.

Следующий набор функций Maya для деформирования объектов содержится в режиме Animation: bend, sine, squash, twist, wave, flare. Bend - изгибает форму по кругу , sine - делает что то вроде синусоиды, squash - позволяет "раздувать" нужное место, twist - скручивает объект ( например в спираль), wawe - придает форму волны, в отличии от функции sine - wawe проецирует несколько осей синусоидо-образных линий на форму, flare - делает нужное место узким, в отличии от squash.



все эти функции прекрасно помогают в моделировании архитектуры или предметов интерьера. С правой стороны от каждой функции включается панель с разными настройками , которые устанавливают нужную форму. После придания формы , объект нужно "закрепить" ( если удалить проецирующие линии, форма вернет свое исходное состояние) поэтому выбираем Edit->Delete All by Type ->History. 

Maya. Bevel и полезные функции

Создадим цилиндр, в настройках выберем нужное деление граней, выберем extrude и с применением scale уменьшим радиус для выдавливания, применим повторно extrude и выберем нужную высоту выдавливания. Зажав правую кнопку мышки перейдем в режим отображения граней, удерживая клавишу Shift - дважды кликаем мышкой по грани, в результате все грани которые идут подряд - выделятся, тем самым не придется выделять каждую грань отдельно. Выбрав в меню Edit Mesh -> присваиваем операцию Bevel, которая создает фаску на выпуклых гранях, и сглаживание угла - внутренних гранях, придавая более обтекаемый вид деталям.

Maya. Split, Extrude, Merge

Переходя к моделированию, нужно перечислить основные методы изменения форм, с помощью которых можно создать любой объект, любой формы: Split Polygon Tool который разрезает полигоны, Extrude - выдавливание новой формы из полигонов или контуров, и Merge - объединение точек , которыми можно замкнуть плоскости и залатать дыры.
Функции по работе с формой находятся в выбранной опции Polygon -> Edit Mesh.
При действии любой функции, с правой стороны открывается окно в котором находятся более детальные настройки этих методов, и позволяют произвести более точные действия записью числовым параметром, нежели движением мышки. Также зажав правую кнопку мышки, можно выбрать режим изменения формы : по вершинам, граням, или полигонам.


Split Polygon Tool позволяет установить на гранях полигонов вершины, между которыми будет проложена новая разделяющая плоскость грань.



Extrude: выдавливает из контура полигона(его граней), или нарисованной линии - их объемную форму.



Merge: который делится на Merge center и просто Merge. Merge center объединяет точки на любом расстоянии друг от друга в общий центр, а чистый Merge объединяет точки в некоторой области действия, это бывает удобно например при копировании формы в зеркальном отражении, и объединений их по точкам линии шва.