Итак, делаем модель. Туполев Ту-128. Имеем чертеж, пару десятков фотографий и 3DSMax-7. План создания: сначала делаем для ФС2004, затем переведем в ФСХ.
Начинаем.
Первым делом надо обустроить рабочее место. Запускаем Макс. Cold & Dark 3DSMax7.
Предполагается, что базовые техники работы с Максом читателю известны. Если нет — читайте хелп самого Макса, там все очень внятно написано с картинками.
У меня широкоформатный экран — это очень удобно, так как справа можно разместить параллельно две панели настроек (достаточно потянуть за край панели влево — и она раздвоится). Некоторые часто используемые команды я вывел в кнопки на тулбар — UV-mapping, Unwrap-UVW, Symmetry, … На манер ФСДС, присвоил клавише «М» функцию move, «R» — rotate, «S» — scale. Еще я люблю работать с одним экраном а не с четырьмя проекциями, чтобы убрать проекции, нажать на кнопочку снизу справа (показано стрелкой на скрине)
Чертеж, любезно предоставленный Sima, довольно подробный, хотя — как мы увидим дальше — ни один чертеж идеальным не бывает, неточности будут хоть и не критические. Картинка имеет размер 7541х4501 пикселя. Что ж, создаем плоскость и задаем ей размер 7.541м на 4.501м
Далее, открываем material navigator (1), берем материал (2), кликаем рядом с Diffuse (3), открывается окошко, выбираем Bitmap (4), затем выбираем наш чертеж.
Окошко навигатора высвечивает параметры битмапа, кликаем на кубик в шашечку чтобы высветить текстуру в окне макса, берем шарик мышкой и тянем его на плоскость. Чудеса — на плоскости отобразился наш чертеж.
Вообще у меня привычка — все переводить в Editable Poly. Еще одна привычка — это каждому надо усвоить — делать для каждой новой детали Reset Pivot, Reset Scale на панельке пивотов. Если по какой-то причине у детали окажется scale factor не равный 1, то почти наверняка либо сама деталь либо кто-нибудь в ее иерархии вылезет искаженным в симе да и вообще будет масса неприятных сюрпризов. Так что ресет скейл постоянно, лучше перестраховаться чем потом разгребать последствия.
Итак, конвертировали плоскость в полигон, теперь начинается нарезка. Заходим в subobject level polygone, выбираем тул Cut и вырезаем из чертежа все что нам может понадобиться
И вот что у нас получается :
Теперь надо изменить размер чертежа чтобы он соответствовал реальному размеру самолета. Замеряем длину шкалы. На ней 5 метров, на чертеже выходит 0.831м. Значит надо увеличить чертеж в 5/0.831=6.01 раза. Хоть чертеж и не входит в состав модели, масштабировать его будем «как надо» — то есть не изменять scale у самой детали, а зайти в subobject, например в points, выбрать все точки — и масштабировать их. При этом у пивот-поинта не появится никаких левых скейлов. Выбираем все точки нашего чертежа, нажимаем на кнопочку relative снизу и вводим масштаб (в процентах) : х=601, y=601, z=601 (хоть это плоскость, одна из размерностей у нас равна нулю, неважно какая).
Получили чертеж правильного размера. Проделываем ту же операцию с куском чертежа другого масштаба.
Теперь выбираем по куску и отсоединяем его от детали чертежа. Цель — получить все кусочки отдельно. Делаем Detach как и раньше
Те куски чертежей которые нам сейчас не нужны можно спрятать. Для этого селекционируем их, жмем на кнопоку Layers на тулбаре, затем New Layer — появляется новый слой (как в фотошопе), детальки в него уже добавлены. Кликаем на черную маску — слой становится невидимым. Техника слоев нам еще не раз пригодится, запомните ее
Возвращаемся в главный слой, продолжаем работу. Наша задача сейчас — расставить сечения вдоль фюзеляжа, там где есть метки А-А, Б-Б, и т.д. Двигаем сечения, подгоняем под чертеж, вроде все сходится
Сообщение отредактировано samdim: 12 Январь 2007 — 12:22
Я выбрал 28 граней — это достаточно кругло для сопла, тем более мы вытягиваем только левую половину фюзеляжа. Затем оба сопла соединятся, что даст в сумме 56 граней. Это многовато, но в процессе вытягивания количество граней может еще много раз поменяться.
Конвертируем в Editable Poly, удаляем оба торца. Получили «ноль». Вот и выходит что делаем модель «с нуля», как я и говорил 🙂
Удаляем также несколько полигонов из внутренней части — там где сопла соединяются между собой. Двигаем точку за точкой чтобы совместить деталь с чертежом. Теперь наша деталька соответствует сечению.
Сообщение отредактировано samdim: 12 Январь 2007 — 12:33
Как видно точки придется двигать, и немало.
Подвинули, теперь все хорошо.
Следующий шаг — главный элемент техники вытягивания. Заходим в subobject face (грань), выбираем грани которые будем вытягивать, жмем на Shift и двигаем их вдоль оси Y. Чудеса — создатся новые грани. Тянем их до следующего сечения
В какой-то момент оказывается что граней нам не хватает. Не беда, их можно добавить. Выбираем грань, жмем Insert Vertex, кликаем туда где хотим вставить точку. Можно также разрезать полигон на котором хотим добавить граней.
Подошли к сложному моменту — заборники двигателей. Снаружи они плавно переходят в фюзеляж, изнутри — отсоединяются от него. Это конечно очень частный момент именно этой модели, поэтому особо останавливаться на нем не буду. Скажу лишь что я вытянул отдельно несколько граней которые продолжают фюзеляж на внутренней стороне, и отдельно — с внешней стороны заборников. Вот пока без внешних
Дырке потом придадим нужную форму (клиновидную) и расположим ее края в одной плоскости. Пока что дополним недостающие грани на фюзеляже под заборником (как всегда вытягиванием, теперь не вдоль фюзеляжа и поперек), подгоняем точки к сечению. Заметьте, граней теперь осталось 15, что в общем совсем неплохо — на носу их будет 15*2=30.
Закончив вытягивание получаем фюзеляж. Хмм, смотрится довольно хреново
Само собой, там где сильно закругляется добавляем побольше, там где все прямо — поменьше. Я сконцентрировал новые секции в основном в районе носика, заборников и кормы
Теперь начинается долгий, трудоемкий и ответственный процесс подгонки новых секций под чертеж. Следите за тем, чтобы не изменять секции по которым вытягивался фюзеляж.
Здесь самый сложный момент — сопряжение заборников с фюзеляжем. Кое-где пришлось добавить граней, в других местах — убрать для оптимизации.
Чтобы модель смотрелась приемлемо заткнем сразу все дыры. Селекционируем края сопла либо в режиме граней либо в режиме «край» (border), вытягиваем полигоны внутрь фюзеляжа, жмем на Cap и дырка закрывается. Эту внутреннюю часть можно сейчас или потом отсоединить — все равно она будет текстуриться отдельно.
То же самое делаем с заборниками. Добавим небольшой chamfer на входе и канал заборников сделаем в несколько этапов чтобы он загибался внутрь. Ничего сложного, на все операции две минуты.
Выбираем все полигоны, жмем на Auto Smooth, подгоняем затем вручную группы сглаживания где auto smooth нас не устраивает (перемычка между сопел например), применяем модификатор Symmetry с вельдом 0.01 и получаем фюзеляж Ту-128 ! Ура !
На сегодня все. Продолжим в том же духе в ближайшем будущем
В этом туториале я планирую (не значит что реализую):
— создание визуальной модели
— маппинг
— анимация
— немного кастомной анимации
Serhio, не мог бы ты мне дать модераторские полномочия только на этот топик ?
Сообщение отредактировано samdim: 19 Май 2009 — 15:49
вогнутость от сопряжения заборника и фюзеляжа как-то не плавно сходит на нет, имеет вроде излома. Дело здесь в гранях и в триангуляции (разбиении многоугольников на треугольники). Выбираем грани которые нам мешают
Нажимаем «backspace» (только не «delete»), грани удаляются. А если б нажали «delete» то полигон бы весь убрался. Идем в подобъект полигон, жмем на Edit Triangulation и переорганизовываем треугольники так чтобы грани плавно следовали линии сопряжения (показано на скрине голубым)
Констатируем что задуманые действия увенчались успехом
Также методом вытягивания?
Можно поступить также как с фюзеляжем — создать цилиндр, конвертнуть его в Editable Poly, и т.д… Но я человек ленивый. Поступлю проще. Беру выделяю несколько полигонов на фюзеляже (1), затем нажимаю на Shift и двигаю селекцию вверх. Создается копия полигонов (2), при этом макс спрашивает куда эту копию деть — оставить в составе детали или сохранить как новую деталь. Выбираем новую (3). Не забыть сделать ресет пивота, скейлов и т.д.
Далее поступаем как и раньше — вытягиваем грани
Используем Slice Plane (а также иногда и Quick Slice), добавляем граней для закругленности, двигаем точки… Немножко можно подвинуть и точки на фюзеляже — чтобы получить плавную и правильной формы линию стыка фюзеля и кабины.
конечно это теория, на практике все получается не так гладко, но принцип именно такой. Можно только удивляться как ловко макс вычисляет сложные геометрические формулы расчитывающие разрезы. Правда не всегда ему удается правильно стриангулировать полученные полигоны. Результат — бывают левые тени. После нарезки окон надо обязательно зайти в режим полигонов, нажать Edit Triangulation и проконтролировать все ли треугольнички правильные. Надо добиваться чтобы они были не слишком вытянутые
После обработки кувалдой и напильником получаем следующую картину (окна выделены красным, но пока не отделены)
Создаем материал. Придадим ему небольшой блеск, чем темнее цвет Specular, тем менее заметен будет блик. На скрине — параметры для стекла. Drag-and-drop материал фюзеля на фюзель и кабину, материал стекла — на стекла. Теперь они прозрачные.
Прежде чем придавать объем кромкам стекол, вырежем входные люки
Отсоединив люки, называем их например door_cabin и door_cabin_dva. Откуда такие названия ? С потолка.
Нам хотелось бы чтобы люки в симе открывались, другими словами надо их анимировать.
В ФС2004 анимация может быть двух типов — стандартная и фреймовая. Имеется список всех анимаций, каждой из которых присвоено имя. Если название детали начинается на одно из этих имен, то детали присваивается соответствующая анимация. Список этих имен имеется в СДК.
Стандартная анимация — это значит достаточно назвать деталь как надо — и она будет автоматически анимирована в симе. Например c_tire в симе всегда будет крутиться вдоль оси Х как переднее колесо. Со стандартными анимациями имя детали должно точно соответствовать имени анимации (а не просто иметь общее начало). Деталь c_tire.01 уже не будет крутиться. Если скажем у вас три пары левых колес, то все эти колеса должны иметь одно и то же имя. Недостаток стандартной анимации в том, что ее невозможно контролировать. Достоинство стандартной анимации кроме простоты — это возможность создавать плавные кастомные анимации (плавные приборы например), но это уже выходит за рамки этого туториала, хотя технически совсем несложно.
Фреймовая (кадровая) анимация гораздо гибче. Движение расписано на кадры, как в кино. Моделлер задает определенные положения детали в разные моменты времени, а макс интерполирует движение между этими положениями. В СДК есть список всех симовских кадровых анимаций. Для каждой анимации дается имя и некоторые ключевые кадры. Например передняя стойка должна называться c_gear и анимирована между кадрами 0 (запущена) — 100 (выпущена) и 200 (сжата). Соответственно также будут анимироваться и детали c_gear_stojka, c_gear_ammortizator, c_gear_rasporka и т.д, лишь бы у них были прописаны кадры.
Все симовские кадровые анимации прописаны в файле makemdl.parts.xml Это ХМЛ код задающий для каждой анимации номер кадра в зависимости от тех или иных условий. Синтаксис файла описан в СДК, да и посмотрев код можно догадаться как там все устроено. Надо только не забывать что все вычисления там производятся в стековой системе RPN (как на калькуляторе Мк-54 🙂 ). Главный интерес разбираться в ХМЛ коде — это возможность добавить свой собственный код со своими собственно задаными анимациями. Это и есть то что называют кастомная анимация. По большому счету для хорошей модели практически все анимации должны быть кастомными. Это позволяет иметь полный контроль над ее анимациями, в т.ч. менять условия анимаций не трогая модель.
Именно поэтому я и назвал люки нестандартным именем door_cabin. Сейчас мы добавим в файл makemdl.parts.xml определение анимации для этих люков. На первых порах можно просто привязать люки к стандартному выходу, тому что открывается Shift+E. Добавляем строки:
здесь <part> задает блок, <name> — имя анимации. В тэгах <code> — значение стандартной переменной (A:EXIT OPEN:1, percent) которая выдает «открытость» двери номер один. Когда дверь закрыта, переменная равна нулю, когда открыта — стам. Следовательно нам надо анимировать люки подобным образом. Кадр 0 — закрыты, кадр 100 — открыты.
Сначала надо правильно поставить пивот. Каждому люку ставим пивот в ту точку вокруг которой он будет открываться
Оставим оба люка селекционироваными, выходим из регулировки пивотов и жмем синзу на кнопку AutoKey. Счетчик кадров снизу становится бордовым. Двигаем слайдер на кадр 100 и поворачиваем люки скажем на 60°. При этом на кадре 100 и на кадре 0 появляются зеленые метки (зеленая метка = ротация, красная = движение, если есть другие цвета то надо от них избавляться). Это значит что макс установил кадры — люки открытые на 60° в кадре 100 и закрытые (0°) — в кадре 0. Отжимаем AutoKey. Люки анимированы.
Было бы еще здоровее если бы стекла люков двигались вместе с люками… Для этого их надо прилинковать. Сначала отсоединяем от детали «стекла» те стекла которые идут на передний люк (+ reset scale, reset pivot etc… больше не буду напоминать — должно стать инстинктом). Затем отсоединяем стекла для заднего люка.
Выбираем Link Tool на тулбаре. Селекционируем скажем стекла переднего люка. Drag-and-drop на передний люк, он мигнет. Готово. Запомните эту процедуру — она понадобится нам еще сотни раз. Та же самая операция с задними стеклами.
Проверяем, двигаем слайдер туда-сюда. Супер — стекла теперь прикреплены к люкам.
Для этого используем Shell Modifier, который можно найти в списке модификаторов. Выбираем кабину, применяем шелл модификатор, подгоняем параметры (outer = 0, inner = 0.03, select inner faces, select border faces), получаем объемную кабину
Разрушаем стек, переводим в Editable Poly, заходим в режим полигонов. Внутренность кабины и кромки уже селекционированы. Отделяем их от кабины. Многие полигоны на внутренней части не нужны. Я выделил на скрине все полигоны предназначенные к уничтожению
Проделываем ту же операцию с каждым люком. Линкуем внутренности люков к люкам. В фюзеляже прорезаем отверстие под кабину.
Пожалуй на сегодня все. Продолжение — в понедельник.
Ну не беда, передвинул пивот поинты у люков, переанимировал их — и все дела.
Заодно добавил подвижный конус в воздухозаборник. Согласно описанию конус задвигался внутрь на взлете, а остальное время находился в выдвинутом положении. Сделаем потом такую кастомную анимацию которая позволит это поведение смоделировать.