Показаны сообщения с ярлыком low-poly. Показать все сообщения
Показаны сообщения с ярлыком low-poly. Показать все сообщения

пятница, 10 июня 2016 г.

Явно верной дорогой идем, товарищи...

Есть какая-то мистическая взаимосвязь между успешным кодингом и отключением света в моем доме... уже давно заметил, чт стоит создать солидный кусочек нового кода и приготовить солидный задел на будущее, как наши доблестные энергетики гасят свет. Причем надолго. Бывает это нечасто, но совпадения с успешным продвижением  по проекту настораживают)))... Как это было вчера. После некоторой возни я отладил пуски НАР, одиночные пуски ракет типа "воздух-воздух" и приготовился реализовать пушечный огонь, как последовало отключение (давненько такого не было, чтобы на 8 часов). В иоге вчерашний день был потерян.
Сегодня опять занялся оружием и сделал огонь из пушки. А к аркетам присобачил факел огня. Ничего особо сложного там не оказалось, разве что отработал вызов функций из другого скрипта - примитивно, но работает. В начале работающего скрипта пику - import moduleclass
А потом в нужном месте - moduleclass.blablabla(). То есть пишу, какую функцию надобно использовать из загруженного модуля moduleclass. Как всегда, нужные мысли не всегда приходят в нужное время. Что мешало в первой версии  таким образом разбить на функции хотя бы тот же искусственный интеллект ботов и спокойно вызывать нужную функцию в зависимости от ситуации? Но лучше поздно, чем никогда... Пока у меня таким образом работают функции сброса и пуска, плюс функции смены оружия, я сейчас пока стараюсь побыстрее создать "скелет" игры, создавая код в меру своего умения и сопровождая его подробным комментарием, чтобы потом при совершенствовании не вспоминать, чего я там нагородил. ну и стараюсь, чтобы объем поменьше был у пускового файла.  Относительно недавно один пользователь БУ, с которым я списался в ВК, любезно продемонстрировал мне, как можно мыслить абстракциями и что из этого можно извлечь. С помощью Питона. Результат впечатляющий, и, после завершения работы над основной частью кода, я, скорее всго, начну пробовать 2мыслить абстрактно", что должно привести к резкому сокращению кода и должно повысить скорость. К тому же он меня предупредил, что реализованный в БГЕ ныне метод мутации объекта (после создания класса) не совсем оптимален и может вызвать утечку памяти при определенных условиях.  Если честно, я пока в мутации разбираюсь слабо, но это дело придется поправлять.
Пока что на данный момент имеем пуски неуправляемых ракет, сбросы бомб, и пуски пока еще болванок, которые должны стать управляемыми ракетами. Плюс пушка. Из крайне неоходимых операций добавления объектов мне осталось реализовать алгоритм отстрела тепловых ловушек, а также дымные следы. Есть предположение, что можн7о будет добавить дымные шлейфы и к НАРам, от которых я был вынужден в первой версии отказаться. Есть у меня анимированная текстура длинного дыма, которую я и использую. Частица дыма для НАР будет одна- ее длина будет расти сообразно скорости ракеты,а потом частица будет 2отцепляться" от ракеты с исчезновением факела огня и быстро таять... Таким образом, БГЕ не должен сильн перегружаться при массовых пусках ракет. Что касаемо УР большой дальности, то для них дымный след останется тем же, но в алгоритм добавления частиц дыма будет добавлено выставление длины частицы сообразно скорости ракеты. Также это правило будет действовать и для отстреливаемых ложных целей 9ловушек). В первой версии неестественность дыма бросалась в глаза на малых скоростях самолета. К тому же УР будут набирать скорость слежения за целью плавно, а не рывком, как в первой версии - из-за этого "ломаность" линии дыма также бросалась в глаза.
После завершения работы над отстрелом ловушек и дфмами можно будет приступать к возвращению и совершенствованию самонаведения для ракет, а потом очередь дойдет и до бронепробиваемости под разными углами для разных типов снарядов... Работы много еще. а вот после завершения "скелета" игры и отработки взаимодействия объектов уже можно клепать модели и разнообразить технофауну. В первой версии примерно так и было, с той лишь разницей, что новые объекты там добавлялись с большим скрипом. Надеюсь, в этот раз такого безобразия не будет.
А теперь - красивые картинки (ну как красивые, довольно приешиеся, поди уже, с пустнным пейзажем и МиГ-23)...

 Пуск Р-23Р

 Пушечный огонь






 Залп НАРами
 Сброс бомб

четверг, 28 апреля 2016 г.

Горячая пора-4. Кувалдой и напильником обретешь ты право свое...

Столь вычурным названием этот пост обязан  долгим и не сказать что удачным поискам решения по загрузке и расстановке юнитов, а также раздаче им стартовых характеристик. После серии обломов пришел к тому, что теперь юниты грузятся путем просмотра многомерного списка типа:
generationList = [['2','UnitAir','red','Yes','MiG-23MF','Libya','FuelTank-3_R-23R_R-13M','Intercept','4','300.0_200.0_1500.0','0.0'],
                      ['2','UnitAir','red','Not','MiG-23MF','Libya','FuelTank-3_R-23R_R-13M','Intercept','4','1000.0_200.0_1500.0','0.0']]

Часть данных, судя по всему придется либо трансфорировать, либо просто выкинуть, но девять десятых из этого списка останется, наверное.
Из этого мегасписка, который будет выглядеть куда как пострашнее (а ведь здесь всего-то два самолета), извлекаются циклом по отдельности вложенные списки, которые я обозвал кластерами (надо же как-то выпендриться). Далее из кластера извлекаются и используются данные, причем иногда их надо преобразовать. Если учесть, что эта операция с небольшой натяжкой - одноразовая и используется только лишь при старте игры, тог тормозить она не должна (при старте игры и так есть закономерное подвисание при подгрузке ландшафта (что я наблюдаю во вполне "фирменных" играх тоже).
Далее я долго ломился в открытую дверь... Изощрялся в вызовах функций, модулей, классов, плохо в этом соображая и не понимая, что это совсем необязательно. В конце концов после отработки генерации на подвесках всего, что требуется (прошлый пост), пришел к более простому и универсальному способу. В каждую папку с юнитом суется файл с названием типа MiG-23MF_Libya_INI.txt, где содержится записб на первый взгляд непонятная, однако если читать скрипт, который занимается извлечением и применением данных из этого файла, то не такая уж и непонятная. Сам файл имеет вид типа:
#Технические характеристики
T|694|17500|220|0.8|1.3|0.3|1.0|0.14|4|12.5|1.8|4090.0|400|10000.0|E_|7400|FLG_|1.1|1.1|W\n
#Характеристики БРЭО
E|45|60|1.8|1|0.75|0.1|0.3|15|W\n
#Размещение камеры летчика в кабине
D|0.0|3.0|0.56|W\n
#Размещение пилота
O|PilotRus|0.0|2.85|0.25|W\n
#Бортовые номера
N|b_|6901,6902,6903,6904,6905,6906,6907,6908,6910,6911,6912,6913,6914,6915,6916|W\n
#Один топливный бак
P|0|FuelTank-1|FLG_FuelTank_Center_|0.0|-1.13|-1.04|0.8|0.05|W\n
#Пара топливных баков
P|0|FuelTank-2|FLG_FuelTank_Wing_|-2.67|-1.76|-0.1|0.8|0.05|W\n
P|0|FuelTank-2|FLG_FuelTank_Wing_|2.67|-1.76|-0.1|0.8|0.05|W\n
#Три бака
P|0|FuelTank-3|FLG_FuelTank_Center_|0.0|-1.13|-1.04|0.8|0.05|W\n
P|0|FuelTank-3|FLG_FuelTank_Wing_|-2.67|-1.76|-0.1|0.8|0.05|W\n
P|0|FuelTank-3|FLG_FuelTank_Wing_|2.67|-1.76|-0.1|0.8|0.05|W\n
#ПЕРВАЯ ПАРА ПОДВЕСОК
#Ракеты Р-24Р
P|1|R-24R|FLG_APU23_|0.005|W\n
P|1|R-24R|R-24R|-1.428|-2.0|0.03|-0.035|0.0|0.0|1|0.02|W\n
P|1|R-24R|R-24R|1.428|-2.0|0.03|-0.035|0.0|0.0|1|0.02|W\n
#Ракеты Р-24РМ
P|1|R-24RM|FLG_APU23_|0.005|W\n
P|1|R-24RM|R-24RM|-1.428|-2.0|0.03|-0.035|0.0|0.0|1|0.02|W\n
P|1|R-24RM|R-24RM|1.428|-2.0|0.03|-0.035|0.0|0.0|1|0.02|W\n

В файле перечислены варианты подвесок самолета, его пилоны для этих подвесок, координаты и повороты подвешиваемых объектов, а также всякие мелочи вроде лобового сопротивления, веса горючего в баках  и так далее. Но перед этим расписаны технические характеристики самолета, его особенности, вроде типа используемого шасси или названия семейства. Плюс положение летчика, положение камеры в кабине, характеристики бортовой электроники и так далее. Все это буду расписывать в следующих постах, по мере "введения в строй" бортсистем. Добавлю только, что предусмотрены "мертвые зоны" для РЛС (БРЛС "Фантомов", "Томкэтов", МиГ-23М, МиГ-21МФ например весьма плохо видят цели на фоне земли и не могут их захватить, зато радары МиГ-23МЛД, Ф-15, МиГ-29, не говоря уж о Ф-22 и "Тайфунах", отлично видят и сопровождают низколетящие цели), параметры устойчивости к помехам и так далее. в перспективе думаю возможно реализовать так называемую "уводящую помеху" для УРВВ с РГСН, до которой дело так и не дошло в первой версии, как и до контейнеров РЭБ, которые и будут эту помеху устраивать. Вообще во второй версии имитацию электроники юнитов постараюсь сделать гораздо более продвинутой.
Ладно, это погтом, и вообще, "гладко ьыло на бумаге", вернемся к нашим баранам...
В игровой сцене есть такой объект Generator, который является "внуком" двигателя. "Внучок" проживает недолгую, но очень насыщенную жизнь, прочитав файл с текстовыми данными и ударными, прямо-таки стахановскими методами генерируя и развешивая на своего "папу" (потомка двигателя, так сказать, в первом поколении) плейны, меши которых меняются на меши пилонов, ракет, бомб и баков. Заодно он "наставляет на путь истинный" своего "деда", выставляя и подправляя ему вевозможные проперти вроде угловых скоростей, высотности, угла обзора радара и так далее. Такой вот сознательный товарищ. после чего исчезает.
Выглядит это примерно так:
#Открываем файл инициализации юнита       
        directClass = open(bge.logic.expandPath('//Aircraft/' + typeUnit + '/' + typeUnit + 'INI' + '.txt'),'r')
       
        #то заглядываем в файл
        for string in directClass:
             #Срез строки по маркеру |
             config = string.split('|')
             #Эта строка, с начальным символом # - комментарий и ее читать не надо
             if config[0] == '#':
                 continue
            
             #Эта строка - технические данные летательного аппарата
             elif config[0] == 'T':
                 own.parent.parent['speedMax'] = int(config[1])                  #Максимальная скорость
                 own.parent.parent['heightMax'] = int(config[2])                 #Максимальный потолок
                 own.parent.parent['speedVert'] = int(config[3])                 #Максимальная вертикальная скорость
                 own.parent.parent['angX'] = float(config[4])                    #Максимальная скорость тангажа
                 own.parent.parent['angY'] = float(config[5])                    #Максимальная скорость крена
                 own.parent.parent['angZ'] = float(config[6])                    #Максимальная скорость рыска
                 own.parent.parent['startSpeed'] = float(config[7])              #Стартовый коэффициент скорости
                 own.parent.parent['rotatDyn'] = float(config[8])                #Угловое ускорение
                 own.parent.parent['dvigDyn'] = int(config[9])                   #Динамика(приемистость) двигателя

Сам скрипт вроде и длинный и преобразования строковых величин опять же. Да, xml, наверное было бы получше, но, как сказать... Из-за тегов возрастет объем, а если учесть, что таковых текстовых данных очень много... Проще уж повозиться со скриптом в самой игре, чем подгонять друг под друга новые и новые xml, да и данные в txt четко укладываются в строчки, не занимая много места.
И самый убийственный довод - c TXT я работать умею, а с xml - нет, увы... Пока, надеюсь... мне надо было сдвинуть с места застопорившую было работу и это все-таки удалось.
Из этого способа генерации меня пока все устраивает, осталось доделать массу для подвешиваемых объектов (она у меня играет большую роль, сильно влияя на маневренность), а также продумать, каким образом надо производить отстрел ловушек и стрельбу из пушки. Для сброса бомб и пуска ракет все более-менее понятно, а вот для пушки и ЛТЦ надо придумать новый способ.
Кстати о массе. В конце концов я привел все массовые характеристики к тоннам. Вес самолета, топлива, оружия - если в кг - загромождение идет большими цифрами. А так - максимум - сотнями приходится опернировать, а не сотнями и десятками тысяч.
В общем после грубой подгонки началась более тонкая работа - шлифовка и "достраивание" для летательных аппаратов. Выясяется, какие проперти и для чего нужны, как их использовать и так далее. Постепенно надо изобретать способ формирования стартового мегасписка и уточнять, какие параметры нужны во вложенных списках.
Результат  последних дней и часов работы - МиГ-23МФ с тремя ПТБ, бортовым номером, ракетами и летчиком в кабине (заодно привел к единому стандарту кокпиты МиГ-23БН и МФ):

  

воскресенье, 17 апреля 2016 г.

Горячая пора-3. Танцы с бубном.

Начнем с цитаты. Она подходит к нынешнему положению дел.
"""– Интересная работа?
– А разве бывает неинтересная работа?
– Да, конечно… И чем же вы занимаетесь?
– Я занимаюсь структурным анализом. Но учтите, Саул, я отрешился от земного. Давайте я расскажу вам еще что-нибудь про тахоргов.
– Да нет, благодарю вас, про тахоргов не надо. Лучше расскажите, как вы работаете.
– Саул, я же сказал, что отрешился.
– Ну как же это так – отрешился? Что же, вы теперь совсем не думаете о работе?
– Наоборот. Все время думаю. Я всегда думаю о той работе, которой занят в данный момент. Сейчас я суперкарго и второй пилот – это на тот случай, если у Антона вдруг случится отложение солей. Впрочем, об этом я, кажется, уже… Так вот, мне сейчас очень хочется пойти и немножко поводить «Корабль».
– Да вы еще успеете поводить! И потом я прошу рассказать не о сущности вашей работы, а о внешней форме, так сказать… Вот вы приходите на работу. Обычные трудовые будни…
– Хорошо. Будни. Я ложусь на вычислитель и думаю.
– Ну-ну… Постойте – на вычислитель? Ну да, понимаю. Вы лингвист, и вы ложитесь на… И что же дальше?
– Час думаю. Другой думаю. Третий думаю…
– И наконец?..
– Пять часов думаю, ничего у меня не получается. Тогда я слезаю с вычислителя и ухожу.
– Куда?!
– Например, в зоопарк.
– В зоопарк? Отчего же в зоопарк?
– Так. Люблю зверей.
– А как же работа?
– Что ж работа… Прихожу на другой день и опять начинаю думать.
– И опять думаете пять часов и уходите в зоопарк?
– Нет. Обычно ночью мне в голову приходят какие-нибудь идеи, и на другой день я только додумываю. А потом сгорает вычислитель.
– Так. И вы уходите в зоопарк?
– При чем здесь зоопарк? Мы начинаем чинить вычислитель. Чиним до утра.
– Ну, а потом?
– А потом кончаются будни и начинается сплошной праздник. У всех глаза на лоб, и у всех одно на уме: вот сейчас все застопорится, и начинай думать сначала.
– Ну, ладно. Это будни. Однако же нельзя все время работать…
– Нельзя, – сказал Вадим с сожалением. – Я, например, не могу. В конце концов заходишь в тупик, и приходится развлекаться.
– Как?
– Как придется. """
А. и Б. Стругацкие "Попытка к бегству"

Дорого бы я дал за такую возможность валяться на вычислителе и думать. Имеется в виду, конечно квазибиологический комп с мыслеуправлением. Глаза не напрягать, на скрипящем и кряхтящем раздолбанном кресле не сидеть...
Иногда я бываю непробиваемо тупым. Особенно, если начинаю освоение чего-нибудь нового. Потом, как обезъяна, начинаю копировать и ставить что-то уже наработанное, но не понимаю до конца, как оно работает. Потом следует "щелчок" и новая порция навыков укладывается в москХ. При этом я вполне способен вынести мозг тем, кто меня наставляет на путь истинный. Те, кто читает эти строки, наверняка поймут, о чем речь...
В прошлом посте я выложил куски кода по стартовой загрузке семейства МиГ-23/27. Осталось дело за малым - научиться не только генерить объекты, но и менять им меши. После серии брани со стороны консоли об отсутствующих мешах и неправильных путях и опечатках, наконец свершилось страшное. Стали генериться и появляться подвесные баки. Повернутые на 90 градусов. Долго мне еще будут икаться "проклятые Блендером меши". При импорте файла в формате обж внешне все выглядит благопристойно, но нельзя забывать, что в графе "поворот по Х" стоит 90 градусов. То же самое случилось с пилонами. Исправил. Баки есть, бомб и остального нет. Опять начал танцевать с бубном. Принтом вывожу список потомков. Есть. Пути к мешам (блендам)? Правильно, все на месте. Где оружие?! Принт в файл контроля юнита на игровой сцене. Что за хрень? Только баки! открываю скрип генерации объектов в "самолетном файле". Диагноз серьезен, прогноз печален. Припаренчивание мешей ракет и бомб идет к самому генератору, который исчезает, выполнив свою миссию. а надо цеплять к родителю генератора - фюзеляжу. Добавляю .parent к self. Открываю игру, запускаю. ура! Все на месте. Но... А где левый блок с НАР? Ну да, конечно, там парент не проставлен... Исправил. Снова запуск и я вижу МиГ-23БН в полном обвесе - три ПТБ, по паре Б-8, ОФАБ-20 и ФАБ-100. Слава Высокому Небу!
Вообще-то я рассчитывал генератор объектов сделать единым в игровой сцене, но при вызове класса там встречаются свои нюансы - имя класса надо формировать с помощью модуля sys. А кроме этого, есть еще функция самого класса. Вчерашний вечер был убит на попытки изощриться и сделать подобное. Заодно чуть не был сведен с ума мой добровольный помощник (да и я сам чувствовал себя не очень ... комфортно). В итоге пока сделал загрузку оружия старым способом через генератор в самом самолетном файле. Есть у меня подозрения, где я мог лопухнуться, но пока еще не проверял. может и не лопухнулся, а просто честно ломился в открытую дверь (так уже бывало - смотрим посты по разметке квадратов ландшафта).
Ну а пока что имеем  полный обвес, и способ генерации, по-видимому, будет изменен еще раз. Путем загрузки данных из тестового фала со всеми координатами, поворотами, массой, лобовым сопротивлением... вот так вот рождаются и мгновенно устаревают файлы. Результат этого устаревшего файла:

среда, 13 апреля 2016 г.

Горячая пора. Или опять "проклятые Блендером" меши.

Как-то незаметно подошло время подвешивать оружие. Пока не стреляющее. макеты, если угодно. Некоторое время пришлось потратить на то, чтобы уяснить алгоритм генерации оружия на подвесках и сами пилоны. Само оружие и пилоны, хотя и не имеют много поликов, но все же не плейны и тратить время на просчет невидимых с большого расстояния мелких объектов не хочется. Также не хотелось оставлять висящей мертвым грузом одноразовые кирпичи логики. Сначала было искушение сделать некий единый для всех генератор, но при импорте класса, насколько я понимаю, фокус с формированием имени импортируемого модуля не пройдет, во всяком случае, рисковать я не стал.
Я просто сделал объект с названием типа Generator_MiG-23BN_ в самом подгружаемом файле, поместив плейн на неактивный слой. Жить ему недолго - по окончании загрузки он удаляется. Но перед этим он добавляет и цепляет к своему родителю ("центру юнита", он же "бортовой номер")  плейн. Так называемый "универсальный меш" - и название у него такое же, только на инглиш. Заодно генератор добавляет мешу свойство weapon, если это оружие и общее для все таких объектов проперти meshes. В этом проперти указывается название меша, котороый должен проявиться при высоком уровне детализации. Заодно внес изменения в скрипт контроля состояния детализации юнита - с учетом нового имени UniversalMesh. После "подчистки" скрипта генерации от ошибок и опечаток был обруган консолью. Опять выползла та самая ошибка в мешах МиГ-23. Опять придется проводить лечение экспортом-импортом в формате obj. Вроде бы это последние 2осколки" от старого "зараженного" файла. Который, очевидно, за что-то был проклят Блендером и БГЕ.
Теперь у двигателя самолета присутствует лишь одно свойство для подвесок - pointWeapon, оно строковое и имеет вид типа: PTB-3_B-8_OFAB-250_FAB-100_. При помощи функции split('_')[индекс число]  происходит сортировка данных в проперти и мы получаем список вооружения для юнита. И вообще все подвесок. Первое значение зарезервировано  для топливных подвесных баков, далее идут уже названия подвесок вооружения на пилонах. Сами пилоны жестко прописаны в классе генерации, в самом подгружаемом бленде юнита, что исключает ошибки после отлаживания скрипта при его использовании, заодно освобождает от лишних проперти типа pilon.
Скорее всего, свойство pointWeapon я перенесу на сам генератор, а на движке самолета проперти уберу. Сам принцип пуска будет отличаться от ранее принятого. Не будет проперти pusk, команда на отсоединение и запуск нужного оружия будет будет подаваться прямо на нужный объект-потомок. Принцип формирования списков имеющегося оружия по значению класса weapon останется, этот метод себя вполне оправдал в первой версии. Информация об используемом оружии будет также передаваться на оверлейные сцены напрямую - непосредственно текстовому объекту - нет смысла держать в глобальном словаре "малоподвижные" элементы.
Заодно выяснилось, что сделанные мною зеркала не кушают много логики, если задать разрешение отрендериваемой видеотекстуре 128. Даже на 256 в принципе - терпимо - 25 процентов. При 128 - вообще 6 процентов. Так что пока зеркала в кабине оставлю в покое.
Остается дописать скрипт генерации и расстановки объектов, используя ранее написанные модули для самолетов в первой версии - это касается всех машин. Стартовые позиции и углы наклона для ракет и бомб уже давно прописаны, что сэкономит время.
В заключение - скрин МиГ-23БН с подвешенными блоками Б-8. Серый пилон подвески и стал той причиной, которая заставила ругаться консоль. Будем лечить...

пятница, 30 октября 2015 г.

Укрощение мустанга.

Произошли очередные дополнения в проекте. По просьбам трудящихся был введен аркадный режим. я не силен в терминологии, возможно, этот режим можно было бы назвать "игрой от третьего лица". Игрок может по-прежнему управлять самолетом, но видит он его сзади с хвоста. Такое кже можно было видеть и раньше при соответствующей настройке положения камеры внешнего вида. Но сейчас речь идет о жестко закрепленной камере, из которой можно наблюдать упрощенный аркадный кокпит. Авиагоризонт, тангаж, радар, скорость, тяга, высота, топливо - вот, собственно и все, что нужно в этом режиме, да и в самой игре по большому счету, тоже. Долго воевал с настройкой радара, а затем еще и с метками целей. Была поставлена задача - обозначать присутствие в воздухе как своих, так и чужих, причем обозначать текстовыми метками с названиями типов юнитов. С некоторым скрипом  эта задача была решена. Далее по уже проторенной тропке прошла установка меток захвата и разрешения пуска. Сделаны они были наспех, в виде крестиков, но заменить их на что-то получше - дело несложное.

А затем пришел черед джойстика. Опыта с работой этого сенсора у меня нет, долго подбирал, что же можно использовать из переменных и функций, привязанных к этому девайсу, denis8424 навел на пару страниц с АПИ Блендера и туториалам по нему же. Пришел у выводу, что проще всего в моем проекте пока использовать axisValues, который выдает направления наклона джойстика и степень его наклона, кстати, тоже.
Первая попытка закончилась ничем - самолет вел себя, как взбесившийся мустанг и нормально летать не хотел - срывался в штопор, терял скорость и падал.Прикол в том, что я режим штопора давно убрал (надо продумать его возвращение, что ли), но картинка была схожей. После серии манипуляций и экспериментов с кодом что-то стало получаться - самолет еще не всегда послушен игроку, но, по крайней мере, "привести его в чувство" теперь труда не составляет. Доработки, конечно, еще будут...
Помимо всего этого почти добил кабину МиГ-29, но застрял опять же на ИЛС и мелочах, вроде зеркал, к тому же еще и возился с джойстиком и аркадным режимом. Немного усовершенствовал работу ТВ-прицела, теперь там работает "цветность" - ввел управление составляющими цветов монитора - красный-зеленый-синий. Пока не особо впечатляло, хотя изменения при "подкрутке верньеров" есть, но не удалось прикрутить ночной режим.
В качестве референсов закачал гугловские модели военной техники (в основном БТТ), пробовал импортировать в Блендер модели Коллады, качество, конечно, так себе, но за основу сойдут.

вторник, 6 октября 2015 г.

МиГ-29. Кабина и ее правые пульты.

Заствил себя взяться за приборную доску "девятки".  Все дело в том, что ее облик довольно своеобразен. И вызвано это своеобразие правыми пультами - боковым и нижним. Особенно нижним. 
До сих пор создаваемые мною кабины были относительно просты, и их сетка очень перостой - "рубленой" почти всегда из прямых углов и линий. все боковые пульты четко делились на верхние и нижние - которые можно было изобразить одним плейном. Да, разумеется, кокпиты не претендуют на абсолютную идентичность в плане сетки - потому что моделирование каждого тумблера и циферблата позволили бы получить шикарный кокпит, лет этак через пять... плюс вглухую бы завис БГЕ и не только он. может быть, квантовые компьютеры решили бы эту проблему, но что-то мне подсказывает, что их появление будет отложено, как появление работоспособного термоядерного реактора. Если мне не изменяет склероз, то после появления первых экспериментальных ТОКАМАКов их появление предрекали в начале 21 века, потом сроки сдвинули на тридцатые годы, а теперь вот на одном из форумов прочел, что сдвинули на сороковые... Жаль.
Но это все эмоции. Теперь по делу. После нескольких попыток сделал пульты с текстурами приборов МиГ-29, повозился с разверткой, "пристраивая" ее, как всегда делаю. Потом впал в ступор. смотрел чертежи (схематические) - вроде бы все понятно. стал смотреть фотографии. Фотографий именно правых пультов почему-то меньше в разы. И после их просмотра расположение пультов понятным быть перестало... Отсмотрев кучу фото, даже не вполне удачных, наконец нашел фото правого пульта из какого-т сима (так обрадовался, что даже не стал смотреть, откуда именно). Поняв принцип, как оно смоделено - быстренько на скорую руку расположил пульты относительно друг друга. Впереди - моделирование фона для них и двигание групп вершин взад-вперед относительно камеры пилота. Чтоб закрыть все несообразности и "дырки". правый нижний пульт МиГ-29 во-первых, расположен под некоторым углом относительно летчика (это еще полбеды), во-вторых, его левый угол (ближний к ноге летчика), "срезан" и этот треугольный участок находится ниже основного пульта, да еще и "выпрямлен". Сам пульт  к тому же еще и "завален" внутрь - чтобы, видимо, было удобнее рассматривать показания приборов и орудовать кнопками и тумблерами - пилоту и технику. Впрочем, слов описать все это безобразие все равно не хватает, поэтому привожу скрин.  Пока лишь прикидка взаимного расположения. Но "карман" уже можно рассмотреть.

Только хардкор, товарищи! в таком вот аксепте... (С)


четверг, 1 октября 2015 г.

И тогда они отмораживаются...

https://yadi.sk/d/Uf_VyC-afW5z7

Заголовок довольно точно передает изменения в поведении ботов, которые наступили после очередной реформы их искусственного интеллекта. После некоторой возни была реализована возможность для ботов в ближнем бою щедро использовать ракеты ближнего боя с тепловой головкой самонаведения. Ранее поведение ботов в ближнем воздушном бою было более примитивным. Они гонялись за выбранной целью, причем делали это упорно, изредка переключая свое внимание на других оппонентов. К тому же, пока были в наличии УР с радийными ГСН, они не использовали весь остальной арсенал. Теперь же боты время от времени проверяют нахождение ВСЕХ противников относительно себя и своих тепловых ракет, а также, если ракеты невсеракурсные, то еще и проверяют, под каким углом повернут противник к ракете. При этом как бы появляется "дополнительная" цель, ее индекс никак не учитывается в проперти бота, что не мешает ему отстреляться по не вовремя подставившемуся противнику ракетой по принципу "пустил-забыл". В результате резко возросли суммарные потери сторон, как-то раз из 24 машин осталось только 7.
Были проведены работы по доработке кокпита Су-25 - заработала индикация прицела, СПО, повреждений, оружия, боекомплекта и подвесок.
Попутно было сделано так, что ракеты теперь не генерируют дым, не находясь в поле зрения камеры (активной). Потому как их след заметить не всегда возможно, а лишняя трата БГЕ на добавление объектов, которых ты все равно не видишь, не имеет смысла, особенно, если они находятся у тебя за спиной.
Сейчас необходимо заняться расшивкой текстуры истребителя МиГ-29 и кокпитом для него же. Таким образом, после завершения работы над МиГ-29 из самолетов "первой волны", доступных для игрока у меня останутся МиГ-21бис и Су-27. Что касаемо моделей, то МиГ-21 требует сейчас доработки фонаря и козырька кабины, плюс руль направления с законцовкой киля. Там еще придется повозиться. 

четверг, 24 сентября 2015 г.

Точка опоры. "С колес" - в бой.

Вчера завершил работу над "скелетом" Миг-29 и спешно попытался придать более-менее законченный вид текстуре для Fulcrum-a (Fulcrum - точка опоры, натовское обозначение МиГ-29). Речи о мгновенном завершении "расшивки" бытиь не могло - это дело нескольких дней минимум, и без нее самолет смотрится неестественно. Однако уж очень хотелось опробовать как сам МиГ-29, так и ракеты Р-27 в игровом процессе. Поэтому, закончив именование деталей 29-го и проверив его модуль в скриптах, заменил прикрытие в миссии "Штурмовка" с МиГ-23МЛД на МиГ-29. После чего пошел процесс подключения - проверка на ошибки и недостачу элементов. На удивление, процесс прошел довольно быстро и гладко и скоро я внимательно наблюдал на мониторе за новым юнитом.
МиГ-29 четко использовали свои Р-27Р, имеющие на треть больше дальность пуска, чем Р-24Р, и, как правило, поражали цель. Иногда по одному ф-16 работали сразу две ракеты, и тогда оставшийся добивали пусками Р-73. Истребители вполне нормально маневрировали, сильно вверх брюхом не задерживались и довольно быстро занимали обычное положение, анимации аэродинамических поверхностей работали. Кстати, надо вводить триммирование - то бишь приведение самолета к какому либо положению с помощью триммеров небольших аэродинамических поверхностей. При этом разгружается БГЕ в некоторой степени - анимация аэродинамических поверхностей будет происходить при достижении некоторого порога скорости разворота, заодно исчезнет картинка с "растопыренными" элеронами и рулями при небольших скоростях разворота, когда игроку кажется, что самолет летит по прямой.
На скорую руку сварганил ролик тестироания МиГ-29 и ракет Р-27Р.

вторник, 25 августа 2015 г.

"Грачи" прилетели.

После долгой возни с текстурой Су-25, а особенно, с нанесением рядов заклепок, начался процесс подключения нового юнита. как обычно, вошел на свое место он не с первой и даже не с пятой попытки, хотя и не с двадцатой, как раньше. Последовала выверка имен анимаций, подгонка зеркал и написание кода для удаления лишних зеркал, потому как не только МиГ-23  и МиГ-27 теперь рассекают небо. Но пока еще не выверены все мелкие недочеты и не до конца добита индикация кокпита, но и Flogger-ы тоже не сразу были отлажены, так что и Frogfoot будет доведен.
Была небольшая заморочка с подгрузкой объектов из папок, самое неприятное было то, что при возвращении в игровую сцену и прохождения миссии заново или выбора новой следовало сообщение о том, что "этот файл уже открыт", и игра переставала нормально работать. Пришлось применить "лом", против которого "нет приема". Переход обратно в стартовую сцену стал происходить при рестарте игры, а не при переходе от сцены к сцене. Тестирование миссий и кампаний показало что за один сеанс игры в Блендере вполне возможно пройти и кампанию и миссии несколько раз. Чего я и добивался.
Мой коллега и единомышленник, а по совместительству - и тестер игры, denis8424, утверждает, что игра уже готова и пора мне типа, не скромничать, а заниматься раскруткой игры и прочая прочая. Ну и надобно вносить изменения в страничку гугла, чтоб, значит, сразу знали, с кем дело имеют, да... Придется изучать настройки и возможности. Хотя нет-нет, да и зашевелится червячок сомнения, а надо ли все это... Глядя на сегодняшний безумный мир. стукнет кому-нибудь в башку этакое и прикроют гугл за "моральное разложение граждан" или в "качестве санкций против кровавого режима Кремля". В конце концов, UE недоступен на территории Белоруссии, потому что там правит "последний диктатор Европы". Именно поэтому я отнесся к UE и фирме Epic Games с большим подозрением и ковыряться в этом движке не стал (хотя после переустановки Винды и можно было бы, но решил пока отложить). Да еще и недавно натолкнулся на статью о Гугле, в которой утверждалось, что Google+  себя не оправдывает и поисковый гигант в любой момент может прикрыть лавочку. Ой не хотелось бы...
Впрочем, хрен с ней, с политикой и бизнесом чужих дядей



... 
Теперь пора  готовиться к съемкам очередного ролика, напрягать голову насчет раскрутки проекта и продолжать работы.

среда, 12 августа 2015 г.

Пустыня медленно уходит...

Что бросалось в глаза в моем проекте - так это весьма унылый пейзаж без единого деревца или самого завалящего кустика... В свое время я пробовал качать бесплатные модели деревьев. Их в Сети есть довольно много, но... Все не то... все не так... Одни - не подходят просто с субъективной точки зрения, другие - сильно хайпольные, а третьи - вообще формата max, из-за которого я не скачал так много хороших моделей, да... В конце концов решил заняться программой ng plant, до которой все руки не доходили. Но когда припекло - очень даже дошли. вещь хорошая, годная, хотя к ней, как и к Блендеру, надо привыкать. Первое мое творение сильно напоминало жертву мутаций, да еще и с большим числом поликов, поэтому в истории оно не сохранилось... Второе - было гораздо ближе к жизни, но с чудовищным по моему мнению числом полигонов на один экземпляр - больше полутора тыщ... И в основном, все эти полигоны пришлись на плейны с листьями, причем каждый плейн состоял из сотни таких вот полигонов, хотя прекрасно можно было обойтись и одним поликом на один блок листьев (чего уж там я не так выкрутил в настройках - тайна сия велика есть, поскольку сам не понял). Потом из полученных деревьев (на безрыбье и рак рыба) сотворил лес. Для этого я размножил деревья, расставил их в хаотическом порядке и объединил в один объект. каюсь, получилось что-то около 200 тыщ поликов, но решил проверить БГЕ на долготерпение и поэтому оставил. Только дополнительно сделал ЛОДы - стандартные, блендеровские... И попробовал подключить. Результат оказался странным. во-первых - добавилась только часть объекта (где-то треть, но яточно помню, что по размерам и внешнему виду, что это не весь лес, хотя и проверял, действительно ли я объединил объекты или нет). во-вторых - консоль непрерывно верещала: "Invalid clnors in this fan!". Что сие означает, для меня так и осталось загадкой. Однако никаких проседаний ФПС, тормозов и вылетов не наблюдалось. Пожав плечами, я снова вернулся к ng plant. На сей раз было сотворено дерево в 400 поликов с одиночными плейнами-листями, ствол и ветки получили один материал - коры, а листья - текстуру с альфой - но не просто листьев, а веток с листьями, что создало иллюзию более-менее равномерного их распределения.Результаты эксперимента приведены на скринах - с текстурами и без.

Конечно, не бог весть что, но для заполнения пустынных пейзажей сойдет. А там можно и получше сделать. И вообще, что сразу вспомнился короткий анекдот про баобаб (его, если я доберусь до Анголы, где он вроде иоже произрастает, тоже придется моделить):
-Это неописуемо,- сказала собака, глядя на баобаб.


понедельник, 10 августа 2015 г.

Четвертое видео.

Как и следует из названия, снял четвертое видео. Пока ищу оптимальные способы сохранения и редактирования своих "произведений". На сей раз решил продемонстрировать работу меню и лога. Не обошлось без досадных накладок, но видео все же удалось отснять и сохранить.
Весь день сегодня пилил англоязычный перевод для меню и оверлея, однако, как выяснилось, не все допилил - на видео это заметно...
Попутно сделал еще и карту отображения обстановки на поле боя. Там тоже кое-что надо "подкручивать", доводить до ума и прочее. Но карта тоже заработала, что не может не радовать.
Отмечу также возвращение в строй "Тайгеров" F-5E, текстуру к которым я все-таки закончил. Надо заканчивать текстуру для Су-25, он тоже уже готов к подключению в игровой процесс. Плюс начал было текстуру для ЗПУ-1, но притормозил - опять кодирование. Из больших кусков кода мне осталось только создать редакторы миссий и кампаний. Как примерно это сделать -я знаю, но только в самых общих чертах и по ходу дела будут корректировки, тупиковые направления, короче "плавали -знаем"... Вообще эе проект плавно подходит к своему завершению и полученный опыцт, вне всякого сомнения, будет использован в дальнейшем - в других проектах.
Выражаю свою благодарность своему коллеге denis8424, немало помогавшему мне в этой работе и разместившему ссылку на мое третье видео в своем блоге.


вторник, 4 августа 2015 г.

Третье видео.

Сделал третье видео. что там происходит - я дал котокое описание. Добавлю, что кампания была сделана так, чтобы можно было при выходе из игры начать на следующем сеансе с того места, где она была прервана. Надо обеспечить возможность прохождения кампании за один сеанс, повтор одиночных миссий, ну и еще редактор миссий и кампаний как-то исхитриться и сделать.
В самой игре обеспечил появление метки цели на ИЛС только при нахождении цели в радиусе работы радара и при его включении. В основном занимался освоением новых программ - ng plantи видеоредактора VSDC. Прогресс есть, хотя и идет небыстро.
Наделал заготовок - "Миражи" и "Томкэт", делаю заклепки на текстуре F-5E и Су-25, вчера установил нормальную антенну на РЛС обзора и разведки для ЗРК С-75.
В общем, теперь пошло наполнение моделями и приведение в божеский вид тех, что имеются в игре. Здесь результаты будут не столь быстрыми и заметными, как при работе с кодом.

понедельник, 20 июля 2015 г.

Радар - открыта дорога для МиГ-29.

Первую половину предыдущей недели я занимался доведением до ума системы ЛОДов для наземных объектов, параллельно с этим приводил к единому стандарту модели наземной техники. Изначально объекты в игре представляли из себя систему связанных между собой плейнов, к которым добавлялись в зависимости от расстояния до активной камеры "оболочки" - с приставками в имени lod и vid, соответственно малодетализированные и высокодетализированные модели. Система до поры до времени работала. Но... я посчитал не имеющим смысла добавление объектов с приставкой к имени lod. Проще было сделать эти объекты "корневыми". С их числом полигонов, не дотягивающим и до полусотни, да с расстояния, на котором ни фига ничего не разберешь - лишние строчки кода - сначала добавлять lod, потом искать его среди потомков и убирать, лишние затраты. К тому же появились новые обстоятельства - для наземки появилась модель повреждений, так что старая схема становилась громоздкой. вот и пришлдось создать отдельный объект, своеобразный "маяк". Этот объект замеряет расстояния до активных камер и делает все необходимые операции с заменой моделей. Нужен он вот для чего. При уничтожении юнита его движок убирается (ну не нужна больше физика, от слова совсем - остается лишь оболочка, "декорация" в виде уничтоженной единицы техники), но при этом все потомки-лоды отсоединяются от юнита и остаются, заменяясь на модели при пристальном "рассматривании". вместо себя перед исчезновением двигатель вызывает этот объект маяк и делает его родителем своих бывших потомков (прямо смена монарха на престоле). Назначение объекта-"маяка" одно - когда нужно, вызывать и убирать высокодетализированные модели пушек, турелей, гусениц, башен, корпусов и прочего. Тем же самым этот объект будет заниматься, "начальствуя" над группами 2декоративных" объектов, вроде домов, деревьев и прочего. Как мне кажется, один объект, "надзирающий" за потомками в числе 10-20 штук лучше, нежели каждый объект делать самостоятельным и ставить на него скрипт с ЛОДами. К тому же с этой схемой возможно и использование стандартных блендеровских ЛОДов. Может, в будущем, я так и сделаю (просто моделей уже не сказать, чтоб мало, так что придется постепенно и не торопясь делать для них ЛОДы в самом Блендере, да и другие заботы пока в приоритете).
Вторую половину прошлой недели я с остервенением пилил радар. К сожалению, иногда некоторые вещи до меня доходят, как до жирафа, к примеру использование дистанции и локальных векторов... Только прочитав статью на Хабрахабр "Линейная алгебра для разработчиков игр" я понял идею denis8424 насчет радараЮ да и то не сразу. Собственно, слово 2радар" здесь обозначает экран с выводом положения объектов относительно игрока. Первая попытка, когда я все-таки понял, как использовать локальные векторы и расстояние до игрока в функции getVectTo привела к созданию вполне работающего радара, вот только конструкция была громоздкой и сильно кушала. При второй попытке все метки почему-то уехали вправо. При третьей картинка стала походить на правду, вот только на радаре оставались "следы" от противника при повороте самолета, да еще и 2размножались", норовя забить весь экран. И только при четвертой попытке радар заработал, как нужно. 
Радар я рассчитывал любой ценой довести до конца недели и вчера он все-таки заработал. Таким образом, открылась дорога для МиГ-29, в кабине которого радар имеется, в отличие от МиГ-23. Сам самолет правтически готов - осталось анимировать створки и детали шасси. И, разумеется, текстура с "расшивкой", плюс кокпит. Вчера вечером успел еще немного поработать над текстурами кокпита. У меня есть вполне приличный набор текстур для кабины 29-го, аж из 6 вариантов. точнее, это исходный набор, потому что придется их комбинировать, подрезать, добавлять, стирать, рисовать в ГИМПЕ. Но это дело знакомое и преодолимое. Теперь же во весь рост встает проблема с ИЛС и зеркалами. Если с ИЛС все более-менее ясно - его теперь придется делать отдельно и вызывать нужный тип (для МиГ-23 придется делать то же самое, иначе никак), то с зеркалами пока еще неясно, как это сделать. 
Начал было снимать новое видео, но застрял. Нужна была еще и навигация, которую, наряду с пушечным прицелом я тоже сделал на предыдущей неделе, как бы мимоходом  (это не хвастовство, я с удивлением обнаружил, что мог бы сделать это гораздо раньше, но вот блин, не соизволил заняться, а ведь сложного-то ничего не было - просто немного покопаться в коде). И еще было сделано примитивное управление погодой - выбор типа облачности. пока очень примитивно - просто количество облаков в районе боевых действий.
Вот эти вот все "мелочи" и крупные доделки привели к тому, что на втором видео я застрял. Очень надеюсь, что до конца этой недели я с этим справлюсь и тогда можно будет изобразить лягушку из японского хокуу великого Мацуо Басе:
                                                            Старый-старый пруд.
     Вдруг прыгнула лягушка
    Громкий всплеск воды.
Старый пруд - сайты, посвященные игростроению и Блендеру.
Лягушка - это, значит, мой проект, да... После второго видео, 
работающего радара, думаю, можно и начать "выходить их тени"...
Что из этого выйдет - время покажет.

четверг, 30 апреля 2015 г.

Вроде бы и дал себе слово писать в блог почаще, но опять - задержка вышла. Долго пилил модель повреждений для самолетов. Опять задействована функция childrenRecursive и "СилаБукв". Сначала удалось создать схему "уничтожения" отдельных частей самолета. А именно - при сбитии сносится часть крыла и стабилизатор. И вот тут встал вопрос - что делать с пилонами на крыльях? Дело в том, что иерархия моих юнитов имеет две ветви. одна - это сами пилоны и оружие, парентящиеся к центру самолета (его роль выполняет объект с именем "семейство"CntAircraft), вторая ветка - "отделяемая". Она тоже парентится к центру самолета и вызывается только при высоком уровне детализации. Но именно огна и создает красивую картинку. Пилоны же и оружие с ней не связаны. Поэтому, пришлось принять меры. Проблем для МиГ-23/27 и F-15 не было - потому как у них подкрыльевые пилоны очень близки к фюзеляжу. Но вот F-5 и F-16, да и будущие МиГ-21/29, Су-27 и его клоны, имеют крылья, буквально "обвешанные" пилонами подвески вооружения. Самое же пакостное заключалось в том, что пилоны имеют разный облик, так что просто объединить их с "отрезаемой" частью крыла не получится. Поэтому пришлось пойти на компромисс. сделать не объединенный пилон из двух объектов, а два отдельных - правый и левый. При сносе крыла проводится проверка, какое крыло сносится и соответственно, убираются объекты, с этим крылом связанные (не парент). И движки оружия парентятся теперь не к центру юнита, а к этим правым и левым пилонам.
Сам же процесс появления поврежденных частей самолета таков - циклом проверяются объекты в списке типа листДамагед, если у них нет в имени сочетания букв DMG, то вызывается их двойник с текстурой повреждения и парентится к ним же (это важно, поскольку поврежденные самолеты могут иметь вполне работающую механизацию). Сами же "породители" "поврежденных" остаются на месте, но становятся невидимыми. Да, это приводит к увеличению объектов, я это прекрасно понимаю. Но полностью подчинить себе процесс замены мешей не удалось, а любоваться на истерику консоли, сообщающей о некорректном поведении только что созданных новых мешей (Откуда??!!) не хочется. Про "снос" деталей я уже писал выше. Высокий уровень детализации держится недолго в игре, а при сбитии горящий самолет обычно живет недолго. Далеко не все успевают взорваться от столкновения с землей. Поврежденные же самолеты, если они выходят из боя и не находятся в поле зрения камеры внешнего обзора, через некоторое время убираются, поскольку тратить на их просчет время и ресурсы - нет смысла. Это не наземка, скорости там куда как выше.
Кстати, о наземке. Начал писать скрипт движения для наземной техники. поскольку схема ЛОДов и повреждений уже более-менее отработана, надеюсь применить ее и в этом случае. Поработать, конечно, придется... а теперь скрин с картинкой - сбитый Ф-15 с пробоинами в уцелевшем крыле...



суббота, 14 июня 2014 г.

вот и до трехмерной графики добрался...

С о страшным скрипом, вспоминая уже подзабытые навыки обращения с Гуглом (почтой и блогом), все-таки решил продолжить. На сей раз запись не об ирано-иракской войне, а об игростроении. для тех, кто видит все это в первый раз - уже довольно давно я работаю надпроектом создания игры - жанр - э-э, а черт его знает. Что-то среднее между аркадой и симулятором. Соперничать с Лок Он, Strike Fighters, Ил-2 и другими симуляторами не собираюсь и вообще неясно, что из этой затеи вообще выйдет. Задумка - создать свободно распространяемый файл с подробной документацией, с возможностью быстрого добавления своих дополнений. Основной упор делается на реактивные боевые самолеты, но, в принципе, можно будет добавить и ЗРК, вертолеты и даже бронетехнику (имеется в виду под управление игрока). Сейчас идет разработка ИИ для ботов, в воздушном бою они действуют уже более-менее вменяемо, учатся стрелять по наземным целям. Там свои особенности - когда будет заметный успех, отпишусь, с объяснениями по коду и этим особенностям. Приборы и индикация уже давно отработаны, большая часть эффектов создана, но часть нуждается в доработке - все-таки БГЕ строг к расходованию ресурсов (зато и научит большему).
Пока же выкладываю ссылку на файл - заодно и резервная копия. В файле находится пакет из советских и американских ракет "воздух-воздух" -  среди них даже затесалась одна английская, которая все равно является копией американской "Спэрроу". Пакет состоит из ракет семейства Sparrow, Sidewinder, Р-23/24, Р-27, Р-40, Р-98, Р-3/13, Р-77, Р33/37, AMRAAM. Ракеты затекстурены. Изготовление новых текстур, равно, как и модификация объектов не возбраняется. Использование не ограничивается. Короче, что хотите - то и делайте.
Ссылка на файл - 
https://drive.google.com/file/d/0B1b7rKfV80h9YUFEQUtXRUJxb0E/edit?usp=sharing
Скрин по файлу - что там есть: