суббота, 23 сентября 2017 г.

Размышления о наземных объектах.

Не далее, как вчера удалось добиться добавления и работы уровней детализации артиллерийскогог юнита. Это новый вид юнитов - вкючает в себя буксируемые артсистемы. Как зенитки, так и гаубицы, возможно, пусковые установки ракет стационарных ЗРК и тому подобное.
Впереди введение САУ, танков , легкой БТТ и просто автотехники.
И возникает новый спектр проблем. Пока не будем касаться ИИ, потому как "слона едят по кусочкам".
Пока рассмотрим проблемы работы уровней детализации.
На данный момент уровней детализации 4.
Недетализированный. За пределами дистанции различимости юнита (атрибут maxVisibleDist) все меши всех деталей юнита меняются на плейны.
Малодетализированный уровень действует в пределах от половины до максимальной величины maxVisibleDist. Я обзываю меши, на которые меняются меши деталей юнита ЛОДами (хотя это не совсем верно, строго говоря, ног привык уже). По сути своей - это очень грубые объекты, скорее напоминающие силуэты.
Среднедетализированный уровень - в пределах от одной десятой до половины maxVisibleDist. Для этого уровня используется, как правило уже вполне высокопоигональный меш для деталей. Но есть нюанс. Нет большого количества мелких деталей вроде закрылков, рулей, элеронов и прочего для самолета.
Высокодетализированный уровень - весь самолет в сборе со всеми мелкими деталями - на расстоянии менее одной десятой maxVisibleDist.
Зачем это надо? БГЕ сильно не любит большого количесива объектов, поэтому необходимо всячески соблюдать правило: "Краткость - сестра таланта". Не так много юнитов будет так близко от камеры, да и перескоки с одного уровня на другой не так уж чтобы частые.
Интересно, что для вновь созданных артиллерийских юнитов отсутствует последний - высокодетелизированный уровень. а вот для самодвижущихся объектов он обязателен. Причина в том, что у танков , БТР-БМП, автомашин и прочего имеются колеса и иногда - гусеницы.. И они должны крутиться.
Вариантов несколько.
Первый - объект типа "гусянка+катки" - единый и неподвижный для среднего уровня. Для выского уровня добавляем родителя с катками и гусеницами в товарном количестве. Самый простой, кстати, вариант.
Вариант два. Ничего не добавляем, ибо есть UV-скроллинг. Мы его просто запустим, когда нужно и остановим, когда нет нуждя.  Лично я склоняюсь именно к этому варианту.
Однако у тех же танков есть фары, поручни, патрубки и всякая мелочь, которая тоже нужна. Ну вот, значит, ее тоже добавлять и убирать. Как уже говорилось выше, смена уровней детализации - явление нечастое. Да, можно и без этого, но иметь про запас не помешает - как не помешает законсервировать часть кода в скрипте на будущее.
И тут вдруг выползает проблема вроде блоков ДЗ и тех же бортовых экранов. Срываемых снарядами, к примеру. Удалять вершины мешей нельзя в реал-тайме. Но их можно двигать. нароимер, "схлопнув в одну точку (точнее придав нулевые координаты всем вершинам) того же блока ДЗ. Проблема только в том, как вытащить НУЖНЫЕ координаты. Просто я достаточно мало работал с мешами и пока не умею этого. Надо просто почитать АПИ и найти нужное.
Вторая вещь, которую тоже придется решать - взаимодействие снаряда и брони. По-видимому, здесь придется действовать через списки координат вершин, "выбрасывая" отработавшие координаты,  пбразуя "ослабленные" участки. Пока толкои еще сам не понимаю - мысль нуждается в провеоке практикой. Предположительно, имеем "слепок" брони объекта, который вызыается при попадании снаряда. Снаряд проверяет функцией ray координаты полигона, ищет его среди "пробитых" в списке. Если он там есть - пробитие. нет - добавляет его в этот список, не поражая юнит.
Понимаю, несколько заумно, да и кода нет пока, все на уровне мыслей. Но хоть что-то. К сожалению, БГЕ не позволяет как-то маркировать полигоны и вершины - тут надо полагаться на координаты. Да еще и научиться с ними работать.
Сегодня вытащил из первой версии скрипты наведения артиллерии и ЗРК (кстати, к стрельбе с применением упреждения приложил руку denis8424, приер турели у него в блоге есть).
Пока что отработано добавление и работа уровней детализации зенитной спаренной автоматической 35-мм пушки  "Эрликон" GDF-001, Я рассчитываю на еще тр варианта такой пушки. В том числе и роботизированный 005. Кстати, этот робот отличился в ЮАР - попросту говоря, взбесился и принялся палить во все стороны. Были убитые и раненые и сожженная техника. К счастью, давить клаву, моделируя работу артсистемы, совершенно безопасно.

среда, 20 сентября 2017 г.

Сбывшееся пророчество.

https://www.youtube.com/watch?v=86U4EUtIklk

Более десяти лет тому назад на основе реальных событий, а именно, последнего боя 6-ой роты десантников под Улус-Кертом в ходе Второй Чеченской был снят четырехсерийный фильм "Честь имею!". В этом фильме нет лихих суперменов, кладущих направо и налево толпы врагов и не получающих при этом ни одной царапины. Зато есть много чего другого. Например - приказ начальства выполнить вылет в интересах миссии ОБСЕ, когда вертолеты нужны для эвакуации  зажатой в ущелье разведгруппы. Или когда приехавший в родной Питер офицер, сопровождавший гроб с телом своего солдата (погибшего как раз из-за этого приказа) видит, как мать, потерявшая единственного сына, сходит с ума. Или когда старик-чеченец, у которого задавили последнего барана, приходит к солдатам жаловаться и те дают ему в качестве компенсации ящик консервов, после чего старик, когда-то служивший в Советской Армии, приходит к десантникам при полном параде - в дембельском кителе, и угощает их мясли того своего последнего барана и предупреждает о готовящейся "духами" провокации. Он просто не хотел зачистки своего села, которая неизбежно случилась бы в этом случае. Его так и нашли - в этом кителе, повешенным, на следующее утро...
Еще в Питере один из главных героев с "той стороны", молодой чеченский учитель, ставший боевиком по той причине, что ему нечем было платить калым родителям своей невесты, подвергся нападению местных нациков. Вчетвером на одног7о, там, где не стреляют - очень комфортно для таких лбов - в армию они не пошли, ведь там же в Чечню послать могут.. И если бы не тот самый капитан-десантник, которого играет Александр Лазарев-младший, быть бы молодому педагогу как минимум изувеченным...
Они встретились потом, в бою. И чеченец не смог выстрелить в своего спасителя. За что получил пулю от своего командира (и родственника, между прочим).
В конце фильма - тайминг по ссылке - 42-24, звучит монолог командира полка, которого играет Юрий Цурило. Тогда, в 2004, это казалось несбыточной мечтой.
-Верю, будем жить по-другому. Будем воевать по-другому. Будет другая страна, другая армия. Может, и воевать не придется...
Воевать все же пришлось.
Вчера, 20 сентября 2017 года завершилась операция по разгрому наступавших террористов в провинции Идлиб. В сети уже полно роликов с кадрами методичного расстрела бандитов и их техники. Но все это началось раньше, гораздо раньше - в 2015. Сколько было тогда криков о том, что и "крестик не там", и крылатые ракеты у России кончились и исправных Ту-160 всего один. Потом пошли крики о школах и больницах, которые почему-то либо не подтверждались, либо внезапно выяснялось, что их бомбили американцы. А потом пошли уже сообщения об эвакуации командиров террористов вертолетами ВВС США (пока не подтвержденные) или удары по сирийской армии...
Война в Сирии давно перестала быть гражданской, она превратилась в завуалированную интервенцию Запада. слишком много интересного находится в самой Сирии, или вокруг нее. Например залежи нефти и газа в прибрежной зоне. Или удобное положение для прокладки газопровода из Катара в Европу. Хотя тому же Катару вполне можно было бы договориться с Башаром Асадом. Тем более, что сейчас Катар налаживает отношения с другим союзником сирии Ираном. Что мешало ему это сделать раньше?
Однако вернемся к словам героя Юрия Цурило. Да, теперь мы воюем по-другому. И учим, вполне  неплохо учим этому своих союзников. Как оказалось, сирийцы вполне обучаемы. Просто учителя разные бывают. Американцы учили грузин - итог известен, что бы там ни говорили. Американцы учили умеренных бандитов из "Новой сирийской армии" воевать с неумеренными - ИГИЛ (запрещена в Росии). Итог - печальный - оглушительный провал наступления НСА с публичным отрезанием голов пленным. До сих пор курды не могут взять Ракку, при этом делая все, чтобы восстановить против себя тамошнее арабское население. Впрочем, курды, веря, что "Америка с нами", с успехом восстанавливают против себя всех подряд, не только арабов и турок, от которых они действительно натерпелись...
По странному совпадению, атака в идлибе приключилась как раз к Генассамблее ООН. По странному совпадению, в окружение попал российский взвод военной полиции. Итог боя - деблокирующая группа пробила кольцо окружения. Наши потери - трое раненых. Потери террористов - более 850 человек. Пока нечсны цифры потерь союзников-ополченцев. Но, судя по тому, что вылазку ждали и большая часть нападавших легла еще на подходе, они не должны быть большими. Тут есть еще пара интересных моментов.
Деблокадой руководил офицер, когда-то штурмовавший здание совмина в Грозном в 1995 году. Что это такое, те, кто хотя бы поверхностно знаком с историей Первой Чеченской, означает - поймут.  Про ветеранов я уж и не говорю - они все это вынесли на себе.
Так вот, этот офицер трижды ездил в Москву за честног заработанной им Звездой Героя. Только на третий раз Ельцин оказался "здоров" и соизволил награду вручить.
Второй момент - поведение боевиков в момент расстрела их колонны. Они бестолково мечутся по открытой местности и их методично выбивают одного за другим. Это не в первый раз. Притом, что они вполне грамотно воюют против сирийской армиив ряде случаев. Объяснение простое - в их распоряжении есть Гугл-мап и дроны. Они тщательно изучают место своего будущего удара, но не уделяют внимания запасным вариантам развития событий. К примеру, не изучают местность в районе маршрута движения. Оказавшись в незнакомой местности, они теряются и становятся легкой добычей. Пожелаем же им и дальше быть такими умными.

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

пятница, 8 сентября 2017 г.

Бюрократия. Ревизионизм. Реанимация. Тестирование. Су-25. И снова про blf - избавление от кракозябр.

Следующим после МиГ-27К к реанимации был назначен Су-25. Работа выдалась вполне рутинной. Сначала. А вот потом вдруг всплыла нерешенная еще в пераой версии проблема - кабина Су-25, которую я перенес во вторую версию, была меньше требуемых размеров. Произошло это из-за ошибки в моделировании Су-25 в первой версии. Тогда я вывернулся с оверлейной сценой и благополусно забыл об этом. во второй версии из-за ряда новых нюансов подобная халява не прокатила и пришлось кабину "увеличивать". А вместе с ней и остальные детали - индикаторы, стрелочки и тд. Также пришлось подгонять названия деталей под единый стандарт и править текст скрипта работы приборов. Попутно выяснил, что можно UV-скроллинг задавать из единого центра, называя имена объектов в скрипте - все равно мешей у них в списке всего один. по-видимому, придется все кабины зачистить от лишней логики работы курвиметров и вообще потихоньку оптимизировать скрипты, перечислив газвания стрелочек в "шапках" модулей. Ну, ладно, не в первый раз оптимизирую.
Пришлось повозиться с json для Су-25. Постоянно выплывала ошибка в строке с данными сенсора. В конце концов мое терпение лопнуло и я ее заменил на строчку из другого json, подкорректировав цифры. Ошибка пропала. Что это было я так и не понял.
Установил в кабине прицел АСП-17, про который я писал уже в своем блоге здесь, но пока толком не тестировал.
Большую работу пришлось проделать с меню. Серией различных ухищрений мне удалось достичь того, что теперь текст может более-менее точно располагаться на кнопке, а не только рядом с ней, он может быть русским или английским, иметь определенный цвет и прозрасность. К сожаленпию, смена текстур в 2.78 была таки сломана, да и видеотекстура теперь работает странно... Так что смена заставок в меню была сделана через замену мешей, зато раотает железно.
Наконец, с подсказки dron-а, были ликвидированы жуткие кракозябры вместо русского текста. Понятно, что во всем была виновата кодировка. преодолевается это так:

 with open(bge.logic.expandPath('//Menu/StartMenu.json'), 'r', encoding = 'utf-8') as directMenu:
        JSONmenu = json.load(directMenu)

В данном случае encoding = 'utf-8' - это убийца кракозябр. Русский текст после этого нормально воспринимается и читается в БГЕ и можно его пропечатать на экране хоть в текстовом объекте, хоть в blf. Кстати о последнем. Я уже писал о выведении текста на экран. У меня работают текстовые метки целей (наконец-то получилось отсечь цели позади активной камеры),  но надо было обязательно сделать меню справку о клавишах и командах. Приводить весь текст json, пожалуй, не буду, он длинный и однообразный. Приведу строчку с разъяснением структуры, хотя, там скорее всего и так будет более-менее поянтно.

"str1":{"az":35,"buki":45,"vediR":1.0,"vediG":1.0,"vediB":1.0,"vediA":1.0,"strX":0.01,"strY":0.975,
        "textRus":"Команды","textEng":"Option"},
"str2":{"az":35,"buki":45,"vediR":1.0,"vediG":1.0,"vediB":1.0,"vediA":1.0,"strX":0.01,"strY":0.95,
        "textRus":"+ - увеличение тяги двигателя","textEng":"+ - Engine power plus"}

Хотя нет, не все. Тут еще дело упирается в мой специфический юмор. Недолго думя, я обозвал переменные сами видите как. az и buki - это размер текста. vedi с заглавными буквами - это цвет и прозрасность текста - RGBA, strX-Y- координаты начала строчки на экране. Далее понятно - русский и английский текст. Дело в том, что я постепенно наращивал число ключей в словаре json, не зная толком, что понадобится в работе - в итоге вот так и получилось. Хотя можно и упростить.
Как бы то ни было, меню стало более вменяемым и происходит его сборка-пересборка при смене разделов. у меня не было ни малейшего желания громоздить кучу сцен ради меню, надеюсь, удастся итоговую сцену тоже не делать, а возвращаться в сцену с меню.
И да, наконец удалось ввести в сцену террайна наземную цель - бункер, взаимодействие которого при попадании оружия еще надо как-то отработать - обрушение, разлет обломков там...
Пока меню имеет пять миссий - для МиГ-23МФ и МиГ-29  это перехват Ф-16 и Ф-15 соответственно. Для Су-25, МиГ-23БН и МиГ-27К  я противников из воздуха убрал, но оставил в качестве цели бункер. Надо попробовать ввести МЗА и СЗРК. В первой версии МЗА "Эрликон" был, надо перетаскивать. Плюс "Стрела-1" и БРДМ-2, но их текстурить надо. Когда-то я сделал модель БМП-1. Ее надо избавить от высокополигональных катков и гусениц, посмотреть, что можно упростить и туда же, тем более, она была затекстурена...
В общем, продолжим...
Ниже скрины - нельзя же совсем ез картинок - Су-25 и его кабина. Подвешены по две пары блоков С-8 и бомб ФАБ-250, плюс пара ракет Р-60М.