Animacja kości a kształt obiektu

Problemy z animacją w grze
ObywatelTB
Posty: 10
Rejestracja: 05 sie 2012, 16:57

Animacja kości a kształt obiektu

Postautor: ObywatelTB » 09 sie 2012, 16:45

Zacząłem realizować swój projekt survival-wyścigówki. Ogólnie to grafika ma być zerowa, a grywalność możliwie największa ;)
Chodzi o jazdę samochodem wśród dynamicznie zmieniającego się środowiska (załamujące się podłoże, spadające obiekty, etc).
Właśnie zrobiłem z pomocą Armatury animację drogi, która wygina się w momencie, gdy przejeżdża samochód. Ale (jak pewnie się domyślacie), samochód nie oddziałuje z nową wersją drogi, tylko porusza się po kształcie drogi sprzed animacji.
Pytanie brzmi: czy da się temu jakoś zaradzić i czy w ogóle animacja kości ma zastosowanie w takiej sytuacji? Czy muszę jednak uciec się do podzielenia drogi na segmenty i animować te segmenty jako osobne obiekty??

Awatar użytkownika
Dagon
Posty: 94
Rejestracja: 21 lip 2012, 15:30

Re: Animacja kości a kształt obiektu

Postautor: Dagon » 09 sie 2012, 16:59

Spróbuj może ustawić dla drogi Collision Bounds->Convex Hull albo TriangleMesh.

ObywatelTB
Posty: 10
Rejestracja: 05 sie 2012, 16:57

Re: Animacja kości a kształt obiektu

Postautor: ObywatelTB » 09 sie 2012, 17:15

Próbowałem już :) Niestety, Convex Hull jest zbyt niedokładny, dla takiego obiektu jak droga (z resztą i tak by nic nie dał, bo...) Triangle Mesh nie daje absolutnie nic.

Awatar użytkownika
Michalek
Posty: 47
Rejestracja: 01 sie 2012, 19:24

Re: Animacja kości a kształt obiektu

Postautor: Michalek » 13 sie 2012, 22:06

Zrobilem kiedys prostego ludzika, dodalem do niego kosci i zrobilem na nim prosta animacje kucania. Nastepnie umiescilem nad nim dynamiczny obiekt-szescian. Po odpaleniu gry szescian spadal na glowe ludzika ktory stal prosto. Gdy nacisnalem przycisk animacja odtworzyla sie ludzik kucnal ale szescian zostal w takiej pozycji jak przed animacja czyli na wysokosci glowy ludzika wyprostowanego. Ludzik mial przed zrodzicowaniem rece rozpostarte szeroko. Robilem testy takze z rekoma i:
-faktyczny stan modelu((tak mi sie wydaje) jest taki jak przed zrodzicowaniem z koscmi
-zmiena ukladu modelu ( juz po zrodzicowaniu) w trybie pozorowania nie ma wplywy na ten stan jak go nazwalem faktyczny
Wszystko niby sie przemieszcza ale tak naprawde jakby te granice kolizji zostaja zawsze na miejscu przed dodaniem kosci

Oczywiscie wywnioskowalem to na podstawie doswiadczen. Pewnosci nie mam ale coz mogloby byc innego??

ObywatelTB
Posty: 10
Rejestracja: 05 sie 2012, 16:57

Re: Animacja kości a kształt obiektu

Postautor: ObywatelTB » 17 sie 2012, 17:59

Tak, wszystko racja. Tyle, że ten 'stan fizyczny można zmieniać po sparentowaniu, używając po prostu edit mode. Czyli z tego wynikaże stan faktyczny jest zawsze taki, jak w edit mode (tak dla jasności :)).
Poza tym moje spostrzeżenia są podobne. Chyba nie da się uzyskać takiego efektu jaki chciałem (komputer by się pewnie mocno przemęczał dostosowując fizykę na bieżąco do zmieniającego się kształtu. Taka opcja nie istnieje chyba w żadnym istniejącym silniku gry. Przynajmniej ja nie widziałem nigdy takiego zabiegu nawet w najpopularniejszych grach :/

Awatar użytkownika
myinventions
Posty: 14
Rejestracja: 18 lip 2012, 22:46
Kontaktowanie:

Re: Animacja kości a kształt obiektu

Postautor: myinventions » 17 sie 2012, 18:50

Sytuacja jest prosta, siatka kolizji obiektu jest ustalana w czasie startowania gry i generalnie nie może podlegać zmianom. Czyli jakie Collision Bounds się ustawi na początku tak już zostanie na całą grę. Polecam zawsze przy dziwnych problemach z fizyką uruchamiać opcję Show Physics Visualization.

Ale są całe szczęście wyjątki od powyższej normy:

* obiekty typu soft body mają dynamicznie zmieniające się siatki

* jeśli użyjemy opcji skalowania obiektu to i siatka kolizji ulegnie skalowaniu (oczywiście siatka przemieszcza i obraca się tak jak obiekt zawsze)

* możemy użyć funkcji reinstancePhysicsMesh z Python API (http://www.blender.org/documentation/bl ... hysicsMesh)
Tu niestety bardzo może popsuć się wydajność naszej gry, więc generalnie tej funkcji nie powinno się wywoływać częściej niż kilka razy na sekundę (a najlepiej jeszcze używać jej tylko w wyjątkowych sytuacjach)
A przykład wykorzystania tej funkcji jest prosty:

Kod: Zaznacz cały

import bge
from bge import logic
obj = bge.logic.getCurrentController().owner
obj.reinstancePhysicsMesh()


Wróć do „Animacja”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości