ЛОГИКА ПОСЛЕДОВАТЕЛЬНОСТЕЙ NLA привязок для интерактива 3д пространства
06 апреля 2015 11:16
Добрый день, у нас назрело решение ваших трудностей:
1)Одна из главных проблем это то, что у вас на объектах кроме изменений положения объекта методом анимации на всех объектах так же присутствует собственное вращение и масштаб. Если в случае статической геометрии достаточно поставить Apply Scale то в случае с последующей анимацией это не будет работать, так как блендер создаёт анимацию с учетом константных изменений объекта, и когда движок эти изменения применит к геометрии во время экспорта (методом Apply Scale) то вы увидите совершенно другой результат. Решение: обязательно применять все изменения Rotation и Scale перед созданием анимации.
2)При использовании NLA анимации не нужно выставлять на объектах Use Default Animation.
3)У вас на некоторых объектах стоит галочка Render Above All - это достаточно специфический эффект, который лучше всего применять к каким то объектам с которым не будет происходить взаимодействий и которые не будут заслонять интерактивные объекты. В вашем случае объекты с Render Above All просто перебивают объекты которые ждут нажатия от пользователя и соответственно не реагируют на него.
Так же небольшое пояснения по поводу NLA стрипов:
1)Для резкого смещения геометрии лучше всего использовать константную интерполяцию между ключами, тогда это будет одномоментный перескок с ключа на ключ (я сделал её вам в примере). Но в таком случае стрип толжен иметь один холостой ключ после нужного изменения (так же видно в приложенном файле), это сделано для того чтобы анимация проигралась до конца так как при константной интерполяции изменения происходят в момент последнего кадра который не проигрывается в случае если после него нет больше кадров.
2)Так же при расстановке маркеров, вся анимация должна быть завершена на один кадр до маркера которым заканчивается каждый блок NLA Script'а, так как кадр на котором стоит маркер окончания блока уже не проигрывается. Но его можно использовать как первый кадр следующего блока который уже проигрывается.
В сущности с самой логикой NLA Script'а у вас всё в порядке, проблемы лишь в подготовке контента для экспорта. Так как блендер позволяет делать большое количество взаимодействий между своими элементами, и благодаря этому даёт большой спектр решений тех или иных задач, то создать тот или иной эффект можно многими способами, но не все они поддерживаются движком Blend4Web. Если бы мы поддержали все варианты анимаций которые могут быть созданы в Blender то и работало по скорости это так же как и проигрывается во вьюпорте Blender, поэтому с целью оптимизации мы вынуждены минимизировать те данные которые экспортируются в движок. Поэтому очень важно более тщательно и избирательно подходить к выбору тех или иных методов создания контента и анимации для экспорта. Лучше ограничиваться простыми вещами не создавая излишне сложных взаимодействий и зависимостей. Надеемся на понимание.
1)Одна из главных проблем это то, что у вас на объектах кроме изменений положения объекта методом анимации на всех объектах так же присутствует собственное вращение и масштаб. Если в случае статической геометрии достаточно поставить Apply Scale то в случае с последующей анимацией это не будет работать, так как блендер создаёт анимацию с учетом константных изменений объекта, и когда движок эти изменения применит к геометрии во время экспорта (методом Apply Scale) то вы увидите совершенно другой результат. Решение: обязательно применять все изменения Rotation и Scale перед созданием анимации.
2)При использовании NLA анимации не нужно выставлять на объектах Use Default Animation.
3)У вас на некоторых объектах стоит галочка Render Above All - это достаточно специфический эффект, который лучше всего применять к каким то объектам с которым не будет происходить взаимодействий и которые не будут заслонять интерактивные объекты. В вашем случае объекты с Render Above All просто перебивают объекты которые ждут нажатия от пользователя и соответственно не реагируют на него.
Так же небольшое пояснения по поводу NLA стрипов:
1)Для резкого смещения геометрии лучше всего использовать константную интерполяцию между ключами, тогда это будет одномоментный перескок с ключа на ключ (я сделал её вам в примере). Но в таком случае стрип толжен иметь один холостой ключ после нужного изменения (так же видно в приложенном файле), это сделано для того чтобы анимация проигралась до конца так как при константной интерполяции изменения происходят в момент последнего кадра который не проигрывается в случае если после него нет больше кадров.
2)Так же при расстановке маркеров, вся анимация должна быть завершена на один кадр до маркера которым заканчивается каждый блок NLA Script'а, так как кадр на котором стоит маркер окончания блока уже не проигрывается. Но его можно использовать как первый кадр следующего блока который уже проигрывается.
В сущности с самой логикой NLA Script'а у вас всё в порядке, проблемы лишь в подготовке контента для экспорта. Так как блендер позволяет делать большое количество взаимодействий между своими элементами, и благодаря этому даёт большой спектр решений тех или иных задач, то создать тот или иной эффект можно многими способами, но не все они поддерживаются движком Blend4Web. Если бы мы поддержали все варианты анимаций которые могут быть созданы в Blender то и работало по скорости это так же как и проигрывается во вьюпорте Blender, поэтому с целью оптимизации мы вынуждены минимизировать те данные которые экспортируются в движок. Поэтому очень важно более тщательно и избирательно подходить к выбору тех или иных методов создания контента и анимации для экспорта. Лучше ограничиваться простыми вещами не создавая излишне сложных взаимодействий и зависимостей. Надеемся на понимание.
Blend4Web и всё такое. Тридешу тридэ, моделю модели.
06 апреля 2015 12:04
Ответ на сообщение пользователя Михаил Лузянин
Добрый день, у нас назрело решение ваших трудностей:
Надеемся на понимание.
Благодарю вас за некоторое дополнительное полезное разъяснение)
постараюсь освоить максимально ваш движок вижу за ним большое будущее в области инет приложений
есть еще пара вопросов
1- можноли делать привязку текстуры к камере типа принципа биллборд только для текстуры на плашке,или на грани куба ,чтоб при перевороте объекта текстура восстанавливала автоматически положение правильное по отношению к камере для удобства чтения контента
2-как делать светящююся линию типа оси в 3д пространстве которая бы при приближении не утолщалась бы для экспорта в чтмл
Всех Благ
Роман
Роман
06 апреля 2015 14:32
1- можноли делать привязку текстуры к камере типа принципа биллборд только для текстуры на плашке,или на грани куба ,чтоб при перевороте объекта текстура восстанавливала автоматически положение правильное по отношению к камере для удобства чтения контентаКонечно всё зависит от того что вы хотите добиться, но можно (пример прикреплен в ответе):
1)в UV-пространство текстуры подать либо векторные координаты типа View из ноды Geomety,
2)или Vector View из ноды Camera Data, но центр текстуры будет привязан к центру камеры и смещаться при смещении камеры,
3)так же можно воспользоваться Vector View из ноды Lamp Data, но в таком случае в цетре объекта нужно поставить лампу (лучше всего отключить на ней Specular и Diffuse тогда она будет работать только как точка отсчета текстурных координат), и тогда центром для текстуры будет служить центр лампы
2-как делать светящююся линию типа оси в 3д пространстве которая бы при приближении не утолщалась бы для экспорта в htmlК сожалению такого функционала на данный момент нет.
Blend4Web и всё такое. Тридешу тридэ, моделю модели.
06 апреля 2015 16:05
чета всеравно не получается вроде сделал как вы написали
аниамции константами
apply scale проставил
плюс почему то куб в какойто момент вообще перестает интерактивится не вращается….
как мне всетаки достичь чтоб каждая грань независимо друг от друга появлялась и исчезала?
ЧТОБ ЧЕТКО БЫЛО, ТИПА НАЖАЛ НА ГРАНЬ ПОЯВИЛАСЬ ТАБЛИЦА, НАЖАЛ НА ТАБЛИЦУ ОНА ИСЧЕЗЛА И ТАК ЧТОБ ВСЕ ГРАНИ ФУНКЦИОНИРОВАЛИ НЕЗАВИСИМО ДРУГ ОТДРУГА
этоже простейшие функции а столько геморойной отладки… видимо я еще не освоил чегото в связях фукций в Б4веб…
ПОМОГИТЕ пожалуйста
аниамции константами
apply scale проставил
плюс почему то куб в какойто момент вообще перестает интерактивится не вращается….
как мне всетаки достичь чтоб каждая грань независимо друг от друга появлялась и исчезала?
ЧТОБ ЧЕТКО БЫЛО, ТИПА НАЖАЛ НА ГРАНЬ ПОЯВИЛАСЬ ТАБЛИЦА, НАЖАЛ НА ТАБЛИЦУ ОНА ИСЧЕЗЛА И ТАК ЧТОБ ВСЕ ГРАНИ ФУНКЦИОНИРОВАЛИ НЕЗАВИСИМО ДРУГ ОТДРУГА
этоже простейшие функции а столько геморойной отладки… видимо я еще не освоил чегото в связях фукций в Б4веб…
ПОМОГИТЕ пожалуйста
Всех Благ
Роман
Роман
06 апреля 2015 17:04
Вы меня поняли совсем до наоборот.
Далее все вот эти чекбоксы не нужны и могут создавать трудности в работе с НЛА анимацией. Их нужно снять!
Далее в стрипах ненужно делать пусные поля. Разберем анимацию попарядку на примере одного из кубов.
1) Это ключ начального положения плэйна, он совпадает с маркером один.
2) Это ключ смещеноо плэйна за границы видимости он на один кадр раньше маркера начала следующего блока
3) это предыдущий дублированный ключ совпадающий с маркером начала следующего блока для указания что плэйна в начале следующего блока находится всё так же
4) это ключ нового положения смещенного плэйна находится на один кадр раньше маркера окончания блока
5)Это ключ дублированный предыдущего фрэйма который не будет проигрываться но который позволяет сохранить положение перемещения предыдущему ключу когда используется константный метод интерполяции между ключами.
QbeVector_Biof_v_06_04_15 v1.blend
QbeVector_Biof_v_06_04_15_V1.html
apply scale проставилВ данном случае Apply Scale не может помоч, нужно вручную до создания анимации(ВАЖНО!) применить все имеющиеся изменеия на объекте как показано ниже.
Далее все вот эти чекбоксы не нужны и могут создавать трудности в работе с НЛА анимацией. Их нужно снять!
Далее в стрипах ненужно делать пусные поля. Разберем анимацию попарядку на примере одного из кубов.
1) Это ключ начального положения плэйна, он совпадает с маркером один.
2) Это ключ смещеноо плэйна за границы видимости он на один кадр раньше маркера начала следующего блока
3) это предыдущий дублированный ключ совпадающий с маркером начала следующего блока для указания что плэйна в начале следующего блока находится всё так же
4) это ключ нового положения смещенного плэйна находится на один кадр раньше маркера окончания блока
5)Это ключ дублированный предыдущего фрэйма который не будет проигрываться но который позволяет сохранить положение перемещения предыдущему ключу когда используется константный метод интерполяции между ключами.
как мне всетаки достичь чтоб каждая грань независимо друг от друга появлялась и исчезала?NLA анимация не позволяет полностью распараллелить все проигрываемые стрипы. Она создана для простой незамысловатой интерактивности. Если вы посмотрите пример с вертолётом то вы не можете например одновременно отобразить несколько инфографик, так как для того что бы ругая инфографика могла проиграться на открытие предыдущая должна проиграть свои анимационные ключи закрытия. То есть это скорее похоже на просто перескок по таймлайну в видео на Ютубе в нужные места. Что бы распараллелить и независимо друг от друга включать и переключать информацию необходимо программирование. Так что если ваша цель сделать возможность например по нажатию открывать одновременно на нескольких гранях куба информацию и независимо друг от друга скрывать её, то для этого не подходит метод NLA Script и необходимо программировать через API.
ЧТОБ ЧЕТКО БЫЛО, ТИПА НАЖАЛ НА ГРАНЬ ПОЯВИЛАСЬ ТАБЛИЦА, НАЖАЛ НА ТАБЛИЦУ ОНА ИСЧЕЗЛА И ТАК ЧТОБ ВСЕ ГРАНИ ФУНКЦИОНИРОВАЛИ НЕЗАВИСИМО ДРУГ ОТДРУГА
QbeVector_Biof_v_06_04_15 v1.blend
QbeVector_Biof_v_06_04_15_V1.html
Blend4Web и всё такое. Тридешу тридэ, моделю модели.
06 апреля 2015 17:36
Действительно, данное приложение значительно проще реализовать с помощью API. В таком случае не потребуется даже делать анимацию. В модуле scenes имеются функции show_object()/hide_objects(), которые могут быть использованы для того, чтобы скрыть или показать объект. Как сделать перехват нажатия мышью описано, например, в демо https://www.blend4web.com/ru/article/22.
Я настоятельно советую вам рассмотреть вариант с программированием, даже в случае, если решение Михаила вас устроит. В дальнейшем наращивать функционал будет намного проще.
Я настоятельно советую вам рассмотреть вариант с программированием, даже в случае, если решение Михаила вас устроит. В дальнейшем наращивать функционал будет намного проще.
Команда Blend4Web
https://twitter.com/AlexKowel
https://twitter.com/AlexKowel
09 апреля 2015 14:35
Благодарю вас за разъяснительную по настройке анимации в НЛА все заработало как надо) практически… теперь правда проблема с двумя гранями которые последние в нла анимациях, они правельно работают но их не видно с тылу они только заметны при вращении куба под большим углом просмотра они ставятся заметны…и работают по нажатию верно … немогу понять в чем проблема… посмотрите еще )?
Всех Благ
Роман
Роман
09 апреля 2015 15:00
Ответ на сообщение пользователя РоманВыставьте на объекте который исчезает Disable Frustram Culling, он у вас обрезается клипингом камеры из за неправильного построения Bounding Spheres. Мы разбираемся с причиной, а пока это должно помочь.
Благодарю вас за разъяснительную по настройке анимации в НЛА все заработало как надо) практически… теперь правда проблема с двумя гранями которые последние в нла анимациях, они правельно работают но их не видно с тылу они только заметны при вращении куба под большим углом просмотра они ставятся заметны…и работают по нажатию верно … немогу понять в чем проблема… посмотрите еще )?
Blend4Web и всё такое. Тридешу тридэ, моделю модели.
09 апреля 2015 15:55
Ответ на сообщение пользователя Михаил Лузянин
Выставьте на объекте который исчезает Disable Frustram Culling, он у вас обрезается клипингом камеры из за неправильного построения Bounding Spheres. Мы разбираемся с причиной, а пока это должно помочь.
А где эта функция находится? Disable Frustram Culling
Всех Благ
Роман
Роман