Toon posts:

Technische vraag over games

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben niet zo thuis in de games development, maar ik heb toch een vraag wat mij bezig houdt.

Ik speel toch regelmatig games, en het valt mij op dat wanneer je een 3D game speelt, je altijd te maken krijgt met objecten die in elkaar overlopen terwijl ze elkaar zouden moeten afketsen. Bijvoorbeeld een personage die in plaats van op een stoel in een stoel zakt, of wanneer je een pistool vastpakt dat deze net te veel in je hand zit.

Ik snap nog steeds niet waarom dit nooit fatsoenlijk opgelost kan worden en dat dit soort dingen bij elk spel terugkomen. Wat is de reden hiervoor?

Alvast bedankt voor uw antwoord op deze wellicht domme vraag. :*

Acties:
  • 0 Henk 'm!

  • Angeloonie
  • Registratie: Mei 2004
  • Laatst online: 15:56

Angeloonie

Cheeseburger Addict

Ik vraag me dit ook al lang af, want bij sommige games zit het wel goed met oppervlakken (raceauto's of voeten op de vloer). Of wat dacht je van in Splinter Cell de lijken die je 'in' elkaar kan leggen..

[ Voor 24% gewijzigd door Angeloonie op 20-11-2006 13:07 ]

Uplay: Angeloonie - Battletag: Angeloonie#2758 - Steam: Angeloonie


Acties:
  • 0 Henk 'm!

  • Falcon
  • Registratie: Februari 2000
  • Laatst online: 15-10 07:56

Falcon

DevOps/Q.A. Engineer

Ik heb het idee dat dit meer ligt aan de snelheid van ontwikkeling van FPS spellen. Hierdoor wordt hier misschien iets minder op gelet.

"We never grow up. We just learn how to act in public" - "Dyslexie is a bitch"


Acties:
  • 0 Henk 'm!

  • NiaX
  • Registratie: Maart 2001
  • Niet online
Falcon schreef op maandag 20 november 2006 @ 13:07:
Ik heb het idee dat dit meer ligt aan de snelheid van ontwikkeling van FPS spellen. Hierdoor wordt hier misschien iets minder op gelet.
nee dat geloof ik niet. Je ziet het ook niet alleen bij FPS spellen trouwens.

Maar ik vraag me dit ook af, ben eigenlijk wel benieuwd naar het verlossende antwoord van een expert :p

[ Voor 14% gewijzigd door NiaX op 20-11-2006 13:10 ]


Acties:
  • 0 Henk 'm!

  • dezejongeman
  • Registratie: Juli 2006
  • Laatst online: 17-10 12:31
nee, dit ligt aan de combi van de texture en de afmeting van bijv. die stoel om zulke zo precies af te meten kost veel en veel te veel tijd en dus geld.
dus zie je dit in elke game wel trg vandaar

Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:19

Cyphax

Moderator LNX
Ik gooi maar een balletje op, maar misschien is het een soort afweging tussen performance en dit soort glitches? Modellen in huidige engines hebben gigantische hoeveelheden polygonen, moet je voor elk punt dan collision-detection helemaal laten uitrekenen of voor een verminderd aantal punten dat misschien zoiets tot gevolg heeft?
Ik heb verder geen ervaring met dit soort dingen dus ik roep ook maar wat, echter zou ik het wel logisch vinden. :+

Dat je dat in veel games ziet is misschien ook een beetje verbonden aan het feit dat er veel meer games dan engines zijn. Als het met Epic's engine mis gaat in UT, dan gaat het vast ook mis in andere games gebaseerd op dezelfde engine...

[ Voor 21% gewijzigd door Cyphax op 20-11-2006 13:12 ]

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 23:07

sebastius

Laten we lekker link gaan doen

Dit heeft te maken met het feit dat de botsingdetectie op een gegeven moment ook het spel kan doen ontsporen, stel nou je legt een stapel lijken op elkaar, dat je klem komt te zitten. En al die lijken blijven vreten aan de CPU omdat het objecten zijn waar je dan niet doorheen zou mogen lopen. Waar ik heen wil met deze gedachtentrein is dat het wel mogelijk is een perfecte 3d wereld te maken, maar dat het zoveel vreet voor zo weinig extra's (en tegenwoordig gaat het al stukken beter dan vroegere games), dat het niet zo nuttig/nodig is.

Acties:
  • 0 Henk 'm!

  • Robbbert
  • Registratie: April 2005
  • Laatst online: 17-10 17:50
Simpele uitleg:

3D games worden opgebouwd uit punten, waar tussen de punten afbeeldingen worden gespannen.
Het enige waar je aan kan rekenen zijn de punten. Omdat objecten uit duizenden punten bestaan is het ontzettend lastig precies uit te rekenen wanneer en waar objecten elkaar zullen raken.

[ Voor 3% gewijzigd door Robbbert op 20-11-2006 13:14 ]


Acties:
  • 0 Henk 'm!

  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 22:27

Koetjeboe

Boe, zegt de koe

Verwijderd schreef op maandag 20 november 2006 @ 13:04:
Ik ben niet zo thuis in de games development, maar ik heb toch een vraag wat mij bezig houdt.

Ik speel toch regelmatig games, en het valt mij op dat wanneer je een 3D game speelt, je altijd te maken krijgt met objecten die in elkaar overlopen terwijl ze elkaar zouden moeten afketsen. Bijvoorbeeld een personage die in plaats van op een stoel in een stoel zakt, of wanneer je een pistool vastpakt dat deze net te veel in je hand zit.

Ik snap nog steeds niet waarom dit nooit fatsoenlijk opgelost kan worden en dat dit soort dingen bij elk spel terugkomen. Wat is de reden hiervoor?

Alvast bedankt voor uw antwoord op deze wellicht domme vraag. :*
Gun die net iets teveel in een hand zit lijkt me een kwestie van dat de hand gemodelt is voor een bepaalde maat gun, en ze geen nieuw model hebben gemaakt voor de wat afwijkendere guns.

Plaats van op een stoel zet erin zakt is een kwestie van de animatie. In dat geval lijkt het me ook weer dat ze bijv 1 generieke 'zit' animatie hebben gemaakt voor alle stoelen/zitplekken, maar omdat elk zitobject weer anders is het niet altijd mooi uitlijnt. Zitten is dus ook echt geen kwestie van zwaartekracht en valsnelheid uitrekenen enzo ;) (nog niet) maar puur een statische animatie.

Het kan opgelost worden door een goede collision detection en psysics, maar dat kunnen pc's gewoon nog moeilijk aan, en geeft een heel scale aan nieuwe (moeilijk) te voorziene problemen, bijvoorbeeld players die onverwachts klem komen te zitten omdat ze op een of andere gekke plaats klem komen te zitten etc.

De voorbeelden die je noemt zijn dus meestal niet collision detection

Acties:
  • 0 Henk 'm!

  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 13-10 10:38
De algemene term hiervoor is Collision Detection.
Onderdeel van Game Physics.

[ Voor 25% gewijzigd door VyperX op 20-11-2006 13:17 ]

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


Acties:
  • 0 Henk 'm!

  • dezejongeman
  • Registratie: Juli 2006
  • Laatst online: 17-10 12:31
sebastius schreef op maandag 20 november 2006 @ 13:11:
Dit heeft te maken met het feit dat de botsingdetectie op een gegeven moment ook het spel kan doen ontsporen, stel nou je legt een stapel lijken op elkaar, dat je klem komt te zitten. En al die lijken blijven vreten aan de CPU omdat het objecten zijn waar je dan niet doorheen zou mogen lopen. Waar ik heen wil met deze gedachtentrein is dat het wel mogelijk is een perfecte 3d wereld te maken, maar dat het zoveel vreet voor zo weinig extra's (en tegenwoordig gaat het al stukken beter dan vroegere games), dat het niet zo nuttig/nodig is.
zit wat in maar dan boedoel jij zkr dat je heel veel model punten moet maken dan klopt dat,
ben namelijk zelf ook wel eens wat bezig geweest met games maken.
wel op simpele basis maar dat doet niet ter zake,
want het model moet exat met de texture overeen komen dan heb je een perfecte 3d wereld.

Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:19

Cyphax

Moderator LNX
dezejongeman schreef op maandag 20 november 2006 @ 13:16:
[...]


zit wat in maar dan boedoel jij zkr dat je heel veel model punten moet maken dan klopt dat,
ben namelijk zelf ook wel eens wat bezig geweest met games maken.
wel op simpele basis maar dat doet niet ter zake,
want het model moet exat met de texture overeen komen dan heb je een perfecte 3d wereld.
De vraag is of je dat wil. Hoe vaak heb je niet bij een of ander spel gezeten waarbij je dacht "goh, over die doos zou ik zo heen klimmen" maar je character kan niet klimmen oid? Dan liever die collision detection zo maken dat je er makkelijker langs kan zou ik denken.

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • 3dfx
  • Registratie: Maart 2001
  • Niet online
Iets anders wat ik vaak tegenkom in games als warrock en battlefield2, zijn lopen van tanks die door muren heen steken, of dat je benen door een muur heen gaan wanneer je op de grond gaat liggen (om te schuilen voor de loop van die tank :P).

Dat soort 'glitches' worden ook regelmatig mis-/gebruikt als 'cheat', dus waarom is het zo lastig dat tegen te gaan? De tank zelf kan bijv. niet door de muur, en als je tegen de muur springt, gaan je benen er ook niet door.

Acties:
  • 0 Henk 'm!

  • empheron
  • Registratie: Mei 2004
  • Laatst online: 10-03 14:26
Veel engines hebben wel collision detection, maar geen ondersteuning voor het vervormen van objecten door aanraking of zwaartekracht. Bijvoorbeeld het model van een hand. Dat vervormt door het vasthouden van een pistool. In reallife vormt je lichaam zich bijvoorbeeld voor een gedeelte naar de vorm van het pistool of het zitgedeelte van de stoel.

In games is dit nog bijna onmogelijk. Bij het gaan zitten in een stoel van een object kunnen de lichaamsdelen nog niet vervormen. Hierdoor ziet bij een goede collision detection de zithouding van een object er erg onrealistisch uit. (Het aller laagste deel van jouw dijbenen raakt dan de stoel en de rest niet.) Het is in de praktijk dus 'netter' om het collision detection systeem zo te maken dat een deel van jouw object (lichaam) door de stoel heen zakt. Hierdoor lijkt het er visueel op dat je lichaam zich vervormt naar het zitvlak van de stoel.

Zodra fysics engines in staat zijn een object op te bouwen uit meerdere lagen met verschillende vervormingsfactoren (stugheid van het materiaal) dan is het mogelijk bijvoorbeeld het 'lichaamsvlees' flexibeler te maken dan de botten waar het aan vast zit. Zodra dat mogelijk is kan het collision detection systeem accurater worden gemaakt.

Acties:
  • 0 Henk 'm!

  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 22:27

Koetjeboe

Boe, zegt de koe

Iva_Bigone schreef op maandag 20 november 2006 @ 13:25:
Iets anders wat ik vaak tegenkom in games als warrock en battlefield2, zijn lopen van tanks die door muren heen steken, of dat je benen door een muur heen gaan wanneer je op de grond gaat liggen (om te schuilen voor de loop van die tank :P).

Dat soort 'glitches' worden ook regelmatig mis-/gebruikt als 'cheat', dus waarom is het zo lastig dat tegen te gaan? De tank zelf kan bijv. niet door de muur, en als je tegen de muur springt, gaan je benen er ook niet door.
Dat is weer wel collision detection ;) Om de tank wordt een bouncing box geplaatst waarschijnlijk, omdat dat veel makkelijker testen is. Als de loop wel door de muur hen kan gok ik dat daar geen bounding box omheen zit (moet een losse omheen omdat de loop kan draaien meestal) en er dus alleen een heenzit om de body van de tank. De reden waarom er geen bouncing box om de loop zit is denk ik een snelheids/niet perse nodig reden. Het maakt het allemaal een stuk eenvoudiger

Als je gaat liggen verandert je eigen bouncing box van een rechtopstaande balk naar een liggende. Het zou dus maar zo kunnen dat je benen door de muur gaan. Op te lossen door de character te verplaatsen natuurlijk, dunno waarom ze dat niet doen. (misschien ziet het er te vreemd uit oid)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, er is dus een verschil tussen glitches en verkeerd afgestelde collision detection? En als ik het goed begrijp kost het te veel CPU vermogen om dit perfect af te stemmen en laten programmeurs het daarom vaak zitten?

Acties:
  • 0 Henk 'm!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 17:04
Verwijderd schreef op maandag 20 november 2006 @ 14:45:
Ok, er is dus een verschil tussen glitches en verkeerd afgestelde collision detection? En als ik het goed begrijp kost het te veel CPU vermogen om dit perfect af te stemmen en laten programmeurs het daarom vaak zitten?
Nee, het is een bewuste keuze. Een grafische kaart kan er veel meer polygonen uit persen dan een CPU kan verwerken voor collision detection. Daarom worden voor collision detection simpelere modellen gebruikt.

Daarnaast, het is niet goed voor de speelbaarheid. Als je in een FPS als speler rekening moet houden met collisions van je gun en alle andere dingen van je model, terwijl je geen echte diepte ziet en je eigen model vaak niet eens ziet, is dit ontzettend frustrerend. Dan blijf je bij wijze van spreken met je schoenveter ergens achter haken. Tijdens een gevecht met de monster boss is dat niet echt leuk, dan heb je wel andere dingen aan je hoofd. Bij (vrijwel) geen enkele FPS zie je je eigen voeten als je naar beneden kijkt, ook zoiets.

Als je dan als collision voor je speler een ellipse of circel pakt, kan je in ieder geval nergens achter blijven haken.

[ Voor 18% gewijzigd door DaCoTa op 20-11-2006 14:58 ]


Acties:
  • 0 Henk 'm!

  • pagani
  • Registratie: Januari 2002
  • Niet online
Over het algemeen zul je bij collision detection in games gebruik maken van bounding boxes, " dozen" om je model heen om zo de hoeveelheid checks die je uit moet voeren te verlagen. Helaas zijn bounding boxes niet strak passend over het hele model (anders zou het hele nut weg zijn), dus krijg je clipping (het door elkaar gaan van modellen) of dat je model deels zweeft...

Overigens kun je door de collision detection door een videokaart danwel physics kaart te laten doen veel betere resultaten halen (al staat dit allemaal nog wat in de kinderschoenen)
offtopic:
:w Cyphax

[ Voor 25% gewijzigd door pagani op 20-11-2006 15:23 ]


Acties:
  • 0 Henk 'm!

  • ravenger
  • Registratie: Juli 2001
  • Laatst online: 12-10 11:35
empheron schreef op maandag 20 november 2006 @ 13:30:
Veel engines hebben wel collision detection, maar geen ondersteuning voor het vervormen van objecten door aanraking of zwaartekracht. Bijvoorbeeld het model van een hand. Dat vervormt door het vasthouden van een pistool. In reallife vormt je lichaam zich bijvoorbeeld voor een gedeelte naar de vorm van het pistool of het zitgedeelte van de stoel.

In games is dit nog bijna onmogelijk. Bij het gaan zitten in een stoel van een object kunnen de lichaamsdelen nog niet vervormen. Hierdoor ziet bij een goede collision detection de zithouding van een object er erg onrealistisch uit. (Het aller laagste deel van jouw dijbenen raakt dan de stoel en de rest niet.) Het is in de praktijk dus 'netter' om het collision detection systeem zo te maken dat een deel van jouw object (lichaam) door de stoel heen zakt. Hierdoor lijkt het er visueel op dat je lichaam zich vervormt naar het zitvlak van de stoel.

Zodra fysics engines in staat zijn een object op te bouwen uit meerdere lagen met verschillende vervormingsfactoren (stugheid van het materiaal) dan is het mogelijk bijvoorbeeld het 'lichaamsvlees' flexibeler te maken dan de botten waar het aan vast zit. Zodra dat mogelijk is kan het collision detection systeem accurater worden gemaakt.
Wel eens gehoord van Skeleton Animation? Tegenwoordig is daar erg veel mogelijk mee. Het algehele probleem/punt wat ik eigenlijk totaal mis in alle replies (behalve die van Koetjeboe), is dat het eigenlijk gewoon ligt aan een bug in animaties die worden meegegeven met modelleren. Tijdens het maken van een charachter in een willekeurig 3D programma als 3DsMax of Maya, kan je diverse animaties maken dmv skeleton animation die je kan exporteren met je model naar je engine toe. In je engine dien je dan bij een bepaalde actie een bepaalde animatie af te spelen. Als deze animatie niet goed past bij wat er moet gebeuren, bijvoorbeeld bij het zitten op een stoel, dat bijvoorbeeld de afmetingen van de stoel afwijken van waar rekening mee is gehouden tijdens het animeren/modeleren van de character, dan kan het zo zijn dus dat de character te laag of te hoog komt te zitten en het dus glitchy is.

Collision detection heeft er meestal niets mee te maken, en werkt op een andere manier. Een simpel voorbeeld is wanneer een kogel bijvoorbeeld botst met een character. Wanneer een kogel word afgevuurd komt op een gegeven moment het punt waar de box van de kogel de box van de character intersect. Nu is dat erg onnauwkeurig, dus zodra dat gebeurt en er vindt dus een simpele collision plaats (box box intersection), word gekeken bij welk vlakje van het model de kogel raakt (box triangle intersection). Nu heb je natuurlijk nog nauwkeuriger methoden (triangle triangle intersection) waarbij je kijkt welk vlakje van de kogel intersect met een bepaald vlakje van een character, maar je zult begrijpen dat het niet echt nodig is bij dit voorbeeld ;)

Wat wel tof is overigens, zijn de ragdolls die je bijvoorbeeld in de Unreal 2 en 3 engines hebt (iets wat vrij nieuw is omdat het veel rekenkracht vergt). Hierbij zijn de animations wel van te voren gemaakt (zoals rennen en schieten bijvoorbeeld), maar zit er een extra systeem in zodat je een bepaald deel van een model direct kan aanspreken vanuit je code (bijvoorbeeld een been of een arm of gewoon de body). Doordat er aan bijvoorbeeld een arm bepaalde constraints (beperkingen) zijn gehangen vanuit de physics engine zoals de hoek waarin de arm kan buigen enzovoorts, kan de rest van de character op een goede manier reageren wanneer er iets met de arm gebeurt (zoals wanneer er aan de arm getrokken word).

Acties:
  • 0 Henk 'm!

  • pagani
  • Registratie: Januari 2002
  • Niet online
ravenger schreef op maandag 20 november 2006 @ 15:24:
[...]
zodra dat gebeurt en er vindt dus een simpele collision plaats (box box intersection), word gekeken bij welk vlakje van het model de kogel raakt (box triangle intersection).
Doen ze dus niet of nauwelijks. Bij counterstrike bijvoorbeeld kun je de hele bounding box raken (net naast de ronding van het hoofd geeft gewoon een headshot). Idem voor soldier of fortune en Farcry. Rest weet ik zo niet, maar het is gewoon te duur.

Ook de ragdoll physics van Farcry zijn pure bounding boxes, geen triangle checks.

[ Voor 7% gewijzigd door pagani op 20-11-2006 15:28 ]


Acties:
  • 0 Henk 'm!

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 15-10 22:58
Bedenk ook dat perfecte collision detection ook niet mooi over komt. Je kan je dan voorstellen dat iemand dan letterlijk op het puntje van zijn kont op een stoel zit.

Acties:
  • 0 Henk 'm!

  • pagani
  • Registratie: Januari 2002
  • Niet online
The - DDD schreef op maandag 20 november 2006 @ 15:31:
Bedenk ook dat perfecte collision detection ook niet mooi over komt. Je kan je dan voorstellen dat iemand dan letterlijk op het puntje van zijn kont op een stoel zit.
Een van de leuke dingen bij farcry was dan ook om tegenstanders in onmogelijke posities te krijgen (balancerend op een struik ofzo :P)

Maar inderdaad, voor echt realisme zou je dan weer naar non-rigid models (dus buigzaam/vervormbaar, net als je kont :P ) moeten kijken.

[ Voor 14% gewijzigd door pagani op 20-11-2006 15:33 ]


Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:19

Cyphax

Moderator LNX
The - DDD schreef op maandag 20 november 2006 @ 15:31:
Bedenk ook dat perfecte collision detection ook niet mooi over komt. Je kan je dan voorstellen dat iemand dan letterlijk op het puntje van zijn kont op een stoel zit.
Ik heb dat ook weleens gezien (meerdere keren) in games hoor, dat iemand op een plateau staat met 1 pixel van 1 hak ofzo. Komt ook niet realistisch over. :+

Hoi JohnnyV :P

[ Voor 3% gewijzigd door Cyphax op 20-11-2006 15:57 ]

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

GRAW (Ghost Recon: Advanced Warfighter) is een van de eerste spellen waarbij er gebruik wordt gemaakt van een "echte" physics engine. Hierin heb ik nog niet van dit soort foutjes kunnen ontdekken. Poppetjes vallen erg realistisch en heb nog nooit een geweer door een muur heen zien steken :)

De systeemeisen zijn er echter ook naar 8)

Erg leuk topic btw...

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • Dutch_Razor
  • Registratie: Augustus 2005
  • Laatst online: 01-11-2024
Zeer gemakkelijk, hoe hoger de tri count van een object hoe meer rekemkracht t kost dit te renderen.

De meeste objecten bestaan uit 6 meshes, LOD 0 tm 2 en COL 0 tm 2.

LOD0 is je main mesh, de meest gedetailleerde.

LOD1 80% gedetraileerd etc.

COL zijn je collision meshes, COL0 doet bijvoorbeeld alle projektiel collisions, 1 je players en 2 je voertuigen en omgeving.

Als j dus geen COL1 en 0 mesh op je lijken plakt scheelt dit weer 2 meshes, dus tris :)

Ook hebben benen, geweren en tanklopen geen col mesh.

Hier de col mesh van een tank (google image)

Afbeeldingslocatie: http://mdt.planetbattlefield.gamespy.com/Tutorials/StandardMeshAnatomy/TankCol01.jpg

[ Voor 17% gewijzigd door Dutch_Razor op 20-11-2006 22:58 ]

Pagina: 1