"Излизане" от физика

Всичко за програмирането на игри - архитектура, графика, звук, изкуствен интелект, мрежи.

"Излизане" от физика

Мнениеот haho » 28 Яну 2010 22:38

"Излизане" от физика

Здравейте колеги,

Става дума за преминаване от физчна симулация към стандартна анимация.
Как го правите вие, как бихте искали да го правите, какви са "стандартните" решения?
Аз също ще напиша (по възможност разширено) какво мисля, но първо, тактично, искам да видя какво мислите вие.
Аватар
haho
Power User
Power User
 
Мнения: 724
Регистриран на: 07 Дек 2003 21:52
Местоположение: България

Re: "Излизане" от физика

Мнениеот zaphod » 29 Яну 2010 21:17

хм, въобще не съм сигурен че правилно разбирам въпроса ти, но в досегашния ми опит съм ползвал три подхода, наредени по нарастваща сложност:
- физиката смята с интервала на анимацията и директно състоянието на системата се ползва като кадър на анимацията, пък каквото стане
- физиката смята с интервал нанасящ се цял брой пъти в интервала на анимацията, като точно колко пъти ще се нанася се смята според динамиката на системата и критерий за качество на симулацията.
- физиката смята с интервали съвсем независими от анимацията, като кадрите не са нито едно от състоянията на физичната симулация, а се генерират от предпоследното състояние+преместване според скоростите. ползва се предпоследното състояние, за да е сигурно че няма да има по-близко по време.
силно подозирам обаче че питаш за нещо съвсем друго, което дори не се досещам какво е.
zaphod
Power User
Power User
 
Мнения: 602
Регистриран на: 01 Мар 2004 21:46
Местоположение: София

Re: "Излизане" от физика

Мнениеот haho » 29 Яну 2010 21:22

Ще дам пример.

Героя отива до ръба на сграда и скача от там, след изтичане на анимацията за скок се спира подаването на анимация към героя и се "влиза" във физична симулация на рагдол.
След като героя падне на земята трябва да му се пусне анимация за ставане. Въпроса ми е как става връщането от физичната симулация отново към анимацията?
Аватар
haho
Power User
Power User
 
Мнения: 724
Регистриран на: 07 Дек 2003 21:52
Местоположение: България

Re: "Излизане" от физика

Мнениеот gemicha » 30 Яну 2010 20:54

Интерполирането към първия кадър от анимацията продължава примерно 100 Microsoft и после пръдлжава нормално анимацията.
gemicha
Site Admin
Site Admin
 
Мнения: 2688
Регистриран на: 20 Ное 2003 22:20
Местоположение: USA

Re: "Излизане" от физика

Мнениеот zaphod » 01 Фев 2010 09:01

ааа, както си мислех не съм разбрал правилно.
а, аз го правех по общ начин с превключването на анимациите - когато пусна дадена анимация, не се минава направо към нея, а текущото състояние на скелета се записва върху първия кадър на новата анимация и така се пуска да върви. след като го премине, се връща обратно оригиналния първи кадър, за да си цикли с него.
zaphod
Power User
Power User
 
Мнения: 602
Регистриран на: 01 Мар 2004 21:46
Местоположение: София

Re: "Излизане" от физика

Мнениеот GeLeTo » 01 Фев 2010 14:50

gemicha написа:Интерполирането към първия кадър от анимацията продължава примерно 100 Microsoft и после пръдлжава нормално анимацията.

И още по-добре - измежду няколко анимации за ставане да се избере тази с най-близкото начално положение, времето за интерполиране да зависи от това колко близко е това положение до текущото.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: "Излизане" от физика

Мнениеот gemicha » 02 Фев 2010 07:20

GeLeTo написа:И още по-добре - измежду няколко анимации за ставане да се избере тази с най-близкото начално положение, времето за интерполиране да зависи от това колко близко е това положение до текущото.


Как дефинираш разлика между две положения?
gemicha
Site Admin
Site Admin
 
Мнения: 2688
Регистриран на: 20 Ное 2003 22:20
Местоположение: USA

Re: "Излизане" от физика

Мнениеот GeLeTo » 02 Фев 2010 12:28

gemicha написа:Как дефинираш разлика между две положения?

Сумата на скаларните произведения (по двойки от двете положения) на векторите на всички кокали е добър критерий. Колкото по-голяма, толкова по-близки са положенията. Преди това трябва да ориентираш ragdoll положението спрямо това от анимацията, примерно определен кокал да има еднаква ориентация и в двете положения.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: "Излизане" от физика

Мнениеот gemicha » 03 Фев 2010 19:34

Не е много добър критерии. Ъгъла между големите кокали е от много по-голямо значение от този между малките. Трябва да вземеш в предвид доста повече от сумата на разликите. Според мен е доста работа и не си струва...
gemicha
Site Admin
Site Admin
 
Мнения: 2688
Регистриран на: 20 Ное 2003 22:20
Местоположение: USA

Re: "Излизане" от физика

Мнениеот GeLeTo » 03 Фев 2010 20:56

gemicha написа:Не е много добър критерии. Ъгъла между големите кокали е от много по-голямо значение от този между малките.

Според мен е логично големите кокали да имат по-голямо значение. Може все пак да се вземе скаларното произведение разделено на дължината. Така произведението ще е пропорционално на дължината а не на квадрата на дължината.

gemicha написа:Трябва да вземеш в предвид доста повече от сумата на разликите.

Не сума на разлики, а сума на скаларни произведения.

gemicha написа:Според мен е доста работа и не си струва...

Не си струва спрямо какво? Да се интерполира до една единствена анимация? Ще станат големи гърчове.

Единствения съществен проблем за който се сещам е че примерно легнало положение с лице към земята ще го показва с добра оценка спрямо легнало положение с лице нагоре. За да се избегне това трябва за всеки кокал да има и тангентен вектор, който също да се изчислява в скаларните произведения. Който тангентен вектор елементарно се взима от матрицата на кокала.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: "Излизане" от физика

Мнениеот haho » 03 Фев 2010 21:09

Аз мисля, че оценка на база "максимално ориентирана като коста на таза" ще е достатъчно добър критерии.
Аватар
haho
Power User
Power User
 
Мнения: 724
Регистриран на: 07 Дек 2003 21:52
Местоположение: България

Re: "Излизане" от физика

Мнениеот gemicha » 05 Фев 2010 10:55

GeLeTo написа:Може все пак да се вземе скаларното произведение разделено на дължината.


Всъщност не е обратно пропорционално на дължината. Примерно може да имаща много къси кокали по гръбнака, който да формират много повече разликата от примерно тези на краката. Не знам дали таза е ключа... Ако някой има време и желание може да си поиграе, но според мен сложи примерно 100мс за възстановяване, избири случайно една от ставащите анимации и интерполирай до първия кадър. Никой нищо няма да забележи в много голяма част от паданията.
gemicha
Site Admin
Site Admin
 
Мнения: 2688
Регистриран на: 20 Ное 2003 22:20
Местоположение: USA

Re: "Излизане" от физика

Мнениеот GeLeTo » 05 Фев 2010 11:36

gemicha написа:
GeLeTo написа:Може все пак да се вземе скаларното произведение разделено на дължината.

Всъщност не е обратно пропорционално на дължината.

Нее, защото в скаларното произведение влиза и дължината на векторите крайния резултат ще е пропорционален на квадрата на дължината, делим на тази дължина - крайния резултат ще е пропорционален на дължината. А не обратно пропорционален.

Но защото нали трябва и тангентен вектор да се смята, подходящата формула за всяка двойка кокали е
min( ragdollBoneMatrix.m[0].Dot( animBoneMatrix.m[0]) ,ragdollBoneMatrix.m[2].Dot(animBoneMatrix.m[2]) )*boneLength
Това дава критерий за колко еднакво са ориентирани матриците на двата кокала, пропорционален на дължината. Вместо дължината на кокала - може да се използва някакъв weighting коефициент. Примерно да е най-голям за таза, по-малък за първия кокал на всеки крайник и съвсем малък или нулев за китките и пръстите.

gemicha написа:Не знам дали таза е ключа...

Това зависи от това колко анимации за ставане ще се правят. Не е казано че всички кокали трябва да се смятат, може да е таза + по 1 кокал от крайниците примерно. Но таза определено е най-важен. Дали е седнал, дали е легнал, дали е по лице, по гръб или настрани - може да се разбере по положението на таза.

А може да се тества не само спрямо началния кадър на анимацията, а и по-предни. Примерно ако в началото на анимацията е легнал, после седнал а рагдола си е в седнало положение - може да се тръгне от по-късен етап на анимацията.

gemicha написа:Ако някой има време и желание може да си поиграе, но според мен сложи примерно 100мс за възстановяване, избири случайно една от ставащите анимации и интерполирай до първия кадър. Никой нищо няма да забележи в много голяма част от паданията.

Според мен голяма част от интерполациите ще изглеждат направо комично. Не можеш просто така да интерполираш от две съвсем различни положения и да очакваш нещо смислено.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: "Излизане" от физика

Мнениеот Tangra » 05 Фев 2010 12:45

Ето линк към един интересен пейпър - предложеният алгоритъм намира даже не началото на най-близката анимация, а направо къде е най-близката поза в целият набор анимации.
An Efficient Search Algorithm for Motion Data Using Weighted PCA - http://www.dgp.toronto.edu/~elf/.misc/ForbesFiume2005.pdf.
С малко кости, може и да става за търсене в реално време, PCA на анимациите ще е предварително изчислен, ще трябва само на текущото състояние на ragdolla да се изчисли PCA и след това да се потърси и интерполира до намереният кадър от намерената анимация и от там да се довърши анимацията.
Tangra
New User
New User
 
Мнения: 4
Регистриран на: 08 Мар 2006 10:05

Re: "Излизане" от физика

Мнениеот zaphod » 13 Фев 2010 12:02

мисля че директно сумата от скаларните по двойки не е добра идея, понеже няма ротационна инвариантност, но може да се стъпи на тая основа. единия вариант е да се измисли изравняваща ротация със някаква претеглена сума по ротацията на отделните кокали, което разбира се ще се сблъска с проблема "наляво или надясно" при ротациите близки до 180 градуса (проблем е защото двете иначе сходни по резултат ротации се унищожават вместо да се засилват, когато ги сумираме с обичайните методи). другия вариант е да се формират скаларните произведения между всеки два свързани кокала, и те да се сравняват със тези от трансформирания скелет, а не пряко кокалите. така ще имаме фундаментално заложена ротационна инвариантност, и след като сме избрали най-близката анимация, вече може да си избачкаме много по-надеждно изравняваща ротация.
zaphod
Power User
Power User
 
Мнения: 602
Регистриран на: 01 Мар 2004 21:46
Местоположение: София

Re: "Излизане" от физика

Мнениеот GeLeTo » 13 Фев 2010 13:00

zaphod написа:мисля че директно сумата от скаларните по двойки не е добра идея, понеже няма ротационна инвариантност...

Виж какво съм писал в предните постове - да се взима скаларната сума на вектора на кокала и на тангентен вектор, и двата се вадят от матрицата на кокала.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02


Назад към Програмиране на игри

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта

cron