воскресенье, 7 февраля 2016 г.

Тяжелый рестарт и Fuck Windows!

Долгое время не писал на тему игростроения и своего проекта. Причина была довольно банальная - серия неудач и метания с поисками. Поскольку первая версия блендер-симулятора вполне доказала свою работоспособность, но в тоже время, в силу своих изначально заложенных особенностей, она оказалась достаточно закрытой структурой, тяжело поддающейся модернизации. Окончательно заставило меня заняться второй версией невозможность, скажем так, обеспечить онлайн-версию игры. Мои знакомые и друзья прямо говорят о необходимости этой "фичи". Раз надо, значит, придется делать. Хотя я не поклонник онлайн-игр, да и со своим модемом и "отличной" связью много не наиграю, да и как-то получилось в последнее время, что игры для меня стали своего рода "мониторным учебником" - любопытно взглянуть, как выглядит эффект взрыва, облака, посмотреть на террайн там... Зачастую вполне хватает роликов на ютубе.
Примерно дня четыре назад была найдена разгадка странного поведения replaceMesh в БГЕ. При замене мешей для МиГ-23/27 консоль начинала ругаться на некорректное поведение создаваемых мешей, причем часть мешей все равно менялась, а часть не появлялась (по крайней мере, так это выглядело на экране). Повидимому, при создании исходных мешей вкралась ошибка, которая потом размножилась с отделением в самостоятельные объекты частей юнитов. Ничего удивительного (теперь), поскольку самолеты создавались очень давно в еще версии 2.6, потом переделывались в других версиях... Лечение  этого безобразия было проведено с помощью экспорта моделей в obj и последующим импортом полученных объектов обратно. Разумеется, пришлось потом переименовывать, расставлять центры объектов заново и так далее, но работа того стоила - после создания экспериментального файла со скриптом замены мешей консоль молчала, а объекты исправно менялись. И тут возникла еще одна проблема. Самолеты, как правило, состоят из множества объектов (закрылки, предкрылки, стабилизаторы, рули, фонари кабины, про шасси вообще молчу). Особенностью моего кода является то, что он завязан на использование похожих имен. Причем для замены мешей КРАЙНЕ необходимо, чтобы имена объектов и мешей совпадали полностью или частично. А теперь картина маслом: сидит перед монитором человек и лихорадочно щелкает мышью то по имени объекта в N-панели, то по имени меша в боковой панели свойств. и объектов, гм, много... Представили, да? Эпичное зрелище. Особенно , если я не дожму и промажу по клавише, а потом, при подгрузке файла и запуске процесса замены мешей консоль выразится в том смысле, что такого меша в сцене нет.  Придется опять открывать файл и искать ошибку. И устранять. Ручками, ручками... Все это надоело и я задался вопросом, нельзя ли сей процесс автоматизировать. Ответ - в Блендере все можно, надо только знать, как. В итоге подошел к вопросу создания аддона массового приведения в соответствие имен объектов и мешей, но пока ограничился запуском RunScript вручную (раньше я не понимал, зачем нужна эта кнопка в текстовом редакторе Блендера, теперь дошло, радость-то какая, можно было бы и раньше поинтересоваться).
Сам код был составлен denis8424 в ответ на мои неуклюжие попытки чего-то изобразить самому.
import bpy

scene = bpy.context.scene

for ob in scene.objects:
    if ob.layers[scene.active_layer] == True and ob.name != 'Camera':
        newName = 'prefix' + ob.name.split('.')[0]
        ob.name = newName
        ob.data.name = ob.name

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

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

Структура имени исходного меша:
"сокращенное название семейства" + "сокращенное название детали"
Пример: FLM_FldL0_ - Fulcrum("FLM") + Fold("Fld") + Left("L") + 0
Означает МиГ-29, створка шасси, левая, номер ноль

Структура имени вызываемого на замену меша:
"сокращенное название семейства" + "сокращенное название детали" + "модификация юнита" + "национальность юнита"
Пример: FLM_FldL0_MiG-29A_IrAF_ - Fulcrum("FLM") + Fold("Fld") + Left("L") + 0 + MiG-29A("MiG-29A") + IrAF("IrAF")
Означает МиГ-29, створка шасси, левая, номер ноль, МиГ-29А, ВВС Ирака

В состав имени вводится разделитель "_" - для удобства

Название семейства задается заглавными латинскими буквами, и представляет собой сокращение от натовской кодировки
военной техники (примечание: для наземки можно и так - Т72, Т62, М1А и так далее).

Список сокращений

Семейства ЛА:
FSC - Fresco - МиГ-17
FAM - Farmer - МиГ-19
FLM - Fulcrum МиГ-29
FLG - Flogger МиГ-23/27
FXB - Foxbat МиГ-25
FLN - Flanker Су-27
FRF - Frogfoot - Су-25
FNR - Fencer - Су-24
FBD - Fishbed - МиГ-21
FRA - Fitter Су-7
FRB - Fitter Су-17/20/22
EGL - Eagle F-15
FFL - Fighting Falcon F-16
TMT - Tomcat F-14
TGR - Tiger F-5
PNT - Phantom F-4
VDO - Voodoo F-101
ARR - Aardwark F-111
SKW - Skyhowk A-4
SKR - Skyrider A-1
INR - Intruder A-6
TND - Thunderbolt A-10
TCF - Thunderchief F-105



Детали юнитов
Trr - Turret - башня, турель
Cnn - Canon - пушка, ствол, ПУ
Crp - Corpus - корпус
Cnp - Canopy - фонарь кабины
Arb - Airbrake - воздушный тормоз
Slt - Salaty - предкрылок
Flp - Flaps - закрылок
Fln - Flaperon - флаперон
Inp - Interceptor - интерцептор
Fus - Fuselage - фюзеляж
Wng - Wing - крыло
Cns - Consol - консоль крыла (поворотная)
Rdd - Rudder - руль направления
Fld - Fold - створка шасси
Aln - Ailieron - элерон
Elv - Elevator - руль высоты (стабилизатор)
Cck - Cockpit - кабина
Whl - Wheel - колесо

Собственно, принцип построения юнитов и их поведение в игре здесь и приведены. Добавлю только, что в связи с ненужностью в игре практически все время деталей шасси с их анимациями, они будут подгружаться лишь при выполнении взлета или ипосадка. Также для экономии ресурсов сама модель может быть анимированной детализированной (вблизи, когда можно разглядеть работу элеронов, рулей и прочей механики) и детализированной, неанимированной (по сути - один объект - вся механика объединена с фюзеляжем в один меш) - это для тех случаев, когда самолет можно рассмотреть довольно подробно, но работа его механизации практически незаметна. фактически создаются две системы детализации, третья - отдельная система - это детали шасси, она стоит особняком, когда используется - писал выше. И к этому стоит добавить "чистый" лоуполи LOD - очень грубо изготовленный меш, скорее напоминающий силуэт, который используется на больших дистанциях, где самолет выглядит либо точкой, либо черточкой или какой-то серо-черной тенью. Большаую часть времени в игре юнит проводит именно так. Или на совсем уж больших дистанциях, надобность даже в этом отпадает - хватит и треугольника.
Во второй версии создается с нуля сама архитектура игры. Она планируется более гибкой, с возможностью добавления дополнений и модов. К тому же, опять же с целью экономии ресурсов, планируется загрузка конкретных объектов, а не всего пакета вооружения, например. Зачем нужна масса ракет и бомб, если в данной миссии используется два-три типа из сотни?
Кстати, об оружии. созданный мною для первой версии пакет вооружения был проверен на замену мешей, ошибок выявлено не было, поэтому последовало его "дробление" на отдельные папки типа R-27R, R-13S, AGM-65E, AIM-120C-5  и так далее. Имя им легион - набор вооружения был резко расширен, особенно в части крылатых ракет, наших и иностранных.
Та же процедура планируется в отношении пилонов подвески вооружения для самолетов и вертолетов, контейнеров постановки помех и других "суб-объектов". Да, количество файлов возрастет весьма резко, но не составит труда легко добавить или заменить любую пеапку (если придерживаться некоторых правил, естественно, которые еще только создаются, кхе-кхе).
И вот тут началось самое интересное. Я обладаю несомненным талантом создавать проблемы на ровном месте, где их по определению, вроде не должно быть...
Для управления всей этой армадой файлов во второй версии крайне необходим алгоритм поиска файлов и путей к ним. Казалось бы, функция listdir  в модуле os - наше все. Увы... denis8424  в своем боле кратко выразился насчет "слэшей не этой системы в Винде". Я поражаюсь его терпению. Переписка была весьма оживленной. Сначала моя Винда тупо повторяла, что файлы не найдены. Разобрались - пути к файлам в Винде  с одной стороны и во всех прочих (!) с другой отличаются разными слешами - с наклоном влево (Винда, прямо левацкий уклон, троцкизм какой-то, 58-ая статья) и нормальным правым наклоном (нормальный рабочий почерк человека с наклоном вправо, встречаются, правда некоторые личности, у которых наклоны могут быть и вправо и влево - видел сам, но не будем о грустном). - это Линукс и прочие FreeBSD. После правки скрипта Винда узрела объекты для поиска и.. отказалась их идентифицировать! В ее интерепретации - это не файл, не папка и не ссылка. На вопрос, заданный мною в монитор: "А что это вообще такое?", ответа, понятное дело не последовало. неведома звершка, не иначе. Чебурашка. Fuck Windows! Проблему опять решил denis8424, з0а что я ему весьма благодарен. http://denis8424.blogspot.ru/
Фактически, на его скрипте и будет держаться вторая версия. На базе этого скрипта планирую создать инструменты обновления, меню, подгрузки объектов, защиту от ошибок... Не моделями и не графикой едиными жива игра. Хотя и они важны, не скрою.
Все это время с перерывами, пилю модели для второй версии. часть, конечно, будет взята из первой версии, но часть будет либо обновлена либо создана заново. Сегодня вот, взялся за Су-30МК. пока показывать особо нечего, там идет процесс ретопологии, сама модель не моя, пак с ними выложил человек в далеком 2003 году.  В паке, который я, по своей хомячиной природе, заначил еще пару лет назад, есть Су-27, Су-33, Су-27ИБ (ныне Су-34), расшивки на них нет, если рассматривать вблизи, то видна "покорябання2 сетка - неровная, явно со следами булевых вырезаний, полигонов гораздо больше, чем нужно, но это не брюзжание - это превосходная исодная модель для создания своих юнитов. к тому же, в отличие от того же МиГ-23, Су-17, МиГ-21 и еще многих машин, наших или иностранных, для новейших "Сушек" нет чертежей с поперечными сечениями. А без них строить модель сложнее на порядок. Но вообще, по замыслу, в игру можно будет вставить все что угодно, соблюдая простенькие правила. Так и до наземки можно добраться. или в космос слетать... Ладно, надеюсь, у читающих сей опус, хватило терпения дочитать его до конца, да и не стоит сильно предаваться мечтаниям, хотя мечтать вроде и не вредно... Да еще и прошлый пост по ирано-иракской надо доделывать - картинки искать и детали уточнять. 




Комментариев нет:

Отправить комментарий