onsdag, oktober 24, 2007

Godkendelse af Projekt!

SMCT
Skeleton Model Creation Toolkit, using python as modeling language

Gruppe 1: http://rolatorrally.blogspot.com/
Medlemmer: Jakob Balle Christensen, Mads Olesen, Kasper Vesth og Anders Bach Nielsen

Allerede i starten af kurset havde vi planer om at arbejde med ragdoll physics. Vi har dog været nødsaget til at tage en lidt anden tilgang til dette, da vi i forbindelse med de obligatoriske opgaver, fik til opgave at implementere et simpelt fysiksystem. Dette fysiksystem havde i bund og grund de egenskaber vi skulle bruge for at lave ragdoll fysik. Gruppens fokus er derfor skiftet fra selve fysikken, til det at oprette modeller, som fysiksystemet kan arbejde på. Vi tager stadig udgangspunkt i Rigid Bodies ĺitteraturen, selvom der er andre muligheder som Inverse Kinematics med flere.

En anden ide, som vi i gruppen har haft oppe nogle gange, var det at integrere et scripting sprog i OpenEngine implementationen. Her kunne vi implementere et domænespecifikt sprog eller bruge et eksisterende scripting sprog som Lua eller Python. Det ville afhænge af hvad vi ønsker at bruge dette scripting sprog til.

Målet med alt dette har stort set fra starten været at lave et sjovt spil, hvor man som en gammel mand eller dame på et plejehjem har fået fingrene i en top tunet rolator og kører ræs på plejehjemmet. Her vil vi bruge en ragdoll til at simulere den gamle person, der hænger efter sådan en rolator. Et andet brugsscenarie er de andre gamle mennesker der er på sådan et plejehjem, de kan jo blive ramt.
Her vil vi have statiske modeller som står rundt omkring på banen, og når de bliver ramt vil fysikken sørge for at de falder på en realistisk måde.

Vores valg er faldet på at kombinere de to ovenstående ideer for at lave vores spil. Vi ønsker at gøre processen med at oprette et skelet af partikler og constraints simpel. Her vil vi bruge scripting sproget Python til at lave en række klasser som kan beskrive forskellige elementer som partikler, constraints, kugleled og hængsler. Disse beskrivelser af fysikskeletter kan så omdannes til partikel- og constraint-information der kan gives til fysiksystemet i vores gameengine. Nedenfor vil vi give en mere specificeret liste over hvordan vi vil løse dette.
Vores projekt kommer derfor til at indeholde følgende dele:

1.Definere en klassemodel der beskriver skeletale modeller med knogler, led og hængsler. Denne klassemodel skal laves i python, hvor eventuelle hjælpefunktioner kan implementeres i C/C++ for at øge hastigheden.
2.Udvide vores model så vi kan gennemløbe den og hente samtlige partikler og constraints ud og give disse til vores fysiksystem. Denne del skal også laves i python. Der skal eventuelt laves callback functioner fra C/C++, så informationen let kan overføres fra python til vores gameengine.
3.Vi skal udvide vores gamefactory så den kan afvikle vores python model scripts og efterfølgende hente de beregnede værdier over i gameengines fysikengine.
4.Det skal være muligt at bygge de rigidbodies vi skal bruge ud fra information hentet fra en python beregnet model. Denne model skal i starten visualiseres som en ”stick man”.
5.Hvis en python model fil opdateres i filsystemet skal den reloades og den eksisterende model skiftes ud med den loadede.

Hvis vi imod alle formodninger bliver færdigr med alt dette, og stadig har tid til mere, er her en lille liste over mulige projekter vi kan arbejde videre med.

1.Mulighed for at finde forskellige dele af vores fysik model til bestemte geometri dele. For at dette skal kunne laves skal vores partikler have navne, så de kan sættes sammen med bestemte geometri dele.
2.Udvide python model script eller have externe config filer med beskrivelse af tilstanden af vores fysik system. Derved lægger vi alle konstanter ud i config filer i stedet for at have dem direkte i vores fysikmotor.
3.Vores GameFactory er som mange andres et stort roderi af foreskellig information og hver gang man ønsker at ændre en lille detalje skal hele projektet recompiles. Her kunne det være rart at lave en ny gamefactory klasse som kan læse et XML dokument der beskriver strukturen af scenegrafen, renderers, kameraer og meget mere. Dette kunne gøres ved at bruge en cross platform XML parser fra http://www.applied-mathematics.net/tools/xmlParser.html.


Referencer:
1.Game Physics Engine Development, Ian Millington, Elsevier, 2007,
ISBN 978-0-12-369471-3
2.Physics for Game Developers, David M. Bourg, O'Reilly Media, 2001,
ISBN 978-0-59-60000-66
3.Python Cookbook 2Ed, A. Martelli et al., O'Reilly Media, 2005,
ISBN: 978-0-59-60079-73
4.Programming Python 3Ed, Mark Lutz, O'Reilly Media, 2006,
ISBN: 978-0-59-60092-50
5.Advanced Character Physics, Thomas Jakobsen, IO Interactive
6.NonConvex Rigid Bodies with Stacking, Eran Guendelman, Robert Bridson, Stanford University.
7.Dynamic Simulation of Articulated Rigid Bodies with Contact and Collision, Rachel Weinstein et al., Stanford University.

Svar for forelæser:

Python ragdolls

Det lyder som et rigtigt spændende projekt, og rimeligt konkret. Dvs. at man kan skrive et Python script til beskrivelse af fysikken i en ragdoll figur. I skal her overveje hvad det er man skal BRUGE Python til (altså hvorfor er det ikke XML man beskriver ragdoll figuren i - jeres punkt 3. ligger lidt op til en statisk forståelse). Jeg ser to brugsscenarier; at man skal bruge noget dynamik til at bygge en figur op med (fx en snor der er en gentagelse af enkelte dele), eller at Python eksekveringen er med til at bestemme den dynamiske opførslen af enkelte dele, hvis en bestemt type af kræfter bliver realiseret i en Python funktion.

Overvej hvordan I laver en pæn udvidelse (extension) af OpenEngine frameworket.

Og sidst men ikke mindst er jeg nødt til at sige, at selvom rolatorrally lyder sjovt, og kan virke som en rigtig god demonstration af de features i laver, så er det ikke gameplay i spillet i skal bruge jeres primære
kræfter på ;)

Jeres plan er godkendt.

Ingen kommentarer: