Войти
ПрограммированиеФорумГрафика

Скелетная анимация на пальцах. (комментарии) (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
19:55, 28 дек. 2012

Chaos_Optima
Так же быстрее:

float4 position = float4(In.position, 1.f);
matrix finalMatrix;
finalMatrix  = In.weights.x * mat[bones.x];
finalMatrix += In.weights.y * mat[bones.y];
finalMatrix += In.weights.z * mat[bones.z];
finalMatrix += In.weights.w * mat[bones.w];
// Позиция
position = mul(position, finalMatrix);
// Нормаль, тангент и пр.
normal = mul(In.normal, (float3x3)finalMatrix);

Стоит, наверное, добавить описание или статью про скиннинг на двойных кватернионах.


#31
20:44, 28 дек. 2012

Gurich
> Так же быстрее:
да, просто мне кажется то более наглядно не?

#32
23:48, 30 янв. 2013

Аналогично - скелетную анимацию сделал сам и понимаю как она работает.
Статья бесполезна.

#33
16:03, 7 фев. 2013

какая еще такая базе и резинная тфу - релизная матрица?

может localTransform, worldTransform

???

напиши еще как анимацию ног миксить с анимацией тела если они разные

скелетную анимацию сделал сам и понимаю как она работает.
Статья бесполезна.

#34
16:08, 7 фев. 2013

и привязка вершины к кости программно интересно услышать и распределение весов - ну тупо если я хочу имея скелет погнуть на нем процедурный меш и тп
задать без UI

#35
16:10, 7 фев. 2013

и твой шадер неуниверсален
посмотри на шадер нв демы , где арлекин бегает
все четко и с лупом

#36
16:12, 7 фев. 2013

>пример приложу но без исходников
а нафига новичкам курящим тему демо да еще и без исходников?

#37
16:15, 7 фев. 2013

и с тебя еще так же для новичков пример экспорта из maxAPI
)

на дтф была статья давнишняя - там все это описывалось

#38
16:53, 14 фев. 2013

А вообще в "правильных движках" и "по-правильному" вершины двигаются шейдерами? Вертексными? Если я использую к примеру модель VBO в OpenGL, у мну есть указатель на массив вершин, указатель на массив треугольников, указатель на массив индексов и т.д., я могу двигать вершины из шейдера?
Еще: fbx ведь поддерживает скелетную анимацию. А как там хранится это все? есть описание fbx'а в природе?

#39
18:52, 14 фев. 2013

Ох, как это я пропустил статью. :)

.Scotina
> вон Экзекутор писал, что то вроде "если нет примера, я и статью читать не буду")

Да да. :)
Зачем теория, которая на практике может вообще нифига не работает, а всё что в статье лишь фантазия автора. :)

> 1 — Индексы костей в вершине, обычно их бывает не больше четырёх.

Согласен, но спорно. В том же Думе 3 их больше 4, что-то около 8+.
В Unity как я понял тоже это значение больше 4ёх.
Я думаю фразу надо переписать как-то так:
1 - Индексы костей в вершине, обычно, при реализации скелетной анимации на GPU, их используют не больше четырёх

> 4 — Bind pose — это поза в которой была заклинена модель

Заклинена? Может заскинена?

> внутри файла это выглядит как массив обратных матриц на каждую кость и одна матрица для всей модели.

Не согласен, по разному бывает. У меня не обратная хранится и нет матрицы для всей модели.

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

Я понял о чём речь, но звучит как-то не понятно про эти ключи и массивы времени.

> Final[ i ] = ModelBindPose * Offset[ i ] * Bone[ i ];
> Final[ i ] = ModelBindPose * Offset[ i ] * Bone[ i ];

Дважды дублируется один и тот же код, но я так и не понял что такое Offset и откуда он взялся.
Ну а дальше смысл от меня ускользает, не очень понятно о чём идёт речь.

> Это только для позиции, таким же способом нужно обновить нормали, тангенты и бинормали.

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

Итог: Статья ничего не рассказывает на пальцах. Больше подходит на статью для термина "скелетная анимация", чтобы кратко общно рассказать что это, при этом не вдаваясь в детали.

San4es
> Еще: fbx ведь поддерживает скелетную анимацию. А как там хранится это все? есть описание fbx'а в природе?

Нужно курить документацию и примеры, курить усердно, потому что всё запутано и термины на всё у них свои. :)

#40
1:28, 15 фев. 2013

San4es
> А вообще в "правильных движках" и "по-правильному" вершины двигаются шейдерами?
> Вертексными? Если я использую к примеру модель VBO в OpenGL, у мну есть
> указатель на массив вершин, указатель на массив треугольников, указатель на
> массив индексов и т.д., я могу двигать вершины из шейдера?
да.
San4es
> Еще: fbx ведь поддерживает скелетную анимацию. А как там хранится это все? есть
> описание fbx'а в природе?
есть fbx sdk с примерами и полной документацией по формату.
Executor
> Зачем теория, которая на практике может вообще нифига не работает, а всё что в
> статье лишь фантазия автора. :)
ну пример я выложил, демка построена по тем принципам что в описаны в статье.
Executor
> Я думаю фразу надо переписать как-то так:
справедливо, но я крайне редко встречал игры где было больше 4 индексов.
Executor
> Заклинена? Может заскинена?
упс. поправлю, спасибо.
Executor
> Я понял о чём речь, но звучит как-то не понятно про эти ключи и массивы
> времени.
да мне тоже не нравится, но ничего лучше не придумал.
Executor
> но я так и не понял что такое Offset и откуда он взялся.
это BindPose кости.
Executor
> Не таким же. Для них уже ротейт матрица нужна, без транслейта, а если есть
> масштабирование, то ещё дополнительные действия.
да поправлю. просто в HLSL при умножении float3 на float4x4 берётся float3x3 то есть только матрица вращения. А масштабирование обычно роли не играет, оно может помешать только при условии что оно не равно направленно.

#41
9:47, 15 фев. 2013

Chaos_Optima
> ну пример я выложил, демка построена по тем принципам что в описаны в статье.

Это к тебе не относилось, я в общем объяснял свою позицию на этот счёт.

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

Вообще, на мой взгляд, тут может быть несколько вариантов.
Первый, это когда мы имеем фиксированный шаг времени, соответственно мы не храним в каждом ключе время, а храним только трансформации. То есть у нас просто массив трансформаций и значение FPS.

struct Key
{
  Transform transform;
};

struct Anim
{
  float fps;
  Key* keys;
};

Второй вариант, это когда в каждом ключе хранится время, то есть шаг времени между ключами не фиксированный.

struct Key
{
  Time time;
  Transform transform;
};

struct Anim
{
  Key* keys;
};

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

> это BindPose кости.

Ну так может и назвать её BindPose?

#42
10:32, 15 фев. 2013

В сталкере меньше 4 весов. Больше чем 4 веса это что-то странное;

#43
12:41, 15 фев. 2013

Andrey

В DOOM3 вроде как более 4 бывает :)

Кстати, есть в Сталкере привязка uniforms к register ?

#44
11:30, 16 фев. 2013

>Final[ i ] = ModelBindPose * Offset[ i ] * Bone[ i ];
>Offset - это BindPose кости.
Так, стоп-стоп, все стало гораздно непонятней. Тогда что же таке ModelBindPose ?
Статья дает хорошее начало, но после заголовка "Процесс" превращается в нечто сделанное наспех на коленке. Было бы очень здорово, если бы автор переписал ее, добавив больше списков, примеров, пояснений, картинок, шейдеров, кватернионов. Я понимаю, что понять это очень просто, вся проблема в особенностях реализации, в мелочах, новичкам приходится трудно.

У меня еще одна проблема, связанная с порядком умножения матриц и пространством костей. Я сейчас запишу неправильный порядок (или правильный, не могу понять), а потом прошу меня поправить.


И при этом все матрицы находятся в локальном пространстве кости. Так?

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.