|
|
|
Канал Игры Мечты »
Канал проекта YGRIS: «Анимация» |
|
|
Jurec 348 EGP
Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Значит есть собственный 3д движок, возможности уже большие, но вот требуеться добавить анимацию для того чтобы оживить сцену и сделать возможным различные действия, например, отделение ступеней или же просто изменение параметров системы частиц.
Предлагаю пивотную анимацию, для объектов.
Значит надо бы написать скриптовый движок, для анимации. Вначале скрипт нужно будет менять руками, через блокнот, но в будующем надо будет встроить в редактор, который уже есть и предоставляет весьма большие возможности по управлению движком.
Здесь будем обсуждать скрипты и/или что-то альтернативное.
_________________ MOV topka, C++ |
|
|
Sh.Tac. 151 EGP
Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
что есть пивотная анимация?
планируется ракету со ступенЯми делать одним мешем, а потом его в некоторых местах "раздвигать" чтоль, или как раз сочленёнка?
_________________ This is what you get ...
(c) Radiohead |
|
|
Jurec 348 EGP
Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Пивотная - это когда каждый меш анимируеться без изменения самой структуры меша, т.е. не скелетная и не морфингом.
_________________ MOV topka, C++ |
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
для начала о РН (возьмем ее для примера)
предположим у нас 3х ступенчатая РН на базе "Семерки"
т.е. имеются 4 разгонных блока первой ступени центральный блок второй на который крепятся 4 предыдущих и блок третьей ступени с полезной нагрузкой.
1. в игре наверняка будет несколько модификаций/компоновок на базе каждой РН, будут менятся кол-во ступеней полезная нагрузка и еще чего по мелочи. т.ч. ИМХО удобнее делать не каждую модификацию цельным мешем а сделать РН из отдельных мешей (ускоритель - один меш, центральный блок - другой, ПН - третий, головной обтекатель - четвертый и т.д.)
2. на этапе "прикручивания" разных РН к движку (это когда модельки готовы но все еще предстоит вставить в двиг и анимировать) дезигнерам/моделлерам удобнее не ждать когда анимация будет прошита в двиг а работать с файлами анимаций (пускай для начала даже через блокнот, вручную) оперативно можно опробывать несколько вариантов и переделать в случае надобности все самому.
поэтому да, я поддерживаю идею скрипта.
ну и
3. опять же ИМХО операций врят-ли будет много лучше обдумать какие команды в скрипте потребуются и сделать скрипт максимально простым и прикрутить его в двиг максимально оперативно (т.е. не заморачиваясь всякими красивостями типа "проверки скриптов на корректность" и т.п.)
|
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
дальше по анимации, имхо нужно:
- вращение
- смещение
- масштабирование
- установка нового центра вращения/масштабирования
- присоединение/отсоединение дочернего меша
- прозрачность меша (основного или дочернего)
хорошо бы еслиб можно было бы работать с партикловыми системами так же как с мешами. (аттачить их, менять видимость, масштабировать и т.п.)
|
|
|
Jurec 348 EGP
Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
sedoy : |
хорошо бы еслиб можно было бы работать с партикловыми системами так же как с мешами. (аттачить их, менять видимость, масштабировать и т.п.)
|
А кто запрещает? Можно, конечно. И еще менять их свойства - начальный цвет, продолжительность жизни, spread, размер, изменение размера и т.д.
Вот только не "прозрачность" - а видимость.
_________________ MOV topka, C++ |
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
анимационные последовательности необходимо как-то обзывать и обрашаться к ним по имени. т.е. чтоб внутри одной анимации можно было обращаться к другой.
также необходима привязка по времени и возможность параллельной анимации (например врашение одновременно со смещением)
думаю удобнее если каждая строка нимации будет начинаться с числа означающего время с начала проигрования текущей анимации.
т.е. типа:
[booster_A_separate]
0 rotate mesh_booster_A (0;12;0) t:120
//с 0 мс вращаем меш mesh_booster_A на угол 20 градусов за время 120мс
0 move mesh_booster_A (45;0;0) t:120
//с 0 мс сдвигаем меш mesh_booster_A на 45 едениц за то же время
20 transparency burn_booster_A 100 t:10
//с 20мс от начала анимации начинаем менять прозрачность пламени burn_booster_A (меша или партиклов) от текущей прозрачности (например нулевой) до 100% прозрачности за 10 мс, имитируя отсечку двигателей.
и т.п.
|
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
Jurec : |
А кто запрещает? Можно, конечно. И еще менять их свойства - начальный цвет, продолжительность жизни, spread, размер, изменение размера и т.д.
|
это былоб наверное удобно
Jurec : |
Вот только не "прозрачность" - а видимость
|
думаю "прозрачность" была бы так же удобнее чем "видимость" но это лишь моё имхо.
|
|
|
Jurec 348 EGP
Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
1) В каких координатах мы проводим операции? В мировых или в локальных - данного объекта - где (0,0,0) - центр объекта?
2) Опиши все команды
3) Опиши как скрипты будут взаимодействовать между собой
4) Как ты себе представляешь редактор анимации?
_________________ MOV topka, C++ |
|
|
Jurec 348 EGP
Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
sedoy : |
думаю "прозрачность" была бы так же удобнее чем "видимость" но это лишь моё имхо.
|
Лады, будет и то и то.
_________________ MOV topka, C++ |
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
я тебе не дезигнер и ТЗ не пишу
давай уже делись своими придумками по этому поводу
бум обмениваться мнениями.
|
|
|
Shnyrik
|
|
Цитата: |
В каких координатах мы проводим операции? В мировых или в локальных - данного объекта...
|
Удобно было бы, ИМХО, операции с опорным объектом проводить в мировых координатах, а с "приаттаченными" к нему дополнительными - в локальных координатах опорного. Ср.: Р7 со Спутником на стадии взлета: опорный объект - вторая ступень, дополнительные - блоки первой ступени, обтекатели и сам Спутник. Расчитывать анимацию поворота блоков первой ступени, а затем и их разлета (при разделении) довольно просто в локальных координатах и, наоборот, почти нереально в мировых. На следующей стадии (самостоятельный полет Спутника) опорным объектом станет сам Спутник, а зависимым - вторая ступень Р7.
|
|
|
Jurec 348 EGP
Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Эхх..
Редактор я вижу таким - для каждого объекта есть список с анимациями, т.е. скриптами анимации. Можно взвать редактор этих скриптов - писать их от руки или с помощью чего-то вроде Code Insight.
Так же можно просмотреть эту анимацию - ну как в 3д редакторах. Можно посмотреть состояние скриптов, выполненность их команд, текущая позиция точки пивота.
Насчет взаимодействия скриптов.. Ну не знаю, как это делать - вызывать скрипты из скриптов или же давать это движку...
Хотя можно, например:
50 move mesh_booster_A (45;0;0) t:120
300 call [booster_B_separate]
Что-то в этом роде...
Команды? Ну тут надо потрудицца..
Впринципе я сделаю расширяемый язык, так что это не критично - то что сразу нет всех команд, но описать сейчас большинство не мешало бы.
Ах, да и синтаксис бы уладить..
_________________ MOV topka, C++ |
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
Shnyrik : |
Удобно было бы, ИМХО, операции с опорным объектом проводить в мировых координатах, а с "приаттаченными" к нему дополнительными - в локальных координатах опорного
|
полностью согласен !
предлагаю седующее:
- каждый меш моделитсья так чтоб начало координат у него совпадало с чентром масс моделируемого объекта
- сбор объекта (например РН) начинается с пустого объекта dummy в локальных координатах которого начинается вывешивание всего остального и внутри которых работает вся анимация.
если непонятно объяснил позже расшифрую
Jurec : |
Насчет взаимодействия скриптов.. Ну не знаю, как это делать - вызывать скрипты из скриптов или же давать это движку...
Хотя можно, например:
50 move mesh_booster_A (45;0;0) t:120
300 call [booster_B_separate]
|
да, так удобнее, вызываемые скрипты это как макросы, их код вставляется в родительский скрипт и выполняется параллельно (т.е. родительский скрипт продалжает выполнятся)
ну команд
move - смещение по осям за время
rotate - вращение по осям вокруг центра за время
scale - масштабирование по осям от центра за время
attach - присоединение дочернего меша в координаты с направлением
detach - отсоединение дочернего меша
set_pivot - установка нового центра вращения/масштабирования
trnsparency - прозрачность объекта за время
call - вызов последовательности анимации
для начала хватит
по поводу синтаксиса предлагаю след. схему:
[<название_последовательности_анимации>]
<команда> <объект_к_которому_обрашается_команда> (<вектор_через_тучкусзапятой>) t:<время>
для аттача добавляется еще один вектор - вектор направления приаттаченного меша.
команды распишу ниже
|
|
|
Wolvescrush 890 EGP
Репутация: 167 Сообщения: 1287 Откуда: г. Краснодар Зарегистрирован: 28.02.2002 |
|
Спасибо sedoy, что ткнул носом в тему Ибо я сейчас (и уже довольно долго) думаю над тем же вопросом.
У меня, правда, сказываются особенности уже написанной части движка, но не сильно. Вопрос с координатами, например, вообще не возникает, во всех скриптах используются локальные. Но учитывая иерархию OpenGL для всего "конструктива" локальные координаты будут совпадать с мировыми.
С синтаксисом у меня последняя придумка такая (уж не знаю, как она подойдет для пивотной анимации):
- команд как таковых в скриптах нет
- каждая строка скрипта имеет вид
<время начала> <идентификатор объекта> <код параметра> <начальное значение параметра> <конечное значение> <время исполнения строки>
Очень похоже на то, что предложил sedoy, собственно в беседах с ним движок и ковался Есть только одно отличие - я не задаю в движке список команд, которые можно использовать в скриптах. У меня просто есть список кодов параметров объекта. Укажите в качестве параметра координату Х - и вот у вас команда mov по оси Х. А укажите прозрачность - это уже совсем другая команда, хотя синтаксис при этом не изменился.
Собственно, маленький нюанс, но мне сильно упростил сочинение синтаксиса.
_________________ Лень - стремление к покою. В идеале - к вечному покою. Лень - это смерть в миниатюре. |
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
move <объект> (<перемещение_по_X>;<перемещение_по_Y>;<перемещение_по_Z>) t:<время_перемещения>
rotate <объект> (<вращение_по_X>;<по_Y>;<по_Z>) t:<время_вращения>
scale <объект> (<масштабирование_по_X>;<по_Y>;<по_Z>) t:<время_масштабирования>
attach <объект> (<координата_аттача_по_X>;<по_Y>;<по_Z>) (<вектор_аттача_по_X>;<по_Y>;<по_Z>)
detach <объект>
set_pivot <объект> (<координата_центра_по_X>;<по_Y>;<по_Z>)
transparency <объект> tr:<прозрачность> t:<время_изменения_прозрачности>
[<имя_анимации>]
call <имя_анимации>
- при загрузке меша начальное значение центра врашения/масштабирования совпадает с началом координат загружаемого меша (и ЦМ соответсвенно) и равно (0;0;0)
- также при загрузке меша начальное значение прозрачности по умолчанию равно 100% (меш не видно) и аналогично команде trnsparency <объект> tr:100 t:0
- set_pivot <объект> без вектора, сбрасывает центр в начало координат меша.
пока вот такая мысль.
|
|
|
sedoy 333 EGP
Репутация: 65 Сообщения: 1057 Откуда: красноярск Зарегистрирован: 25.07.2002 |
|
Волкодав, рад что ты тут появился
Wolvescrush : |
С синтаксисом у меня последняя придумка такая
|
идея очень! интересная, я над такой не думал
только вот тут
<время начала> <идентификатор объекта> <код параметра> <начальное значение параметра> <конечное значение> <время исполнения строки>
я бы предложил брать текущее значение параметра
чтоб не вспоминать а где объект находится сейчас а просто продолжать анимацию. ну а если нужно объект мгновенно изменить по положению - просто ставить нулевое время исполнения
|
|
|
Jurec 348 EGP
Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Итак, хоть и время у меня было очень мало - анимацию я сделал.. Теперь остаёться расширять скрипты новыми командами.
Чёрт, никак не могу грузануть, присланную мне Shnyrik`ом, сцену с материалами. А руками материалы расставлять - это ужос. Может просто отослать редактор? Правда он сложный...
_________________ MOV topka, C++ |
|
|
|
|
|
Канал Игры Мечты ->
Канал проекта YGRIS: «Анимация» |
|