3D моделирование - морфинг - PullRequest
1 голос
/ 31 августа 2009

Общая цель, которую я пытаюсь достичь, - внедрить настраиваемую систему аватаров, в которой можно изменить рост, вес, тип тела и т. Д. Как это сделать? В качестве простого примера, когда вы изменяете высоту аватара, вы не хотите, чтобы голова / глаза / пальцы / и т. Д. Были вытянуты, вам нужно только, чтобы туловище и ноги меняли размер и чтобы все остальное оставалось таким, как было ( возможно переставил). Другим примером будет добавление «пивной живот». Какие существуют методы для такого рода морфинга?

Является ли каждая измененная фигура отдельной сеткой?

Если это так, то как эти две манипулируемые части «слипаются» обратно правдоподобным образом (они изменили размер).

Если нет, как вы ограничиваете свои манипуляции одним разделом сетки, а не другими?

Я ищу общие методы, а также конкретные решения. Это общая проблема 3D-графики, но я работаю с Kit3D / Silverlight / C #. Это похоже на другой вопрос, который я написал, но это гораздо более общий вопрос.

Ответы [ 2 ]

2 голосов
/ 31 августа 2009

Взгляните на проект MakeHuman . (Предупреждение, некоторые потенциально небезопасные для работы скриншоты могут быть на главной странице. Большинство из них размыты, но справедливое предупреждение.)

Сетка человеческого тела, которую использует MakeHuman, представляет собой простую базовую сетку с серией целей, которые можно настраивать по 4 или 5 осям. Большая часть программы написана на Python, поэтому ее должно быть относительно легко понять. На сайте документов .

также есть некоторые технические документы и другие документы.
1 голос
/ 31 августа 2009

Если ваша геометрия основана на сетке, то я предлагаю вам попробовать сгенерировать нелинейные преобразования (назовем их «деформациями»).

Например, вы можете вставить N точек разворота в вашем трехмерном мире, а затем определить для каждой вершины (точки) в вашей сетке, насколько сильно на нее влияет какой-либо данный разворот. Вы можете использовать, например, обратный квадратный вес, или спад по Гауссу, или что-то вроде трехмерного Вороного, или ... Затем вы перемещаете точки поворота и деформируете вершины сетки на основе вашей карты весов.

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

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

...