четверг, 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. Работоспособность и вылов багов для него начнутся после завершения работы над основной текстурой. Кстати, непонятно почему, но браузер у меня вылетает нафиг при попытке загрузить фото с компа, используя вид "Эскизы страниц". При режиме "список"  все загружается...