Gå til innhold

Yggdrasil - Hjemmelaget spillmotor (RPG/RTS)


Anbefalte innlegg

Yggdrasil er mitt hobby prosjekt som går ut på å lage en 3D motor.

 

Litt om prosjektet:

Prosjektet går ut på å lage en 3D motor som skal kunne driver et spill av typen RPG mikset med RTS elementer. Det er et hobby prosjektet som jeg jobber med når jeg har tid og lyst.

Tidsperspektivet er vanskelig å si noe om men vi snakker fort om flere år.

 

Litt om programmering:

Selve motoren blir skrevet i C++ (native), men en remote debugger/IDE vil bli programmert i et høyere språk som C# eller Java.

Plattformen er primært Windows XP 64bit.

 

3 parts APIer

3D motoren benytter for tiden følgende APIer:

Status:

 

Lyd:

Modulen som har med lyd å gjøre er i godt i gang.

Jeg har laget et enkelt grensesnitt som gjør at man enkelt kan implementere nye codec om man skulle ønske det.

 

Støttede funksjoner:

  • Streaming eller komplett lesing av Ogg vobis og wav
  • Speex koding og dekoding
  • Muligheter for å bruke en buffer på flere lydkilder (også streaming buffer)
  • Klasser for enkel manipulering av posisjon, orientering og fart til både lydkilder og lytter.

Nettverk:

Nettverks delen kan både sende og motta data, men mangler fortsatt mye koding.

En spesifikasjon for en egen protokoll trengs før videre arbeid kan starte.

 

Fysikk, shader og grafikk:

Disse modulene har kun grunnleggene funksjonalitet og trenger mye koding.

 

Skript:

Skript modulen er oppe og går og utvides stadig med nye skriptbare objekter ettersom de andre modulene vokser.

Det er f. eks. fullt mulig å lage skript som laster en lydfil og få lydkilden(e) til å fly i sirkler rundt deg.

 

Debuging systemer:

Jeg har laget et system for logging og rapportering av feil eller annen info.

 

DAE2Ygg:

Et lite og enkelt program for å konvertere collada filer til .ygg filer som er et binært chunk format.

programmet støtter for tiden:

  • Teksturer (1D-3D)
  • Lukkede 3d modeller.
  • Lys
  • Kameraer
  • Key frame animasjon (linær, Bézier og TCB interpolering)

Langsiktig mål:

Laget et enkelt fps spill ved hjelp av motoren.

 

Kortsiktig mål:

Vise en sylinder med "bein" som animeres ved bruk av 3d motoren.

Endret av Giddion
Lenke til kommentar
Videoannonse
Annonse

Animasjons systemet

 

Da har det gått ca en uke og jeg har fått jobbet litt med mer prosjektet. Jeg tenkte jeg skulle snakke ….. ø vel skrive litt om hvordan animasjons systemet ser ut til å bli.

 

 

På toppen har man noe som heter klipp (som i film klipp) klippet har en start verdi og en slutt verdi (tenk tid). Klippet har flere kurver som har en start og slutt verdi (igjen tenk tid inn) innenfor start og slutt verdien. Kurven har et mål (Target) som i midt tilfelle er et flyttall som blir endret til kurvens Y ved X. Kurven består av 1+n antall nøkler (key) som inneholder minst 2 verdier. Den ene verdier en plasseringen på kurven (X) den andre er verdien kurven skal gi ut når kurvens verdi er nøyaktig den samme som nøkkelen (Y), de andre verdien som nøkkelen kan ha er til for å kunne spesifiserer hvilke verdier kurven skal gi ut når den ikke er aka. Hvordan man skal interpolere mellom nøkkelen.

 

Interpolering

Yggdrasil sitt filformat har i dag støtte for 4 typer interpolering:

Step: Holder verdien til nøkkelt før helt til nøkkelen er nådd.

Linear: Linær interpolering.

Bezier: Bezier (Quadratic) interpolering

TCB (Tension, Continuity and Bias): Bruker hermite tangenter.

 

Før og etter kurven

Kurvene må også kunne mota inn verdier som ligger før den første nøkkelen og etter den siste nøkkelen. Dette løses ved å gi kurven to variabler (før og etter kurven) som bestemmer hvordan dette skal løses.

Yggdrasil har støtte for 5 muligheter. Beskrivelsens er for etter kurven, men det blir det samme bare stikk motsatt for før kurven.

 

CONSTANT: Gir ut ut-verdien til den siste nøkkelen.

LINEAR: Tar derivatet av slutten av kurven og ganger det med InnTid-SisteNøkkelTid

CYCLE: Trekker fra kurve tiden helt til den er innenfor kurve tiden så evalueres den normalt

CYCLE_RELATIVE: Trekker fra tiden helt til den er innenfor kurve tiden så evalueres den normalt, men utverdien blir plusset med forskjellen på utverdiene på første og siste nøkkel.

OSCILLATE: Trekker fra kurve tiden (og teller antallet) helt til tid den er innenfor kurve tiden så evalueres den normalt hvis antallet subtraksjoner er partall. Hvis det er oddetall blir kurven evaluert reversert. (Tenk pingpong)

 

Innverdier

Nå er det på tide jeg forteller om de klipp og kurvenes inn verdiene. Disse verdiene er verdier man sender inn til klippet som igjen sender det videre til kurvene. Det fiffi med systemet er at man kan sende inne alle slags verdier inn, ikke nødvendigvis bare tid. Klipp er muligens ikke det mest aktuelle å bruke annet enn tid på, men hvis man bruker kurver for seg selv kan man muligens bruke de til å avbelaste skript delen og gi motoren flere artige muligheter. Jeg har enda ikke tatt et valg på om dette bør være en del av motoren, men det virker som om det kan være kjekt å ha.

 

Div.

Jeg regner med å fortsette på animasjon en stund framover. Jeg skal prøve å lage noen bilder som illustrere det jeg prøvde å formidle ovenfor.

Lenke til kommentar

Jepp jepp da har det gått nok en uke.

Jeg har fått jobbet mer med animasjons systemet, men det er ikke så mye å rapportere. Jeg har jobbet med et system som gjør at man kan legge flere kurver sammen slik at man kan animerer flere verdier med en klasse (eks. x,y,z).

 

Så har jeg startet en mer grundig evaluering av C# til bruk som en debugger/editor og det ser bra ut hitil. Hitil bruker jeg DockPanel Suite som gir programmet de samme dokkbare panelene (doh..) som f. eks. Visual Studio og det funker fint. Har også kikket på propertygrid controlleren som ser ut til å bli et viktig verktøy.

 

Jeg fikk laget noen bilder (se pdf fil) som viser mer grafisk hva jeg prøvde å skrive om sist.

ygg_ani_klipp.pdf

Lenke til kommentar
  • 1 måned senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...