Создание моделей юнитов для Medieval 2: Total War.
Вступление.
Сразу хочу предупредить – данный тутор не охватывает всех аспектов моделлинга юнитов. Я не пишу про нюансы работы в редакторах 3–х мерной графики, о текстуринге и вообще работе в редакторах 2-х мерной графики ( в частности - Фотошопе), о прописывании новых юнитов в текстовиках игры и про другие важные вещи. К сожалению, у меня не хватает времен и усердия, чтобы написать исчерпывающее руководство. Возможно я сделаю это позже, или кто-нибудь из Гильдии это осилит. Просто сложилась весьма неприглядная ситуация – начинающие моделлеры не имеют элементарной информации для работы! Поэтому я решил набросать хотя бы азы.
В тексте в разных разделах могут быть повторения, но не судите строго – писал по возможности так, чтобы было понятно начинающим.
- Общие сведения.
1.1. Инструментарий.
Для работы нам понадобятся следующие инструменты:
- 3DS MAX версии от 1.7 и выше.
- Milkshape8 или более поздняя
- Конвертер MESH - файлов. Бэта 0.18. «Mesh_2_Ms3d_beta_1_8». Предназначен для конвертации моделей людей из формата Милки (*.Ms3d) в формат игры (*.MESH) и обратно ТУТ
- Конвертер для конвертации моделей лошадей (и прочей живности) и различных осадных орудий ТУТ
Для его функционирования необходима программа Python.
http://www.python.org/download/
1.2. Конвертация.
Чтобы произвести конвертацию модели из формата MESH в формат Милки:
- Запускаем прогу «Mesh_2_Ms3d_beta_1_8»;
- Жмем FILE и в меню CONVERT выбираем направление конвертации. В нашем случае .Mesh to .Ms3d;
- Находим нужный файл;
- В окне появится модель. Если это то, что нам нужно жмем PROCEED и выбираем путь сохранения. Если вам она не нужна можно нажать кнопку Cancel и выбрать другой файл.
Аналогично производится конвертация из Милки в MESH. Только в меню CONVERT выбираем .Ms3d to .Mesh.
При сохранении файла в MESH нужно обязательно чтобы в названии присутствовал уровень ЛОД. Т.е. название нужно заканчивать например так *_lod0.mesh
1.3. Сборка моделей из готовых запчастей.
Также с помощью это программы можно делать компиляцию-сборку из запчастей от готовых юнитов. Например – вы хотите заменить какому-нибудь юниту шлемы.
- Открываете в Милке модель юнита от которого вы хотите взять шлем.
- В закладке «Groups» (Рис 1) удаляете все ненужное оставляете только шлемы.
- Кости не трогаем!
- Сохраняем файл (ФАЙЛ 1) и закрываем Милку.
- Далее открываете в Милке модель юнита которому вы хотите дать новый шлем.
- В закладке «Groups» (Рис 1) удаляете шлемы.
- Кости опять не трогаем!
- Сохраняем файл (ФАЙЛ 2) и закрываем Милку.
- Запускаем прогу «Mesh_2_Ms3d_beta_1_8»
- Жмем FILE и далее MERGE .Ms3d
- Находим (ФАЙЛ 2) открываем его, затем жмем PROCEED и находим (ФАЙЛ 1).
- В окне программы видим что юнит приобрел новый шлем.
- Сохраняем файл под новым именем.
- Затем открываем его в Милке и правим, если необходимо, положение шлема и текстурную развертку. Естественно нужно и на текстуре юнита нарисовать текстуру нового шлема или перенести ее из текстуры модели донора.
1.4. Перенос моделей из Милки в 3DS MAX и обратно.
Для удобства создания НОВЫХ моделей я рекомендую работать в программе 3DS MAX. Я считаю, что эта программа гораздо удобней и функциональней чем Милка.
Корректно (т.е. с сохранением скилета и «комментариев») перенести модель из формата Милки в 3DS MAX полностью невозможно. Точнее – существует программа которая вроде бы это делает. Но я так и не понял - как с ней работать – мои модели не конвертируються… Возможно они не соответствуют каким-то стандартам которые приняты в проге, но факт есть факт…
Можно делать так – в Милке делать Экспорт (меню Export) в формат *.OBJ. Затем в 3DS MAX через меню FILE/IMPORT… импортируем ее в формат *.max. После того как работа с моделью в Максе окончена, ее можно экспортнуть (меню FILE/Export) в *.OBJ. Далее поступаем так – открываем Милку, идем в меню Import и выбираем нужный формат. Только теперь открываем модель. Сохраняем ее под новым именем. После экспорта/импорта необходимо удалить пустой объект DEFAULT.
Нужно помнить, что при этих манипуляциях переносится только сама модель и текстурная развертка, и теряются кости и «Комментарии», поэтому после экспорта в Милку нужно будет вернуть скелет.
Поступаем так:
- Открываем любой юнит
- В закладке «Groups» (Рис 1) удаляете все. Т.е. остается только скелет.
- Жмем FILE/MERGE и открываем нашу новую модель «модель1»
- Теперь нужно привязать к костям, присвоить материалы (и возможно удалить лишние образовавшиеся при импорте) и прописать «Комментарии». Но об этом ниже.
1.5. Модель, геометрия.
Каждый юнит состоит из объектов (торс, ноги, руки, кисти рук, голова, головной убор, оружие, обвеска) и каждый из объектов может иметь по несколько вариантов. Это сделано для того, чтобы юниты в отряде не были близнецами, а имели различия. Причем объект BODY (туловище) вообще может включать в себя и торс и руки и ноги.
Количество вариантов в разных моделях может быть разным. То есть, если юнит исторически имел униформу, можно сделать один вариант торса, рук и ног (т.е. мундира), и несколько лиц и головных уборов. Как пример можно привести юнит турецких янычар из оригинальной игры – там только лица в отряде отличаются, все остальное одинаковое. Даже один файл текстуры на все 3 вида янычар.
Можно сделать 10 вариантов голов - это как кому нравится. Главное - чтобы места на текстуре хватило.
Обычно вариантов торса, ног и рук – по 3, а лиц – 4-5. Вариантов оружия и щитов бывает до 20 шт! В общем – тут нет никаких аксиом, делайте так как считаете нужным, полная свобода творчества.
Вообще при моделлинге нужно учитывать один момент – модель на тактике собирается в произвольном порядке из доступных запчастей. То есть – мы можем сделать руки, допустим, в одном варианте с коротким рукавом, а второй – с длинным. НО! места соединения рук с торсом должны быть одинаковы у всех вариантов иначе будут щели. Это нужно помнить про все элементы.
Варианты частей тел можно называть как вам удобно. Головы, допустим, я называю по-русски – голова1, голова2 и т.д.
Важнейший момент – для каждой запчасти прописаны, так называемые «комментарии» в закладке «Groups» (Рис 1). Они определяют место запчасти в общей сборке модели. Если здесь будет ошибка – модель не будет работать как положено.
Например:
Head
голова1
0
Что это значит? По порядку:
«Head» - это класс объектов (групп) (головы, руки, туловище и т.д.), т.е. ЧТО это такое. В данном случае объект принадлежит в классу «Голова».
«голова1» - это имя варианта головы. Может быть любым удобным вам («голова1, «башка1», «репа1» например ;)).
«0» - означает, что объект подлежит обязательному отображению на сборке юнита в игре. Т.е. элементы тела и оружие всегда имеют «0»! иначе в каком-то варианте сборки будет отсутствовать …. голова, например J - это недопустимо - согласитесь.
Возможен еще вариант «1» - тогда объект будет отображаться случайным образом. Это применяется в основном для элементов обвески, т.е. если присвоить «1» сумке или рожку – на одних юнитах они будут отображаться, а на других – нет. Ну или шапка – может быть, а может голова голая.
Тут момент – название класса может быть какое угодно. Т.е. голова может быть «Head», а может быть «Bashka» или еще проще - «голова». Главное чтобы, все головы имели одинаковое название. Тогда они будут правильно отображаться. Это касается и любых других групп кроме оружия и щитов.
Рис 1
1.6. Оружие и щиты..
1.6.1. Оружие.
Как известно, оружие бывает первичное и вторичное. Каждое из них в свою очередь бывает - первого уровня и второго уровня апгрейда (реже есть и третий уровень). Для того чтобы оно корректно работало нужно в "Комментариях" прописывать следующим образом:
Для первичного оружия:
primaryactive0 - оружие первичное. Цифра "0" означает первый уровень.
Для второго уровня апгрейда цифра должна быть "1"
копье - имя объекта
0 - отображение обязательно
Для вторичного оружия:
secondaryactive0 - оружие вторично.Цифра "0" означает первый уровень.
Для второго уровня апгрейда цифра должна быть "1"
мечь - имя объекта
0 - отображение обязательно
Нужно помнить, что если вы хотите чтобы у юнита было только одно оружие без вторичного, вы должны скопировать первичное оружие, поменять ему имя и прописать "комментарии" как для вторичного.
Для оружия используется дополнительная кость bone_weapon_weapon01. К ней привязываем и первичное и вторичное оружие.
1.6.2. Щиты.
Если щит висит только на руке, то в «комментариях» пишем так:
shield0
щит1
0
Если нам нужно что-бы щит при смене первичного оружия (лука например) на вторичное (сабля, мечь) перескакивал со спины на руку, делаем так:
Щит на руке (рис 2 позиция 1) привязываем как обычно к руке (обычно кость bone_Lelbow). Щит на спине (рис 2 позиция 2) привязываем к кости bone_torso. «Комментарии» такие:
Для щита на руке:
shieldpassive0
щит1
0
Для щита на спине:
shieldactive0
спинащит1
0
Рис. 2.
1.7. Кости, скелет.
По сравнению с форматом CAS исчезли кости отвечающие за привязку плаща (bone_cloak_*), и добавлены несколько новых: две кости ключицы (bone_Rclavical, bone_Lclavical), нижняя челюсть (bone_jaw) и брови (bone_eyebrow), кость для оружия (bone_weapon_weapon01) и еще кости bone_weapon02 и bone_weapon03_shield_shield01. Для чего существуют две последние кости я так и не понял…
Главное и, я бы сказал, основополагающее отличие нового формата MESH от формата CAS в плане скелета – это то, что веса вершин можно делать дробными! То есть теперь они не обязательно должны быть равны «1», а могут иметь другие значения. Что это дает? Улучшение анимации и большую плавность сгибания конечностей в суставах. Практически это выглядит следующим образом – как известно сустав состоит из двух сопредельных костей (назовем их условно «1» и «2». Модель в свою очередь в месте сочленения костей имеет два (или три) уровня вершин. В формате CAS один уровень вершин привязывался к одной кости (находящейся к ней ближе), а второй уровень – соответственно ко второй ближней к нему кости.
В формате MESH процесс более сложный и творческий, так сказать. Если имеется два уровня вершин, то они оба привязываются к обеим костям по очереди (т.е. сначала к одной, а затем к другой), НО со значением веса вершин – «0,5». То есть каждая из костей одновременно оказывает влияние на оба уровня вершин. В результате имеем, более плавное изгибание конечностей.
Если уровней вершин 3 делаем так:
- Уровень ближний к кости 1 привязываем – 80 % к кости 1, 20 % к кости 2.
- Средний уровень – 50 на 50.
- Уровень ближний к кости 2 привязываем – 20 % к кости 1, 80 % к кости 2.
Для оружия используется дополнительная кость bone_weapon_weapon01. К ней привязываем и первичное и вторичное оружие!
Щит присоединяется с кости левой руки bone_Lelbow напрямую.
- Создание новой модели.
2.1. Создание геометрии модели и текстурной развертки.
Делаем в 3дмаксе саму модель (объекты), т.е. все варианты голов, шлемов, рук и т.д. Проще и быстрее брать за основу ванильные элементы изменяя их по своему усмотрению. Но конечно некоторые уникальные элементы придется делать самому полностью. Я не буду объяснять, КАК работать с 3Дмаксом – для этого написаны книги и статьи. Найти их в Интернете не составит труда.
Когда все элементы геометрии модели полностью готовы, нужно сделать текстурную развертку каждого объекта.
Работа с модификатором “Unwrap UVW”.
Чтобы присвоить модели текстуру и иметь возможность делать развертку сразу по ней, открываем “Material Editir” (можно кнопкой «М») (Рис 3) кликаем на любой свободный материал (поз. 1) жмём кнопку “ Map” (поз. 2).
Далее следуем указаниям по Рис. 4. и Рис. 5.
Рис. 3.
Далее жмем кнопки 1 и 2 (Рис 5).
Теперь, когда мы присвоили текстуру нашей модели, можно делать развертку.
Если вы использовали готовую запчасть от ванильной модели можно просто подогнать развертку под вашу текстуру. Если вы делали «с нуля» уникальный элемент вам придется сделать развертку по всем правилам.
Начнём работу с туловища.
Выберите все полигоны передней части туловища и отделите их как отдельный элемент (Рис 6 поз. 6). Затем нужно сразу сшить вершины в месте соприкосновения передней и задней частей туловища. Лучше это сделать на левом боку модели (Рис 6 поз. 9). Присваиваем модели туловища модификатор “Unwrap UVW” открываем его свиток, выбираем “Select Face”, затем выбираем на туловище модели все полигоны передней части, в инструментах модификатора нажимаем кнопку “Edit”, а затем “Planar Map”. В открывшемся окне появилась проекция передней части туловища, отодвигаем её пока в сторону, выбираем все полигоны задней части туловища и снова жмём “Planar Map”. Теперь у нас есть две проекции для не симметричной развёртки (Рис 6 поз. 7). Если вы всё делали как надо, то ваша модель должна быть окрашена в чёрно-белою клеточку, это для того чтобы можно было понять где модель развёрнута правильно а где нет. В идеале вся модель должна быть окрашена в одинаковые, ровные квадратики, но нам простительна некоторая деформация. Всё что нужно сделать это устранить очень проблемные места если они есть. Это делается редактированием положения вершин в окне “Edit”. Далее нам нужно сделать нашу развёртку “ровной”, для этого придётся намеренно немного искривить развёртку (Рис 6 поз. 8). Теперь осталось совместить две проекции (Рис 6 поз. 10).
Разворачивание рук.
Сначала выберите все полигоны кисти, отделите их как отдельный элемент, затем выберите полигоны передней части руки (Рис 6 поз. 11) и снова отделите их как отдельный элемент. Затем склейте вершины показанные на рисунке (Рис 6 поз. 12). Присваиваем модификатор “Unwrap UVW”, выбираем полигоны передней части руки (без кисти) делаем снимок проекции, потом задней. Получаем правильно развёрнутую руку. Ищем какими краями нужно совместить проекции, выравниваем их (Рис 6 поз. 13). Аналогично с кистью, только её полигоны можно выбрать все сразу а получившуюся проекцию нужно будет масштабировать до нормального уровня (Рис 6 поз. 14).
С ногами всё проще. Достаточно просто выбрать все полигоны и сделать снимок проекции по оси “X”. Можно сделать развертку по аналогии с руками - решать вам. Далее подгоняем все элементы (руки, ноги, голову и туловище). Снова присваиваем модификатор “Unwrap UVW” и в окне “Edit” внутри центрального синего квадрата укладываем все получившиеся развёртки (Рис 6 поз. 15).
Рис. 6. Создание несимметричной текстурной развертки.
Можно сначала нарисовать текстуру и делать развертку уже по готовой текстуре. Например - голова. Когда вы сделаете одну голову с разверткой, вы можете ее размножить с помощью функции Clone (контекстное меню через правую кнопку, в правом столбце, в нижней части). В процессе клонирования назовите объекты так как вам удобно (например - голова1, голова2 и т.д.). После этого нужно подрехтовать развертку, так как она пока у всех расположена на одном месте. Разбрасываем ее по готовой (или предполагаемой) текстуре, чтобы лица отличались J. Также, поступаем с другими частями тела. Естественно можно и нужно вносить разнообразие в варианты частей тел, т.е. например рукав может быть коротким или длинным, кафтан до колена или до пола, и т.д. Главное следить, чтобы в местах присоединения различных объектов друг к другу (как то – голова к туловищу, руки к туловищу) не было щелей.
Если текстуры нет и Вам предстоит ее нарисовать удобней сделать так.
Для удобства работы соедините все элементы модели в один с помощью кнопки Attach (Рис 7). Это только для снятия снимка развертки! Ненужно сохранять модель после получения снимка!
Итак
Рис 7.
Далее присваиваем модификатор “Unwrap UVW” и жмем Edit.
Рис 8
Далее в меню Tools жмем кнопку Render UVW Template... (внизу списка). Выставляем разрешение снимка (Рис 9) и жмем Render UV Template. Полученный снимок сохраняем (Рис 10).
Теперь по снимку развертки можно рисовать текстуру.
***
Болванка готова. Можно прямо в 3Дмаксе присоединить оружие и обвеску (т.е. сумки, ножны, колчаны, саадаки и пр.), а можно это сделать в Милке. Это как вам лично удобней. Вообще-то по своему опыту скажу, что все-таки удобней иметь готовые наборы оружия и обвески привязанные к костям и с прописанными «комментариями» в формате Милки. А потом просто в конвертере «Mesh_2_Ms3d_beta_1_8» присоединять к модели.
Далее делаем экспорт (меню Export) в формат *.OBJ. В Милке импортируем модель и сохраняем ее в формате Милки. Закрываем ее пока. Далее открываем в Милке любую ванильную модель, удаляем все объекты оставляем только скелет. В меню FILE жмем MERGE и погружаем нашу заготовку.
Теперь необходимо написать „Комментарии”. Без них в игре модель будет с растопыренными руками и без анимации. О «комментариях» я писал выше на странице 3 и 4.
Следующий шаг – определение «материала» (текстуры) объектам. Если открыть закладку «MATERIALS» мы видим две строчки FIGURE и ATTACHMENTS. Если ниже есть еще какие-то записи, их нужно удалить – они, скорее всего, образовались при конвертации из макса в милку. Материал FIGURE – это основная текстура юнита, ATTACHMENTS – текстура на которой в основном хранится «обвеска», щиты и оружие. Однако это не обязательно, на ней можно хранить любой объект модели. Никто не запрещает вам поместить на ней 40 вариантов лиц или шлемов J, что бы ваш отряд был совсем уж разнообразный. Равно как и наоборот – вы можете разместить на основной текстуре всю обвеску.
Далее мы должны распределить объекты модели по этим двум материалам. Заходит в закладку GROUPS и двойным щелчком выделяем все объекты которые мы хоти поместить на материала FIGURE. Затем переходим в закладку MATERIALS кликаем на FIGURE и жмем кнопку ASSIQN ниже. Вернувшись в GROUPS мы должны убедится, что выделенные объекты имеют правее названия запись FIGURE. Далее проводим такую же операцию с объектами, которые мы хотим поместить на ATTACHMENTS. Очень важно, чтобы все объекты были назначены на материалы FIGURE и ATTACHMENTS иначе модель не будет работать.
Если вы не уверены в правильности развертки и хотите ее подправить, делаем так. В закладке MATERIALS жмем кнопку <none> и выбираем нужную текстуру. Затем выделяем все объекты (группы) модели и идем в меню WINDOW/TEXTURE COORDINATE EDITOR. Появляется окно редактора развертки.
Вообще-то развертка в Милке реализовано очень неудобно, но для косметической рехтовки сойдет. Поэтому еще раз рекомендую делать развертку в 3Дмаксе.
2.2. Привязка к костям.
Осталось привязать нашу модель к костям скелета.
После установки Милки кости выглядят огромными синими сферами заполняющими весь экран. Это жутко неудобно. Проблема решается так - идем в FILE/PREFERENCES/MISC и в окошке JOIN SIZE ставим 0.025. Теперь все нормально.
Для начала зайдите в закладку Model (Рис 11) и отметить Select и Vertex – это означает, что мы определили выделение вершин. В окошке Auto Tool галку не ставим!
Затем идем во вкладку Joints (рис 12) и начинаем привязку. Выделяем нужную кость затем «резиновой рамкой» обводим вершины, которые хотим назначить на эту кость, и жмем Assinqn. Таким образом, мы присваиваем вершины со значением «1». Если поставить галку на Draw Vertex Weights (Показывать веса вершин) вершины засветятся красным.
Рис. 11
Рис. 12. Кисть
Когда нам нужно произвести привязку в суставе, поступаем следующим образом.
Обводим «резиновой рамкой» вершины, которые находятся в зоне действия сустава, жмем кнопку (Рис 13 поз.1) и выбираем одну из костей которые образуют сустав, затем жмем кнопку (Рис 13 поз.2) и выбираем вторую кость. Далее ползунки (Рис 13 поз. 3) выставляем посередине, т.е. определяем вес вершин – 50 %.
Убеждаемся что в окошке (Рис 13 поз.4) стоит цифра «100» и жмем кнопку Assinqn.
Рис. 13. Вид на правую руку сверху.
ВНИМАНИЕ. Это самый общий случай. Веса вершин могут распределятся между костями в любых пропорциях, как то – 20 на 80 , т.е. первая кость оказывает только 20 % влияния не вершины, в то время как вторая кость – 80 %. Или такой вариант – только один уровень вершин привязывается к обоим костям с весом 50 на 50. И даже одна вершина привязывается с весом 50 на 50. Это нужно смотреть по обстоятельствам. Привяжите, вставьте в игру, посмотрите – если явных косяков нет, и конечности сгибаются более или менее плавно - значит вы сделали все правильно. Если что-то не так – привяжите по другому…. Экспериментируйте. Однозначного совета у меня нет.
Можно посоветовать брать в качестве примера ванильные модели. Откройте какую-нибудь и посмотрите как сами разработчики привязали тот или иной объект и сделайте аналогично.
Чтобы посмотреть к каким костям и с каким весом привязаны вершины делаем так – выделим нужные вершины и нажмем кнопку SHOW (Рис 13 поз. 5).
2.3 Создание ЛОДов.
После того как вы сделали (испытали на наличие косяков и исправили их) модель, вы должны еще сделать ЛОДы. Хотя в принципе можно этого и не делать – главное сделать спрайты или прописать похожие ванильные.
Что такое ЛОДЫ ? На тактике при отдалении камеры от поля боя в кадр попадает все больше и больше трехмерных объектов. Вследствие этого сильно падает производительность, так как процессору приходится обрабатывать больше информации. Поэтому разработчики игр придумали такой способ – при отдалении подгружаются модели с меньшим количеством полигонов. В М2:ТВ таких моделей от 2 до 3 –х.
Если LOD0.mesh – это первичная модель, то LOD1.mesh, LOD2.mesh и LOD3.mesh соответственно первый, второй и третий ЛОДы.
Вообще-то обрезание полигонов лучше делать в 3дмаксе ручками. Но для особо ленивых, в Милке есть инструмент, позволяющий это делать полуавтоматомJ. Идем в меню TOOLS, далее выбираем " DIRECTX MESH TOOL" а потом ползунком уменьшаем полигоны всей сцены так, как нужно. Правда, честно говоря, результат не очень хороший…
Совет: Посмотрите количество полигонов на ванильных юнитах – сравните LOD0.mesh и LOD1.mesh и на столько и уменьшить в вашей модели. Далее соответственно LOD1.mesh и LOD2.mesh и т.д.
Далее жмем кнопку с изображением дискеты и красным минусом. Готово!
Негативный момент – при этих действиях пропадает скелет, так что придется его добавить и привязать к костям по новой. Но другого простого способа создания ЛОДов в Милке я не знаю.
- Работа с моделями лошадей и артиллерии.
Для работы с моделями лошадей и различных эквипментом существует конвертер работающий под средой Python. Я пробовал работать только с лошадьми.
Сначала установим сам Python. Далее распакуем архив конвертера в любое удобное для Вас место, и в папке testms3dformat запускаем файл meshconverterv1_0_4.py.
Появиться весьма недружелюбное к юзеру окошко J.
Рис 14.
В этом окошке навигацию можно осуществлять с помощью кликов мышкой по «..» (Рис. 14 позиция 1) находим нашу модель и делаем двойной клик на ней (Рис. 14 позиция 2). Теперь там где лежала ваша модель появиться модель в формате Милки.
Далее открываем модель в Милке и делаем с ней все, что хотим. Далее опять запускаем файл meshconverterv1_0_4.py в Питоне и двойным щелчком конвертируем Милковский файл в формат MESH. В конце названия файла появиться «_converted». Переименуйте его как положено. Ваша модель готова для вставки в игру.
Заключение.
Вроде все что знал - написал.
Кстати, спасибо панам Maxim Suvorov, Йомен и Grif за помощь.
Я не пишу про работу в Милке, как таковой, но по этому поводу есть хорошие статьи в сети. Вот, например: ТУТ
В общем, если что непонятно или есть дополнение или исправление - пишите на форум – разрулим J. Но перед тем как, что-то спрашивать, ВНИМАТЕЛЬНО прочитайте данное руководство и туторы по милке и максу ;).
© 2008. Андрей «SHREDDER» Домрачев
Любая перепечатка данного материала без согласования с автором ЗАПРЕЩЕНА.