кто-нить прогал на Maramlade, проблема с костями в GLES2
мы написали свою библиотечку для костей, долго смотрели что до как и что можно юзать, проебались сильно и долго, зато независимо + оптимизировали по памяти круто ограничение на кости нет, повторное использование мешей ну итд
вот результат
http://www.youtube.com/watch?feature=player_embedded&v=...
вот результат
http://www.youtube.com/watch?feature=player_embedded&v=...
мы написали свою библиотечку для костейчто именно делали?
свои шейдеры писали? или как-то уровнем повыше правили?
мишка угарный
шейдер тут не причем, цель библиотеки готовит выход данных(причем кастомизированный, хочешь нормали, хочешь тангенты) от времени, анимации итд, она mvc полностью, я вообще все вещи прототипирую на 1ом gl и рисую им же на компе стационарном. обсчет костей мы не убирали на gpu, все считается на cpu, хотя была такая идея убрать, все таки видюхи слабоваты еще для этого на устройствах, там шейдер строчек 30.
у этого мишки 76 костей и 4к полигонов на всех устройствах без бампа он дает максимум фпс, с бампом идет просадка
у этого мишки 76 костей и 4к полигонов на всех устройствах без бампа он дает максимум фпс, с бампом идет просадка
, а не подскажешь как в Мармеладе попроще узнать виден объект в данный момент или нет?
P.S. То ж в Marmalade сижу. Доки и сообщества весьма печальны
P.S. То ж в Marmalade сижу. Доки и сообщества весьма печальны

я про мармелад только слышал, но его не юзал, я просто сказал, что проблема всех этих библиотек, что они конечно многие вещи делают просто и при этом имеют хорошую техподдержку, типа проект постоянно обновляется итд, но шаг влево шаг вправо сразу же накладывает определенные рестрикшены.
я свое второе приложение, которое в гуглопомойке(карточный пасьянс написал юзая андэнжайн и все равно его подковыривал под себя(на a кстати я как-то с разработчиком движка пересекся он меня убеждал, как делать надо было там, такие костыли он предлагал поэтому мы пишем все вещи сами практически с нуля.
Но мы специализируемся на волпаперах, поэтому для ап иос неактуален хотя в нейтиве не юзается ничего андройдоспецифичного
я свое второе приложение, которое в гуглопомойке(карточный пасьянс написал юзая андэнжайн и все равно его подковыривал под себя(на a кстати я как-то с разработчиком движка пересекся он меня убеждал, как делать надо было там, такие костыли он предлагал поэтому мы пишем все вещи сами практически с нуля.
Но мы специализируемся на волпаперах, поэтому для ап иос неактуален хотя в нейтиве не юзается ничего андройдоспецифичного
а не подскажешь как в Мармеладе попроще узнать виден объект в данный момент или нет?это вроде называется oct tree если он его строит ищи мб и есть это
плюс мармелада в том, что он под "все" платформы
ну там же псевдо. юнити она тоже под все платформы, а все равно подпиливать приходится =)
вы лучше скажите, вы на работе девелопите под мармелад или дома, лицензии у Вас какие ?
вы лучше скажите, вы на работе девелопите под мармелад или дома, лицензии у Вас какие ?
Я дома, лицензия самая дешевая - так что только iOS + Android.
давно занимаешься или только начал ? есть что-нить в маркетах?
Не, хобби. Хочу махонькую игру сделать.
Поскольку С++/OpenGL плохо знаю, то пришлось вот купить мармелад - он часть головняка по загрузке моделей и менеджерам ресурсов снял.
Вчера вот еще Lua прикрутил - стало веселее.
Поскольку С++/OpenGL плохо знаю, то пришлось вот купить мармелад - он часть головняка по загрузке моделей и менеджерам ресурсов снял.
Вчера вот еще Lua прикрутил - стало веселее.
вы лучше скажите, вы на работе девелопите под мармелад или дома, лицензии у Вас какие ?на работе, второй
только начинаем
пока купили indie, если все ок будет, то купим подороже
ну там же псевдо. юнити она тоже под все платформы, а все равно подпиливать приходится =)я так понял, что преимущество в том, что куча готового для ресурсов, прокладка для графической части и всякие утилитарные вещи (свои матрицы, вектора и т.д.)
+ вроде как компилится в нативный код, что вроде как дает преимущество в скорости
+ вроде как компилится в нативный код, что вроде как дает преимущество в скоростину скрипты не компилятся вроде, в юнити жаваскрипт подобное, в мармеладе луа.
я с чуваком работал он писал свой движок, он юзал как раз си подобный скриптязык, который разработал кто-то из наших девелоперов, работающий в какой-то отечественной гейм девелопмент студии довольно крупной, там скрипты компилятся.
то что нативное это и ежику понятно
в юнити жаваскрипт подобноеВ Unity C# же, с полноценной поддержкой Visual Studio. Кстати, не стоит забывать про Unity Asset Store, хоть и приходится выкидывать на помойку около 60% купленных моделек.

в итоге все уперлось в написание собственных шейдеров
прошу подсказать:
я правильно понимаю, что
1. для реализации скелетной анимации придется писать шейдер, кости хранить в юниформе (массив кватернионов, т.к. предполагается до 64 костей индекс текущих костей передавать через атрибут (вектор с индексами 4х костей и весами)
2. для реализации других шейдерных эффектов (освещение множественными источниками, бамп-мэппинг и т.д.) придется либо пихать их тот же шейдер, либо рендерить в текстуру и потом накладывать ее на поверхности
3. т.е. не получится обработать в одном вершинном шейдере сначала преобразование вершин для скелетной анимации, а потом в другом шейдере добавить, к примеру, дополнительный сдвиг и искажений этих же вершин? или можно взять набор вершин, обработать их одним шейдером, а потом обработать их другим шейдером так, чтобы их эффект умножался
прошу подсказать:
я правильно понимаю, что
1. для реализации скелетной анимации придется писать шейдер, кости хранить в юниформе (массив кватернионов, т.к. предполагается до 64 костей индекс текущих костей передавать через атрибут (вектор с индексами 4х костей и весами)
2. для реализации других шейдерных эффектов (освещение множественными источниками, бамп-мэппинг и т.д.) придется либо пихать их тот же шейдер, либо рендерить в текстуру и потом накладывать ее на поверхности
3. т.е. не получится обработать в одном вершинном шейдере сначала преобразование вершин для скелетной анимации, а потом в другом шейдере добавить, к примеру, дополнительный сдвиг и искажений этих же вершин? или можно взять набор вершин, обработать их одним шейдером, а потом обработать их другим шейдером так, чтобы их эффект умножался
О, может подскажешь, раз так далеко закопался. Какую систему координат используете?
Я правильно понял, что по умолчанию правосторонняя (ноль в левом верхнем углу, OX - слева направо, OY сверху вниз, OZ торчит в пользователя)?
А можно как то поменять на левостороннюю: ноль центр экрана, OX - слева направо, OY - вверх, OZ - от пользователя. scale(-1) не помогает.
Я правильно понял, что по умолчанию правосторонняя (ноль в левом верхнем углу, OX - слева направо, OY сверху вниз, OZ торчит в пользователя)?
А можно как то поменять на левостороннюю: ноль центр экрана, OX - слева направо, OY - вверх, OZ - от пользователя. scale(-1) не помогает.
А можно как то поменять на левостороннюю: ноль центр экрана, OX - слева направо, OY - вверх, OZ - от пользователя. scale(-1) не помогает.а зачем?
вы зеркало рисуете?
О, может подскажешь, раз так далеко закопался. Какую систему координат используете?

я закопался в теорию
поэтому твой вопрос ставит меня в тупик
но вообще правосторонняя, наверное
Право и лево сторонняя, это какой рукой её можно изобразить, если большой палец OX, указательный OY, средний OZ.
Мне хочется, чтобы было интуитивно понятно, где у меня объект, т.е. задаю координаты (100, 0, 100) - это значит правее и спереди меня на один метр.
Мне хочется, чтобы было интуитивно понятно, где у меня объект, т.е. задаю координаты (100, 0, 100) - это значит правее и спереди меня на один метр.
Право и лево сторонняя, это какой рукой её можно изобразить, если большой палец OX, указательный OY, средний OZ.не, ну я знаю, конечно, что такое лево- и провосторонние со
просто не уверен, какая именно используется в opengl и мармеладе
скорее всего правосторонняя
Как не знаешь, а как же вы объекты то позиционируете то?!
P.S. Только доперло - можно из исходной системы сделать чтобы OXY были горизонтальной плоскостью, просто повернув первоначальную систему, тогда в этом случае позиция указанного выше объекта можно задать как (100, 100, 0 что то же интуитивно понятно. Вечером попробую
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 очень дорого.я пока не заметил в своей реализации if
напиши свой кусок когда для одной вершины два -три веса и две три кости
напиши свой кусок когда для одной вершины два -три веса и две три костив чем проблема передавать нулевой вес?
брр, какой нулевой вес?
на одну вершину может воздействовать от 0 до n костей
или ты хочешь максимизировать передачу? скажем если максимум 4 кости то делаем для всех передачу в 4 веса и индекса ?
на одну вершину может воздействовать от 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 кости в модели
какие способы решения есть?
т.к. я не сильно шарю, то не могу прикинуть оптимальный способ, как это сделать