среда, 3 июня 2015 г.

Бег на месте...

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

Попытка избавиться от большого количества камер в игре пока окончилась ничем. Также пока не дошли руки до миссии "Полигон".
Удалось заставить видеотекстуру ТВ-прицела в кабине работать только при использовании КАБ (корректируемых авиабомб) и ракет "воздух-поверхность", потому как большего и не нужно. Давно надо было сделать, тем более, оказалось не так сложно и громоздко, как предполагал.
В связи с тем, что боты Ф-15 заделались "мальчиками для битья" по выражению denis8424, уделил внимание и этому. Как оказалось - основная проблема была в ракетах - переборщил с установками на "невундервафлю". Хотел было заставить ракеты наводиться не на сам объект, а на координаты объекта - еще один облом, пришлось оставить, как есть, хотя и хочется ввести опять "уводящую" помеху.
Боты теперь несколько поумнели. Теперь они набирают высоту, стремясь достичь превышения над целью, причем превышение - задается случайным образом. Также боты при смене индекса цели также в случайном порядке могут перебрать весь список целей и выбрать ту, которая поближе. Результатом стало резко возросшее число сбитий игрока, меня то бишь... Исход боя опять стал труднопредсказуемым - может быть выигран 4-1, а может быть проигран с разгромным счетом. Как карта ляжет.
Появились кое-какие мысли насчет самолетов РЭБ, того же EF-111. Как известно, самолеты РЭБ вооружения почти никогда не несут, но зато весьма успешно способны глушить РГСН-ракеты. По-видимому, алгоритм таков - в определнный момент времени юнит собирает информацию о ракетах, находящихся в полете (аналог создания списка по проперти таргет - всех юнитов),  но здесь "маяком" выступает проперти "отделение" - оно присутствует только у движка оружия. Далее - подопрос - если у ракеты проперти классВеапон равно 0 (РГСН), она добавляется в список. Чуть погода происходит опрос списка, у ракеты "спрашивают, по кому она бьет. Если это свой (опрос идет через проперти индТар - индекс цели), то рандомом задается "глушение", при определнном значении случайной величины происходит обнуление проперти "наведение" и ракета самоликвидируется (можно и проперти "фактор" обнулить или конус радара). Таким образом ракета превратится в "болванку". и, заодно для старых ракет с тепловым наведением надо бы проработать вопрос с уводом на солнце - засветкой их ИКГСН...  Отдельные неудачи хоть и преодолеваются со временем, но постоянно откладывают момент типа презентации видео...
Блин, что-то я уже "зашился". По-хорошему, надо было еще одно сообщение перед этим постом написать. Исправил я работу "Градов", исправно попадают по целям, вставил боты наземной техники, с более-менее работающим искусственным интеллектом, выправилработу ЛОДов для РСЗО - на картинке ниже можно отчетливо рассмотреть их неправильное положение...

вторник, 26 мая 2015 г.

Работа идет контора пишет...

некоторое время пришлось заниматься наведением порядка в эффектах взрывов, дыма и исправлять разного рода ошибки и недочеты. Сейчас идет работа над наземными юнитами, есть кое-каие идеи насчет их обхода препятствий и поведения в игре. Частично они уже работают. в состав игры введены "Грады". Однако с целью увеличения точности стрельбы необходима доработка баллистического вычислителя - а именно - расчет угла возвышения при стрельбе... Цели-то они вроде и накрывают, но мало, кроме того, это достигнуто за счет некоторого жульничества. Подозреваю, что при смене координат появления батареи РСЗО снаряды опять не будут поражать цель.
Взрывы все-таки были доделаны, при их появлении у земли они поднимаются вверх. число кадров - 49, ФПС даже при множественных взрывах не проседает. Более-менее удалось сделать огонь от сбитых машин частицами - собственный очень простенький эмиттер с анимированной текстурой. Дым был также модифицирован, добавляется отдельными плейнами с ориентацией  Halo, как и огонь. Вообще по-хорошему стоит сделать ограничение на появление огня на больших дистанциях от активной камеры - дым-то виден далеко, а вот факел огня - нет. На наземной технике заработали самодельные ЛОДы, как и ан самолетах...
Пока никак не удается всерьез заняться Су-25 - точнее, текстурой заклепок на нем. По причине внезапно напавшего типа "вдохновения" в кодинге (которое зачастую приводит к серии промахов или устареванию, того что раньше работало - это касается обзорного монитора радара на оверлее, впрочем, для него тоже пришло время замены видеотекстуры на просчет масштабированных координат). Да и наземные юниты тож надо текстурить. Но фактически из кода самой игры у меня осталось только поведение наземных ботов, чем я и занимаюсь, и что уже частично работает...
Скрины - сверху вниз.
1. Первые мгновения после поражения Ф-15 - новые огонь и дым.
2. Работает РСЗО "Град".
3. Прямое попадание НАР С-8 с МиГ-27К в танк.
4. Разрывы серии снарядов РСЗО на горизонте.




суббота, 2 мая 2015 г.

Исправление ошибок

после доведения до конца рабочей модели повреждений, которую обкатывал на МиГ-23 и Ф-15, пришлось подгонять под новые стандарты МиГ-27 и Ф-16. К сожалению, не обошлось без досадных накладок и ошибок. сила Букв не прощает ни малейшей ошибки в произносимом заклинании, и если хотя бы одна буква не та, или лишняя или таковой вообще нет), то моментально вылезает ошибка. так вот и пришлось "чистить" названия объектов и мешей. Заодно пришлось возвращаться к старой схеме со стрельбой из пушек и блоков НАР. Старый код для снарядов использовал функцию applyForce и поправку mathutilsVector, в дополнение к координатам появления снарядов. Эта схема хорошо показала себя на неподвижных зенитках, и, надеюсь, нормально заработает на малоскоростных (по сравнению с реактивными самолетами) наземных объектах. Как бы то ни было, теперь процесс появления снаряда выглядит так - указывается, какой объект добавляется, добавленный объект сразу парентится к источнику и получает локальные начальные координаты. Сам же снаряд, имея свойство-таймер, теперь ведет себя согласно коду:

    if own['timeStart'] < 0.05:
        own.removeParent()
    if own['timeStart'] < 0.15:
        own.localLinearVelocity = [random.randrange(-5,5), own['speed'], random.randrange(-5,5)]
    if own['timeStart'] > 0.15:
        own['speed'] = 0
        if own.worldLinearVelocity != mathutils.Vector((0.0, 0.0, 0.0)):
            own.alignAxisToVect(own.worldLinearVelocity, 1, 1.0)

На чрезвычайно короткое время он получает некую постоянную скорость, по истечении этого времени происходит "снятие" скорости и дальше снаряд летит по инерции, попутно "ориентируясь" по ходу движения. Аналогично, хотя и чуть-чуть по другому я поступил с отстреливаемыми ловушками (они еще дополнительно "уходят" в стороны, причем опять же, в момент появления ловушке присваивается свойство coordX, 1 и -1 означают, что ловушка уходит вверх и в сторону - минус - влево, плюс- вправо, 2 и -2 - аналогично, но ЛТЦ выстреливается не вверх, а вниз, и тоже в стороны, 0 - зарезервирован - костыль, конечно, но выглядит получше).
В общем, процесс переформатирования и выстраивания  так и не прекращается... 

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

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



понедельник, 13 апреля 2015 г.

Сила Букв или маленькие хитрости в БГЕ

В некотором роде - этот пост - документация на уже сделанное, создан в том числе, чтобы самому помнить о своих приемах работы и хитростях, потому как при отвлечении на другие разделы, уже сделанное может забываться.
Анимированные объекты юнита, как правио являются его потомками. В моем случае - это детали шасси, крыльев, оперения. Как правило я даю им имена уже по устоявшейся системе. К примеру - правый  закрылок МиГ-29 имеет следующее название - FulcrumZakrP - обозначает следующее - "имя семейства" (Fulcrum) + "название детали" (закрылок - Zakr, стабилизатор - Stab, руль направления - Rul и так далее) +"расположение"(правая - P, левая - L).
но тут следует отметить еще одно обстоятельство - при использовании скрипта для проигрывания анимации в БГЕ, если использовать для начального и конечного кадра цифры из "середины" анимации, происходит "подергивание" объекта - такое впечатление, что перед проигрыванием анимации он встает в "нулевое положение". подозреваю, что это происходит из-за того, что подгружаемые мною из другого файла объекты обычно стоят на кадре анимации 1 или 0. Самое неприятное в этом случае - поведение деталей шасси, поскольку при вызове деталей они появляются в "разложенном" виде на долю секунды. Не столь критично это для остальных деталей, но имеет место быть. Поэтому я отказался от варианта одной очень большой анимации, в которую в виде отдельных участков включены анимации ВСЕХ деталей сцены. Хотя эта схема и работала, но... (см выше).
К тому же есть еще одно обстоятельство. Анимации стабилизаторов для тангажа и крена к примеру, различаются. Тогда были созданы анимации для тангажа вверх и вниз (синхронное поднимание-опускание) и крена - отклонение типа "ножницы". Причем названия анимаций выглядело так FulcrumTangazhW (поднимание носа), FulcrumStabLL (крен для левого стабилизатора влево), аналогично - FulcrumTangazhN и FulcrumStabLP, плюс для правого стабилизатора FulcrumStabPP и FulcrumStabPL. На данный момент все это выглядит именно так. аналогично для закрылков были созданы анимации - с названиями по типу - "имя детали"+"положение" (взлет - W, посадка - P). Таким же образом создавались анимации для рулей направления, элеронов, последние буквы в них обозначали направление анимации.
Чуть позже попробую здесь же в этом посте написать типа справочник обозначений (это скорее для себя). с числом кадров, отведенных на анимацию, объяснением, что делает та или иная деталь. Короче "социализм - это учет"...

Индексация для создания имен анимаций
PKren - правый крен              prefixKren - дополнительное проперти для имени анимации крена
LKren- левый крен                 prefixRysk - дополнительное проперти для имени анимации рыска
PRysk- правый разворот       prefixTang - дополнительное проперти для имени анимации тангаж
LRysk - левый разворот
WTang - тангаж вверх
NTang - тангаж вниз
flapsW - положение механизации крыла - "взлет"
flapsN - положение механизации крыла - "посадка"

#Перечисление частей имен деталей ЛА  
flaperon = 'Flaperon'                                                       #Флапероны
zakr = 'Zakr'                                                                   #Закрылки
eleron = 'Eleron'                                                              #Элероны
 stab = 'Stab'                                                                   #Стабилизаторы
 torm = 'Torm'                                                                 #Тормоза
 predkr = 'Predkr'                                                            #Предкрылки
 interz = 'Int'                                                                     #Интерцепторы
 rul = 'Rul'                                                                        #Рули направления
 ruheight = 'RuW'                                                             #Рули высоты
 pilot = 'Pilot'                                                                   #Фигура летчика в кабине
 fonar = 'Fonar'                                                                #Рули высоты
 krylo = 'Kr'                                                                     #Консоли крыльев
 chassy = 'ChD'                                                                #Детали шасси
 wheel = 'Koleso'                                                              #Детали шасси - колеса
 fonarGlass = 'Cabina'                                                       #Стекло фонаря кабины
 indexWing = str(own['krylo'])+str(own['sdvigkrylo'])        #Индекс анимации консолей крыльев

воскресенье, 12 апреля 2015 г.

Frogfoot

Работа над проектом идет своим чередом. Вчера был дописан код генерации и расположения оружия на точках подвески для Су-25. Сам Су-25  был начат довольно давно, потом последовал перерыв, вызванный очередной переделкой в коде проекта, и экспериментами с облаками. В конце концов штурмовик был доделан, анимированы его подвижные части и изготовлен камуфляж, но без "расшивки" пока что. также довольно долгое время создавался и переделывался кокпит, пока, наконец, не осталась лишь "заклепочная часть" работы - а именно - имитация стыков, лючков, швов и прочей мелочи на текстуре подключаемого юнита.
Что касаемо облаков, то эксперимент прошел вполне удачно - на основе урока Джона Гамильтона, по которому denis8424 сделал четкий и понятный урок на b3d и у себя в ВИПе, было создано облако с нодовым материалом, который ведет себя при приближении к нему весьма реалистично. Помимо этого велись работы по созданию что-то вроде "эмиттера" частиц, конкретно, огня, на дым пока не замахивался. И для эмиттера и для облаков необходимо провести серию доработок, чтобы они прочно заняли свое место в "арсенале" проекта, но не факт, что это будет быстро...
Ниже приведен скрин с экрана - кокпит для Су-25. Работоспособность и вылов багов для него начнутся после завершения работы над основной текстурой. Кстати, непонятно почему, но браузер у меня вылетает нафиг при попытке загрузить фото с компа, используя вид "Эскизы страниц". При режиме "список"  все загружается...




 

воскресенье, 29 марта 2015 г.

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

С 2011 года занялся я плотным освоением БГЕ Blender Game Engine, то бишь, а конкретно - созданием аркадного авиасимулятора. Пути господни неисповедимы, сначала я хотел заниматься созданием фильмов в 3D, но в тот момент так получилось, что осваивал серию симуляторов от Thirdwire, и сильно обижался, что нет среди самолетов, доступных игроку - советских машин. Про аддоны к играм я узнал несколько позднее, когда уже плотно увяз в освоении Блендера, так что было уже поздно.
Вообще-то - это была (да и остается) авантюра чистой воды. Моделирую я довольно средне, текстурирую - тоже, что такое программирование на Питоне узнал так года через два... Процесс медленно, но неостановимо катится вперед, временами отпрыгивая в сторону, и затормаживаясь, когда мне удается изучить какой-то новый хитрый прием и начать с ним всяческие извращения, используя его везде, где только можно.
Задача тем временем росла и ширилась... Постепенно авиасимулятор (или уж честнее - аркада, не гонюсь я за максимальной реалистичностью, наподобие ИЛ- 2 или Lock On - если честно - не потяну, да и все-таки, как мне кажется, надо соблюдать какую-то границу, отделяющую игровой мир от реального) начал превращаться в своего рода конструктор. В принципе, в него можно встроить вертолет, ЗРК, танк, БМП или БТР - "все, что имеет кокпит". Пока мыслей о коммерции у меня особо нет - проект надо элементарно довести до конца. Готовность его я оцениваю процентов 80... В "пилотном варианте", который сейчас и создается, планируется использовать следующие юниты - МиГ-21бис (пока идет моделлинг), МиГ-23МЛД (готов, работает), МиГ-27К (готов, работает), МиГ-29А (идет моделлинг), Су-25 (начата работа над кокпитом, моделлинг завершен, текстуринг еще не начат), Су-27 - пока в проекте, заготовки есть. Оппонентами выступают - F-15C и F-16C, также имеется F-5E, ног пока для него еще не готовы исправленные текстуры, плюс юнит не доведен под стандарт двух вышеперечисленных. Все американские самолеты пока выступают в качестве ботов, управление ими недоступно. Планирую добавить в "комплект" F-4E, F-14A и F/A-18C, плюс "Мираж" F1C. Планы-то обширные, только делается все это не сразу. Наземная техника пока представлена довольно скудно- ЗПУ-1, Oerlicon GDF 35 mm, Т-72, М-60(танк, а не пулемет), плюс СЗРК малой дальности "Стрела-1". И пока к тому же незатекстуренная - как-то я больше упирал на кодинг, особенно в последнее время. В принципе, сначала планируется "обучить" наземную технику воевать, создав по одному-два образца - ЗРК стационарный (идет работа над С-75), СЗРК - смотрим чуть выше (воевать уже умеет),  БТТ - там же, МЗА - опять же выше (воевать уже умеет), артиллерия и РСЗО (в процессе "Град").
Ну, и в качестве демонстрации. Сверху вниз - МиГ-27К в полете, кокпит МиГ-27К, кокпит МиГ-23МЛД, МиГ-23МЛД в полете.