České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačů
Bakalářská práce
Závodní simulátor Kryštof Valenta
Vedoucí: Ing. Hapala Michal Studijní program: Elektrotechnika a informatika, strukturovaný, bakalářský Obor: Výpočetní technika květen 2010
Poděkování Předně bych chtěl poděkovat svojí rodině za poskytnutí opory v nouzi a příjemného prostředí pro psaní. Moje díky také patří vedoucímu této práce za odpovědný přístup a přátelské jednání.
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu § 60 Zákona č.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne ...... května 2010 .............................................. Kryštof Valenta
v
vi
Abstract This bachelor thesis deals with physics engines in computer games, their potential and field of use on platform Microsoft .NET. It further describes physical fundamentals of automobiles. At the end, application of a physics engine is described on a computer game simulating car racing. Creating of this game is part of this thesis.
Abstrakt Tato bakalářská práce se zabývá fyzikálními zákonitostmi v počítačových hrách, jejich možnostmi a jejich použitím na platformě Microsoft .NET. Dále pojednává o fyzikální podtstatě automobilů. Na závěr je rozebráno použití fyzikálního enginu v počítačové hře, simulující závody automobilů, jejíž vytvoření je součástí této práce. vii
viii
Obsah 1 Úvod........................................................................................................................................1 2 Úvod do fyzikálních knihoven..............................................................................................3 2.1 Nedeformovatelné chování (Rigid body physics)...........................................................3 2.2 Pružné chování (Soft body physics)................................................................................4 2.3 Kolize..............................................................................................................................4 3 .NET, C#, XNA......................................................................................................................5 3.1 Prostředí .NET.................................................................................................................5 3.2 C#....................................................................................................................................5 3.3 Microsoft XNA................................................................................................................5 4 Fyzikální knihovny................................................................................................................7 4.1 Fyzikální knihovny - 2D..................................................................................................7 4.1.1 FarseerPhysics.........................................................................................................7 4.1.2 JelloPhysics.............................................................................................................8 4.2 Fyzikální knihovny - 3D..................................................................................................8 4.2.1 Ageia PhysX - PhysX.Net wrapper.........................................................................8 4.2.2 Havok Physics.........................................................................................................9 4.2.3 BEPUphysics...........................................................................................................9 4.2.4 JigLibX....................................................................................................................9 4.3 Další fyzikální frameworky...........................................................................................10 4.4 Výběr fyzikální knihovny pro závodní simulátor..........................................................10 5 Fyzika automobilů...............................................................................................................11 5.1 Základní model automobilu...........................................................................................11 5.2 Zatížení náprav..............................................................................................................11 5.3 Auto na nerovné ploše...................................................................................................12 5.4 Přesun váhy na zrychlujícím automobilu......................................................................13 5.5 Přesun váhy na nápravě.................................................................................................14 5.6 Hnací ústrojí..................................................................................................................15 5.7 Trakční síla....................................................................................................................16 5.8 Trakční limit..................................................................................................................17 5.9 Odpor kol.......................................................................................................................18 5.10 Odpor vzduchu............................................................................................................18 5.11 Celková podélná síla...................................................................................................19 5.12 Zdvihová síla...............................................................................................................19 5.13 Prokluz pneumatik.......................................................................................................20 5.14 Brzdění........................................................................................................................21 5.15 Zatáčení.......................................................................................................................23 5.16 Skluzový úhel..............................................................................................................24 5.17 Točivý moment okolo svislé osy.................................................................................24 5.18 Boční smyk vozidla.....................................................................................................24 5.19 Podtáčivé a přetáčivé vozidlo......................................................................................25 5.20 Rozpočet sil pro podélné zrychlení a zatáčení............................................................25 5.21 Zanesení rovnic do herní smyčky................................................................................26 6 Závodní simulátor...............................................................................................................27 6.1 Fyzika automobilu.........................................................................................................27 6.1.1 Tělo automobilu.....................................................................................................27 6.1.2 Pohon.....................................................................................................................28 ix
6.1.3 Převodová skříň.....................................................................................................29 6.1.4 Kola - Pneumatiky.................................................................................................29 6.1.5 Odpružení vozidla..................................................................................................30 6.1.6 Brzdy.....................................................................................................................30 6.2 Fyzika prostředí - různé povrchy...................................................................................30 6.2.1 Třecí koeficient......................................................................................................31 6.2.2 Povrchy..................................................................................................................31 6.2.3 Fyzika prostředí - nárazy.......................................................................................31 6.3 Vliv počasí.....................................................................................................................32 6.4 Další herní prvky...........................................................................................................32 6.4.1 Cíl hry....................................................................................................................32 6.4.2 Hlavní menu...........................................................................................................33 6.4.3 Nastavení - Settings...............................................................................................34 6.4.4 Particle efekty........................................................................................................34 6.4.5 Zvuky.....................................................................................................................36 6.4.6 Střelba....................................................................................................................36 7 Závěr....................................................................................................................................37 8 Zdroje...................................................................................................................................39 9 Instalační a uživatelská příručka.......................................................................................41 10 Obsah přiloženého DVD...................................................................................................43
x
Seznam obrázků Obrázek 2.1: Red Faction – ovlivnitelné prostředí.....................................................................3 Obrázek 2.2: Rigid body.............................................................................................................4 Obrázek 2.3: Soft body...............................................................................................................4 Obrázek 2.4: Látka – render 3D Max..........................................................................................4 Obrázek 4.1: Super Stacker – 2D fyzika.....................................................................................7 Obrázek 4.2: FarseerPhysics – normální a debug mód...............................................................7 Obrázek 4.3: Jelly Car – soft body fyzika...................................................................................8 Obrázek 4.4: Hra Batman Arkham Asylum – PhysX.................................................................8 Obrázek 4.5: Diablo 3 – ničitelné prostředí................................................................................9 Obrázek 4.6: BEPUphysics – obalová tělesa, kolize, automobil................................................9 Obrázek 5.1: Rozložení váhy automobilu na jednotlivé nápravy.............................................12 Obrázek 5.2: Auto na nakloněné rovině....................................................................................13 Obrázek 5.3: Auto na šikmé rovině...........................................................................................13 Obrázek 5.4: Přesun váhy – dragster [25].................................................................................14 Obrázek 5.5: Odpružení automobilu.........................................................................................15 Obrázek 5.6: Točivý moment a výkon – motor LS1 ( 5.7 Litrů V8 SFI ) [17]........................16 Obrázek 5.7: Zdvihová síla u běžných automobilů...................................................................19 Obrázek 5.8: Záporná zdvihová síla u závodních automobilů..................................................19 Obrázek 5.9: Závislost trakční síly na skluzovém poměru.......................................................21 Obrázek 5.10: Závislot brzdného koeficientu na skluzovém poměru.......................................22 Obrázek 5.11: Úhel natočení kol...............................................................................................23 Obrázek 5.12: Závislost příčné síly na skluzovém úhlu...........................................................24 Obrázek 5.13: Skluzový úhel a boční smyk automobilu...........................................................25 Obrázek 5.14: Trakční kruh......................................................................................................26 Obrázek 6.1: Kolizní tělo automobilu a vizuální model...........................................................27 Obrázek 6.2: Herní obrazovka, zrychlení z 0 na 100 km/h.......................................................28 Obrázek 6.3: Kola – raycasting, vlevo drátový model, vpravo grafický ................................29 Obrázek 6.4: Pružinový model kola..........................................................................................29 Obrázek 6.5: Pérování při prudkém zatáčení............................................................................30 Obrázek 6.6: Různé povrchy – asfalt, prachová cesta, suchá zem, voda..................................31 Obrázek 6.7: Srážky s objekty..................................................................................................32 Obrázek 6.8: Rozdíl normálního a deštivého počasí.................................................................32 Obrázek 6.9: Cílový čas............................................................................................................33 Obrázek 6.10: Hlavní menu......................................................................................................33 Obrázek 6.11: Blooming effect – vlevo zapnuto, vpravo vypnuto...........................................34 Obrázek 6.12: Particle efekt – výfuk.........................................................................................35 Obrázek 6.13: Particle efekt – prach.........................................................................................35 Obrázek 6.14: Particle efekt – kouř a oheň...............................................................................35 Obrázek 6.15: Particle efekt – kapky deště...............................................................................35 Obrázek 6.16: Particle efekt – voda..........................................................................................35 Obrázek 6.17: Střelba – opravné bedny, munice, výbušné bedny, barely, M61 Vulcan..........36
Seznam tabulek Tabulka 5.1: Převodová skříň...................................................................................................16 Tabulka 5.2: Koeficienty vozovky............................................................................................18 Tabulka 5.3: Koeficienty odporu vzduchu pro různé automobily............................................19 Tabulka 5.4: Koeficienty vynásobené čelní plochou automobilu pro různé automobily.........19 Tabulka 5.5: Zdvihové koeficienty pro různá auta...................................................................20 xi
xii
1 Úvod
1 Úvod Cílem této práce je vytvořit přehled o dostupných fyzikálních knihovnách pro prostředí .NET a poskytnout tak komukoliv náhled na možnosti her s integrovaným fyzikálním enginem. Zjednodušit tak případně někomu volbu té správné fyzikální knihovny pro vývoj hry v Microsoft XNA Game Studiu. Druhým přínosem je pohled do fyziky automobilů. Poskytnutá soustava matematickofyzikálních rovnic je dostačující pro implementování vlastní jednoduché fyziky pro hru simulující jízdu automobilem. Za přínos také považuji rozbor modelového závodního simulátoru, vytvořeného jako součást této práce. Tato hra, vytvořená pomocí Microsoft XNA Studia ukazuje začlenění fyzikálního enginu BEPUphysics a široký potenciál takto vyvíjené hry. Zdroje, ze kterých jsem čerpal, považuji za velmi vhodné pro kohokoli, kdo by rád o čemkoli dále zmíněném chtěl získat hlubší vědomosti.
1
1 Úvod
2
2 Úvod do fyzikálních knihoven
2 Úvod do fyzikálních knihoven Lidská potřeba usnadnit si jakoukoli práci zasáhla i herní průmysl. Když dnes dojde na vytvoření nové počítačové hry, nesedne si skupina programátorů k počítači a nenapíše kompletní zdrojové kódy na jedno posezení. Při programování her (a dnes obecně všech programů) je kladen důraz na znovupoužití některých částí kódu. Hlavním jádrem her je tzv. engine, což doslova znamená jakýsi motor, který hru pohání. Je běžné, že více her, žánrově stejných, ale občas i rozdílných, stojí na stejném enginu. Za zmínku stojí určitě legendární Unreal Engine, vytvořený firmou Epic Games ješte v minulém tisiciletí. Průběžně revidovaný je dnes jádrem mnoha FPS(1) a jiných her. Použitím herního enginu jiné hry, nebo jejích částí, vede k velkému urychlení práce. S dnešními možnostmi hardwaru jsme schopni vytvářet hry reálně simulující pozemské a jiné (např. vesmírné) podmínky. Často herní enginy typu Unreal Engine neřeší zajištění všech těchto podmínek sami. Integrují do sebe jiný engine, označovaný jako fyzikální engine, který se stará o zanesení fyziky reálného světa do hry. Naneštěstí fyzika tohoto světa je velmi komplexní záležitost a u počítačových her je třeba zajistit výpočty v reálném čase. Proto herní fyzikální enginy aplikují fyzikální zákonitosti v aproximované formě. Existují sice i takové, které počítají s kvantovou mechanikou apod., ty však zpravidla nejsou určeny pro výpočet v reálném čase. Výpočet fyziky probíhá standardně na počítačovém procesoru, existují však speciální rozšiřující zařízení, která jsou přímo určena k účelům fyzikální simulace. Některé dnešní grafické karty umožňují vykonávat část práce procesoru, a to dokonce efektivněji.
2.1 Nedeformovatelné chování (Rigid body physics) V dnešní době jsou 3D hry většinou založeny výhradně na rigidní fyzice. Předměty a prostředí nelze deformovat. Ať na sebe dva předměty působí jakoukoli silou, bude v jejich souřadnicovém systému vždy platit, že vzdálenost kterýchkoli dvou bodů bude konstantní. Například tedy nelze měnit strukturu předmětů nebo raketometem prorazit díru do zdi. Světlou vyjímkou je poměrně straší hra Red Faction od firmy Volition Inc., ve které lze násilím rozbít téměř cokoli, a něco takového není dodnes obvyklé.
Obrázek 2.1: Red Faction – ovlivnitelné prostředí 1.
„First person shooter“ - herní žánr, hra z pohledu první osoby
3
2 Úvod do fyzikálních knihoven V rigidní fyzice jsou předměty aproximovány jako soustava hmotných bodů, které dohromady určují těžiště. Fyzikální engine pak počítá zrychlení a rotace k němu vztažené. Bezesporu jednou z nejdůležitějších vlastností této i jakékoli jiné části physics enginu je efektivita výpočetních algoritmů, které tyto výpočty řeší. U nepružné fyziky jde buď o přímé algoritmy, používané k výpočtu zrychlení objektu ze sil na něj působících, nebo zpětné, kde chceme vypočítat sílu, kterou musíme působit, abychom docílili požadovaného stavu objektu. Ve hrách jde spíše o přímé algoritmy. Se zpětnými se setkáváme například u aplikací plánujících trajektorii. Rigidní fyzikou zaměřenou na hry se zabývají například [1], [2], [3].
2.2 Pružné chování (Soft body physics) Moderní fyzikální enginy dokáží vlastnosti předmětů simulovat reálněji. Narozdíl od předchozí části, lze předměty do jisté meze deformovat. Takový předmět opět můžeme aproximovat do soustavy hmotných bodů. Jejich vzdálenosti však nejsou striktně konstantní. Používán je tzv. pružinový model, kde jsou jednotlivé body spojeny pružinami o nulové hmotnosti. Ty mají svou tuhost a omezenou maximální a minimální délku. Takto popsaný fotbalový míč tedy nelze stlačovat donekonečna. Hlavní uplatnění je v modelování oblečení, vlasů a měkkých tkání. Oblíbené je také použití u 2D her, kde ovládáte kouli „slizu“ (viz obrázek 2.3) a přes různé překážky za působení gravitace ji musíte přemístit z jednoho místa do druhého.
Obrázek 2.2: Rigid body
Obrázek 2.3: Soft body
Obrázek 2.4: Látka – render 3D Max
2.3 Kolize Pro správný chod algoritmů pro fyziku je nezbytné správně detekovat kolize objektů, jestli se dva předměty dotýkají, překrývají nebo nikoliv. Bez správně fungujícího kolizního systému by předměty propadávaly skrz zem a postavy by mohly chodit skrz zdi. Pokud bychom měli v každém herním cyklu detekovat kolizi každého předmětu s každým, čas potřebný pro výpočet kolizí by prudce rostl s jejich počtem. Existují mnohem šetrnější přístupy, které se liší celkovým spotřebovaným časem nepřímo úměrně s nároky na operační paměť počítače. Jednou z možností je rozdělit svět na několik sektorů a pro výpočet kolizí pro určitý předmět počítat jen s předměty v daném sektoru. Co se týče samotného detekování kolize dvou předmětů, opět nejde o výpočetně jednoduchou záležitost, specielně v případě předmětů o složitých tvarech. Pokud však půjde o dvě koule, je situace nanejvýš triviální. Stačí znát polohu jejich středů a poloměry. Proto se u spousty her kolize předmětů obcházejí tak, že se pro předmět vytvoří tzv. obalové těleso (nejčastějí koule nebo krychle), kde všechny body předmětu jsou uvnitř obalového tělesa a kolize se počítají mezi obalovými tělesy, a ne předměty samotnými. Kolizní systém spolu s fyzikálními algorimy určují předmětu, jak v případě kolizí s jinými předměty dle situace reagovat, jak měnit svoji polohu, orientaci, rychlost nebo tvar. 4
3 .NET, C#, XNA
3 .NET, C#, XNA Vzhledem k tomu, že součástí této práce je počítačová hra postavená na fyzikálním enginu, bude potřeba nějaký vhodný vybrat. Než přijde řada na srovnání knihoven, umožňujících simulaci fyziky reálného světa v počítačových hrách, je třeba zmínit několik věcí, kterým toto srovnávání a následný výběr knihovny bude podléhat. Kromě toho, že bude kladen důraz na jakékoli aspekty, které by usnadňovaly realizaci závodního simulátoru, je nutné zohlednit prostředí, v němž bude projekt vytvářen.
3.1 Prostředí .NET Tím je myšlen Microsoft .NET Framework [4]. Pracuje pod operačními systémy Microsoft (MS) Windows. Hlavním přínosem pro vývojáře je možnost vyvíjet široké spektrum softwaru nezávisle(1) na programovacím jazyku, ve kterém bude programátor psát. Software takto vyvinutý bude vždy automaticky přeložen do univerzálního mezijazyka Common Intermediate Language(2), čímž umožňuje částečnou platformní nezávislost kódu.
3.2 C# Objektově orientovaný programovací jazyk C# [5] byl představen Microsoftem v roce 2000. Společné prvky sdílí jak s rodinou programovacích jazyků C, ze které vznikl, tak s programovacím jazykem Java. Jeho první verze přišla s uvedením MS Visual Studio .net, které poskytuje pravděpodobně nejznámější prostředí pro vývoj .NET softwaru. V současnosti je C# ve verzi 3.0 společně s MS Visual Studio 2008 veřejností užíván v komerční i nekomerční zóně. Pro mne budou tyto prvky jedním ze základních stavebních prvků pro vývoj implementační části bakalářské práce – závodního simulátoru. Zmínil bych však ještě, že na obzoru je nová verze Visual Studia (2010), která má přijít s .NET frameworkem verze 4. Již nyní existuje v betaverzi, jeho oficiální vydání však bylo minimálně jednou odloženo. Je však pravděpodobné, že to bude někdy během nebo chvíli po dokončení této práce.
3.3 Microsoft XNA Microsoft XNA je sada knihoven nad .NET frameworkem poskytující nástroje pro tvorbu her nad knihovnami DirectX. Prostředí, ve kterém jsou tyto hry vyvíjeny, je XNA Game Studio, v současnosti ve vezi 3.1, které je rozšířením pro MS Visual Studio C#. Spolu s novou verzí Visual Studia (2010) je také připravováno XNA Game Studio 4.0. Celkově XNA poskytuje velmi dobré možnosti tvorby her pro platformu PC (OS Windows) a pro Xbox 360(3). Podporu pro vývoj her není možno nepochválit. Webová stránka XNA Creators [6] poskytuje aktuální přehled o všem, co se okolo XNA děje. Rozsáhlé diskuzní fórum často již obsahuje odpovědi na konkrétní problémy, na které můžete při tvorbě her narazit. Lze zde snadno získávat zkušenosti zkoumáním zveřejněných her ostatních lidí a ty svoje publikovat. 1.
Pouze teoreticky, oficiálně jsou podporovány například programovací jazyky C#, VB, .NET, C++
2.
Nízkoúrovňový programovací jazyk, zásobníkově orientovaný
3.
Herní konzole od společnosti Microsoft
5
3 .NET, C#, XNA Za zmínku stojí také jejich výukový program, kde pomocí dobře komentovaných tutoriálů a startovních balíků pro různé herní žánry jakýkoli začátečník snadno pronikne do možností, které XNA Game Studio poskytuje. XNA Creators uvedl i balík (starter kit) pro závodní hru. Jedná se však již o kompletní hru, která je snadno upravitelná a rozšiřitelná. Pro implementaci závodního simulátoru a integraci fyzikálních knihoven tedy příliš nevyhovuje. V zadání bakalářské práce je uvedeno použití XNA Game Studia 3.0, po konzultaci s vedoucím této práce však není důvod, proč nevyužít možností studia verze 3.1.
6
4 Fyzikální knihovny
4 Fyzikální knihovny Nyní bych shrnul dostupné fyzikální frameworky, aplikovatelné v prostředí .NET. Rozdělit je můžeme z hlediska světa, který simulují, na 2D a 3D. Dále budeme rozlišovat licencování a vhodnost pro simulaci automobilů.
4.1 Fyzikální knihovny - 2D Tyto frameworky naleznou uplatnění, pokud se ve hře spokojíme s prostorem o dvou rozměrech, například při tvorbě plošinových her. Jako příklad bych uvedl hru, která mi v nedávné době sebrala několik hodin života. Cílem ve hře Super Stacker je naskládat na sebe předměty různých tvarů tak, aby nespadly.
Obrázek 4.1: Super Stacker – 2D fyzika
4.1.1 FarseerPhysics Tento engine je přímo určen pro tvorbu her v prostředí Microsoft XNA a platformy podporující Microsoft Silverlight. Licence je zdarma pro veškeré účely. Projekt je stále ve vývoji. Engine lze stáhnout ze současného webu [7]. Za zmínku stojí dobrá dokumentace, která vhodně popisuje metody a funkce na problematice fyzikálních enginů a vzorové minihry, ukazující integraci a debug mód.
Obrázek 4.2: FarseerPhysics – normální a debug mód
7
4 Fyzikální knihovny
4.1.2 JelloPhysics Alternativou je fyzikální knihovna JelloPhysics(1). Existuje ve dvou verzích, a to C++, která je platformně nezávislá, a C# určená pro XNA. Poskytuje neomezující licenci a je zdarma ke stažení na webu autora [8]. Hlavním prvkem je podpora soft body fyziky. JelloPhysics byl vytvořen pro hru Jelly Car, která je dnes dostupná pro PC, iPhone i iPad. Není však zadarmo.
Obrázek 4.3: Jelly Car – soft body fyzika
4.2 Fyzikální knihovny - 3D 4.2.1 Ageia PhysX - PhysX.Net wrapper Fyzikální knihovna původně od společnosti Ageia, nyní koupená firmou NVIDIA, patří bezesporu na první místo. S její podporou můžete ve hře použít rigidní objekty, pružné objekty, silová pole, tekutiny nebo látky. Mimo jiné poskytuje podporu pro snadné ovládání herních postav včetně tzv. ragdoll techniky, používané například pro realistické simulování smrti postavy. Licence je volná pro nekomerční i komerční použití. Nevýhodou pro použití v XNA je nutnost použít tzv. wrapper, neboť PhysX není určeno pro použití se C#. PhysX.Net mapuje funkce PhysX na C#. V tomto mezičlánku může být slabé místo, neboť vzhledem k úpravám v nových verzích PhysX je nutné revidovat tento wrapper, a jelikož nejde o produkt se širokým spektrem použití, může se stát, že vyhoří. PhysX lze po registraci stáhnout na webu [9] a wrapper na [10].
Obrázek 4.4: Hra Batman Arkham Asylum – PhysX 1.
Občas označováno také jako JellyPhysics
8
4 Fyzikální knihovny
4.2.2 Havok Physics Za zmínku také stojí Havok Physics poskytující opět široké spektrum fyzikální simulace. Stojí například za legendárními tituly BioShock 1 a 2, Assassin's Creed 1 a 2, Halo 2 a 3, Half-Life 2 a v neposlední řadě také připravované Diablo 3 s možností rozbít téměř cokoliv na kousky a získat tak o pár zlaťáků navíc. Havok poskytuje licenci pro nekomerční použití, nicméně jako NVIDIA PhysX není určen pro C# a zatím neexistuje použitelný wrapper.
Obrázek 4.5: Diablo 3 – ničitelné prostředí
4.2.3 BEPUphysics Tato nízkorozpočtovější physics knihovna je zdarma pro nekomerční použití. Podporuje detailní prvky rigidní fyziky a kvalitní kolizní systém. Těší se dobrému a stálému vývoji. Výhodou je vestavěná třída pro automobily a poměrně dobrá dokumentace, vhodná pro integraci a začátky s tvorbou hry na BEPUphysics enginu. Také dobře komentované a průběžně revidované demo, ukazující možnosti frameworku. Současný web projektu je [11].
Obrázek 4.6: BEPUphysics – obalová tělesa, kolize, automobil
4.2.4 JigLibX Jedná se o port fyzikální knihovny JigLib. V současné době je vyvíjen separátně přímo pro C#. JiglibX je pod open source licencí. Podporuje rigidní fyziku a nejsilnější stránkou tohotu projektu je velmi kvalitní podpora, kde můžete čerpat z tutoriálů a diskuzního fóra. Obsahuje také třídu pro automobily. Současný web projektu je [12]. 9
4 Fyzikální knihovny
4.3 Další fyzikální frameworky Mezi další dostupné knihovny, které jsou alternativou k již zmíněným, patří BulletX, jehož vývoj momentálně stagnuje, a dále Ooops! 3D physics framework. Za zmínku stojí také projekt CarX, který velmi realisticky modeluje chování automobilů, překonávající leckterou dnešní závodní hru. Nicméně pro jeho funkci je třeba ho propojit s vlastním fyzikálním enginem, podle dokumentace jakýmkoli. V ukázkovém demu je použit PhysX od společnosti NVIDIA. Otázkou zůstává, jestli by takové spojení mohlo fungovat s XNA. Licence však není zdarma. Podobným projektem je Simul-X, který možná ještě lépe simuluje automobily, letadla, lodě a jiné stroje, včetně elastických pneumatik. Pro jeho použití je zapotřebí buď NVIDIA PhysX, nebo Havok physics licence, samotný Simul-X není zadarmo. Opět není zaručeno, že by jej šlo jakkoli napojit na XNA, nicméně jde o jeden z elitních projektů, které bych rád zmínil.
4.4 Výběr fyzikální knihovny pro závodní simulátor Závodní simulátor vyvíjím během psaní bakalářské práce. Po prostudování možností různých knihoven jsem se rozhodl pro integrování BEPUphysics frameworku, neboť šlo o projekt vytvořený přímo pro XNA. Obsahuje třídu pro implementaci vozidel a komentované demo ukázky vybízejí k jednoduchému začlenění do hry samotné. Zdráhal jsem se možnosti použít velikána přes fyzikální simulaci PhysX, z důvodu nutnosti použít wrapper. Kdybych někdy volil znovu a měl čas jej vyzkoušet, určitě bych nemeškal. Alternativou pro BEPUphysics mezi menšími projekty by určitě byl JigLibX, který také disponuje třídou pro automobily.
10
5 Fyzika automobilů
5 Fyzika automobilů Fyzika automobilů je velmi složitá (Která fyzika není, pokud chceme brát v úvahu 100 % okolností?). Aby bylo možno realizovat simulaci, bude nutné řadu vlivů zcela ignorovat, a ty ostatní, ať už méně či více, aproximovat. Je nutné si také uvědomit, že jde v druhé řadě také o hru. „Hra je v širším smyslu každá činnost člověka i zvířete přinášející dobrý pocit.“ [13] Aby nám tedy tato hra přinášela dobrý pocit a nemuseli jsme ve vzteku ničit klávesnice a monitory, půjdeme místy v samotné implemetaci proti zákonům fyziky. Podle míry potlačení základů přírodních a jiných zákonů můžeme závodní hry rozdělit na simulační, což je náš případ (potlačení bude pouze minimální), a tzv. arkádové. Arkádové závodní hry mají zjednodušený fyzikální engine. Naučit se ovládat auto nevyžaduje zpravidla téměř žádné učení. Auta mohou prudce brzdit, aniž by došlo ke smyku, a zatáčet, aniž by nastalo přetáčení nebo podtáčení.
5.1 Základní model automobilu Při popisu fyzikálního modelu auta se budu snažit postupovat tak, aby následující věc navazovala na předchozí a vše dávalo průběžně smysl. Nikoho tedy asi nepřekvapí, že začneme u auta stojícího v klidu na vodorovné ploše. Simulaci provází značné množství funkcí a konstant, nicméně v konkrétní moment je možno stav vozidla popsat pomocí tří základních rovnic, to je pro sílu podélnou, sílu boční a (ve zjednodušené formě) točivý moment okolo vertikální osy. Všechny tyto síly lze pak zapsat ve formě 2. Newtonova zákona =m⋅a F Pokud se auto nehýbe nebo se pohybuje konstantní rychlostí a nezatáčí, jsou všechny tyto tři síly nulové.
5.2 Zatížení náprav Pro mnoho výpočtů je důležitá hmotnost vozidla. Celkovou hmotnost vozidla pak budeme brát v úvahu v podobě hmotného bodu. To znamená, že veškerou hmotu vozidla koncentrujeme do nekonečně malého bodu a tento bod umístíme do těžiště vozidla. Jeho poloha má silný vliv na chování vozidla v určitých situacích. Závodní automobily mají těžistě zpravidla níže a mají tak větší stabilitu. Při zrychlování nedocházi k velkým přesunům hmotnosti mezi nápravami. Naopak vysoká auta, jako nákladní vozy, mají těžiště vysoko a jejich stabilita je silně závislá na silách bočních a podélných. Těžiště vozidla budeme nadále označovat jako centrum gravitace (CG). Jeho poloha pak ovlivňuje rozdělení hmotnosti vozidla na nápravy. Při jízdě automobilem dochází vlivem zrychlování, brzdění a zatáčení k přesunům váhy. Kdo řídil někdy auto, určitě si dokáže uvědomit pocit při prudkém zrychlení, kdy je vmáčknut do sedadla, a při dupnutí na brzdu vržen dopředu. Realistický pocit ze hry určitě posílí naklánění těla automobilu vlivem těchto přesunů. Abychom tuto míru naklopení mohli vypočítat, budeme potřebovat vědět zatížení jednotlivých kol. Obrázek 5.1 ilustruje skutečnost, že pokud těleso působí na podložku nějakou silou, v tomto případě váha auta, působí podložka proti tomuto předmětu stejnou silou, opačného směru. Informace o zatížení 11
5 Fyzika automobilů kol nám však také poskytne jednu mnohem důležitější věc. Pokud auto například akceleruje z nulové rychlosti a řidič při tom stlačí plyn až na zem, může se stát, že místo toho, aby došlo k prudkému zrychlení, začnou se autu protáčet kola, díky čemuž bude zrychlení o hodně menší. K tomuto jevu dojde proto, že pneumatiky vozidla jsou vždy schopny přenést jen určitou maximální sílu do vozovky. Pokud je tato hranice překročena, dojde k prokluzu. Tato hranice je dána mimo jiné zatížením pneumatik. Podle obrázku 5.1 a následujících vztahů je možné vypočítat statické zatížení jednotlivých náprav: W př =W⋅ W z=W⋅
b L
c L
Wpř = tíha na přední nápravě [N] Wz = tíha na zadní nápravě [N] W = tíha vozidla [N] L = rozvor (vzdálenost) náprav [m] b = vzdálenost přední nápravy od osy CG [m] c = vzdálenost zadní nápravy od osy CG [m]
Obrázek 5.1: Rozložení váhy automobilu na jednotlivé nápravy
5.3 Auto na nerovné ploše Pokud však auto stojí do kopce, je nutné tyto vztahy rozšířit. Pomocí obrázku 5.2 a následujících vztahů určíme zatížení jednotlivých náprav, kde: b h W př =W⋅ −W⋅ ⋅ L L b h W z=W⋅ W⋅ ⋅ L L h = výška CG [m] θ = úhel stoupání kopce [rad]
12
5 Fyzika automobilů
Obrázek 5.2: Auto na nakloněné rovině
Obrázek 5.3: Auto na šikmé rovině Zatížení jednotlivých kol na nápravě odpovídá ½ zatížení nápravy. Ale pokud bude auto zároveň na šikmé rovině, jako na obrázku 5.3, musíme výpočty zatížení jednotlivých pneumatik doplnit o následující rovnice: W h=
Wn h −W n⋅ ⋅ 2 t
W d=
Wn h W n⋅ ⋅ 2 t
Wh = tíha na horním kole [N] Wd = tíha na dolním kole [N] Wn = tíha na nápravě [N] t = šířka nápravy [m] α = úhel našikmení [rad]
5.4 Přesun váhy na zrychlujícím automobilu Nyní máme kompletní sestavu rovnic pro výpočet zatížení jednotlivých kol, ale to však pouze pro nepohybující se vozidlo. Jak již bylo řečeno, během jízdy dochází k přesunům váhy, což je příčinou různého naklonění těla automobilu. Pokud pojede vozidlo konstantní rychlostí, budou dosavadní rovnice také postačovat. Pokud bude zrychlovat či zpomalovat vlivem nenulové podélné síly, rozšíříme rovnici pro zatížení náprav takto:
13
5 Fyzika automobilů b h W př =W⋅ −m⋅a x⋅ L L b h W z=W⋅ m⋅a x⋅ L L m = hmotnost vozidla [kg] ax = podélné zrychlení vozidla [ms-2] Zrychlení způsobí přesun váhy na zadní nápravu (brzdění na přední nápravu). Pokud má tedy automobil náhon na zadní kola, přesun při zrychlení způsobí větší zatížení zadní nápravy a pod větším zatížením mohou pneumatiky dodat více síly, tj. větší zrychlení. Řidič nyní může více přišlápnout plyn, aniž by došlo k prokluzu kol. Dnešní běžné vozy, např. jako Škoda Fabia, jsou schopné startovního zrychlení 3 – 4 ms-2 na první rychlostní stupeň [14]. V oboru závodních automobilů se často udává zrychlení v jednotkách (G), což odpovídá násobkům gravitačního zrychlení na Zemi (9,8 ms-2). 3 – 4 ms-2 je tedy přibliženě 0,3 – 0,4 G. Existuje speciální závodní třída vozidel, tzv. Top Fuel Dragsterů, jejichž průměrné zrychlení na čtvrtmílovém závodě dosahuje okolo 5 G [15]. Takovéto stroje zrychlí z nuly na 160 km/h za méně než 1 s. Tyto závodní automobily mají velmi specifickou geometrii. V jiné třídě dragsterů (s geometrií běžných vozů) se ale může stát, pokud při startu řidič příliš přišlápne plyn k podlaze, že zrychlení způsobí tak velký přesun váhy, že se přední kola automobilu zvednou do vzduchu.
Obrázek 5.4: Přesun váhy – dragster [25]
5.5 Přesun váhy na nápravě Dále musíme vzít v úvahu zatáčející vozidlo. Pro naše účely, vzhledem k použitým zjednodušením, jsou pro nás důležitější přesuny váhy mezi nápravami než ty v rámci nápravy. Zatížení jednotlivých kol budeme potřebovat pouze pro natočení těla automobilu. A to tak, že podle váhy na kole spočítáme stlačení či prodloužení odpružení automobilu. Můžeme si tedy pro přesun váhy v rámci nápravy dovolit zjednodušení. Budeme zde počítat naklonění automobilu do stran podle zatížení jednotlivých pneumatik. Zjednodušené rovnice pro výpočet zatížení kol na nápravě vypadají takto: W vně =
Wn h F y⋅ r 2 t
W vni =
Wn h −F y⋅ r 2 t
Wvně = tíha na vnějším kole [N] Wvni = tíha na vnitřním kole [N] Fy = podélná síla [m] hr = výška osy rotace nad zemí v místě nápravy [m], přibližně ve výšce ½ odpružení viz obrázek 5.5 14
5 Fyzika automobilů
Obrázek 5.5: Odpružení automobilu K většímu přesunu váhy mezi koly na nápravě dojde v případě většího hr, tedy u méně zatížené nápravy, jelikož ta bude mít více protaženou pružinu závěsu a její osa rotace se bude nacházet výše.
5.6 Hnací ústrojí Základním prvkem hnacího ústrojí každého automobilu je dozajista motor. Ten produkuje hnací sílu, která je dále násobena v převodové skříni a diferenciálu hnaných kol. Pomocí nich je pak tato síla přenášena do vozovky a způsobuje zrychlení automobilu. Nejmarkatnějším atributem, ve kterém se motory liší, je jejich maximální síla. Ta je již od dávných dob udávána v koňských silách [HP], anglicky „horse power“. Koňská síla je jednotkou výkonu a 1 HP opovída 745,7 W. To je výkon, při němž je těleso o hmotnosti 76 kg vyzdviženo o 1 metr za 1 sekundu. Zejména pro jednoduchost výpočtů je však lepší použití mezinárodní soustavy jednotek SI, tzn. místo výkonu používat točivý moment měřený v [Nm] (newtonmetr). Jeden Nm znamená působení na těleso vzdálené 1 metr od osy otáčení silou 1 N. Koňská síla a točivý moment jsou jednotkami různých veličin, jejich přímý převod není možný. Pro převod je potřeba znát otáčky motoru. Převodní vztah bude uveden níže. Když motor nastartujete, začne se otáčet. Pokud je pomocí spojky odpojen od hnacího ústrojí a řidič nešlape na plyn, otáčí se konstantní (klidovou) rychlostí. Ta se udává v otáčkach za minutu [ot/min]. Otáčky běžných automobilových motorů se pohybují mezi 700 – 7000 ot/min. Klesnou-li otáčky pod dolní hranici, motor se zastaví, pokud přesáhnou horní hranici, dojde k poškození motoru. Vhodná klidová rychlost otáčení je podle [16] 10 % maximálních otáček. Točivý moment ani výkon motoru v otáčkovém rozsahu však není stejný. Každý motor je charakterizován svou křivkou točivého momentu a výkonu, podobnou té na obrázku 5.6. Pro převod z točivého momentu na výkon můžeme použít převodní vztah: P HP=
T motor⋅0,738⋅RPM 5252
PHP = výkon v koňských silách [HP] Tmotor = točivý moment motoru [Nm] RPM = otáčky motoru [ot/min]
15
5 Fyzika automobilů Křivky jako na obrázku 5.6 jsou výstupem testování automobilů ve speciálních zkušebnách. Auto je drženo na místě a hnaná kola stojí na měřících válcích. Ty se při přenosu točivého momentu z motoru otáčejí. Při testu je motor podroben celému rozsahu otáček. Z údajů získaných z měřících válců a otáček motoru je počítačem sestavena křivka točivého momentu.
Točivý moment a výkon pro automobil Corvette C5 500 450 400 350
Nm - HP
300 250 200 150 100 50 0 100012501500175020002250250027503000325035003750400042504500475050005250550057506000
ot/min
točivý moment
výkon
Obrázek 5.6: Točivý moment a výkon – motor LS1 ( 5.7 Litrů V8 SFI ) [17] Ohled je třeba brát ještě na polohu pedálu plynu. Z otáček motoru a křivky točivého momentu zjistíme pouze maximální točivý moment, který je motor v danou situaci schopen vyprodukovat. Tmotor je určen vynásobením tohoto maxima polohou plynu, tj. hodnotou od 0 do 1, kde 0 je zcela uvolněný pedál a 1 zcela stlačený (v tomto případě motor dodáva maximum točivého momentu).
5.7 Trakční síla Nyní se podívame na to, jak je točivý moment motoru převáděn přes hnací ústrojí automobilu do vozovky. Točivý moment je nejprve násoben v převodové skříni v závislosti na zařazeném rychlostním stupni. Běžná převodová skříň má jednu rychlost pro pohyb automobilu zpátky a 5 – 6 dopředu. Každý rychlosní stupeň je představován jedním ozubeným kolem. Když je konkrétní stupeň zařazen, jeho zuby zapadnou do zubů kola, které je na hřídeli motoru. K násobení točivého momentu pak dochází podle poměru mezi těmito dvěma koly. Následující tabulka udává tyto poměry pro rychlostní stupně převodové skříně automobilu Corvette C5 jako násobící koeficienty. Rychlostní stupeň R(zpětný chod) 1 2 3 4 5 6
koeficient 2,90 2,66 1,78 1,30 1,00 0,74 0,50
Tabulka 5.1: Převodová skříň 16
5 Fyzika automobilů Točivý moment je dále pomocí hnací hřídele automobilu přenášen na diferenciál zadních kol (předpokládam automobil s náhonem na zadní kola). V něm do sebe opět zapadají ozubená kola a dochází k násobení točivého momentu. Násobící koeficient diferenciálu automobilu Corvette C5 je 3,42 [17]. Kombinovaný násobitel točivého momentu hnacího ústrojí pro první rychlostní stupeň potom bude 2,66·3,42 = 9,09. Musíme však brát na zřetel, že při přenosu dochází k nemalým ztrátám. Hodnotu 30% ztráty uvádí [17], v [18] je však uvedena účinnost přenosu 0,956. Celkově vzato však dochází ještě k dalším ztrátám vlivem setrvačnosti prvků hnacího ústrojí a kol automobilu, se kterými [18] dále počítá. Účinnost hnacího ústrojí ηhú stanovíme na 0,7 a tyto ztráty bude zahrnovat. Točivý moment na osu zadních kol je při přenosu do vozovky ovlivněn poloměrem kol. Následuje konečný vztah pro sílu, kterou se automobil skrze kola snaží přenést do vozovky: F motor =
T motor⋅x p⋅x d⋅hú r
Fmotor = síla, kterou se motor snaží působit na vozovku [N] xp = nasobící koeficient převodového stupně [-] xd = nasobící koeficient diferenciálu [-] r = poloměr kola [m] ηhú = účinnost hnacího ústrojí [0-1]
5.8 Trakční limit Výsledkem předchozí rovnice je síla, kterou motor přes kola působí do vozovky. Trakční síla Ftra, kterou je auto hnáno dopředu, je však síla, jíž vozovka působí proti síle Fmotor. Tato síla je omezená vlastnostmi pneumatik, vozovky a tíhou na hnané nápravě. Pokud je Fmotor příliš velká, dojde k prokluzu pneumatiky, což způsobí, že se do vozovky přenese méně síly. V závislosti na velikosti prokluzu bude zrychlení auta menší. Tyto vlivy můžeme shrnout do koeficientu tření mezi pneumatikou a vozovkou. Výsledná maximální síla Fmax, kterou může automobil do vozovky přenést, je pak určena vztahem: F max =⋅W μ = koeficient tření mezi pneumatikou a vozovkou [G] W = tíha na hnané nápravě [N] Koeficient tření se udává v jednotkách [G] a vyjadřuje kolikanásobek gravitačního zrychlení země dokáže pneumatika dodat tělesu, jehož hmotnost koresponduje se zatížením pneumatiky. U obyčejných pneumatik se pohybuje do 1G. Závodní pneumatiky dosahují 1,1 G [21]. U nejrychlejšího sériově vyráběného vozu na světě (Bugatti Veyron) udává výrobce koeficient tření pneumatik 1,3 G. Jde o velmi neobvyklé pneumatiky. Penumatiky závodních dragsterů (viz 5.5 - Přenos váhy na zrychlujícím automobilu) musí mít koeficient tření okolo 5 G. Pro jeho dosažení jsou pneumatiky velmi široké, jsou podhuštěny a před závodem je jejich povrch a povrch trati speciálně upraven. Pokud budeme chtít simulovat reálné závody, není rozumné používat μ > 1,3 G. Maximílní trakční síla je závislá na zatížení hnaných kol, a tak je logické, že auto s náhonem na zadní nápravu bude mít v prudkém zrychlování výhodu. Vlivem zrychlení dojde k přesunu váhy dozadu, což zadní kola více zatíží a Fmax bude větší. Následně může řidič přišlápnout plyn a dosáhnout většího zrychlení, aniž by došlo k prukluzu kol.
17
5 Fyzika automobilů
5.9 Odpor kol Trakční síla žene auto kupředu. Její část se však ztratí vlivem valivého odporu kol. Nejjednodušeji lze vypočítat tuto sílu Rkol pomocí váhy automobilu a magického koeficientu. Odborná měření ukazují, že Rkol roste přibližně lineárně s rychlostí. Valivý odpor kol je dále závislý na povrchu vozovky. Nejmenší rezistenci kladou hladké povrchy jako beton. Velký odpor kladou povrchy, do kterých se auto propadá (např. písek nebo tlustá vrstva neujetého sněhu). Rovnic pro valivý odpor lze použít mnoho, jednou z nich je upravená verze rovnice z [18], s koeficientem povrchu γ a s rychlostí v m/s místo v mílích za hodinu: V 160,94
Rkol =W⋅⋅1 γ = koeficient tření povrchu [-] V = rychlost automobilu [m/s]
Koeficient γ pro běžná auta a různé povrchy je podle [18] přibližně: povrch beton horší povrch písek
koeficient 0,015 0,08 0,3
Tabulka 5.2: Koeficienty vozovky
5.10 Odpor vzduchu Kromě valivého odporu kol je ve velkých rychlostech potřeba počítat s odporem vzduchu. Při nízkých rychlostech je zanedbatelný, neroste však lineárně s rychlostí, ale kvadraticky. V [19] se můžete dočíst, že okolo rychlosti 30 m/s jsou valivý odpor kol a odpor vzduchu přibližně stejně velké. To platí pro zjednodušený obecný model automobilu. Pro výpočet síly odporu vzduchu je důležitý koeficient odporu Cd, který se u aut liší v závislosti na aerodynamických vlastnostech karoserie. Nejnižší koeficient mají automobily cílené na nízkou spotřebu paliva, auta na solarní pohon a jiné. Vysoký je u větších mohutných vozů nebo třeba F1 (1), kde je koeficient zvětšen přidáním přítlačných křídel, která naoplátku zvětšují celkovou stabilitu vozidla ve vysokých rychlostech. Reprezentativnější je však údaj CdA, což je koeficient přenásobený čelní plochou vozu. Ta se pro běžné automobily pohybuje od 1,5 do 2,5 m 2. Tabulky 5.3 a 5.4 uvádějí příklady pro různé automobily. Musím zdůraznit, že některé z nich jsou z neověřených zdrojů. Rovnice pro výpočet odporu vzduchu Rvzduch je: 1 Rvzduch= ⋅C d⋅A⋅⋅V 2 2 ρ = hustota prostředí (vzduchu) [kg/m3] (podle [19] 1,29 kg/m3) Odporová síla roste s druhou mocninou rychlosti automobilu, tedy ve vysokých rychlostech bude převažovat nad odporovou silou kol. Kromě maximálního výkonu motoru bude maximální rychlost vozidla určovat hodnota CdA. Čím větší tento faktor bude, tím situace, kdy Rvzduch + Rkol ≥ Ftrakce, nastane při nižší rychlosti a auto nebude moci dále zrychlovat. Ftrakce je síla, kterou tlačí zem auto dopředu proti působení síly Fmotor. Tato síla je omezena silou Fmax. 1.
Speciální závodní automobily Formule 1
18
5 Fyzika automobilů druh vozidla obecná F1 obecné závodní obecné běžné obecné aerodynamické Hummer H2 Mazda GTO 1991 Ford Mustang (fastback) Porsche 911 Carrera Honda Civic Mini Cooper Lamborghini Diablo Chevrolet Corvette Toyota Prius 2010 Nuna (solární)
Cd [-] 1,07 0,75 0,43 0,15 0,57 0,48 0,44 0,39 0,36 0,35 0,31 0,29 0,26 0,07
zdroj [20] [20] [20] [20] [25] [20] [25] [20] [25] [25] [25] [25] [25] [25]
druh vozidla Loremo 2009 Honda Insight Lamborghini Diablo Toyota Prius 2004 Porsche 911 Carrera Chevrolet Corvette 1992 Honda Civic EX 1991 Hummer H2 2003
CdA [m2] 0,250 0,474 0,573 0,580 0,583 0,583 0,654 2,460
zdroj [25] [25] [25] [25] [25] [25] [25] [25]
Tabulka 5.4: Koeficienty vynásobené čelní plochou automobilu pro různé automobily
Tabulka 5.3: Koeficienty odporu vzduchu pro různé automobily
5.11 Celková podélná síla Celková podélná síla Fpodél udává autu zrychlení. Její rovnice vypadá následnovně: F podél = F trakce −R kol−R vzduch −sin
Zrychlení automobilu ax [m/s2] pak vypočítáme: a x =F podél /m
5.12 Zdvihová síla Děláme závodní hru, je tedy důležité brát ohledy zejména na jevy, ke kterým dochází ve vysokých rychlostech. Zdvihová síla vzniká vlivem proudění vzduchu okolo auta. Tento jev je prakticky totožný s tím, co se děje okolo křídel letadel. Vzduch pod autem proudí rychleji než nad ním. Tím vzniká vztlak, který tlačí auto nahoru. Auto však vzlétnout nemůže. Pokud by byla síla tak velká, že by se auto mělo vznést, kola vozidla ztratí kontakt s vozovkou, dojde k prokluzu a síla ženoucí ho kupředu nebude dostatečně velká, aby momentální rychlost udržela. Tím dojde ke zmenšení vztlakové síly a auto opět dosedne. Dojde pravděpodobně ke ztrátě kontroly nad vozem. Zdvihovou sílu běžných automobilů ilustruje obrázek 5.7.
Obrázek 5.7: Zdvihová síla u běžných automobilů
Obrázek 5.8: Záporná zdvihová síla u závodních automobilů 19
5 Fyzika automobilů Podobně jako u odporu vzduchu, závisí zdvihová síla na geometrii vozidla. Jak již bylo řečeno, závodní automobily mají koeficient odporu vzduchu vyšší, naoplátku za to je zase menší koeficient zdvihové síly, který často bývá i záporný. Zde již nejde o zdvihovou sílu, ale o sílu přítlačnou. Obě tyto síly budu uvádět jako sílu zdvihovou, s kladným nebo záporným znaménkem. Díky záporné zdvihové síle získá automobil ve vysokých rychlostech větší stabilitu a může lépe zatáčet bez toho, aby se dostal do smyku. Následující tabulka udává příklady zvihových koeficientů CL různých aut. druh vozidla obecná F1 obecné závodní obecné běžné obecné běžné obecné aerodynamické Mazda GTO 1991 Peugeot 305 GL 1980
CL [-]
Cd [-]
-0,99 -3,00 0,32 0,3-0,5 0,18 -0,53 0,44
1,07 0,75 0,43 0,15 0,48 0,44
zdroj [20] [20] [20] [18] [20] [20] [20]
Tabulka 5.5: Zdvihové koeficienty pro různá auta Zdvihovou sílu ve výpočtech zohledníme jednoduše tak, že tíhu automobilu zvětšíme či zmenšíme o tuto hodnotu. Její výpočet je podobný výpočtu síly odporu vzduchu: 1 F zdvihová = ⋅C L⋅A⋅⋅V 2 2
5.13 Prokluz pneumatik S doposud stanovenými rovnicemi vše funguje do té doby, než dojde k tomu, že Fmotor překročí Fmax, pak by kola měla začít prokluzovat. V takovém případě pneumatika přejde do dynamického tření. Simulace takového jevu je značně komplikovaná a náš stávající model automobilu neví, jak se v této situaci zachovat. Pro pochopení situace bude třeba proniknout do problematiky o něco hlouběji. V případě, že nedochází k překročení Fmax, svádí to k dojmu, že úhlová rychlost kol krát poloměr kol je rovna rychlosti automobilu. Ve skutečnosti to tak není. Kupodivu největší možná Ftrakce nevzniká při stoprocentním přilnutí pneumatik k vozovce. Síla je maximální přibližně při 6% prokluzu kol [17]. Trakční síla, jak již bylo řečeno, je síla, kterou vozovka tlačí auto kupředu. Vlivem síly Fmotor se kola otáčejí, způsobují prokluz a vznik třecí síly mezi pneumatikou a vozovkou. Vozovka pak produkuje trakční sílu jako protisílu k této třecí síle. Pro výpočet prokluzu kol použijeme následující vztah: =
kolo⋅r −V ∣V∣
σ = skluzový poměr [-] (často udáván v procentech jako σ · 100) ωw = úhlová rychlost kola [rad/s] Problém tedy nastává, pokud σ přesáhne 6 %. Dojde k překročení trakčního limitu a motor se snaží do vozovky přenést více síly, než je schopna přeměnit v trakční sílu. Pneumatika přejde do dynamického tření, což je provázeno snížením třecího koeficientu. To vede ke snížení Fmax a přebytečná síla dodávaná motorem naopak vzroste. Ta pak způsobí zvětšení skluzového poměru. Celá situace se opakuje a nastává jakýsi vodopád, kde pokud řidič dál drží nohu na plynu (nebo jej dokonce ještě více přišlápne), propadá se auto do většího prokluzu a akcelerace klesá. Získat zpět přilnutí pneumatik je možné ubráním plynu. 20
5 Fyzika automobilů Přechod do stavu, kdy pneumatiky výrazně prokluzují, může být buď velmi prudký nebo relativně pozvolný, a to v závislosti na vlastnosti pneumatik. Méně „promíjivé“ k řidiči bývají staré sjeté nebo tvrdé pneumatiky. Následující graf uvádí koeficient tření pneumatiky v závislosti na skluzovém poměru kol. Taková křivka se může tvarem lišit podle specifikací pneumatik, teplotě, stavu a povrchu vozovky atd. Proto je třeba jej brát jako orientační a při modelování této křivky pro hru volit parametry podle uvážení. Shrnutě řečeno: křivka lineárně stoupá od 0 do 6 % a pak relativně prudce klesá na přibližně ½ maximální hodnoty. Trakční síla v grafu je jednotková, tedy na každý 1 N zatížení pneumatiky vyprodukuje náležitě velkou sílu. Stačí odečíst hodnotu z grafu podle skluzového poměru a hodnotu vynásobit zatížením kola. V 6 % dosahují pneumatiky svého teoretického maxima a v případě dobrých pneumatik přesahuje hodnotu 1. Tato křivka zachycuje chování velmi „nepromíjivých“ pneumatik, kde stačí lehce přesáhnout trakční limit a kola začnou velmi rychle prokluzovat.
Trakční síla [N]
Závislost trakční síly na skluzovém poměru pro jednotkové zatížení 1N 1,2 1,1 1,0 0,9 0,8 0,7 0,6 0,5 0,4 0,3 0,2 0,1 0,0 0
6
12
18
24
30
40
Skluzový poměr [%]
Obrázek 5.9: Závislost trakční síly na skluzovém poměru Zdrojem takovéto křivky může být například tzv. Pacejka's magic formula. Jde o sadu rovnic, jež sestavil profesor H. B. Pacejka a slouží pro výpočet trakční síly (v originále longitudinal force - v překladu podélná síla, ale pro nás jde o sílu trakční) a podélné síly. Výhodou je velmi přesné a realistické chování prokluzu, však je také tato rovnice používána profesionálními výrobci pneumatik a v moderních simulátorech. Nevýhodou těchto rovnic je silná závislost na vstupních koeficientech, jejichž oficiální zdroje jsou velmi omezené.
5.14 Brzdění Rozjet auto z 0 na 100 km/h za pár vteřin je úžasný pocit, ale potom co narazíte v této rychlosti do stromu v zatáčce, již nebudete mít čas si vzpomenout, k čemu má automobil brzdy. Co se týče zrychlení automobilu z 0 na 100 km/h (0 – 100), tak rekordní závodní automobily dosahují časů pod 3 s, běžnější silniční vozy pak okolo 9 s. Čas potřebný k zastavení je zpravidla menší, například proto, že při snižování rychlosti nám odpor kol a vzduchu naopak pomáhá. Rozdíly mezi časem potřebným pro 0 – 100 a 100 – 0 jsou však u závodních automobilů mnohem menší než u průměrných. Škoda Fabia 1.4/74kW zvládne 0 – 100 za 13,34 s, pro zastavení jí pak stačí 3,45 s [14]. Jeden z nejrychlejších silničních automobilů na světě (Bugatti Veyron) za pouhých 9,9 s udělá 0 – 160 – 0, kde zrychlí za 5,5 s a zastaví za 4,4 s. 21
5 Fyzika automobilů Budeme předpokládat, že pokud řidič brzdí, je poloha plynu na nule. Brzda bude mít stejný rozsah přišlápnutí od 0 do 1 (jako má plyn). Podobně jako mají pneumatiky svůj skluzový poměr a koeficient tření při zrychlování, mají ho i při brzdění. Budeme jej označovat σb resp. μb. Graf 5.10 udává jejich závislost (převzato z [18]). Vzorec pro výpočet maximální brzdné síly je analogický se vzorcem pro Fmax. Výpočet σb se od výpočtu σ liší: b=
V − kolo⋅r ∣V∣
Závislost brzdného koeficientu na skluzovém poměru 0,9 0,8
Brzdný koeficient
0,7 0,6 0,5 0,4 0,3 0,2 0,1 0,0 0
4
8
12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100
Brzdný skluzový poměr [%] Suchý povrch
Mokrý povrch
Obrázek 5.10: Závislot brzdného koeficientu na skluzovém poměru Zmáčknutí brzdového pedálu způsobí zpomalení rotace kol, což vyvolá nenulový brzdný skluzový poměr, brzdný koeficient vzroste a vozovka vytvoří brzdnou sílu. V případě, že řidič příliš tlačí na brzdu a auto není vybavené systémem proti blokování kol, nastane podobný vodopád jako při prokluzu u zrychlení, k prokluzu kol však dojde v opačném směru. V případě, že skluzový koeficient dosáhne 100 %, což je maximum, dojde k zablokování kol (úhlová rychlost kol je nulová). Pro jednoduché brzdy stanovíme brzdnou konstantu dle možností auta a podle polohy pedálu určíme brzdnou sílu Fb. Se zablokovanými koly nebrzdí auto efektivně. Pokud máme pneumatiky s maximálním brzdným koeficientem 0,8 G a hmotnost auta je 1500 kg, může auto bez prokluzu brzdit silou 0,8·1500·9,81=11772 N. Představme si situaci, kdy řidič prudce sešlápne brzdu a bude očekávat brzdnou sílu 13000N. Ale po chvíli dojde k zablokování kol a auto bude brzdit pouze silou 0,5·1500·9,81=7357 N. V takové situaci je lepší uvolnit brzdu, počkat až skluzový poměr klesne, a pak brzdit méně. Při brzdění ve vysokých rychlostech je třeba počítat se vztlakovou silou. Auta se zápornou vztlakovou sílu mohou ve vysokých rychlostech lépe brzdit. Auta s kladnou vztlakovou silou jsou jejím vlivem nadnášeny a maximální brzdná síla je menší. Rovnice pro zpomalení dx [m/s2] bude vypadat takto: d x=
−F b− Rkol −Rvzduch −sin m 22
5 Fyzika automobilů
5.15 Zatáčení Pokud budeme programovat závodní hru dragsterů nebo jiných vozidel, která jezdí pouze po rovině, jsme u konce. Pro regulerní závodní simulátor je zatáčení nezbytnou součástí. Ve fyzikálním modelu automobilu přibyde ještě několik důležitých vztahů. Pro jednoduchost začneme s popisem zatáčení v nízkých rychlostech. Pokud auto rovnoměrně zatáčí, pohybuje se po kružnici. Řekli jsme, že budeme předpokládat malé rychlosti, a za takových podmínek leží střed této kružnice v prodloužení osy zadních kol. Její poloměr udává úhel natočení předních kol, který ovládáme volantem. Ve skutečnosti se po otočení volantem každé kolo natočí pod jiným úhlem. Pro zjednodušení se používá tzv. bicyklový model, kde každou nápravu nahradíme jedním kolem, umístěným do její poloviny. Při průjezdu zatáčkou má vnitřní kolo úhel natočení δi, vnější δo a průměrný úhel δ odpovídá kolu v polovině nápravy, viz obrázek 5.11. Pro výpočet poloměru zatáčky R použijeme vztah: R=
L (pro malé úhly stačí aproximace sin
R=
L ) [rad ]
Obrázek 5.11: Úhel natočení kol Síla Fpř, která způsobuje zatáčení automobilu, se nazývá příčná. Pro nás je její působiště v místě hmotného bodu. Automobil jede rovně, pokud na něj nepůsobí žádná příčná síla. Pohyb po kružnici můžeme rozdělit na malé kroky, ve ktrých se vždy vozidlo posune kousek dopředu, kousek do strany a pootočí se o malý úhel. Každá z těchto tří částí je reprezentována jednou silou. Silou podélnou, příčnou a točivým momentem okolo svislé osy. Příčná síla, potřebná k udržení automobilu v rovnoměrném zatáčení, stoupá s kvadrátem jeho rychlosti. Vzorec pro její výpočet odpovídá dostředivé síle a vypadá takto: V2 , pouze pro přední kola F př =m⋅ R
F př − p=
23
W př V 2 , pro zadní ⋅ g R
F př −z =
W z V2 ⋅ g R
5 Fyzika automobilů
5.16 Skluzový úhel Síla příčná vzniká, podobně jako síla podélná, vlivem prokluzu kol. Velikost Fpř zavisí na zatížení pneumatiky a na jejím skluzovém úhlu α, tj. úhlu mezi směrem, kterým kolo míří, a směrem, kam se pohybuje (pro přední kolo bicyklového modelu αp a zadní αz). Podobně jako koeficient μ pro pohyb v podélném směru, má pneumatika koeficient pro příčný směr. Pro zjednodušení je lze předpokládat stejně velké, ačkoli ten pro příčnou sílu by měl být spíše menší. Výpočet pro maximální Fpř je analogický s výpočtem pro maximální trakční sílu. Následující graf ukazuje závislost Fpř na skluzovém úhlu. Kolo korespondující s touto křivkou má koeficient μ 1,1 G. Závislost příčné síly na skluzovém úhlu pro jednotkové zatížení kola 1N 1,2
Příčná síla [N]
1,0 0,8 0,6 0,4 0,2 0,0 0
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Skluzový úhel [deg]
Obrázek 5.12: Závislost příčné síly na skluzovém úhlu
5.17 Točivý moment okolo svislé osy Příčnou sílu musíme počítat zvlášť pro obě nápravy, pro přední Fpř-p a pro zadní Fpř-z. Tyto síly vyvolávají točivý moment okolo svislé osy. Příspěvky od jednotlivých náprav jsou: T p=F př − p⋅b⋅cos od přední, T z=−F př −z⋅c od zadní. Tento točivý moment vyvolává úhlové zrychlení automobilu ε a jeho integrací v čase budeme udržovat úhlovou rychlost automobilu ωauto. =
T pT z , kde Iauto = setrvačnost automobilu [kg·m2] I auto
5.18 Boční smyk vozidla Ve vysokých rychlostech nemůžeme vždy předpokládat, že auto v zatáčce bude mířit stejným směrem, kterým se bude pohybovat. Úhel, který udává odchylku mezi těmito dvěma směry, se nazývá boční smyk vozidla β. Představte si závody rallye, kde při průjezdu zatáčkou vybočuje zadní část automobilu ven z pomyslného kruhu, po jehož obvodu se vozidlo pohybuje. β vypočítáme ze složek vektoru rychlosti působícím v CG: =arctan
Vy Vx
Vy = složka vektoru rychlosti automobilu v příčném směru [m/s] Vx = složka rychlosti automobilu v podélném směru [m/s] 24
5 Fyzika automobilů Nyní můžeme vypočítat skluzové úhly αp pro předek a αz pro zadek automobilu: p =
auto⋅b ⋅c − , z=− auto L L
Obrázek 5.13: Skluzový úhel a boční smyk automobilu
5.19 Podtáčivé a přetáčivé vozidlo Při průjezdu zatáčkou záleží na poměru skluzných úhlů vpředu a vzadu. Pokud αp=αz, je automobil v rovnováze. Pokud αp>αz, vozidlo je podtáčivé. Přední kola klouzají více směrem ven z pomyslného kruhu. Pokud budeme chtít automobil udržet v zatáčce stejného poloměru, jako kdyby αp=αz, budeme muset tuto ztrátu kompenzovat větším natočením předních kol dovnitř. Jev může nastat buď přirozenými parametry vozidla (například u automobilu s CG hodně vzadu) nebo zrychlováním při průjezdu zatáčkou, kde dojde k přesunu váhy dozadu (s menším zatížením bude k dodání stejné příčné síly vpředu potřeba větší skluzový úhel a automobil bude podtáčivý). Pokud αp<αz, vozidlo bude přetáčivé. Situace bude opačná než v případě podtáčivého vozidla. K přetáčení dojde například při brzdění v zatáčce. Tentokrát bude vzadu váhy méně, takže tam bude potřeba větší skluzový úhel. Zadek automobilu bude vynášen ven ze zatáčky a pro udržení vozidla v zatáčce budeme muset natočit přední kola méně, v extrémních případech i zatočit na opačnou stranu.
5.20 Rozpočet sil pro podélné zrychlení a zatáčení Pokud dáme dohromady příčné a podélné síly působící na automobil, můžeme omezení těchto sil znázornit pomocí trakčního kruhu (obdobně jako na obrázku 5.14), ačkoli v realitě se jedná spíše o elipsu. Znázorněna je zde maximální síla v daném směru na 1 N zatížení. Pokud tedy kombinujeme brzdění nebo zrychlování se zatáčením, nemůžeme nikdy dosáhnout maximálních hodnot v obou směrech současně. To by znamenalo, že bychom se dostali mimo trakční kruh, a to není vzhledem k možnostem automobilu možné. 25
5 Fyzika automobilů
Obrázek 5.14: Trakční kruh
5.21 Zanesení rovnic do herní smyčky Mnoho rovnic zde uvedených vychází jedna z druhé, a tak přímé řešení pro výpočet všech sil působících na vozidlo v jeden konkrétní okamžik je poměrně složité. Abychom si situaci usnadnili, výpočty je možno provádět integrací jednotlivých veličin v malých časových intervalech, tedy výpočtem v každém herním cyklu (1). Základem je použití výsledků z předchozího cyklu do rovnic v následujícím.
1.
Stav světa ve hře se pravidelně obnovuje v pravidelném časovém intervalu, zpravidla v řádu milisekund. V XNA je funkce update, která aktualizuje stav veličin, volána 60 krát za sekundu.
26
6 Závodní simulátor
6 Závodní simulátor Nyní přistoupím k rozboru závodního simulátoru, který je součástí této bakalářské práce. Pro modelování fyziky jsem použil fyzikální engine BEPUphysics. Jako kostra pro hru, která byla postupně rozšiřována nebo upravována, bylo použito oficiální demo ukazující funkce tohoto fyzikálního enginu. Podstatné prvky implementace jsou rozřazeny do několika podkapitol. V nich se budu věnovat tomu, jak a jestli BEPUphysics uvedený problém řeší, jak jsem související metody a třídy případně rozšířil či doplnil, a jaké prvky jsem do hry dále vložil. Místy se také věnuji alternativním nebo lepším řešením. Poslední podkapitola je věnována dalším herním prvkům, zvukům a ovládání.
6.1 Fyzika automobilu V této podkapitole se budu věnovat fyzikálním vlastnostem vlastního automobilu. S použitím BEPUphysics jde o zcela rigidní implementaci.
6.1.1 Tělo automobilu Pro účely kolize a jiných výpočtů bylo vytvořeno tělo spojené ze základních entit (kvádr, válec, koule aj.) fyzikálního světa použité fyzikální knihovny. To se v samotné hře nevykresluje, místo něj je použit model s vysokým počtem polygonů. Obě situace zachycuje následující obrázek.
Obrázek 6.1: Kolizní tělo automobilu a vizuální model Část kódu zodpovědná za vytvoření kolizního těla a samotné instance třídy Vehicle pro představu vypadá takto: CompoundBody body = new CompoundBody(); body.addBody(new Box(new Vector3(0, 0, 0), 1.5f, .75f, 4f, 1600)); body.addBody(new Box(new Vector3(0, .75f / 2 + .3f / 2, -.5f), 2.0f, .3f, 2f, 1)); Cylinder Bumper = new Cylinder(new Vector3(0, 0, 2.25f), 1.7f, 0.6f, 0.3f); Bumper.orientationMatrix = Matrix.CreateRotationZ((float)MathHelper.PiOver2); body.addBody(Bumper); ... body.centerOfMassOffset = new Vector3(0, -0.4f,-0.7f); body.tag = "noDisplayObject"; vehicle = new Vehicle(body);
27
6 Závodní simulátor Jednotkový systém, jak ve frameworku BEPUphysics, tak v XNA, je bezrozměrný, nicméně pro simulování reálných podmínek je nutné konkrétní jednotky stanovit. Například jako základní jednotku délky jsem podle veřejné koncepce použil metr. Abychom věrohodněji modelovali skutečné parametry vozidla, posuneme těžiště níže ve směru osy Y a experimentáně i směrem dozadu, ve směru osy Z. Těžiště vozidla je jedním z klíčových parametrů, podle kterého se automobil chová při zrychlování, zpomalování, zatáčení a jejich kombinaci. V případě rozšiřování závodního simulátoru by byla jistě zajímavým prvkem možnost hráče upravovat si parametry vozidla a nepřímo tak ovlivňovat polohu jeho těžiště.
6.1.2 Pohon Motor auta není jeden (jak by tomu bylo ve skutečnosti), ale čtyři, pro každé kolo jeden. Na instanci třídy Vehicle, která byla vytvořena s tělem automobilu, chceme přidat kola. Těch můžeme připojit k tělu kolik chceme, a to jednoduchým zavoláním příslušné funkce. U konstruktoru třídy Wheel (třída pro kolo) uvedeme jako parametr příslušný hnací motor. Ten specifikují například tyto parametry: •
gripFriction - Třecí koeficient pneumatiky kola, které je připojeno k tomuto motoru. Jeho smísením s třecím koeficientem povrchu, po kterém se kolo pohybuje, je počítán celkový třecí koeficient v podélném směru.
•
maximumForwardForce - Maximální síla, kterou je motor schopen vyvinout směrem dopředu k urychlení automobilu. Jako tento parametr byla použita konstanta vypočítaná dle parametrů vozidla, které je jako modelový automobil používáno v kapitole 5 o fyzice automobilů. Podle obrázku 5.6 je pro Corvette C5 maximální točivý moment 475 Nm. Na základě rovnice pro Fmotor vychází maximální síla při prvním rychlostním stupni přibližně 8000 N. Pro motor jednoho hnaného kola, kde předpokládáme náhon pouze na zadní kola, bude tedy maximumForwardForce rovna 4000 N.
•
maximumBackwardForce - Analogicky s předchozím parametrem, v opačném směru.
Motor dokáže ve hře zrychlit automobil z 0 na 100 km/h přibližně za 7 s, což pro modelové vozidlo Corvette C5 koresponduje s mými výpočty podle rovnic z kapitoly 5, kde s nutností jednoho řazení (stejně jako ve hře) dosáhlo tuto rychlost za stejnou dobu. Výše uvedenou situaci zachycuje obrázek 6.2, kde jsou mimo jiné zvětšeny informační prvky s údaji pro hráče, tzv. HUD (head-up display). V horní části obrazovky se zobrazuje aktuální čas trati hráče, v dolní části otáčkoměr a tachometr automobilu. Vidět je také právě zařazená rychlost (případně neutrál).
Obrázek 6.2: Herní obrazovka, zrychlení z 0 na 100 km/h 28
6 Závodní simulátor
6.1.3 Převodová skříň Jak bylo řečeno v podkapitole 5.6, motor nedodává do vozovky konstantní točivý moment. Ten totiž závisí na otáčkách motoru a na zařazeném rychlostním stupni. V základní třídě Vehicle BEPUphysics převodová skříň neexistuje a motor dodává konstantní zrychlení. Pro potřeby závodního simulátoru byly vytvořeny třídy driveEngine a gearBox, které se starají o převodovou skříň motoru, jeho otáčky, automatické řazení a většinu zvuků spojených s automobilem. Do převodové skříně je možno vložit jeden rychlostní stupeň pro chod vzad a libovolný počet pro chod vpřed, jak naznačuje následující kus kódu: gearBox vehicleGearBox = new gearBox(); vehicleGearBox.addGear(new gear(-2.9f)); vehicleGearBox.addGear(new gear(2.66f)); vehicleGearBox.addGear(new gear(1.78f)); vehicleGearBox.addGear(new gear(1.3f)); vehicleGearBox.addGear(new gear(1f)); vehicleGearBox.addGear(new gear(0.74f)); vehicleEngine = new driveEngine(this,vehicleGearBox, 5000, 2000, 6000, 3.42f); vehicleEngine.currentGear = vehicleEngine.gearBox.gearList[1];
Převodová skříň (narozdíl od hnacích motorů viz 6.1.2) není zvlášť pro každé kolo, ale je pouze jedna. Je dále specifikována maximálními otáčkami, kde by při jejich překročení v reálné situaci došlo k poškození motoru. V tomto simulátoru se otáčky zastaví na této hranici. K této situaci však téměř nedocházi, jelikož převodová skříň automaticky přeřadí na vyšší stupeň a v případě posledního (zde pátého stupně) klade prostředí takový odpor, že motoru znemožní další zvyšování otáček. V praxi je hranice maximálních otáček dosažena pouze při zpětném chodu, kdy máme k dispozici jen jeden rychlostní stupeň. Vhodným rozšířením by bylo navíc umožnit hráči, aby mohl sám ovládat řazení. V souvislostí s tím by bylo vhodné implementovat křivku točivého momentu dodávaného motorem, podobné té na obrázku 5.6.
6.1.4 Kola - Pneumatiky Kolizními objekty pro kola nejsou (jak by člověk očekával) válce, ale pro tyto účely je použita metoda vysílání paprsků, tzv. raycasting. Jak ukazuje obrázek 6.3, tělo automobilu je udržováno nad povrchem v závislosti na poloměru kol a stlačení odpružení. Kola samotná jsou pak pouze grafickým modelem a výpočtu kolizí se nijak neúčastní.
Obrázek 6.4: Obrázek 6.3: Kola – raycasting, vlevo drátový model, vpravo grafický Pružinový model kola Za nejvěrohodnější techniku pro simulaci pneumatik považuji pružinový model. Celé kolo se sestáva z několika hmotných bodů na svém obvodu, které jsou navzájem propojeny systémem pružin (viz obrázek 6.4). Pneumatika se tak při dosednutí na povrch a prudkých změnách pohybu deformuje. Narozdíl od metody raycasting, jak je možno vidět na obrázku 6.3, se nestane, že by grafický model prošel tělesy. 29
6 Závodní simulátor
6.1.5 Odpružení vozidla Jednoduché odpružení je realizováno zavěšením každého z kol na separovanou pružinu. Na ní je přichyceno v místě pomyslné osy nápravy a pohybovat se může pouze ve směru osy Y vzhledem k automobilu, tedy nahoru a dolů. Během přidání nového kola k instanci třídy Vehicle musíme současně založit nové odpružení, spojené s tímto kolem. Následují některé z klíčových parametrů konstruktoru odpružení WheelSuspension: •
stiffnessConstant - Tuhost odpružení. Čím je vyšší, tím více pružina vzdoruje stlačení. Hodnota byla nastavena tak, aby se auto chovalo rozumně, podle očekávání hráče. Konkrétní numerická hodnota není nijak ověřena. Jde o to, aby se vozidlo, vzhledem k jeho hmotnosti 1600 kg, chovalo přirozeně při najetí na nerovnosti vozovky, a aby se tělo automobilu přirozeně naklánělo v zatáčkách, jak můžeme vidět na obrázku 6.5.
•
dampingConstant - Konstanta, která udává tlumivost odpružení. Nastavena obdobným způsobem jako tuhost odpružení. Klíčové je, aby se vozidlo při najetí na drobnější nerovnosti neodrazilo vzhůru.
•
restLength - Délka nezatížené pružiny.
•
localDirection - Směr, kterým je kolo zavěšeno. Standardně dolů ve směru osy Y.
•
localAttachmentPoint - Místo, kde je pružina připojena k tělu automobilu.
Obrázek 6.5: Pérování při prudkém zatáčení
6.1.6 Brzdy Každé kolo má svoji brzdu (má pouze dvě polohy – podle stavu ovládací klávesy), která je charakterizována řadou proměnných. Některé z nich zde uvádím: •
dynamicBrakingFrictionCoefficient - Koeficient tření, v případě, že je brzda aktivní.
•
rollingFrictionCoefficient - Koeficient valivého tření kol. Pro výsledný valivý odpor kol se tato hodnota kombinuje s koeficientem tření povrchu, po kterém se vozidlo pohybuje. Výsledný odpor je také závislý na rychlosti (lineárně).
Brzdy knihovny BEPUphysics jsou, jako ve většině dnešních aut, standardně vybaveny mechanismem proti zablokování kol. Zablokování je v simulátoru implementováno alespoň vizuálně, a to pro dramatičtější pocit ze hry.
6.2 Fyzika prostředí - různé povrchy Tato část se věnuje způsobu implementace odlišných povrchů herního světa, které silně ovlivňují jízdní vlastnosti vozidla. 30
6 Závodní simulátor
6.2.1 Třecí koeficient Pro definování různých povrchů vozovky (případně okolí) stačí zajistit, aby při kontaktu pneumatiky s příslušným povrchovým materiálem byl nastaven vhodný celkový koeficient tření. Tím bude zajištěno reálné chování, např. na kluzkém povchu s nižším koeficientem bude auto náchylnější ke smykům. Vlastní zanesení rozdílných povrchů ve světě fyzikální knihovny je velmi jednoduché. Při vkládání části terénu (pro každý povrch zvlášť) do světa hry stačí přímo nastavit třecí koeficient tohoto povrchu. Vše ostatní je zajištěno automaticky.
6.2.2 Povrchy V závodním simulátoru se můžete setkat s následujícími druhy povrchu, které jsou seřazeny sestupně podle koeficientu tření: •
Asfalt - Povrch s ideálními jízdními vlastnostmi.
•
Prachová cesta - Cesta s nižším koeficientem tření. Šikovnější hráč může využít kontrolovaného smyku ke stylovému projíždění zatáček, jako v závodech rally.
•
Suchá zem - Povrch nevhodný pro jízdu. Pokud hráč sjede v zatáčce z asfaltového povrchu na suchou zem, velmi jednoduše spadne do silného smyku.
•
Voda - Za deštivých podmínek se na trati vyskytují louže. Svým extrémně nízkým třením modelují ve hře aquaplanning - jev, ke kterému dochází ve vysokých rychlostech (auto klouže po tenké vrstvě vody, neboť vzorek pneumatiky ji nestíhá vytlačovat ven). Řidič tak ztrácí kontrolu nad vozem, neschopen změnit směr jízdy.
Obrázek 6.6: Různé povrchy – asfalt, prachová cesta, suchá zem, voda
6.2.3 Fyzika prostředí - nárazy S použitím BEPUphysics jsme omezeni na rigidní fyziku, a tak veškeré nárazy do prvků herního světa budou nepružné. Nárazy auto nedeformují, pouze mění jeho rychlost a směr. Auto však lze uvést do nepojízdného stavu jedním velkým nebo více malými nárazy. Síly nárazů jsou počítány podle změny vektoru rychlosti a jejich hodnoty jsou odečítány od proměnné, která vyjadřuje stav karoserie. V případě, že do stojícího hráče narazí druhý, může se stát, že ani velký náraz nezpůsobí velkou změnu rychlosti stojícího hráče a nedojde tak k jeho poškození. Nejde tedy o reálnou simulaci, je to ale lepší, než kdyby byla vozidla zcela nezničitelná. Když stav karoserie klesne na nulu, automobil vybuchne, změní se jeho grafický model a není jej možno dále ovládat. Změna vektoru rychlosti se používá také jako parametr hlasitosti při přehrání zvuku nárazu. Při závodění může dojít ke srážce s uvedenými objekty: •
Auto protihráče - V případě kolize s autem druhého hráče může dojít ve vysokých rychlostech ke zničení aut, ke smyku nebo změně trajektorie.
•
Kontrolní brána - Jde o nekinetický model, automobil s ní tedy nemůže pohnout. 31
6 Závodní simulátor •
Kaktusy - Z kolizního hlediska jde o vysoké štíhlé kvádry s vyšší hmotností, na které je mapován grafický model kaktusu. Pokud do nich vozidlo narazí ve větší rychlosti, dojde k jejich vyvrácení.
•
Zábrany - Jde o betonové bloky ve tvaru pyramidy přibližně 1 m vysoké. Jsou nekinetické a při kolizi s nimi se často stane, že automobil prudce zastaví tak, že nemůže dál jet, vybuchne (zničí se) nebo se převrátí na střechu, případně je silně ovliněn jeho směr a rychlost.
•
Pouštní koule (tumbleweed) - Jde o suché rostliny, které se pseudo-volně pohybují prostorem. Jsou velmi lehké a nijak při srážce neovlivní dráhu vozidla.
Obrázek 6.7: Srážky s objekty
6.3 Vliv počasí Alternativou ke standardnímu počasí byl implemetován déšť. V praxi dojde vlivem vody ke snížení třecího koeficientu všech ploch. Jednodušší však bylo snížit pouze třecí koeficient kol, což nepřímo ovlivní výsledný třecí koeficient. Kromě všudypřítomné vrstvičky vody vznikají na zemi louže, což jsou oblasti různé velikost s třecím koeficientem materiálu v části 6.2.2 uvedeném jako voda. V případě, že prší, je také snížena viditelnost vlivem mlhy a celková světlost scény. Déšť lze zapnout a vypnout v základním menu hry.
Obrázek 6.8: Rozdíl normálního a deštivého počasí
6.4 Další herní prvky V této podkapitole se budu věnovat zejména grafickým prvkům, systému ovládání vozidla, hernímu menu a ozvučení hry.
6.4.1 Cíl hry Cílem hráče je co nejrychleji projet danou trasu. Na začátku musí automobil po výzvě nastartovat. Následuje odpočet a tepve po zmizení poslední číslice na obrazovce může hráč odstartovat. Zmáčkne-li klávesu vpřed dříve, automobil se nerozjede. Musí klávesu pustit a po dokončení odpočtu opět stlačit. 32
6 Závodní simulátor Po odstartování musí projet všemi kontrolními body ve správném pořadí. Kontrolní bod představuje brána, podobná té na obrázku 6.8 (zde startovní/cílová brána). Pokud hráč úspěšně projede trať, na obrazovce se vypíše cílový čas a případné umístění v tabulce nejlepších časů (viz obrázek 6.9).
Obrázek 6.9: Cílový čas
6.4.2 Hlavní menu Jde o základní herní menu, přes které má hráč jednoduchý přístup k nastavení parametrů hry, ovládání a výsledkům. Z úvodního menu, které se objeví po intru hry, lze přejít do jednotlivých podmenu na obrázku 6.10, označených následovně: •
Start one player game - Přejde do podmenu, kde je výběrem příslušné trati započat závod jednoho hráče. Na obrazovce je také zobrazena mapa trati.
•
Start two player game - Obdobně jako výše je započat závod dvou hráčů na jednom počítači. Jedná se o tzv. splitscreen mód, kdy je obrazovka (zde vertikálně) rozdělena na dvě části, kde každému hráči přísluší jedna.
•
Settings - Nastavení je věnována část 6.4.3 kvůli většímu rozsahu.
•
Highscores - V tomto podmenu se zobrazují výsledky 10 nejlepších časů dosažených na jednotlivých závodních tratích. Výsledky jsou uloženy v textovém souboru a celkový čas se do něj zapisuje v milisekundách. Zápis není nijak šifrován a lze jej ručně editovat. Pro vymazání výsledků stačí soubor smazat a při novém spuštění hry bude automaticky vygenerována čistá tabulka.
Obrázek 6.10: Hlavní menu 33
6 Závodní simulátor
6.4.3 Nastavení - Settings V tomto podmenu lze provést veškerá nastavení. Konkrétně zapínání a vypínání grafických efektů, některých předmětů a deště. V dalším vnořeném podmenu je možné také nastavit ovládací klávesy pro oba hráče a jejich jména. Jména hráčů se ukládají do textového souboru, proto je tedy není nutno (narozdíl od ovládacích kláves) pokaždé nastavovat znovu. Vzhledem k jednoduchosti ovládání nepředpokládám, že by ho většina hráčů měla potřebu měnit, nicméně tato možnost tu je. V základním podmenu pro nastavení najdete: •
Blooming effect - Volba zapnuto/vypnuto pro grafický efekt, který zvýrazní barvy a přidá scéně měkkost.
•
Particle effects - Volba zapnuto/vypnuto pro particle efekty, o kterých bude řeč v následující části.
•
Srub balls - Volba zapnuto/vypnuto pro větrem unášené koule (rostliny zmíněné v podkapitole 6.3).
•
Cactuses - Volba zapnuto/vypnuto pro kaktusy ve scéně.
•
Rain - Volba zapnuto/vypnuto pro déšť.
•
Player one/two settings - Pro automobil hráče zde lze nastavit klávesy pro pohyb vpřed/vzad, zatáčení vlevo/vpravo, brzdu a zapalování motoru. Existuje ještě skrytá funkce (pevně nastavená na klávesu V), která slouží k přepínání pohledového módu (pouze u prvního hráče). Přepínat lze mezi standardním módem, kdy kamera zachycuje vozidlo a hráč vidí stále ve směru jízdy, a volným pohledem, kde hráč polohu kamery ovládá myší.
Obrázek 6.11: Blooming effect – vlevo zapnuto, vpravo vypnuto
6.4.4 Particle efekty Pro ztvárnění řady jevů byly použity particle efekty. Pomocí této metody lze jednoduše (a přitom velmi věrně) ztvárnit kouř, prach, oheň, světelné záření a mnohé další. Místo modelování složitých 3D struktur je výsledný efekt složen z mnoha 2D vrstev. Neviditelný emitor (vysílač) particlů má nastaveno, jakou texturu, s jakou barvou, kterým směrem a jakou rychlostí ji má do prostoru v daném místě vypustit. V praxi se k těmto hodnotám navíc připočítává náhodná hodnota v určitém specifikovaném rozmezí. Particle má dále svoji životnost, tedy po jaké době se zahodí nebo postupně přejde do ztracena. Vhodným 34
6 Závodní simulátor kombinováním particle systémů lze také věrně napodobit explozi. Když se pak jednotlivé vrstvy těchto textur vykreslují, natočí se vždy tak, aby normála této 2D plochy směřovala ke kameře. Pozorovatel tak nikdy nepozná, že se jedná o soustavu 2D vrstev. Vykreslení probíhá od nejvzdálenějších particlů od oka kamery po ten nejbližší, aby byl efekt správný (u často používaných průhledných textur). Metoda particle efektů je použita pro: •
Výfukové plyny
•
Obrázek 6.12: Particle efekt – výfuk •
Obrázek 6.13: Particle efekt – prach
Kouř a oheň
•
Kapky deště
Obrázek 6.15: Particle efekt – kapky deště
Obrázek 6.14: Particle efekt – kouř a oheň
•
Prach
Voda stříkající od pneumatik
Obrázek 6.16: Particle efekt – voda
35
6 Závodní simulátor
6.4.5 Zvuky Jakékoli ozvučení dodá hře na věrohodnosti a zesílí tak dobrý pocit ze hraní. Při nastartovaném motoru je přehráván zvuk motoru ve smyčce a jeho výška je upravována podle otáček motoru. Pokud je automobil v pohybu, přehrává se v podobné smyčce zvuk kol jedoucích po zemi. Zvuk je slyšet zejména pokud má auto vypnutý motor a jede z kopce. Ve vyšších rychlostech je zvuk motoru mírně ztlumen a lze slyšet vzduch proudící kolem automobilu. V případě zablokování kol v podélném směru vydávají kola charakteristický zvuk, a pokud auto narazí do překážky, je situace doprovázena rachotem náležité hlasitosti. Ozvučeno je dále ještě startování motoru a pokud se hráč umístí vysoko v tabulce nejlepších výsledků, je odměněn fanfárou. Kromě hlavního menu ve hře bohužel chybí hudba, která by atmosféru završovala. Sehnat odpovídající hudbu s volnou licencí není lehké a neměl jsem čas ji jinak zajistit.
6.4.6 Střelba Jde sice předně o simulátor, ale nadšenci akčních prvků si také přijdou na své. Ze střechy automobilu lze vysunout dvojici střelných zbraní typu M61 Vulcan. Hráč má omezenou munici. Tu lze doplnit sbíráním příslušných beden s náboji, které lze okolo závodní trati najít. Střílet lze na automobil protihráče a snižovat tak jeho stav karoserie. Dále lze střílet do výbušných beden. Jejich silná exploze může automobil zničit úplně. Výbuch také způsobí tlakovou vlnu, která odhodí jiné objekty. Těmi jsou např. plechové barely a jiné bedny. Dalším typem beden jsou opravné bedny. Jejich sebráním lze automobil opravovat (zvyšovat stav karoserie). Kulky jsou vysílány vpřed jako paprsky (raycasting jako u kol). Hráč má vlivem grafického efektu přehled, kam jednotlivé kulky dopadají, ve hře však paprsky kulek létají nekonečnou rychlostí. Se střelbou jsou spojeny další particle efekty (záblesky, prázdné patrony, dopadající kulky), viz následující obrázek:
Obrázek 6.17: Střelba – opravné bedny, munice, výbušné bedny, barely, M61 Vulcan 36
7 Závěr
7 Závěr Shrneme-li vše od začátku do konce, poskytuje tato práce širší pohled na problematiku tvorby závodních her automobilů, kladoucí důraz na reálnou simulaci. Kapitola o fyzice automobilů shrnuje jejich fyzikální vlastnosti a poskytuje rovnice dostačující pro implementaci jednoduché třídy vozidla. Část o fyzikálních frameworcích je věnována tomu, jak si programátor může implementaci těchto vzorců usnadnit, případně se tomu zcela vyhnout (začleněním knihoven umožňujících simulaci fyziky a automobilů). Poskytnuty jsou příklady dostupných knihoven pro .NET a podle jejich výhod či nevýhod se případný tvůrce hry může rozhodnout pro tu vhodnou. Popis závodního simulátoru, jakožto součásti této práce, mimo jiné shrnuje možnosti fyzikální knihovny BEPUphysics. Samotné její začlenění bylo velmi zajímavé. Dříve jsem již několik her vytvořil, a to konkrétně i v XNA. Simulace vlivů gravitace a kolize pro mne byla velikým lákadlem. Rozšířením hry o reálnou fyziku získá hra hodně na přitažlivosti a na možnostech za zlomek práce. Vím to z vlastní zkušenosti, neboť v jedné z minulých her jsme kolizní a fyzikální engine ve vývojářském týmu programovali sami. Zabralo to neskutečné množství času a celkový výsledek nelze s dnešními physics knihovnami srovnávat. Celkově podala tato práce účelný pohled na fyzikální podstatu automobilů. V další řadě se pak věnovala smyslu herních a fyzikálních enginů včetně rozboru těch dostupných a použitelných pro vývoj hry v prostředí XNA. Posloužit může čtenáři (herního světa neznalého) jako částečný úvod do problematiky her, prostředí frameworku .NET a XNA nebo začínajícímu programátorovi jako podkladové materiály k tvorbě vlastní hry, ať už jako práce samotná nebo prostřednictvím uvedených zdrojů. Během vývoje hry mne napadala řada možností, jak pocit ze hraní zesílit a simulované jevy rozšířit. Na to však již nebyl čas, jelikož jde často o časově velmi náročné prvky, jako například: •
Aplikace křivky točivého momentu motoru
•
Další hráč ovládaný počítačem
•
Deformace a ovlivnění jízdních vlastností automobilu vlivem nárazů
•
Editor tratí
•
Nastavitelnost parametrů vozidla v herním menu
•
Osvětlení automobilu
•
Stopy pneumatik na asfaltu při smyku
Modely ve hře jsou všechny z vlastní tvorby s použitím textur ze serveru [22], s vyjímkou automobilu a řidiče, které jsou staženy z webu [23]. Tyto dva zdroje doporučuji jako dva doposud nejlepší nalezené zdroje modelů a textur bez nutnosti je platit. Čas strávený hraním vytvořené hry, za účelem testování, náhrávání videí, nebo jen pro pobavení, odhaduji přes 40 hodin a pravděpodobně bude dále narůstat (což signalizuje, že závodní simulátor jakožto hra obstál v mých představách). K práci na této hře bych se někdy rád vrátil a věnoval se některým výše navrhovaným rozšířením.
37
7 Závěr
38
8 Zdroje
8 Zdroje Obrázky z her jsou zachyceny pomocí klávesy print screen. Obrázek 4.1 je z manuálu farseerPhysics. Obrázek 4.5 je pořízen z videa na serveru [24]. Autorem obrázku 5.4 je podle [25] Trekphiler a jeho šíření je v souladu s licencí. Ostatní obrázky byly vytvořeny pro tuto práci mou osobou. [1]
Rigid Body Dynamics Algorithms, Roy Featherstone, 2008, ISBN: 987-0-387-74314-1
[2]
Physics for Game Developers, David M. Bourg, 2002, ISBN: 0-596-00006-5
[3]
Physics Modeling for Game Programmers, David Conger, 2004, ISBN: 1-59200-093-2
[4]
http://www.microsoft.com/net/ (platno ke dni 14.5.2010)
[5]
http://www.csharp-station.com/ (platno ke dni 14.5.2010)
[6]
http://creators.xna.com/ (platno ke dni 14.5.2010)
[7]
http://farseerphysics.codeplex.com (platno ke dni 14.5.2010)
[8]
http://walaber.com (platno ke dni 14.5.2010)
[9]
http://www.nvidia.com (platno ke dni 14.5.2010)
[10]
http://physxdotnet.codeplex.com (platno ke dni 14.5.2010)
[11]
http://www.bepu-games.com (platno ke dni 14.5.2010)
[12]
http://jiglibx.codeplex.com/ (platno ke dni 14.5.2010)
[13]
Universum všeobecná encyklopedie, Odeon, 2000, ISBN 80-242-0288-3
[14]
http://www.indiacar.com/roadtest/roadtest_new/fabia_o_march04/techspecs.htm (platno ke dni 14.5.2010)
[15]
http://www.theaccelerationarchive.co.uk/features/anatomy/of_a_run.html (platno ke dni 14.5.2010)
[16]
Introduction to 3D Game Engine Design Using DirectX 9 and C#, Lynn T. Harrison, apress 2003, ISBN 1-59059-081-3
[17]
Car Physics for Games, Marco Monster, 2003 v1.9
[18]
Fundamentals of Vehicle Dynamics, Thomas D. Gillespie, 1992, ISBN: 1560911999
[19]
Vehicle Dynamics for Racing Games, Ted Zuvich
[20]
Race Car Aerodynamics, Joseph Katz, 1995, ISBN 0837601428
[21]
The Physics of Racing, Brian Becman, 1991-2002
[22]
http://www.cgtextures.com (platno ke dni 14.5.2010)
[23]
http://www.turbosquid.com (platno ke dni 14.5.2010)
[24]
http://www.youtube.com (platno ke dni 14.5.2010)
[25]
http://en.wikipedia.org/ (platno ke dni 19.5.2010)
39
8 Zdroje
40
9 Instalační a uživatelská příručka
9 Instalační a uživatelská příručka Pro spuštění závodního simulátoru na vašem počítači postupujte následovně: •
Ověřte, že vaše grafická karta podporuje Pixel Shader verze minimálně 1.1
•
Nainstalujte Microsoft Visual Studio 2008
•
Nainstalujte Microsoft XNA Game Studio 3.1
•
Zkopírujte projekt CarSimulator z přiloženého paměťového média na disk a otevřete ho pomocí Visual Studia (jde o soubor CarSimulator.csproj a Visual Studio by mělo být standardně nastaveno pro jeho otevření)
•
Nastavte Solution configuration projektu na Release
•
Nastavte Solution platform projektu na x86
•
Proveďte build projektu (např. klávesou F6)
•
V podadresáři projektu ./bin/x86/Release spusťte soubor CarSimulator.exe
Před spuštěním hry doporučuji přečíst si obsah souboru GameReadme.txt. Ovládání hry lze snadno zjistit v menu pro ovládání (Settings). Hra je bohužel nepřiměřeně náročná na výkon grafické karty a procesoru. Pro hru dvou hráčů se všemi herními prvky (blooming efekt, particle efekty atd.) je zapotřebí velmi výkonného počítače. Po prvním spuštění hry se v podadresáři ./bin/x86/Release vytvoří soubor resolution.txt, ve kterém lze nastavit požadované rozlišení okna hry.
41
9 Instalační a uživatelská příručka
42
10 Obsah přiloženého DVD
10 Obsah přiloženého DVD V následujícím popisu adresářové struktury přiloženého DVD jsou adresáře ve tvaru „jméno adresáře“ a soubory ve tvaru „jméno souboru“. •
data •
BEPUphysicsDemos (oficiální ukázkové demo projektu BEPUphysics)
•
Závodní simulátor
• •
•
CarSimulator (projektový adresář závodního simulátoru)
•
GameReadme.txt (pokyny pro závodní simulátor)
gameplayVideo.wmv (ukázové video ze hry)
text •
Závodní simulátor.pdf (text bakalářské práce ve formátu PDF)
•
Závodní simulátor.odt (text bakalářské práce, Open office writer formát)
•
install.txt (pokyny pro instalaci a spuštění závodního simulátoru)
•
readme.txt (popis adresářů a souborů na DVD)
43