Jump to content
Sign in to follow this  
Igor Goncharov

Пользовательская Анимация.

Recommended Posts

Igor Goncharov

Уважаемые коллеги!

Создал эту тему исключительно для FAQ.

 

У меня вот такой вопрос сложился. Если анимацию по SDK разобрал и делаю без особых проблем, то вот как быть с созданием своей анимации? Например:

 

Хочется сделать такую фишку(чисто эксперимент - пока).

- В самолете есть некий ящик(коробка и пр.);

- требуется его открыть в VC.

 

Разумеется тут всякие двери и пр. не подходят. Как разумно обозвать деталь? Что написать в XML? и как правильно откомпилить?

 

Не хотелось бы разводить флейм в этом топике - давайте делиться опытом :)

 

PS Пардон что влез. Прикрепляю тему, пмм дело нужное, а значит архимодерируемое. ;) Флей будем вырубать на корню... :huh:

Edited by Yelky-Palky

Share this post


Link to post
Share on other sites
denokan

Хм, я могу предположить из своего небольшого опыта стояния поблизости со знатоком кастомной анимации, что обозвать ты ее можешь как угодно, лишь бы код написать по смыслу "При нажатии выключателя А откроется ящик Б".

 

Т.е., совершенно не требуется ящик вешать на переменную f_canopy или любую другую дефолтную симовскую.

  • Upvote 1

Share this post


Link to post
Share on other sites
Alex Wing

В makemdl.parts.xml добавляем код

 

<part>

<name>MySwitch</name> //Имя детали/части в gmax (любое, можно krishka_yschika или box_cover)

<animation>

<parameter>

<code>(L:MySwitch, bool) 50 *</code> // Сдесь: (L:MySwitch, bool)- переменная ( значения 0 или 1), далее- " X 50 * " надо понимать как " X * 50 "

Результатом будут числа 0 или 50. В понимании сима это кадры анимации (например в gmax сделаем анимацию: кадр "0" - ящик закрыт, кадр "50"- открыт).

<lag>500</lag> // Скорость с которой будет проигрываться анимация (пример lag=500 - крышка откроется мгновенн, lag=10 - будет открываться медленно)

</parameter>

</animation>

<mouserect>

<cursor>Hand</cursor>

<tooltip_text>MySwitch</tooltip_text> // Всплывающая подсказка - можно написать все что угодно

<mouse_flags>LeftSingle</mouse_flags> // Тип клика мышкой (можно задать- правой, средней, колесом и т.д.)

<callback_code>(L:MySwitch, bool) ! (>L:MySwitch, bool)</callback_code> // Это то, что произойдет при клике мышкой. Любое арифметическое действие с любыми переменными. В данном примере - при клике поменять значение переменной с 0 на 1 или обратно (не знаю как дословно все это понимать, но для меня это не главное, главное что работает).

</mouserect>

</part>

 

В gmax делаем часть с именем "MySwitch", делаем ей анимацию в 50 кадров.

Экспортируем.

Все.

  • Upvote 1

Share this post


Link to post
Share on other sites
denokan

Ну, и, конечно же, делаем ящик с анимацией? И надо связать открытие ящика с переключением MySwitch?

Share this post


Link to post
Share on other sites
Sterk

Алекс,а можешь подробно обьяснить значение каждой строчки кода?

А то чота я хмл пытался изучать-так ниче и не понял-все туторы пишуться применительно к интернету...

Share this post


Link to post
Share on other sites
PRE

Можно не только писать код вшитый на XML а так

же вызывать анимацию из панели по требованию

Т.е. вы пишете не <CODE> ...

а просто <VALUE> дял L: переменной

а дальше используя механизм Named Vars

initalize_named_value,set_named_value и т.д.

( подробности в Panel SDK ) устанавливаете

нужные фреймы анимации либо просто bool - есть нету или

открыто закрыто.

Share this post


Link to post
Share on other sites
Dm-Al

Если это возможно, то тоже самое применительно к внешней модели и с

использованием команд по нажатию клавиш - например, надо

открыть некий люк нажатием клавиши "А".

Заранее спасибо. Дмитрий.

Share this post


Link to post
Share on other sites
VPL

Для того чтобы сделать люк, открываемый клавишей на клавиатуре без использования Gau-прибора, делаем следующее:

1. Вписываем в makeMDL.parts этот код:

 

<part>

<name>luk</name>

<animation>

<parameter>

<code>

(L:luk,bool) 100 *

</code>

<lag>350</lag>

</parameter>

</animation>

</part>

 

2. Создаем XML прибор для вашего самолета со следующим кодом и сохраняем его, например, с названием key.xml.

 

<Gauge Name="Luk Key" Version="1.0">

<Keys>

<On Key="K">0

(L:luk,bool) ! (>L:luk,bool)</On>

</Keys>

</Gauge>

 

3. Правильно прописываем прибор key.xml в Panels.cfg вашего самолета.

4. Создаем в gmax-е запчасть люка, обзываем ее luk и анимируем. На кадре 0 она закрыта. На кадре 100 – открыта. Эту запчасть вы можете разместить, где хотите. (или в виртуалке, или снаружи)

5. Компилируем модель.

6. Выбираем ваш самолет и в 2D панели жмем клавишу K, и ваш люк открывается.

 

Единственный недостаток – люк открывается только в 2D панели, но его легко убрать прописав этот прибор в виртуалку.

 

Если вам нужно чтобы люк открывался нажатием клавиши A, то в приборе вместо

<On Key="K">0 напишите <On Key="A">0

 

Внимание! При использовании этого прибора дефолтные команды на клавишах не убираются. Например, если вы присвоите действие клавише G, то у вас откроется люк, и выпустится шасси. Чтобы этого не было нужно просто в настройках симулятора с этой клавиши убрать команду.

 

В следующий раз я напишу как сделать 3D компас и указатель скорости.

 

С уважением, Илья.

  • Upvote 1

Share this post


Link to post
Share on other sites
VPL

Теперь начнем с создания компаса и указателя скорости.

Компас:

1. Скопируйте этот код в makeMDL.parts

2.

<part>

<name>compass</name>

<animation>

<parameter>

<code>

(A:Wiskey compass indication degrees,degrees) 3.6 /

</code>

<lag>100</lag>

</parameter>

</animation>

</part>

 

3. В gmax-e создайте цилиндр, назовите его compass, наложите на него текстуру (их можно взять из XML компаса любого самолета), и заанимируйте его так, чтобы на 0 кадре он показывал север, на 50 юг и на 100 опять север.

4. Теперь можно компилировать вашу модель.

5. Если компас будет поттормаживать, то поставьте в секции <lag> не 100, а цифру чуть поменьше, например, 50.

 

В полете при проходе через север компас может перескакнуть на 360 градусов, но при аккуратной анимации это будет не заметно.

Объясню, код секции <code>.

(A:Wiskey compass indication degrees,degrees) – это параметр, того, что на нужно вывести.

3.6 / - это деление на 3,6. Параметр делится на 3,6 потому что максимальная цифра показываемая на компасе – 360 градусов. Разделив 360 на 3,6 мы получаем 100 (количество кадров анимации)

 

 

Указатель скорости:

1. В этом примере я расскажу как создать УС-350, но создание других почти аналогично.

2. Впишите в makeMDL.parts это

<part>

<name>us350-strelka</name>

<animation>

<parameter>

<code>

(A:Airspeed select indicated or true,knots) 1.852 * 3.5 /

</code>

<lag>200</lag>

</parameter>

</animation>

</part>

3. Создайте в gmax-e цилиндр, покрасьте его текстурой со шкалой.

4. Создайте в 3D стрелку и назовите ее us350-strelka. Заанимируйте ее так, чтобы на 0 кадре она показывала на 0, на 100 кадре – 350. Для того, чтобы сделать нелинейность, сделайте следующее. Выберите значение скорости (2, 5, 10, 15, 20, 25, 30, 35). Например, выберем 2 то есть 20 км/ч. Делим 20 на 3.5 (или другую цифру указанную в секции <code>) и получаем 5,7. Значит идем на 6 кадр, в нем делаем keyframe и крутим стрелку на значение 2. И так для остальных значений.

5. Теперь компилируете вашу модель, и смотрите результат в симе.

 

Объясню код прибора.

 

(A:Airspeed select indicated or true,knots) – параметр приборной скорости

1.852 * - умножение на 1,852. Умножаем для того, чтобы получить скорость в километрах.

3.5 / - деление на 3.5. Делим, чтобы перевести скорость в 100 кадров. Если вам нужно создать например УС-450, то вместо 3,5 напишите 4,5.

 

2PRE

Вы немного ошиблись. <Value> можно использовать ТОЛЬКО для A: переменной.

 

Если нужно еще что-то, спрашивайте здесь, по возможности отвечу.

 

С уважением, Илья.

 

P.S

На скриншоте – панель самолета Ил-103, полностью сделанная в 3D, без использования 2D приборов.

post-5-1123420874_thumb.jpg

Share this post


Link to post
Share on other sites
denokan

Я - за трехмерность, там где она действительно поможет - например, авиагоризонт.

 

Вариометр трехмерный - излишек, на мой взгляд. Чтобы сделать круглый прибор, без видимых углов, надо делать многогранник хотя бы на 24 стороны (и то заметно). Потом, надо делать рамки прибора, это еще минимум три стороны. Т.е., на один такой прибор - 24х3 = 72х2= 144 треугольника.

 

Основание прибора (циферблат) можно сделать четырехугольником и на него натянуть текстуру прибора. (или, если делать уж совсем трехмерным, со стрелкой - то круг из 24 кругов и стрелку)

 

Сверху еще стеклом закрыть - круг из 24 углов.

 

И так вот штук 40 приборов.

 

:rolleyes:

 

А на авиагоризонт - тут я согласен тратиться :)

Share this post


Link to post
Share on other sites
dimacho

Конечно нужно анимировать только стрелки. В CFS3 так и сделано. Только хотел поднять вопрос, возможно ли такое в MSFS, и вот пожалуйста- готовый ответ. Здорово!

Share this post


Link to post
Share on other sites
denokan

Да можно, конечно. Но, если анимировать только стрелки, тогда теряется смысл - надо или делать трехмерный прибор с окантовкой, либо оставлять текстуру.

 

Я все равно за производительность, а не за 5-7 фпс на среднем компе.

Share this post


Link to post
Share on other sites
VPL

denokan

Конечно нужно делать так, чтобы полигонов было поменьше. Но зачем мелочиться, покрайней мере для маленького самолета, типа Ил-103. У меня на нем на стеклах и носу блеск, приборов на 3080 полигонов (не готов еще только 1 прибор) и наружа на 50000. И на нашем компе (P4 2400, 768 ОЗУ видюха GeForce5900) 24,5 кадра держит спокойно. Да загружается может и долго, но зато выглядит красиво. Тем более для большого самолета это делать никто не заставляет, но на Ил-103 всего 21 прибор.

Кстати, по этой технологии если хорошо заанимировать приборы не тормозят вообще. Так что на нашем следующем проекте (не Ил-103) не будет тех же тормозов с приборами, как в виртуалке Як-12

С уважением, Илья.

Share this post


Link to post
Share on other sites
denokan

Не хило. У меня туполь на 42 наружка :rolleyes:

 

Я не имел в виду самолет с десятью приборами, может, я неточно выразился. У меня была задумка сделать ВК в эмке по тому же методу, потом я от нее отказался, ибо летать на слайдшоу и любоваться красявостью - это ацтой.

Share this post


Link to post
Share on other sites
Igor Goncharov

Требуется еще один ответ на вопрос - поковырявшись в разных материалах не нашел или не правильно понял. Требуется сделать, например, тормозные колодки.

Т.е. при условии, что ВСУ(электрика... трам-пам-пам, рояля не играет) выключена и самолет на стояночном. Колодки видны, в противном случае нет. Как делать в сценах вызов чего либо по радио, понятно, но в самолете, было бы не совсем корректно сие использывать, или я не прав?

 

Наставтье на путь истинный, коллеги!

Edited by Igor Goncharov

Share this post


Link to post
Share on other sites
denokan

действительно, в самолете это делается не через вызов по радио. Определяем состояние двигателей,если они выключены-значит,колодки. Но тут есть еще момент буксировки. Посему,еще надо и его учитывать каким-то образом,например по условию, что путевая скорость ноль.

Share this post


Link to post
Share on other sites
denokan

хотя я,вообще считаю, что для таких анимаций лучше использовать отдельную панель.

Share this post


Link to post
Share on other sites
Igor Goncharov

Про отдельную панель мысль интересная, спасибо за идею!

А вот тогда уточняющий вопрос:

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

Share this post


Link to post
Share on other sites
denokan

<part>

<name>PARK_BRAKES</name>

<visible_in_range>

<parameter>

<code>(A:Circuit general panel on, bool) ! (A:SIM ON GROUND, bool) * (A:VELOCITY BODY Z, kilometers/hour) 1 < && (A:Turb eng1 N1, percent) 2 < && (A:Turb eng2 N1, percent) 2 < && (A:Turb eng3 N1, percent) 2 < && (A:Turb eng4 N1, percent) 2 < &&

</code>

</parameter>

<minvalue>1</minvalue>

</visible_in_range>

</part>

Share this post


Link to post
Share on other sites
Igor Goncharov

Roger B)

Спасибо - поробую, о результатах доложу!

Share this post


Link to post
Share on other sites
Пуэбло

А почему до сих пор нет текстур для Ростовского аэропорта и логотипов Аэрофлот -ДОН?

Edited by Пуэбло

Share this post


Link to post
Share on other sites
kartingist

.

Share this post


Link to post
Share on other sites
Fishbed
.

 

содержательно, а главное - познавательно -)))))))

Share this post


Link to post
Share on other sites
ReDut
.

 

содержательно, а главное - познавательно -)))))))

За такую содержательность господин kartingist получает предупреждение +20.

Share this post


Link to post
Share on other sites
4444

Народ а подскажите как сделать анимацию рулей, но не на 100 кадров как по дефолту а допустим на 200 (для более плавного хода). Я сам так и не воткнул. :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...