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

Морфинг (custom character)

Страницы: 1 2 Следующая »
#0
11:56, 23 мая 2011

С недавних пор начал интересоваться созданием уникального персонажа. Пока что это касается лишь геометрических форм - то есть ширина головы, расстояние между глазами, ширина плеч. Когда-то поверхностно читал, что это делается морфингом - то есть создаются различные персонажи, высокие, низкие, толстые, худые и производится морфинг-бленд между ними. Вроде в теории все просто, но я не могу понять как сделать высокого толстого человека, к примеру. Ведь я делаю бленд между низким-высоким, и между толстым-худым. Но толстый и худой имеет ведь свой рост!

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

#1
17:06, 23 мая 2011

а может просто скейл объекта по высоте и ширине?

#2
17:36, 23 мая 2011

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

#3
17:42, 23 мая 2011

nes
> а может просто скейл объекта по высоте и ширине?
Нет, там не скейл. Там "просто" разные модели, слепленные из одной и той же сетки. Т.е. торс и высокого, и толстого - состоит из одного и того же числа вершин. Поэтому простой интерполяцией позиций вершин можно получить промежуточные состояния.

AntonV
Гугли makehuman. Там куча всякого есть. В потрохах версии для блендера можно поковыряться.

#4
18:10, 23 мая 2011

RPGman
> Т.е. торс и высокого, и толстого - состоит из одного и того же числа вершин.
Но ведь толстый тоже имеет свой "рост"? Чтобы корректно интерполировать, нужно тогда иметь высокого толстого, низкого толстого, высокого худого, низкого худого!?

#5
13:55, 24 мая 2011
morph | Морфинг (custom character)

Вот то, что я имею в виду. Имеем 4 точки, пока что в плоскости, они образуют фигуру. Есть одна трансформация - ширина, вторая - высота. Если сблендить по высоте, по ширине, и полученное между собой блендить, то результат будет варьироваться между широким низким и узким высоким. Если использовать коэфициенты блендинга 0 ... 1, то мы никогда не получим толстого и высокого...

#6
14:15, 24 мая 2011

Чисто для кастомизации персонажей можно и склеталку использовать, скейлить нужный кости :), думаю так оно и сделано у беседки в обливионе и fallout 3, new vegas.

#7
15:37, 24 мая 2011

Igor'
Ага, там один меш для мужской и один для женской моделей и тупо меняется скейл по высоте и ширине
Такая кастомизация фигня, ведь пропорции тел остаются старыми
Например нельзя сделать одного коротконогим, другого длинноруким

AntonV
Имхо лучше юзать заранее созданный набор разных тел и менять у них только скейл
Будет дешевле для рассчетов (ничего не нужно интерполировать) только займет больше места в памяти, но для современных видях 10 разных видов тел это фигня
Сомневаюсь что можно сделать больше )

#8
16:08, 24 мая 2011

nes
> Имхо лучше юзать заранее созданный набор разных тел и менять у них только скейл
У меня 32 параметра человека (настройки глаз, рта, головы в целом, туловища, и т.п.) Делать 32 модели по 10 тыс полигонов как-то не хочется.

Скелет для таких настроек более-менее подходит, но не дает богатых возможностей. Например, чтобы сделать лоб с изгибами, придется сделать около 4 костей.

#9
16:57, 24 мая 2011

Лучше сделать честный повершинный морфинг. Наверняка у автора не будут модели меняться в рантайме?
При создании персонажа юзер подкрутит нужные слайдеры и создаст себе меш персонажа путем смешивания нескольких. Данный расчитанный меш можно сохранить на диске и при следующих загрузках просто читать его с диска, без всяких расчетов. Главное, чтобы количество вершин в смешиваемых мешах был одинаков, чтобы можно было правильно блендить.

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

#10
18:11, 24 мая 2011

dds
> меняться в рантайме
Ну как это обычно и бывает - пока крутим ползунок, раз в 2-3 секунды перс обновляется. Начали игру - о морфинге забыли. Вот вы говорите о блендинге нескольких персонажей. Объясните как мне скрестить высокого, толстого, с узкими глазами, с большими ногами? В подробностях, а то я никак не могу понять.

#11
18:17, 24 мая 2011

AntonV
>>Объясните как мне скрестить высокого, толстого, с узкими глазами, с большими ногами? В подробностях, а то я никак не могу понять.
точно так же, как куб морфится в шар.

1. Берешь болванку, лепишь худого персонажа.
2. Берешь ту же болванку, лепишь толстого персонажа.
Индексные буфферы должны совпадать у 2-х персонажей, количество вершин тоже.
3. Блендишь вершины с весом w.

Смешивание 2-х вершин с весом w можно делать так:

p = w * p0 + (1 - w) * p1

p0 - точка первой меши
p1 - точка второй меши
p - точка новой меши, полученной путём смешивания с весом w.
w - имеет значение от 0 до 1.

Если 2 меши имеют разное количество вершин, то можно придумать несколько вариантов решения. Но тут сложнее. Лучшее заранее подготовить нужные модели для морфинга.

#12
18:22, 24 мая 2011

AntonV

вот примерный псевдокод

int numMeshes; // кол-во мешей участвующих в морфинге
Array<Mesh> allMeshes(numMeshes);
float meshWeights[numMeshes]; // коэффициенты влияния мешей на результирующий меш
Mesh resultMesh.vertexes = allMeshes[0].vertexes * meshWeights[i];

for (int i = 1; i < numMeshes; ++i)
{
   for (j = 0; j < allMeshes[i].numVertexes; ++j)
   {
      resultMesh.vertexes[j] += allMeshes[i].vertexes[j] * meshWeights[i];
   }
}

for (int i = 0; i < resultMesh.numVertexes; ++i)
{
   resultMesh.vertexes[i] /= numMeshes;
}
#13
18:23, 24 мая 2011

Я не имел в виду как блендить толстого и худого. Это всего один параметр. Как блендить толстого-худого и высокого-низкого? Ведь толстый-худой имеет какой-то рост изначально?

#14
18:24, 24 мая 2011

А чем мешает различный рост смешиваемых мешей?

Высокий + низкий = средний рост, если w=0.5 :)

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

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