Войти
ПрограммированиеФорумОбщее

сравнение позы

Страницы: 1 2 Следующая »
#0
13:09, 5 июня 2019

господа программисты, подскажите пожалста как оптимально и наиболее точно сравнить две позы персонажа.
допустим есть пара персов в Юнити, и некоторая шаблонная поза. нужно посчитать при его движении некий коээфициент соответствия заданной.


#1
20:33, 5 июня 2019

Можно взять среднеквадратичное отклонение

#2
20:37, 5 июня 2019

Андрей5000
> среднеквадратичное отклонение
вычислить дистанцию между всеми звеньями и посчитать у этого массива СО?

#3
0:32, 6 июня 2019

Mira
Да, между позициями костей и solid angle их ориентаций, если у тебя кости.

#4
0:45, 6 июня 2019

спасибо) вроде хороший вариант!

#5
13:33, 6 июня 2019

Андрей5000
> solid angle
хммм с углом что-то не понял.
solid angle это конический угол охватывающий некоторое объемное пространство. а не просто угол поворота. применяется в основном для расчетов с обхемными телами а тут кости.

или вы под solid angle имеете ввиду разницу локальных вращений костей?

#6
(Правка: 14:04) 13:57, 6 июня 2019

Mira
Мне кажется будет достаточно дистанции померить и все. Углы нужны будут только для конечных костей без детей, их можно дополнить виртуальными дополнительными контрольными точками.

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

#7
(Правка: 14:11) 14:10, 6 июня 2019

foxes
да хрен знает, одних поворотов не хватит для верной оценки ИМХО. вращения они коварные я заметил)
можно совершенно другим набором вращений получить схожую позу.

думаю попробовать массив растояний костей ( ну дистанция например локтя позы 1 от локтя позы2) и + массив угловых дистанций локальных вращений так же. для них посчитать среднеквадратичное...

#8
(Правка: 14:30) 14:29, 6 июня 2019

Mira
> можно совершенно другим набором вращений получить схожую позу

Если вращения перевести в кватернионы, то одинаковые позы будут только при одинаковых значениях кватернионов, независимо от последовательности элементарных вращений. Исключение только если есть "цилиндрические" части тела, абсолютно осесимметричные по распределению скина, либо какие-то кости, абсолютно не влияющие на скин, но имеющие дочерних костей.

#9
18:28, 6 июня 2019

с углами вот такая байда еще
зависит от иерархии сильно и как это учитывать не понятно. вот 4 картинки с примерно одинаковой суммарной дельтой по углам, но 1 и 3 например уже можно сказать что другая поза
Изображение

#10
(Правка: 19:05) 18:55, 6 июня 2019

Mira
> с примерно одинаковой суммарной дельтой по углам
Ты сложил все повороты одной модели и эту сумму сравнил с другой?
Если я суммирую развернутую модель с двумя костями -90 и 90 то получу 0, то есть любая модель с двумя костями, повернутыми противоположно на любой градус, будет одинакова.
Тут надо абсолютную разность, между моделями, складывать или просто проверять порог разности без сложения. И только локальные повороты.

Можно таким образом приоритеты в виде весов выстроить для каждой кости, чтобы выражение лица или положение пальцев не влияли на сравнение.

#11
20:06, 6 июня 2019

foxes
> Можно таким образом приоритеты в виде весов выстроить для каждой кости, чтобы
> выражение лица или положение пальцев не влияли на сравнение.
дак вот, в ручную это подбирать морока

#12
(Правка: 21:57) 21:56, 6 июня 2019

Mira
Среднее считать тоже не по феншую, если всего одна кость из 40 отличается достаточно сильным поворотом (скажем в спине), то это 40/40 = 1 отличие на единицу, а положения разные и результат будет плачевным.

#13
23:05, 6 июня 2019

ну вообще да... а как еще. не нейросетью же сравнивать такую ерунду)

#14
(Правка: 1:39) 1:31, 7 июня 2019

Mira
Я уже привел пример, короче говоря как массивы, только за равенство считать

if (abs(a[i]-b[i])>max) return false;
или с весами, почти нейросеть.
if (abs(a[i]-b[i])>max[i]) return false;
Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее