кто-нить прогал на Maramlade, проблема с костями в GLES2
мы написали свою библиотечку для костей, долго смотрели что до как и что можно юзать, проебались сильно и долго, зато независимо + оптимизировали по памяти круто ограничение на кости нет, повторное использование мешей ну итдмы написали свою библиотечку для костейчто именно делали?
свои шейдеры писали? или как-то уровнем повыше правили?
мишка угарный
у этого мишки 76 костей и 4к полигонов на всех устройствах без бампа он дает максимум фпс, с бампом идет просадка
P.S. То ж в Marmalade сижу. Доки и сообщества весьма печальны
я свое второе приложение, которое в гуглопомойке(карточный пасьянс написал юзая андэнжайн и все равно его подковыривал под себя(на a кстати я как-то с разработчиком движка пересекся он меня убеждал, как делать надо было там, такие костыли он предлагал поэтому мы пишем все вещи сами практически с нуля.
Но мы специализируемся на волпаперах, поэтому для ап иос неактуален хотя в нейтиве не юзается ничего андройдоспецифичного
а не подскажешь как в Мармеладе попроще узнать виден объект в данный момент или нет?это вроде называется oct tree если он его строит ищи мб и есть это
плюс мармелада в том, что он под "все" платформы
вы лучше скажите, вы на работе девелопите под мармелад или дома, лицензии у Вас какие ?
Я дома, лицензия самая дешевая - так что только iOS + Android.
давно занимаешься или только начал ? есть что-нить в маркетах?
Поскольку С++/OpenGL плохо знаю, то пришлось вот купить мармелад - он часть головняка по загрузке моделей и менеджерам ресурсов снял.
Вчера вот еще Lua прикрутил - стало веселее.
вы лучше скажите, вы на работе девелопите под мармелад или дома, лицензии у Вас какие ?на работе, второй
только начинаем
пока купили indie, если все ок будет, то купим подороже
ну там же псевдо. юнити она тоже под все платформы, а все равно подпиливать приходится =)я так понял, что преимущество в том, что куча готового для ресурсов, прокладка для графической части и всякие утилитарные вещи (свои матрицы, вектора и т.д.)
+ вроде как компилится в нативный код, что вроде как дает преимущество в скорости
+ вроде как компилится в нативный код, что вроде как дает преимущество в скоростину скрипты не компилятся вроде, в юнити жаваскрипт подобное, в мармеладе луа.
я с чуваком работал он писал свой движок, он юзал как раз си подобный скриптязык, который разработал кто-то из наших девелоперов, работающий в какой-то отечественной гейм девелопмент студии довольно крупной, там скрипты компилятся.
то что нативное это и ежику понятно
в юнити жаваскрипт подобноеВ Unity C# же, с полноценной поддержкой Visual Studio. Кстати, не стоит забывать про Unity Asset Store, хоть и приходится выкидывать на помойку около 60% купленных моделек.
прошу подсказать:
я правильно понимаю, что
1. для реализации скелетной анимации придется писать шейдер, кости хранить в юниформе (массив кватернионов, т.к. предполагается до 64 костей индекс текущих костей передавать через атрибут (вектор с индексами 4х костей и весами)
2. для реализации других шейдерных эффектов (освещение множественными источниками, бамп-мэппинг и т.д.) придется либо пихать их тот же шейдер, либо рендерить в текстуру и потом накладывать ее на поверхности
3. т.е. не получится обработать в одном вершинном шейдере сначала преобразование вершин для скелетной анимации, а потом в другом шейдере добавить, к примеру, дополнительный сдвиг и искажений этих же вершин? или можно взять набор вершин, обработать их одним шейдером, а потом обработать их другим шейдером так, чтобы их эффект умножался
Я правильно понял, что по умолчанию правосторонняя (ноль в левом верхнем углу, OX - слева направо, OY сверху вниз, OZ торчит в пользователя)?
А можно как то поменять на левостороннюю: ноль центр экрана, OX - слева направо, OY - вверх, OZ - от пользователя. scale(-1) не помогает.
А можно как то поменять на левостороннюю: ноль центр экрана, OX - слева направо, OY - вверх, OZ - от пользователя. scale(-1) не помогает.а зачем?
вы зеркало рисуете?
О, может подскажешь, раз так далеко закопался. Какую систему координат используете?
я закопался в теорию
поэтому твой вопрос ставит меня в тупик
но вообще правосторонняя, наверное
Мне хочется, чтобы было интуитивно понятно, где у меня объект, т.е. задаю координаты (100, 0, 100) - это значит правее и спереди меня на один метр.
Право и лево сторонняя, это какой рукой её можно изобразить, если большой палец OX, указательный OY, средний OZ.не, ну я знаю, конечно, что такое лево- и провосторонние со
просто не уверен, какая именно используется в opengl и мармеладе
скорее всего правосторонняя
P.S. Только доперло - можно из исходной системы сделать чтобы OXY были горизонтальной плоскостью, просто повернув первоначальную систему, тогда в этом случае позиция указанного выше объекта можно задать как (100, 100, 0 что то же интуитивно понятно. Вечером попробую
Как не знаешь, а как же вы объекты то позиционируете то?!я пока просто пытаюсь написать шейдер и добавить его к материалу и отрендерить с ним сцену
сам понимаешь, тут безразлично какая со используется
еще раз, зачем тебе переводить из одной со в другую?
Мне хочется, чтобы было интуитивно понятно, где у меня объект, т.е. задаю координаты (100, 0, 100) - это значит правее и спереди меня на один метр.есть два подхода:
можешь крутить глобальную систему координат, можешь у себя в мозгу крутить
второе предпочтительнее
ну и вообще все зависит от положения камеры
можешь ее крутить
1. для реализации скелетной анимации придется писать шейдер, кости хранить в юниформе (массив кватернионов, т.к. предполагается до 64 костей индекс текущих костей передавать через атрибут (вектор с индексами 4х костей и весами)ты че хочешь повесить просчет анимации на видюху ?
ты че хочешь повесить просчет анимации на видюху ?а что не так?
скелет крутим на CPU
а вершины обсчитываем на GPU: для каждой зная положение костей, их веса и bindPos высчитываем результирующее положение
надо смотреть стоимость передачи весов в шейдер на устройствах
надо смотреть стоимость передачи весов в шейдер на устройствахвеса - это один vec4
индексы костей - либо vec4 int либо вообще 1 int
передается через атрибут вершины
кости через юниформ: 128 кватернионов
итого: имеем массив 64 кватерниона повороты костей, 64 vec4 координаты костей (все это можно упаковать в 32 матрицы 4х4 - ровно столько, сколько мармелад запихивает в свой юниформ с костями);
для каждой вершины передаем через атрибуты 2 вектора: индексы костей, веса костей
в шейдере распаковываем юниформ для нужных индексов (тут немного говнокод будет, т.к. 3я кость будет лежать в bones[1] в первых двух столбцах)
считаем результирующую матрицу преобразования (4 кости, смещение и поворот) и преобразовываем вершину
ну потом как обычно проектируем ее в view пространство
проблема в том, что придется выкинуть на помойку все уже готовые эффекты от мармелада и писать самому освещение (пока не знаю, каким образом мы его будем реализовывать)
я как-то читал статью на хабре про то как делался дьябло третий вот там уже все данные влетали в шейдер готовые а шейдер тупо только множит
что в шейдере if очень дорого.я пока не заметил в своей реализации if
напиши свой кусок когда для одной вершины два -три веса и две три кости
напиши свой кусок когда для одной вершины два -три веса и две три костив чем проблема передавать нулевой вес?
на одну вершину может воздействовать от 0 до n костей
или ты хочешь максимизировать передачу? скажем если максимум 4 кости то делаем для всех передачу в 4 веса и индекса ?
или ты хочешь максимизировать передачу? скажем если максимум 4 кости то делаем для всех передачу в 4 веса и индекса ?4 кости на вершину, имхо, должно хватить для мобильного приложения
не надо никаких if - просто если передаем меньше 4х костей, то зануляем веса для "лишних"
а какой формат скелетника юзаешь ?
я юзаю колладу и конвертер в свой формат, щас пишу свою обертку для луа так просто больше поиграться ибо чистяком на плюсах задирает сводить анимации
а какой формат скелетника юзаешь ?мармеладовский?
у них там своя атмосфера:
CIwAnim
{
skeleton "joint1"
// Keyframe# 1
CIwAnimKeyFrame
{
time 0
bone "joint1"
pos {0,0,-1715.52380}
rot {-0.70325,0,0.71094,0}
bone "joint2"
pos {579.81592,0,0.00000}
rot {0.99994,0,0.01093,0}
bone "joint3"
pos {573.51434,0,0.00000}
rot {0.99994,0,-0.01093,0}
bone "joint4"
pos {579.81592,0,0.00000}
rot {0.99994,0,0.01099,0}
bone "joint5"
pos {567.21277,0,-0.00000}
rot {0.99998,0,-0.00556,0}
bone "joint6"
pos {579.78174,0,-0.00000}
rot {0.99998,0,-0.00549,0}
}
....
скелетникая еще не совсем гуру 3d, если честно, поэтому не понимаю жаргона
может ты про плеер анимации спрашиваешь?
тогда мармеладовский, на линейной интерполяции
я имел ввиду меш+кости формат модели.
я имел ввиду меш+кости формат модели.это тоже мармеладовское
такого же плана как выше: текстовый, человеко-понятный
Блин, думал какие то чудеса в Мармеладе с системами координат, а оказалось тупо экспортер из блендера в Мармелад с косяком
экспортер из блендера в Мармелад с косякоместь такое
их же официальный экспортер из майи никак у меня установиться не мог
только руками и поставился
Оставить комментарий
PooH
сам не шарю вообще, но скоро будупока читаю доку по самому мармеладу и по opengles, много нового и сложного
сама проблема в том, что есть моделька и в ней порядка 40-50 костей
в GLES 1.0 все ок, моделька показывается и крутит анимацию
в GLES 2.0 возникают проблемы, программа валится в assert и моделька отображается криво
гугление показало, что проблема в том, что в GLES2.0 введено ограничение на 32 кости в модели
какие способы решения есть?
т.к. я не сильно шарю, то не могу прикинуть оптимальный способ, как это сделать